From de5b9214079abd21247ef95e796a347d08bbb788 Mon Sep 17 00:00:00 2001 From: Marko Lahma Date: Mon, 15 Aug 2011 19:49:17 +0300 Subject: [PATCH] SPRNET-1460: Drop Framework 1.x Support --- Spring.build | 85 +- Spring.include | 53 - lib/Net/1.0/Common.Logging.dll | Bin 28672 -> 0 bytes lib/Net/1.0/DotNetMock.Framework.dll | Bin 45056 -> 0 bytes lib/Net/1.0/DotNetMock.dll | Bin 49152 -> 0 bytes lib/Net/1.0/Rhino.Mocks.dll | Bin 123392 -> 0 bytes lib/Net/1.0/nunit.framework.dll | Bin 73728 -> 0 bytes lib/Net/1.1/Common.Logging.dll | Bin 28672 -> 0 bytes lib/Net/1.1/DotNetMock.Framework.dll | Bin 45056 -> 0 bytes lib/Net/1.1/DotNetMock.dll | Bin 61440 -> 0 bytes lib/Net/1.1/NUnitAsp.dll | Bin 180224 -> 0 bytes lib/Net/1.1/NUnitAspEx.dll | Bin 45056 -> 0 bytes lib/Net/1.1/NUnitAspEx.xml | 139 - lib/Net/1.1/Nullables.dll | Bin 53248 -> 0 bytes lib/Net/1.1/Quartz.dll | Bin 430080 -> 0 bytes lib/Net/1.1/Quartz.xml | 17105 ---------------- lib/Net/1.1/Rhino.Mocks.dll | Bin 123392 -> 0 bytes lib/Net/1.1/Rhino.Mocks.xml | 3096 --- lib/Net/1.1/nunit.core.dll | Bin 131072 -> 0 bytes lib/Net/1.1/nunit.core.interfaces.dll | Bin 57344 -> 0 bytes lib/Net/1.1/nunit.framework.dll | Bin 131072 -> 0 bytes lib/Net/1.1/nunit.framework.xml | 9711 --------- src/Spring/CommonAssemblyInfo.cs | 8 - src/Spring/Spring.Core/AssemblyInfo.cs | 15 - .../Support/ResourceSetMessageSource.cs | 4 - .../Context/Support/StaticMessageSource.cs | 4 - .../Core/TypeConversion/TimeSpanConverter.cs | 51 +- .../Localizers/ResourceSetLocalizer.cs | 5 - .../Factory/Config/ConfigurationReader.cs | 5 +- .../Factory/Support/AbstractObjectFactory.cs | 26 +- .../Support/DefaultListableObjectFactory.cs | 5 +- .../PropertiesObjectDefinitionReader.cs | 4 - .../Factory/Xml/NamespaceParserRegistry.cs | 9 - .../Spring.Core/Util/ConfigurationUtils.cs | 47 +- src/Spring/Spring.Core/Util/SystemUtils.cs | 4 - .../NHibernate/LocalSessionFactoryObject.cs | 4 - ...ServiceDomainPlatformTransactionManager.cs | 4 - .../Support/DefaultServiceDomainAdapter.cs | 3 - .../Data/Support/IServiceDomainAdapter.cs | 4 - .../Data/Support/SimpleServiceConfig.cs | 3 - .../EnterpriseServicesExporter.cs | 4 +- .../ServicedComponentContextHandler.cs | 2 +- .../ServicedComponentExporter.cs | 4 +- .../ServicedComponentFactory.cs | 351 +- .../ServicedComponentHelper.cs | 5 +- src/Spring/Spring.Web/AssemblyInfo.cs | 14 - .../Context/Support/WebApplicationContext.cs | 10 +- .../Context/Support/WebSupportModule.cs | 57 - .../Objects/Factory/Support/WebObjectUtils.cs | 20 - .../Spring.Web/Util/VirtualEnvironment.cs | 51 +- .../Web/UI/Controls/ContentReplacer.cs | 13 +- .../Web/UI/Controls/DataBindingPanel.cs | 4 - src/Spring/Spring.Web/Web/UI/Controls/Head.cs | 5 +- .../Spring.Web/Web/UI/Controls/Panel.cs | 4 - test/Spring/CommonAssemblyInfo.cs | 4 - .../DynamicProxy/InheritanceAopProxyTests.cs | 6 - .../AttributeMatchMethodPointcutTests.cs | 4 +- .../Aspects/Exception/CaptureOutputLogger.cs | 13 +- .../Context/Support/ContextRegistryTests.cs | 27 +- .../Support/ResourceSetMessageSourceTests.cs | 2 - .../Support/StaticMessageSourceTests.cs | 39 +- .../Localizers/ResourceSetLocalizerTests.cs | 4 - .../Config/DictionaryVariableSourceTests.cs | 2 +- .../Xml/CollectionMergingGenericTests.cs | 6 - .../Xml/NamespaceParserRegistryTests.cs | 5 - .../Factory/Xml/XmlObjectFactoryTests.cs | 7 +- .../Spring.Core.Tests/Objects/TestObject.cs | 6 - .../Util/ReflectionUtilsTests.cs | 10 - .../Data/OracleAdoTemplateTests.cs | 4 - ...istenceExceptionTranslationAdvisorTests.cs | 3 - ...nceExceptionTranslationInterceptorTests.cs | 4 +- ...eExceptionTranslationPostProcessorTests.cs | 3 +- .../Data/Common/DbProviderFactoryTests.cs | 41 +- .../Common/MultiDelegatingDbProviderTests.cs | 11 - .../ServiceDomainTransactionManagerTests.cs | 4 - .../Spring.Data.Tests/Data/TestObjectMgr.cs | 8 +- .../ErrorCodeExceptionTranslatorTests.cs | 2 - .../ServicedComponentExporterTests.cs | 4 +- .../Support/AbstractHandlerFactoryTests.cs | 42 +- .../Web/Support/ResultFactoryRegistryTests.cs | 41 - 80 files changed, 213 insertions(+), 31027 deletions(-) delete mode 100644 lib/Net/1.0/Common.Logging.dll delete mode 100644 lib/Net/1.0/DotNetMock.Framework.dll delete mode 100644 lib/Net/1.0/DotNetMock.dll delete mode 100644 lib/Net/1.0/Rhino.Mocks.dll delete mode 100644 lib/Net/1.0/nunit.framework.dll delete mode 100644 lib/Net/1.1/Common.Logging.dll delete mode 100644 lib/Net/1.1/DotNetMock.Framework.dll delete mode 100644 lib/Net/1.1/DotNetMock.dll delete mode 100644 lib/Net/1.1/NUnitAsp.dll delete mode 100644 lib/Net/1.1/NUnitAspEx.dll delete mode 100644 lib/Net/1.1/NUnitAspEx.xml delete mode 100644 lib/Net/1.1/Nullables.dll delete mode 100644 lib/Net/1.1/Quartz.dll delete mode 100644 lib/Net/1.1/Quartz.xml delete mode 100644 lib/Net/1.1/Rhino.Mocks.dll delete mode 100644 lib/Net/1.1/Rhino.Mocks.xml delete mode 100644 lib/Net/1.1/nunit.core.dll delete mode 100644 lib/Net/1.1/nunit.core.interfaces.dll delete mode 100644 lib/Net/1.1/nunit.framework.dll delete mode 100644 lib/Net/1.1/nunit.framework.xml diff --git a/Spring.build b/Spring.build index ffb9839d..8f9e05b7 100644 --- a/Spring.build +++ b/Spring.build @@ -212,14 +212,6 @@ Commandline Examples: - - - - - - - - @@ -228,22 +220,6 @@ Commandline Examples: - - - - - - - - - - - - - - - - @@ -319,7 +295,6 @@ Commandline Examples: - @@ -329,20 +304,6 @@ Commandline Examples: --> - > - - - - - - - - - - - - - @@ -474,7 +435,7 @@ Commandline Examples: - + @@ -482,7 +443,7 @@ Commandline Examples: - + @@ -532,7 +493,7 @@ Commandline Examples: - + @@ -555,21 +516,6 @@ Commandline Examples: - - - - - - - - - - - - - - @@ -1076,10 +1022,6 @@ Commandline Examples: - - - - @@ -1710,29 +1652,10 @@ Commandline Examples: - - - + - - - - - - - - - - - - diff --git a/Spring.include b/Spring.include index 3fca2816..05543626 100644 --- a/Spring.include +++ b/Spring.include @@ -295,7 +295,6 @@ - e+QYmXSt+fzj|H_5S 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 oiDich?s1uk5-y5PY1|Ds^ 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 D`HZnMYVF|=zPk=xm2}xjp8J71ur|RCmEy+%J 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 ZhBPpwfgueHX<$eLLmC*;z$ewf{{m|hyWIc) diff --git a/lib/Net/1.1/NUnitAsp.dll b/lib/Net/1.1/NUnitAsp.dll deleted file mode 100644 index 9f45eff82feade9e8110e077ee094d0ef28b0c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180224 zcmeFad3;<~c{hH2@955GB-tKImb@g<*p8h^W+Yh}FLGih-sITe*v59iCZQn9V|$3C zEAB|~BFhaeziuq0h4*di77Ff0Tguk*HU&yk%2Ft_&;@7#LtB;tEpK01O3Pcq@B4k8 zbMM?ciz21vkKgB)NvyeZmghX@InQ>Uv)l)s|7y#zEGvP3-}|0rJ&tdFcFW)S|2&55 zrM>T3YW+^@$JRZ*!z z^>=inZ#STijab&96)3>6iS#@9MWaF+n~Bz&*+*z`aBw)PBBTTkS|Y{MjYeEwy>`{mxoeDw3bV z?}L%w{nMpO)A;?epD_JmUj@%8wPzlmp};c~c!mPcP~aH~JVSwJDDVsgo}s`q6nKUL&rsn1M-+Gw=hgUd zZpx=OW1joi$1JOriTGSVK;VlTmRQHKmh~7Dp5k-Y`)_pq-UH7%mAu%$;)_4?|K56*c)Fw`|Wq!K78c`OWt_jZ1(Qg{Pvm`_f2+u ztK+3Fc;4KX|M1Vg{<*EopZ{3bzZ`tx!=KpnXC1#j_tkTE{oFrJ-uWxznZbX1+3)_r zH*dM^6IV0m-uc9X-+0wuKl~HpFMi=iU%L6HoUeUs<{wj?n{Ao;F0rhP?X_5zTX_rq zr1O@0SCEGY0rJpW*TZ9wx5P@CzS+4B8^x{8%}cB_(f}pn1K^ZEu_V1(c9~_RS+>Pm z71Z~0OROo!KaRhN9474PT!w|%eh?F|yO=?ooRHRbm&1Z+nQbJj6#+cw+V3I4QMnUX z1qBEzh)396bLdRM&SCQJ+K&E6%mL$sw7J&w!JcI?{|A6pt{t%Sw|0u~(6;o|o@G_X zLj*>NBlsv?(eI4rdti}(cAAHTAP;2IytU}ZMg!OX9ki^2VtXKjn?n!N>6__I`ZIk~ z`@Y1)K~}FOWrZyPK|iE(A0FG-R<0BEy)FXr{}`}c+XLq47xC8?RwA=4ZzYwcj@6C2 z98WEy<)a-X9Z-j{Bf}&9*8tgjSI{Bkam-fZn;$!eQ9!%wu(u0DbrRm+E(ylauJS}( zIq&l<#`a8iE!zWBw~(|epF!3Y$&+{v+tC*K$(XFuA*~1Lj)x?}H#&}rKe2MWLF5_M z1@85Ahr+s!wKNVl;SFde>xI1QG~it)5wNDTK{$#7`_%p9l2CRMRu*|2zhz5uJu-Ix z$+272yV-*TrE{pDLsrw~dH_P-Bl3baH!u5SkU&>xWV-hD5K;}j^2n&8SAmJrrqT=J)QDbR34jtN`BTO+ zH;82KYt=l*0tMw`OP=F>9hr)lrue&owD)_g2S`;qN8o*;3NOZEPeEsuW#DG?ydlRj zh)&3Bio1^KcH$6{J?K{?@Asp4Jc3?9JApP*k7Jm2`&zm?6Zw;x<{t}s)|M=ECjE!` z6RI}7^2sIO_xzIXc1eG%F1^Dow59q|t$i&$04Ff5OoBEf*8i<&vu^yhF%h`^7s@V( zuF$M;x^~9t3WlVf40tEE2Y7j_Q07(Tp3@=y6V?utgOG>i_M+V5uLP&BO?S8DJKdz6 z%pGLikEbY3EpI=!>F-5gd9T%+Vkmxg6~8kKDk z{w016@vb7)?j{`|b6qh)r-r_v=upp4f1v-FZo6^}EgQX}x|8Wncb$Ew9TjXKaz zz<-2Q(D$`&^15?9LA#JHqzxI`^IL@mZnt+U(uY3dUkCdnoL3Z~9&Ar!pC&EW3Ssh7 zjx|+*)lOeAbV^tgXa_YzI^ECKU;|E&L`nZq)bO6bb9?GlWpF9}_pcyLLHi%Xqv)Dk z8t_r12l*diB7dudrMj>C{Rx19XXtuW+hKE@RfmahbE-W>Cj4@;BX6~8yDir90TZ1K z{FEv*r+X;np!|~wXrVQfwk7SUZvP;f11x2x8>v;kFA1x4@NcAYKrk&MjUfx=DdH2r z-aZJV)SG4B6QMulUj;1N5&uiwI(po7dTK#qbG!5jBNSL~C$4))?@d)&=1!4N9nmt5 zMV}Y8333qT+PQ~VFdG&m-$42-pc#~Nndz=9x|J89>=o52EEoD)0?+Z1C>V@C?W6Eh z4kO}vaQ*|Gkg#AeEf`|JhX#NgVk$*LvfBS@3%JfmG~M8~WaWj@WRG`O1a`#lprDJN z68bOxt6hj@m>wznT!5;x9nWJT@L8<9kVfzu0-X}|tNsr_#`GVG!Y3{v8IJI`v_ZBP z;w*XIzcOcWc-SGY1^%54AXSV0^!f#T)Tm#70nnyjQQVi0C%TQQS>)Kp{0*>aJpT?h=yyFM~-v8jG~+`v1%y>%hr9r#vWw$lNUIXR@C6ohVGmvV80u^BnL0 z;&0$*N-GWg%*YtPWYqU<8xsMwh7T80_5p>fJ_ixBogC9(A)pZwcFP z#Q#^S40;b;A%8CgEZ8jY-;bhJ_mj3^ChGU!Mcx+V`NxvsjN}>~#a{Z4OCsp3Gm^^N z*s7WFz^`q|Uv>RYqKphbJUcbGpJjbGbLkv3eY!p6ZNyiP2bG@o?!cdJ52Ky-z((mD zXp`<}?K#y6yGn`{+)Se9G=Gtx)n6oYA%(nCs~+l1WD;oG%Cyj@R(}m+odJ1X6_ABv z4j#3J+3(6v1<7IgyS4mlgN&g3PAUI0L2`UN5x=R9XN2be%nrwCPMPP&PUKzzVBi-} zF#-Rg6<@+9wgpBMU&)?jV%nZ%ky+_!!d>8w*XCS#+Tan<&jbtth@`rqaNSA!TUV^hTmlkA68|rr;lCitR zhck5?`pJ^+Ka6JWSys@%497p@Gu7<`UZn>{hx7p8fF9rqLk}jddOmwR%VNqIbtEAF z?na$>|9>dxKY=vrKOru#{~ai*^EL>*!HsDi1qt&YdzQaqLnaB4A=47V%yk_AO!99? z!|OsrX#lLCG8fV??x+1c^TjhDjEJB11Yta-pSBns2sK`>TcMCby#`NTKE`fq=(TDV z#P?=l^3i=Li2(?0;SIp)DK0hPTDrvPeBki@ej1wP_m~vKSK9IkGZ7@+Du4xe0W6L9 zLZP|-hfz}}UWuNz{4xJC_-&ey{I4*-O{P3H%l`*kdR$uaowl&^Y&{I{~RqN+n)inad~V{g-MwDwkM zp!1&N?db0xp~XV0oqIFMn#aR$$%FJKVeLn~EbB#TydMSpQ>^<0i^k?m%XH2}AFMiE z`npb+IRAbD;OzrE{|8VXlTHq+_>MBeYD;=~kiwO}Lo1Wr(ch;%bOQdl>yNYTKK$r; zqkm7Rsm4*L0o<*#2;VKocw~r$S;tRUm!CSoQ6_`?xYnz$b0H~ zCfv&LgbkC=Lh9uJnbTNlAR&l}AHHJ|Fj{ixPc0DCCoT|U`79V0Blm--HG=V}yaS-q zZe;*86?(a|LNyQ0FX9+NJ6G`zLO#;&LhG~Nt}XqJ)qgrPlmU#;5aVj(>VxP+mqb^L zdKMhf5i?Kx0P;Pc9N1PzVpgK}oSe~U9hefXI}<83G)~D-xR9 zm*}F#@ZhplW9YzB@lx0^#5iV%F{qvrsc-_7npjz*d|0-o53m!}J`fHp8}zN<1(z%B zPeEk-OZdY$sxkNt;IORm84|)nOR8`%H0f#3W{H0laLmdPbyDS>piF50T4XMNko6q@ zI!ZeJ>)9@>XFB)3pd@tx=d-5VTbh?kT0e+#heA9Y4>AH0dw1jO@mJ;`rwrB{r{eMM zL7L#WR-!HRK)Vw+;Eww5MGJUXl~PA5lUVJ)Uz65oSCA=gmh{HxE@@-vS4^~r^y&gG z;-fpcC(xH5cxPzVV!;qt&z8PRK9wV4cWWi4#MsZDvdvVFX%exYzmtU3&W+R>e|ZNp zbMS3V_@_Gv|A=1N1lWg#4&-YvS+{=|YD7okBgin(67p!m`a{$?!aB2*l0v(FcMSg~ z(rpoGz=3veMMdwMn8$jUz#*7BO95?5qKSjj1o+9VE`hYUNf`yq88`|(gZm@&_8(?9 zK=UN&?Y~)nt=6Ie_1F0C(sZRcL>9qQ0S3|O$S+HESI4p%YqM!P)GwJul?3dTe7EH{ zE5?1WU#oy>TfWzp8BZX^?MkJ}pF{}6@gxt5tjy9j5FWq94)&m^8CTE+Lp*aNYv=bw0yenTQg!{}>ZfHj#T8i;kiCC}B`M zhY5#KbwbZMlsm?@wOkmffCRL3VFhTkH`C_&Ph#AXIryub5px>s?Z%&;A{clh9{g=f z;e702`knZLYIjA7DWFyUZWJ;>MRGt#Yvpgyy(?T@Qn^Hj)VDL5*|{US6HVMmxXkMcj%<~;^jY%C+~CUiYXATgJVn$Y`T68dF(UDsN=EE zG7)uadGB*!dJT`=)C|&UWzc2~f<{EY&-AR@pU|=ljPWj@S8d-BdqDl-6pB$gDxLdW ze|CWHHLjvy2QleQxDH(cdd}E>1j=+rSD2{8lB6E%X1JFkP@=hO*TTxcu1u z9c&X*$C`apPVT?iW@tYl(;3@;58He?OZE#8{Nr`$<+0Z zR{w)QL}a?K+{JzZ|I!k277s5QaD`~`^obD$R zT;hHCa`*(|0_hSjX4mTJIqs7-3RI(m-$hA82hAEG!h-n>6IQz>PMFIERU_OP8BE#L zWMc;%uyACpttXelv+CM}^%~$QeormC&uWi`!_l{S%! z{2f}!e+bw{)~eNzn1VL}LhBnr{s0QgWXJ5D;&^j@BXa})Qv~%ylo#Og>pV&M#OP8+ zkU9n8qFCs$;uIE@;88eQ4!+6H;17L%Ah9fZ?_~r0tSl6!f5`r$d ze&6lS_s@SzSdV}v53*mfeL(3ifgU))YbhZ6ur%&}nuyEd);Ce$>CXs1r z&9q#X*v^ei3sw$VGA)?|~tYM;7rQTBHDdo-gafg7TRu<-?&{O z&Trp8I!AS$vjXkLbRK0u^O-cgXs?;)?=f+y^G znOl!MnWG^=K8BtlEX1l3cF!ELS^l=a| za%MS-LRBFc)rbzlj5mfVxu2|5pB z)@UVm{4B_q;C{oj|6sr~1wY}z6+?JWcPOAv+PL@0?!h*<8@uvk8K7OuX&bqdD2CPP zRg&euFodRSIPHE3DXCToL1M`op{WXNTUyvCzrsd;h-n4-)TFUTk^~i}NrK`{^oi^v zNN?<1R=7X2jJrhAoy#)Iq(r}+FPbv!MrVtiX<6MQN`1jyUl1?|{W|w26y%!+Ko~4KtR%EcFo=+7FP}+MT{$#K}@kR2T8)e!V zdFK5C>CR*(>7C_6DwFa`crbYJF?SAs3Mo625*nc7c_fG&b+%?&{fnTN?4j*cv^(1} z>F%M2k@KU-$)vptDBjtQ-!JFycKzLv>F6Fnby>aX?8vlt58jz+hvi4XOnU|ix`ZQ3 zJ)KK4OLJv{X}jrc0%d{3i}5qlR!^h6CHBFx#_YC9+X2gfX4Mb(RZv#>v1dutLYqA+ zG6{D==Pg6XQ&}ayr}Nm|I!KXsv%GDizl(zRj}W8&uRvJ){|+M9|G8jcf_miVP#@II zINjbjVA>*E>6XFox(7t)UFP2pivzT5w+MgZctrW3CB5)|(qdXwY%c&P3(ur2(yF#I8& z+ROZYw|7%|NB9pq|ny;Uv4Dg%xQ=?y=nCFM<{#g5@`0@Y-02G6bXx7aJ5N{cT3wG4j_`C;Mr z;zz3c-Z%4$`%dU&J{$g|z)BYH?tv58i{Badv?R5pf+vXN(hPQGK&F`6J@D5VJPmUH z3VhPM*~fx)f+4u9g*Q8eU3_-B^GmQRyt^}*U+J`fH;J=SBLf{o=}Ki;4o6qJm~V3mVTK_@RjK%|Or+)TuTD(})Jl(LKdC<@@u!gq$Jd_GEAR z`GkI|EpO+$8kGM_x3AsyUx2Q;xx3M;WcD$PoJ@j~*ujRBM_bABInOu>~UF3tC?@Ve^YDFqYk{N{B{3PJ>X7Tt*{p!>>Ss zt2Xma|F=mLvHAiT=P^JZeN+<(*Aou)VSlj8n$m!PEMrCLaB(G4kIO8s)Wy?kS9}@o z3ZUR;ZkEuJDV1_poSw9M_axa*_{%J=1iq3(y#2SLY4PFu*4X~L!yg^C|DoUq#6vwr zom0Tt34NuiRFR@LEoWo8u+tSQ38PNH(122)ztfd6{ayLBa9Ofo02t#QeQ32;>4RCx zelxOPiZ<5Z`=`PCx8Zve{$=rR9sYd~F2!bizX*9d@QpKn)+;T`;_17e#P_T5Zxzy4 z%za!qW=1ImNkmi}#W%n&o(S=35+&qF?>PLsUnQtEWp^|70o zq|Cb7Qw6M%%B%~nsO;tE$++!D>*rkTFN_T51!fcRl&oZ%^4X=6!65v(yOXd}aQ5J%QzA&jTu`->%Hz;;m ziYbuU5oGJ5_W+uMBS_eiEKMtbaK0Ak0WIcuM^J~fr99Q<9i1odSeWO~eyS{e4ASEN zHUCg$$2fl$dq#{UY+>Y}9TMxhNnU7hRCvQ&Ya zn3tRWB)sPUF(c^g6MRzng#0b^s?0$M=D?B(2=e{@D;slf75_-F*A%bUw8T8@8#$>{+5*7|?IGf0O^Z5RRt3Vh?@vA4DT^rb20FyV6zd zBY56|vzO7v?m9gJePTfc$mBZNdmp@zcC?j3y9u;wp|TK&GXGa7HYI&xZ@tIR3}oh( zj4P6!c4r_TOR%`%6jME&EuZ@}6i40z?DA)BuFSY1+w@2Z^!Y`+4Os+KDt`hq00;o~ zPARB-a+)C96DbdekP*Bq^t8@WLlu^_LJs#Kt$;IeEjRDWuS!nuL*HqEkV9tBoQ(h} z82mCY(3lQq4#2>Kb?BhU&R;Zi3m`xm?%bwf727&xz36d$Mqe6!$QvQw1iF-JPWUEa ztpa`Fl4YLky!J7q-i-qzR_|@=0qefXOVQPhA`abZynjd%zKcQai6*plTT`o|3AZ9) zbu?iE64pc$29U5eny?EAw?q@}N5ZYqgcC@(Et)Wfgx=O@$_!J|(Uc!%N?SDLHB4!b zru-69I;ts8cJji21PtzuuYeAQGH&jN+57a4zd)LMnTG3GBcyB#{$=p*R{Yz9f8Yq& z!3I{BRizX7egXcS$3I#EI1<+XgMY(6fj^MYGiYo0wR~Qs&p*cJ)$*MGL3@opJZi7i zhY9-@eK>31st*s@x9P)iySG)J4%)qGeY)4~ZPTYMc5k~r-DUT7=u_72U8+yr{yRYi z$Nv=m%KSdmYqs@5AT)zc_M{#EyUYh4rbWAyfO~$A2?LwN& znRK*`*Pv$;k6Ecx)~(0E=Sm6vOB~S&D~4l$lTDoZgC@TZIPJDl2kUX7J>$5;cw$UR zZAZs_S9IL93=AB~aGXq;d*fx+na;v@A%z@o2;G6-$sd~JaiX{h>?n5k9#dZP7%vgR z7FkOkH9Xo0zF~&^5@3j&bjibA7H!uOP#Ja+xJj`)Q8qpNH2{ZI>CJAwqqVp7^hgVS zkC=bIjc@+rZ3qe`oe680v=`dfV3`xSGBVmse`Jo7%#j6e-iCcX6;n7CNW8B^OACd1 zysgM+^Jyskm$Ld#;m=Jgxv{;lBPCO~_LSuIuSiJ&ezQ#fiu@`&_Xxpmuyf=5UTf!G z!ta1$Z$z=A$M7$rdCG(2*@r`VXhbcavU_r8Q3`>HzW#p+LU7>Ogjl1;s^vG4*CIqg zu%$a0q06?_Y>{IW?WzA-B>V5cAEk={um#1Ua}VlKu&tr7%8uNCQ^~@)YeOQG_G= zP&n`hP_;n^uOZq0Rs7Ko(!L}Z)3;!4g8mQ|D7>+_6&n#%Fd}T8lvqVyoBtLf_i`ea zlnB2>ZV^6;64X()iNpY3gtlP6g0_TVqctRG?1=vER+dxaloY#URFN)T+*8DaRy31n zFPzSQF)(jWNz{V+vw*f>Yta@BS5$v;=Yk6BzoQq9kY3q|F`A{ecryWx0X?2vf=eV; z#hTRSr9iY35s3kcG=?cbKfqTibRo{Wo(np66xT;9yWTc*qceepa4~fq!#Hbfb#-DJ zVvJcMjnKc(-HTd>1ZTxi(P zAhv{Dd>u$tA&XD|=SaVqSn|Z641D;($KJKiUr+eQNqcCRqf>?adWe z*`{@@CsmtB=d&!G#!){}nBgF8zcrv9^Q*MU7l&&ghXg+#RtcLjjOdxcivp?=`PagF z$5L9wHc>DfM46V9yl7M~K3=RQ7-jG8`EkMD9#y(iz5( z-mN+d&WHuWoRR24+Ud>h{tNJNqzlWJM98sx$?)r|*~EJJ5(gUY9{ZXH>1<~HZ8wpd zMB%8bA-ZSzlKhZ@SA!~05~8m{fe$;^f!z!T(bG*agq+^1#V8XHp*wd!AMQe=6Pxlz zpiMLMRkRuM2NereIl_iI6Iig&rreJYz~|r*(6skT{Fw&1)&{d~>ijejS_(m4uY$RirG?w0=;`{y z?uW#?qOSinpbKM^sqDvikspc&B6T;}y?45~DGp^7ASr%dKg#C&Tb$mzik;XDcPL(D zQ~ns)WZ1rj7)*0EQJ_LZ5ne24(Km&EqxI+&v?IFuEPT5fRHvO;4m*Pp$|NN2XxtTn z64fMa!=J|B>C#XUu{UZrfAwv~9ZUkfJ@z$B!WF$nLnK~vLc1SvnnilshOZDh=(Qo? zjnwqs5R3BCHq5AbviHv7sR#+-a@^IQPLhI%V--6S$yy4wCA(j{&?U7?B}ml<&l;=zudSB&^GZFjAmetMX*T zQ%8hxx}c|b6}Kv}Q2Ku0Xu7Rk4aB@wvttLMDIV>4(%HT4$?ttnS-{=363-HMWmE-% z8}mT|_1ji?5RJCmsor~YKAw^qNZ%=ebRc~}x*<^l&IB2s3;mr>fIh8af-`VR_M&zy z;Qk(%IrxN*oU8iDn)dVKR0#Ll*ZhFn8cdmNN7zjei|S3a75Q6fcCcGXOmco1tX+kD zaZ<7<5uptBsTE(X@ec-)ULD7U+MT0irf(Fm>bT)(BA7L1jw$PXoZhfqRCba%sKh`U z1O}m|#LT=UlH%0{y7Z@jA63OjWI~C(`>JiYfx}gGsVTxz2}L0yk&+DCa*6tD6*f+F zi(fH^iD4qqyIiAM4@LTn+oCq~20q(85$dtOxzK`dMHxqCJBi+90tK+uXA#)>BsdtW zT4tXmSd(b#%IPU>NZ-?zjnq6_@^KMq-YEM3v)zh))z0@^IuH&>&u2K^9^#i0g6f51~k1BV@#tAFS=w zmq2u7S|CzJm&pD#ore+%_pk9=_OG!R_pkALmUO|=LTvw9N}FLjtR(YJMt&WUGbUk| zU?je{At)c@(J>sxoCy%IYbV5z8WF7pdMC-UaEruwcl#SXbm%tJ(ICKDZKVMtm0QKl$fqeb=qr1nPF(Fb}w!PE)iU_jJ$c z9F#G44oVxRrHyu0W&KZWYsgU`*W2u*bT#Q+2BOJXGFuLd*O)6O zg+qj^1el}1J`l!piMO_(%s^gdd=TL_liod8K*xH6j8~KKs}&Q}Uq*ZOEIXQe7@e9Up7~1#x&MPwvLUZ~aG54mo(BL> zf1CXOK%ObqnnmcR1ApXp1dWhuIUB@hkL+1^(fG?Q+p}+yzmb+73R+g#)Of$@AJ(q& zM})@A2zg1%vW=e#5n&-tn5-U7Cz90%uwbsdY`d4 z#ha992%i~%k9}7Hg>Ym5=E#Kgw0dI%PQrR9tTV?9!`Q;VeIxcP)BMN)Gv>~;Y6CpX z%q^@rNPXJRV0?9{i$iNL2-araAbo#br2UvYFe9Xs_W4GntW(`b>C7<$-TWCelKWZk z1?sg(3>z8PclI+#+VOAb8fJ&E32Dr2eu*_^p~VvY_qu)$@YG)#Q(q&6G-XbT3JiZ8 z%IRv32gyzk1H2{D2!&5r60651nR$|aZv^KAWg0K&PFB(GHD9N|U^ zW`GcMZxjyLpO6x3P3k6O$@1xq)Ghv)WZi07f#o$Ptx~u7vy#=@iW5M&EHD%_g?C!y zPN2P{htnfx{L^mtGF$ef-Eeb1PpZ+zwO9~$`M?4~xh1g9`O0U3i{_vW_+t(u%e@mQ zh8^Nvy{%ojUqt0O5FZrf-)=Fyw(KaI`*|ko<1g^Bd+rzc)iuZ7;umxhe?cel3;LId zATEDFI>HLwb8o;epUcqz?)s!95Tb z1Pr4kU6JBN1Xo^<-Y5*sxvuv1Dw5HdP(fWoFkyWKv=S#+ zAfS(44%&8R>4-S97v=9IVoYiR)GYmuIsU;jxHchF#q(u8^ADb{@R@(`e2vfigTTRK zL?Yg-_%D4jvKURpZ*W6^>1i{bk^c0YzAl5R^s=ozs0*bCdXX(w7r8kEVJH4rQ%qpD z$VUCKsvoW&Q*SM{^e*H5)xs6hMb%j3v&dNv?>fazPNFe=80|pMWx7CZZ3z&_7~(ag z=`fi#;X-1x$#OzP+Gt~+hX6x$hC+Zp5JK=@3L!DeA^t1zjJ+<`z^1|CH1$*3)Q_j@ z-9%2620>5Jf9#lnWfWXEijhMt?9=8rKGk}rYvKx3Nks@k5Y{cC?#gPLn6Ap;iIby* zfc8;#OXq_}bD=Wp_l9kQ&WQqC8h*<@du%FA;IiN_WNnMJLsk=O=D`OtkSHI%7q&_fcY;&0b zn`2w|qpiqTRcXLpW7n3D?jlO}^usv{f8o%LkrMBvF(MHr#~))D$X);KhX4Cv90&n> zGel!_4`FiQLCIp5y>V4V&e~C5WWn)ZQ>gbWr<8xlvglPBJh!*JF1pLLqws zA4kp@R^?`OAUA8k03MtKAegsj1p{eXfc2anSONcusW>Sly$peJe5h}uFpXASQ@jPW zh>~i2B5o`vbP%{ivMv&8IAs=^Z4cqmU+1n@e#=gm!Yz>>H8TjDjSKXHYwfiy>m5R0 zn(w=Ty9H#ZPjq^d`yXJG0(`&^L$5*~VsPLT&?S|PG-C8=G+=iVkz)L5ig9m?7HjiA z2Ot%=ENN^25O*Q>2h0VtpfnTEg6J~YL1O$NMz_S%>`o8AdKdkwyap`W;WObDzVoy3Xq=d>l+Xu^|a#Ke>BD3J{9 zL$bSVnDB{ zHki{zs$vl6NafzgZ0wiNJh2M)EIOCiyf)~GJxjML_Xd>QWYWMl_uILTNZos};ZyrO zJj>M|fiyhDN7K7IQN26&$0$u(LL9Nz?IOMa25C61D0njkXZ>K1s2x`o?e4U@!$UwB zvJ5LtAHb3Q?!OcAlLQ>G(z3INg;$}fuC%z)ueSU-bI#+qX@bsC;jYLJ*`6(1gL{fA z0_XBJ89``|I~cKUgm)X<2spMJ=Q&=yVaH@bNNwNu4K`aA7n`#sC>OR`%8+y>hgYI*l&AtjsRA#N zk%(x(9pkK%5?o%ZbCG23lR^SPUE}M+*rJb78z>%1YNRmIF^=!O{dwEpxt`l7e<7?} zPZl7Dc$+o6RG{rFLifEHm6WVJ(Ae$X$fSg_ve_)w3%C_#Y~ja7aO>j91*dmc@p%!X zHpPmB(dSMF;bWzullw3*?Z~eq_P1Pn3!rluzRFCQ7Nr^FmNZLM7b$S=1`FNZHPq+c zi@sZI|7+E5V7qj8>PAKx1Q%~6Gj8rvAyH&41tc@)mC*R^Uxu9P?;>_p5dpt{1DE=_ z+aeE?^2Jfs#Dj|{>RxSBskU$@9p29qn(^@v|}jO@tsa$qf^3Q3T6Cr9C5>}oo*|l zy)*!75ioh^$oJu_AR+^sKX3b2K`FyOSOXycBvdk0FL#IMpc1mD@$pc92K)5-$hxxE zF4h^@W)~`=O<=L%_knIv0@ZBA!-9@%KU<5zY0v*aYSpQZd;(W%ceLtlrvq)tRyjY2 zy=?!G>K?o;*^O@K(dPG|7s!RNPK%mr%dhaGX{(VDgP-aic)fxpAbkR`X_UiaS$k6N zgp_J_*KJ9eCvW2GaO6!m8oSs4J@I>0dQj4#AF2Xy?X94?(WW|nk!>FcO!uZ$aYSW} zTXpV%-PK4>yUdt6L@t{*}d3e#)QPbQ|+_*Nac8WB;HDKS+J|?VI z@X@=0i%ij_Q8-C>9ZOGIF2jtN$+e>7#7T7EERAWiBK@>n1N|%Dv-EdxKS@eml0qlW zG>9YXNW^XUWg_@7b1R0}QQO;Xq{hI^KY%0GFm2lJ-krHW!H5TCf@NY%C_=3J;O!Zk zWQ@5EGD#m;iru?qcM);Wv*C8vYD1RT{?>7zdIod}4{5U%Rdx9-JS@J};FS=xA_Iny zOn5H5+J115o`=Jqh>*^l5H~TTgmn?R*0ibx)0taeDj1*8qA?baed^ZlhddbA_YJtB zMTdMCWD74wh%}oXhUo(hegXYf8ZcnSU%@>IRh9|lVTHLG;#0i;;m@%#rvGDF#f*`J z3wA&`TKZ-}*-g9S4MJ;bF}of0o#8+#?&}YkVAT`En@y0|C?0Of(Ews z1n4wW4jTJehF(=;FTLp?lES#mR^;)ct#gfE#8LtPW?5qv3@)qx{PqytNFzeSXDAVg z#bojQUKv+1Y#*b8Ce(^hAYghxk z{!8|DXaaN$&NV`bfD6dkX3l(x=m|L(rDukWbvl2$?ZKd?`+hB!YGRbLtQN$C9G+9M z{t)=_g#cJyuD~DzlOFFk@U3{^zMCo<{Y2w#g}*7EO4>ahrno4HX<@q0)aYGS{Blra zIj-QtL@DjP1%GgfgO&8&iYM0tD+ZV7GnT-$jrTXfBWR^TRg6dUtQc){&^NF%U@~SI zY*yj;GmgZM|8HO_4Nu9KvSU@AS&hiY8c|0Gi(r!<#~I5680a>?e`8Ql*W7IDZq$V@ zg6JJ3sQ|6YZ(SUcgRi)L_!h_2<)CVmV|6j<1lwFBo^l7^d;oBC^@x>RIb^SECvxr{ z;co1&GCOy;ALLL5^+Av-@s1uh}ry;pS$Q4`)FG#iJAJmCV68lkPrHWe# z3U_1kXaVIS(L{|_*!er*C~C4E+O_jNC=8k<`f%PD!q4Bh9y6u(Y^(z3UJhFPw7S2#H0FB34; z{ma2fD1Ze3&V6xb%E14!{fAL?wS;DPo`JJ4z5yqK1QJ%!#ZIb=eQV%fy`BWn031Nc zawp_?iM0!z;Yaskf#(zc2hql342SrC$tQ*bH1{px6Iearf04Oh_fUVN6cpC>tM78_ zsHS}uoU0e1B8_%r9lpuO{yzhfdF8Qr85cmgIjmVk;_->lK><&h-#N);q|zq5g-Ye(oPw z9pSeuHl7?pzMlUD;}L^Y^0ZU}LGe}%IYU46DJWCQeFiZ2Ar3bI#CBS8pToE6T1W2Z z)coA%B|D+ntV<;+GHdWx>;w6a-JwtXq~YLgSEOqZ_5WD${}S@kdT1NBPs(Dw|L3HF z|26!TDX_fl#SL!C=Q{8h>VG)We{G@qUdJ8Srd=flrhp_yt0r+YUcx`v=bT!R$o)2m zCWqzC?Vn1e_hLJ)o^D?YS$`$kgKT9)Ow#ffGESi0W2lbF^kGDS4wL*LcwAL%-+{UO z3On~ZK@+)m;t2_1o06ad%^7-HEN&ZMJ%C?*zloFg2|fD{ImF5P7CrlKcAujU5J4MU zciOK%YtM0d5O{wSctd^eQhePSBDAeoBIr3DVvOlRCw>ySg#JumM$v6Heo1ekY|}&U zG`qi)kJ!e?(1xDj04HK5%(8|ZtMo90FfDbsNf~Sv3}H}1QEB7dVIOHbR-g@jY`unp z;Pv>k@Uq&W=aV01(Tj*3YD1krm2^aV!u06--u+b=BU!r4{i`xR+gmEFp}pL9h4pj) z8058t_gMsa-gewB?RdlTmp4tT@Cr1J!R>(c@el{a&_mD-HsA4pR$AA*&HPF4NBnb^ zcXIz5t@f?-vp~`D_v5dM1K)3E&$34ipz)gB*nMGO5nad3eG}lkgQzTmO5F;cv;IPG z140R0Fzp~0t492#(#$bd`u>%a0|Q6s_=BkbDWvQ175`zPc#CwcFK5!uG3^}E3f=xB zo)cnM{OfqEybH;Ag&tp8-je$_QaXnj91bxE?9d+kaU9t$+1soAmOy(hOTZ`LTlmrNkVQr_-ppZ$$bj|xDTE1 z`VfNGJz4w(*HV)my*H3)iNemPt;EtaQ!DS5K5yhzxM}}Q=vs@6l=u7ijiuQ4;!6+? zbn9BsP59N33;bkLfnXx72YS?zJLx_nbZ0Zw+XKluzYL(>AK;JS1@8%c22m3p97`xpggAnv z&zieoZ?{_e!dG7aqJB8G8}SHP&Nv>le%k+MHu4bxh9j(Y4y=^Hukf`f!VlC-H-&Z> z9ePX8ifeDC%1uXWc+(MHL!FW_OZ(3SJg8utR)cTG!)l**ygy;H4^S^?v^z)B-d)e#jSpLH^498=ikY=K#Smh&McOpt^V%T>}&aL zbJ`^G0q;`YmH8bYUPS@6>t3t%{>Hqu7j1lzeULi2-KgmO74gyc z53MS$hhW@;gqcYYw9sXK$%~)#m1g0#kx*BXN);QB9)mW(7zQ_Q^3KD+1g2#RSJMM(ar9cSZ zgtpUvIno`zeI@d~n#eoo{I^R!Y(gYIVQmQEex3PZwEeAjp^5!LNo*5=A~OB#3d%dV z6eu8wpuiI>KtAq4ehcXB;|km0P8>V(B5U>~8NjII0D|Y{b#EDy?LOQCO%n*_rwrbU zv@Zc3UbP5Prf-qWqEP;c8*Y!E%VU$MyUM=duJ(7!^BU)dyVgG?&$%pnz{~yxR>bbB zO?IMraQNke+Y1nTta;B#kCR)WU}UVrvfT~Jc1O!5_|9t8ZGA~mP}p4dFtAJe=kOPE zc+kQX^0e{1leWTs2jk+u0p&1d2+J+UJ4GB+a-Lk0Fdc~L4@a8Gb%ppkvUiZ3v-?^c zD6j#i;MjdB>JMF0Kapk?Ou1> z>*@k9ajE)~(5qhxwlsid5&dTH>xtm^EWln#*oxntDt@=t;K$!+b+u`=iYGI|mj719 zyS~lUVVipY`j@NykpmEV@ZKH2pzYh9_0%I=zkeS)A_qF zB>3^K^5a(jJNWi-t-_SNp(*XB@u;TH>?PHhP_+Hq>f4Vd#o9lOieHJekBcs=?YHOe z^OvK&v@NFhR+?VCk?A%hC97RZN3HK?U4Jt%q+T-1KGM%?Xy+eHJNKeMNB$+oz#qh~ zHXNAb1!ed1H3iq(aWjIxp-qAk8Hq~p&no{g3gcllqMpe$!7q71TbpDU_v-k$W2 z1;~W!$qwJy7WSFAu$#o9rkf{`lvEa2gWlA3^F;w<=_cpN%Qy)5fIV9L3(Q_GOhS2i z1Jb{W{$syyr;A%`C8~oX_etKu2!Ez8kxJ*MQsB9bsMFcP>!n-tEhQcPG+<%Yx|}Jz zr?tcXF-d9d+iB>;Ef`DjV!c$4|9WKMVHMu#kV)aCdiryXoy!6+cWLaT8l_53rGu+; zGnmZZ$2&-&8>+VH8qJ}dyPch2AMQjSzQ!^1=+eOAmH?^E|0G(VuH%R&9q(`OoeEU3 z=+|$f-q%@ART(^;bYZ2@8}cKCu^)zG196eamL{%5B8;aMD~Vh1hTnw51cO*3P@Hft z-I-Y7WD>8KfQym)f|l;~xAZ~MU-4YDDpp&a+~8f?a7jeR$h#3csbipx zsP78)&5faE`HJrYh-wfZhioCMkyzT*(ALVCK=oBZ`xS|kLI27Jo(Eidj3OKkzMAv{ zH0;RXID^a$%SeTU77gZ;XczN!)(+-7U;)%_WxAPsvMkeDkmiJGcI4jB4)jQ&*xol# zSm%P|D}LG+!fL{4mJ^efo#Nx9vFa&X-;{%(}Pj1Yfez1>_9u-a3+^EDYf-y*(<<7WpLVFck_ zzNa>=Z6AABM6tVuvjC0(`wj0Kf0v$ zUuD~W575S|#vWV$ZAcTT#ufKqW__zCCIc{@X?>S{5l^^}>Jyt$upRBB#ObcQ1w;yP z(|2@Kag$8p6!PPG;KO;Nc@5FJL0|zD1Wf~bNX1Zn)rO2ed7Qjv$}>p85RC>*kVn63 z2fpERM&9#20I+<|y9YE}zTkaC67UKo@UknaE&76YffGH)!9fpXK+gjR4nk|52PVza zxQ0Ssg7?W}94Yn_eKdFzg#eZ#?+*EA>5pK-0FW*5Yj005Y|`(Dyx)lo(b*AM{xA@L z*nfmy!O7u2#t)R!7}7V{#w?5VA%?RLAoQ0JS)tob;P@|6j&Q2w_{-etbQBVcE2N(T z@;QD9f5k14p%2ceB;~B#zXFc`Iu!W$Llp8?fKNQk;nE*J82hQSibql_!(Gux6f z_iXRd{ISwfQ&hga?CzV+^oAz%f1lXFUpLgdgE(E4X^wh zhOA?~nW(sxuYyD#oCdV$4*?_p2lz+4gZqI1QeWIK_4N%?KhiMuJ7Ma|WgwA(yK`&M zS~T@#L26e}?mAOGjz5}m7h^juJZs1O_Bf9z#QZztJO1s^T?sK1Rl;`U&$P-KguEU( z?Y4OTh~7@`29@Dr%ga4UnD!)Qc*ChehuMw*IfwIvD=}M^CU_Lc+lBewjo7_y}r!7ATuFiS^dxtHYzFNYzhZ`&GYDo&sH^F=m#! z_D_KH*oTm(zDTF3YxwF-nu39q$J+T@}-1N=irqI_>h_s_F?=Tnu;iKq}2680Nk@FR#o&TTU0$c91^tWvT zr^$3ear(lBCDzV$eSPUHJ|{1fE7^l5A2^)de{z2o&u2y}rL$RYGCS^hl~VuN>9g5$ zzBiGbzEH|Oueh&}Ju@?%E#v=6w)AMp6!QgE#mkOXveWoGKJH!2p7VUEHGO%iRLOeh zvVLiFJbTge$IoUbN|nlGZTGS_lRa0SM4JGNcF~YPyI4BYpUoZskkX~miK+2YLE)As z&+{Ss2i9ZG&!9eFF#Vs?yQXY<*Dg=v*pQ3`D`gWn%#MF|Gffm6m0-Spf!D= zKi$`NZ+hptks~J$ojjf0D5&&5x8zsKKw*8~zySI>FhH6Jaklht9?YKfM*(yiB}T^w z21bso2iU&8?8(bh8ZO11}BkP97h)Fg-E8Wgr}*_1eXqOb#APqi6N8zrSCR8n_Uq?L6b1 zyw>fmP0W7bnNP(X&#Qh$Gor8JGkD%r_W>1^q2e-)Vn z#}0+ubz<5tk4;BLN%`1}14-C;G<5(4E0KXm&DeuaiDgB>)&Xlc7=t@@>=-ycvae4@ zW%FPk69$KdwhSm3N|9o}XJ-0>=U1|o3*HRG0JMKN9Mp3jMV|FAHcv_W z>;ZvMntqBw(56b$MmI&^E^-(GKspd2`w;%VzFl>n?4bz~35@u9G&})m7`q^Y6SN#svjUY-uXzH3WY-_M|H#qfBar8)cG{;Z4w|NvUB7Sto|Aj1 zdqn$8l+Kn%v(&NBkCp5cgzKT>2lfqZ-m>)trc6^Vt94LZw!q zlg~k22aRCh7uL#!Q6KVK+rVgc3>l+i(?GK{Ip&=O%PbCJ9nR23Q=?<023XfOwNUI2 zk4~PSfsWee!Gx?ovgd)3klv%&agzxlJR2wa;P!3Xnh-tgb8;?4MDrR<^5q7(!Qc)U_7WgkNA#)RDuKAkR4gknL1 zd=_b9M$tFZ?_Gdv=&DJ!L#TXqoY za#Y)jxEvz$CrADB@p^t~@+_pIOiu_-mMD;VJWrM`g{@&EMVn=hL9`}Hl&uk3&@#BA z7FT)z{S#%5^ND@O4;?#s^~A~3hexhHFmiIw)x(F5Jp1a=z0VricXB6*&oV-wix~AD19fxZ;xD9^HSs2XhBa`q;48Tb-1c8H7_64?qWlYlE@zJqI zve{kP4V&dd-F&}af_toK!$=i=K2aWrqrt>|oB1CL9wz&mf(H(mg7^EQmo;&CGyh}3 zqvPdAQ4*DzVhTR*LK)o7!~^nS!P6yiz)hMd_`s;|!E=z>M3M!Mj6P~wVal-LcpL=B zM`{NJ_kwVm#*_mGq%+56e7NNSM8)wWeSFgyVkrd=%#2;Alt&H30|y9x4}6oLAQ4a3 zu`0b$8B*vtfH`ws$Cs5i?&DD3!$*EL9D3l`;X@<)#UO@m%NdNxdEc9XL#Z`o$}>&D zF`os2kqQw2qDU72K&!xbvI0d0eRwoddA`QOx{sDI;SfU{!WdmFj0(gS2A9@61fs%L z?*L`@g@$TkvNYjM!j*@_t1fBa`e>3-G7zX^@SWhFRYokL26qf^6L!fSEBR1SqH8fl81tqsQyq>@UZzWhX-6e{9#b)P ziE!vdQ#!RSJYyE34mfc?rnNd%!8`(NFgi7bxrtyP6N|GYOgsUlJgIeQ9fpUu?VZC?Sqx zcKxOegWERWBMN@f>pO#4`6KE=L6RrENlg(QO1~eLa}pym`-N8rR9036bNl zU**!JF(`yc(}UVHNKq0$n*~PIK4&LJ{YMH}0XNtX+!&}D@5zvYlZ;CF{G_Qq)Uf)L zXoDy=MXjzGk^04k^~Yv>nCEEyEv9+N7{hQ^QP|QD#AOG!n-3qixya(I0U1o4{8ll1V zh7e{ZXd|MS4=V)tpfJc42-+@TNpfMBwqUe}*(fJ0)Jq{JiW-SEx{r>Y9B~TNjXOqvaETLsXXy<3j<82Si5q8enqsl5wwa2R4!bex&Q{=)Gk#S~-55`#b6GAfT|% z8tP#Ontyg>_Z&N%Wd+KzYRdz}qmJdz*3rUf2xP!JjSS=7#@c&oe5NuH)py&Cs57Gv zEI)%#mJ(A^JU^1S(1G0BSk)t3H3T9=7|^|6Q{{0$z8EqP%E7Ihy09n- z+}qejO_a}`g`SEK%IF_vK#4MQSN8rAqUmMWS_y3|XpA_kdn8+hVmPO}La4aO;H)Jl{QJs6=zY>4y)GeT42HxX~%Xp@Q2%GeB* zR|D&}0HRWn?rm%z{aX7tZ1j)V>;FCjsph|#g+u_Mk!y>{%-G&n+Ge)-pIWw!6fk7^TJzqnc`Q zP)%v*p|L`6)jXdFLE?1{K8t;WD zpwJMqsj8tJM)zT&hdJEX=u~+c&f<7!nnAlgx{4-s7BoUlpa_743Oiy@U~ZXs#@yvS zYEmMo8x7i|QHhT&%HHe~yWgPYv9doFH8?wr)|{_p)|r_&H(t85;Es#6Z_xa7c^tlA zq~k`*&ey!uS#Zl@+#9s4^P))0M#0Y4@}j3l`^3yQXx*nn8tu2ywez(ubwY=AI;Nq7wXt{2{ z=hLO8<;4xScq0v3t{d?Abg60iX$-hH9}SwX8}Rv*scC-k11?@ied{A957M6swad`v z`E(&ls}r-oi7RlV#v%@Fo=;gFQT|z!Mcm)S6*yYUxr6hms-sVXbN4s#0*=;l?%;f? z%Cx*F&fVX{3piTKxr6hmD%0}fId^{(H{fXPU=Plxs!a2X8|)?){AjJr49=&fOv{Uw znf*;HGWQBpqB1iW#O!9qr_15GQ6y%zzwxC1Xk~n~av>sogY#(~(+%tsL(F~wh8@A& zMz->3R$5)Cf!^Q5KtEU~Z}X|G2cM3-H8Ic+*2&v^D$BIIIC*Pgn;)!`xB0Z2Y58f$ zTNC5_U@g}V&8Ol_^NZ*DCI zN17OaXxLZ?U}z|&1{*cLC<{2!#PpBW>4KONY}D?eHNi*|yFXep{T~{Nsli5VKds4s z4WPwL{YRQO4x^q=^fG)fdM5t8RBOrc7gajH!q( za!NnaWJ-_aytr~H#*}HS``a_g4nYRP*V+zr9*+-O^kwnRXY?tp}PI zaO_d68RX__$uz#WL2hDwy;>>R(p)8(b{8!r2bx&ivt{nmj9A<)MlCTz_K#M#Cmd)z zUH59I>sy*@7=yk}))!(s8+zv6;^yiHn%Lf%I^k-roo1ena5b^LGqu9CwYg?8?JiEZ znwZ_0TH)H-T#1=>pN4QXvAZ+1Oun_bCNqsMp2?fo-ph3aZ?4TQ>p(A#;7x2VPby-s zYSo?H+FYAS*@Z|1{pSNs?Cs?`A~)AyrlX4|a@^kPxtRw>ambQeka3K+AO|-dk^SN) zE>E2Cc$zgloQ3l^*m2H%*1>Uw|MH&iiZt?+yS^2dN|RmR3gn&$QvcPR_-2Fp|2Mbd z>#!cj!G}k2PJkO6B4>)_`~XhUOa^Cd^?(mg0Zo=J;_wf4-TL0y8O+V}+;sLx>0(w3 z<;wk~{sIpK@B{$i^1OhYle`m~$|M8Z*%ANMP{`zEjo*|mVecu|*TX92cz}S_b7^wi zugYp!>?S#bjgAU{*qs-o$$*%5U8t5U5SI(3OZ`Sx%`qodIg6PR!deOgM~xpOmpg4{TmGx}E z;12N`r%NDV_27!`>x=Jz8K1hqor_fsxFc8#;qKW-YPauhKjAj%q<9s!QR0Xs>4hZKDYsngf{~H2=KrV``;yTuo^$<=F)Uaa^_ixy28RZR4 zcf>pJY#gboVaFhj-w@IxEN?*ViGw;kI&tPKVO3cyh|f0!g+oIqzX%=^*RGxz56lQD zV(rc+n-enz|9x@%k2HWYpJYx3aQ4UHoGRDjV`fwh>2RrR@DZ=7zJEt$pLR@!f^c?2 zc%GIwKo7)`JJtZX`DAFyAg8Cp>XAEs0b9%Yi46LDlH_0T6tO*lhJ|^7RKNnsIlb(O z^7)BT>{R7(ze!JY+Mc1RsmzveP!Pr~rs$=5a}e4;aTp}cT;-6M1U z`bPIPXmma~8$+YY2Q|v~Sfw8O`2-DATLkt^RPWJ=()k*NS)9+Jc`Uz(W@XYI60Lgr zO`MZBk8g=lEw)CWuFQh@Lr?I8t%gVL=*F1qgAIz58~9r6KAFdUW|A# zc#Cv>_BIhyab;>6jj6m?ql2o?>cNTo6FUaIV_S16#0?8L z;j&1VX`f8dn=~Dloo&r!aj}gyF#zzp>d4nzU_&oW&so&>!FXR$R@v5E6c_EQ?Q5di z;d|BfqPZ;6QxjFZuZb51uc{7Qb72g9Fg=q{PZao8b>NyyBRw(2u8GbTuZaMwj_J1f z#BotR*1jf+UF;14v5`iDm&&mlSB8gzJxN$pDPO^Le(1E6(#tONU?Wc@kK>}P z(t@t&096EkkP)jyKs(q5(mn;%kdm;FQZK1WJ)|d8u~5A z8o@Kl*IZB$fW<{19xrFzg~0UK1zZ-n@X;uW5)Om2Ve43i!6{mNLWv$83f7~7yA#k} zaGaV+l`+p>3?mdr>X{s;S}XCpN`{95OB|l>)veb;ye(To7|Kb9?<1Z{5Y;|!F36|y!MRT<%=t_aEosVS0GPk&v@9i6j>`J zd#M=g@p02b4eO7O`n)A2Mw{?_G;XZ9i2mc6F4k1W-67kX>S&CU_4RO!Vw#z%ha#K@ zC^6>u8v!w1p4<*l52x{n<3_W3Y>a=$%Z}^eh{mhy6&Bj+;TS=X`+W4y0+b5LBe4YV za_z-OLEoyXb6c>vw+16!VuRj4TH~sMFxAzC$Fm+RncPlT%MdJen|qJ-Qn8v&%1U@5Xcd&0}!mz74xM)gX$Kt{M| zTi0rZ$V+c3Gw09awt^Y~nQ25O<75Yn9b63+AyS}OYuLbV1kLz~5e|<5T-eA{|LHlp z1r80#ucLB@4nyUR2w^z}aq=q~qZr%x5Qsyox1^foU|#TkpB9(?VjMy}rDGt&j`rZo z%}@Qajp$`25mm8?kxMLrp6ja@!wU`I1+GLypkn|RLI1e$tJaO~YsnrpE^7^wfhs)q z64k=nHyg!AiXl@38K=ZUg2gna7~Z%V-@e%>D(02p>7Fg0!c@C)4T5L(;| zk)0B?;0)7q_)EBn7kepile2(n;x3jZrf`9LO|Q)0X&x`9#(jsJUg#sX63N}U3pckz zn`N$D?>$W7%G`L6e|URvepK@?XTj~Hv;`q;7IxJlx+MLU2x&yzjMI-zk67u8_d7U0 zYHshvecpz4;s@5lfS4(es=e4AY@sJ@2b+)^3#0Z$yswyOR&X0y&#OI z?nJRkCnN-SN6>*rzT`ssp%=}?xjNWpP`!lC^r5O)Vzj{P2}a>y$MjsV4vvhHU#>io zt(n$05i;Brh&_REP{H(GFOy*F(Tvl!8fAriw=E%RQA^eMpQ(y@urS zynG@$Cfua&otK+RS!P%EV(IL8Id?ULQ+T1xhz%{QR6Q_b!p03Sl-ZSiv=l&UqWU0$ z^^lCd!mdEfq|Ftlbar(*jdOC1u^O9c0LxHlW|Dy}0GSDZG#PO;T91&ihC~Q^z>Ps2 zs#TkYXGCXi0gwo#17BP6VB`%|aD7+c62<6SDc7r!ZHB&j=pc|A(ijH`;fITBhImYQ zqKtVS8FInC%urD#2Q=XK z@dZhNR@x>rlzK|Qj@L5#aNvsar8s?J;33I1NHt+w4QADJt-8{JG4ksnE}ToZH5tze zBgys^mgAhj+qqy-}w|@VXY+S_Szd$lyA3Onvo*M!0(Q473R+4q$8e z)Ba^M9Xlki41?8yih(_VmkJ$|#XQA`0T5NXMagEwAizFOykN#tvtj@^%12Q^W}X|; zA2(IjaM7@Y(d(I#^sXCD<2**jA_j2bOf=lgr13i48YbFml#H%$oXtuR-l6RCLT>nJ zi%_vUf|*O;>6uZ0Vv%c5qRhKBaM)#K1@S&9LTfsP`>g|yc`=Pkrz6g?X&e(&<@?CU z1SjDU@z%YcSwv!Ps%q?+A1mvjQ8W z8c~;9BYlDNMN2)U@4OkCU8>i~im5S^cifGQ6{69}k_T2eiS6om83VLv%ruXWmHuD$ zz6QSQs`~%j&%WEfdtlFlAp^cl1_QPMiV6bCU<0OO12zmNHa9ldWNc#(z-%S>Kt86H z85W7p=}%2eO-m~+BrNKOW@+WmFs;O_@ZnchX8-p&=YBrl&-c4AN3P$m-~ZKDclez9 zaPITD=bn4+y?n#0pV`bg*>-kODzHDFJHX7*fhX!Za0=mAcE?Vf;m#Wncq3BAYd!r_ zw&OxolQwCorxRz0l!SVUrqc@3eDtD-61cajO9|9p^Ur#hV=jS+Rs*EmIZ(>hE<#Hn z0c`$7yc&QCzXrt(5FRmeX1Lvj^B=yXRFH|6TvCR>({D#svz!GCD7ec@@K%tqcdKRK!g3{-M!2qN`&^rE8zj-}|)!ZC`D zeUkMbJhrf<$BS#8>P0&cUHTHQ^aEyipyKP`#Ldw>xj_o6Zm#E7xFW_zYx@P#C47D2 z*}ite&>Q~blSQ-%=i1H_c#EnNy7I{4Th^oLN(eV$oNQtVbZGZq zgDS?w$tv9SOPO_q(Is|Q{+cp}z}~mN>b?E>a2r>5;9M4Xxu*^KXPhgvX?)OgGBz(q zJ6Nbx{(Z90KJueu^xr27|3yv~!sKxg7AJTLRbO~oSlob;ozz8@8yriF@~9d#k>BP41+mymY)s8gI#$G58V{$*cLPn5EXm=bZ> zxqF>bm8+NGb{XV{>X~_xtdwz8TGVmKcD?$^pDIrTn5XPLiPpl{O|xB8U7#m3i;o^h za05Z2!UjW2R~zPdY)Z%mqqw;bqlWo5pS&sF}JNd*Tu27f+On1H$=>Quz#H>6}t%g`p&7)UJ__)F;a=|QTa-$p3wR-X{ zm=EbQD?_fL6V!&bpD>{+O@HEY{EHLUb_we+Pbd|YC@KfOuAumVwv$b5^6Xo<31-i9 zuhQqY#!y45_yzZ2txUfRLMV(=i*lmWTav zaKV;|Xt@-^E>9z8>7fojbU5J-?o8%2apwT3`s)xo7X!Sub_~f%hwhhbS4028 zy1GeC5c`xxbD|!3v(;ZRfF)I9KYH!~a;ZFPP4W*{p0J&MrRW?W)daUZ}h{QkVDWEA$Ex5;}xo>C3*>aL*pvu{Z=B&CmzviK2Q5XVfc% z&Bs4hh^8LQO8(|NQ8r3>P8Tm%!aiX}iB3S?bUwi2x_F-qa~jq&CEZXpp(dg886cS7 z$&$13Up{tqSo_t@x5(tR*e!RSipud;vhO$G1Ik7G7B=q4;g^&`h%7G{^W`?80YPkS zDUVD95s?mxT!ES29>zW-kDaya%v9iy70aEvX9-I2+uJr`tD=dO^v9kv-f?GLqr~=;lfBSm&R!=>)asd@pA>I# z4l!q3SsM|)5w!&Mr=JQtA2SuUhk(fIr_&DBc+7O_x4^jBQrXbdE4B7PR1i)Y->qUc ztck84gpry*R$Bh%0u8%yJ$Q4u`SIn!8;xL;E1SBSI=SW-gLU=5%&!`iXD@5=Mn^(T1vT9|S`>uJY1~wq;L}$&rU(5n61Le!A*tkPd;NgcktgD4>2-o#UYW$qI zP6p?MbfkurL zTQYm;Ywq3%w&dYRRoM<`uorM`j&skAWRPxwLwQ=wUQNgh6Uxi?W}CU8eCDS3N7>fg z=m^lYw1x8Uls*0_U`e%)UoLF|$7Hj{zVmyq%eSr+wJbZv~0K z%Pk7d%g2%QHBlG}>*9)iz>l?#?HbxYb=q(2w1NXK!%7T&c>wFLYMPN)B9J!zq<4T*z3-qLo#ZXD`c(n)iuVTD< zc?oBIVQCd$`Qnu&%j{V7IuY7uaWOm$g>CR1~MEDG_-YHEFKS-GN@ zWtYf5E0@w`qUy{mJ#x9;O2@7sHeF>yYgdk$J~F>dZWyzg?{dSr2?+@{Tga5_Dw5s6 zQwuVoW8Jm}kBOrdlUt*F=IqMQ!j{q&dGi~pA`v(Jy$2MyWIp!m)l>8b=(S+WLBw#h zE=$wUaElNvbH+bO`dwMJVpaLdGQR4}8Z3#SGR%zO(yu~X_EHq83Y9HeUURmu6d=&R zoKbAjx>_!9Cu_G`y1WTQhh@PdN!awGXJdbh!lZ^`G;dLW3lwzJ(4 z_NrmGz_tKFEOKx$iQ(#kDmr+B$}Ki$1UV?={-cE$tZDp}a?Z5AqI27DYNdF6F_bA6 zG|kVOHZu>sUp{B${R=k@ChdU+fz}CX1l1vML~w?c!__LdQ~|=O z{#0Va$uKLfK>^=1h1Kvp7|{o1LzY+j(v4w7wMDD=s8W~SsLT-|1@hKQ6ZUflkhJ_x zTu|BTK?y@jpc!&*_m*~M5YU=Lk~=j~!f{x43g&O$R-VWRVG)5>Ns@n@p2r#@{8Dv( z0|vwfJ8tE>NY3|rBVGDgSO67+S=N7axmV(PGLOX8eC4r}ln=udocUfa!UacB;R6@) ziWmp?$NLgN8 zURheU8edDp(Q8T;RJlG4(ZW!2SD(y26Qo?8*fw-vu!dCcEV_B&MC zjt82#c^9@f_I^;~N+jFDuGF%ys`PA32vsazp-au3GBq@ajZFO_AI zXn357k2Y#p zFM%L)AQOemxHc4qHtRoF4z@7^LpCA=B-;m7ND2$keaq1UxZPPB$g5mdsNw(m9=?q} zs{JjEVeA4CS>(~EGpO4&eT7FBk5N_yxnay{zO1v4-Yk+;WKx1@%jmZZS8ZNbt{sdD zNVvhITMbS8wJdDl+5<_P{e;Cgb7PjNxS}PW^HpIG)yzt480+rnQx zJt~4jak%h-69^K_8NlYyy?lzY?p}K|L#V0nPy;tmjG$KU>i%7cKq5-N7G;@aXK-B` zhZ8Yt1F~h=Z8N528+A~nAM}CJbq6d16LHsE$GF?jUEjIh)@3MvaVK(EBQDX!$GLml zD8-gaV#$PSi(s!LrH2C6EdaJUP{mw(%D*Ej5Ccz+stbSS%CoDP&L(>W7&pKm@ez)X zPD(3=eDT?krmKt9!L~cpuZ0d!Iz&YJ8m^@QM;WkSBAgte&(}~!+fH+dr#p`Lk`)Ff*hqq3Xp(gRLPGiKS7?HCf6NI+61n5p4lQ388=sb10t=57K__YTC5#Y-C8{vH0ag=>xQj78d{I-SH?A_ zCDYK_W2JeYz`;3+$c>*&E1yJ+qH}caxM<+YjbMjSh~G1Yj`p017 z`Dpr+@Pvvo4h!S|@Z7ttJ)DsOMclbOY7nE-cQ&nO@tBt&xE3F*lQF3p3=XLl2GKj{ z{yrsg81`FK8SF(LCdM{wQ^Efk4hbd~swl5KbI8);{P`Y-L?>L?1dCU+LRT|xnzWDi z_-{J`zr=NnZENv#eUs`w>Zi#3=P^&&$XEwONq2jDYXbzc=@4Quw`^&~5|#JykqZB0 zvSh|Dxpik1(Dx{@)?%qo;&4-O-9a|^5k@OF|c{A4mLWMQfhPZzaz zaLk4&tX)(g1AR2i$W^i5)r>nTLj@38=8J>iQ#j&UiMX+T1K$kei?7=j8biJ%bmJ7} zh+z_P^2zcMoO9ZOT*K;0MhL%?WXmKwqixVk@s)JEh0H>g%sa?4*EG)`ZjFet2r4mn z^~;rnl}l?_DB^L%in3;mQ8%_tQPfCm#R1KcmIPeAqj4P$-fBE47=~|CXB%u|aCi&$ z!SjXu6i?G+XEJHJLD)R(-8psO;FO~vMcPKs2mYZYZ)vUTKW?dN?@H{^g^bJJ_5!M6C_(E z*GffJfLL5dS*iGF4@q_43oj`|8-Xm>;`z!g_t0R0;@z6UwPg#+vyeuxx%KL=yhLq4 z3cA}n`t$&NA8xSfZr|7^_8?-kF-5f;sJy05z0^xI{-GL751ZSuzX$slnC{?ArcP44 z)eqHdZ)jDC+$**P?Z@|vF-LWIu`cyoRRENw;HF}f$~Hi(W@@Y7jFUi&*=U#xJLSbZ zK4<_lLcY}n2^5BU+j}sbp%=*%(9Unsa+LZADM@lxQc^V>l{Cj=w?9bu-&A{z4#9sjx0T7y4qlZq^+Rb|lh(6fb%bx=Y=T!o81S>HM z4*{X(Cb_yza+9y4en8yyv>AO5#qK6gK4XPy3vMG-m zkec)l8`xJh&0?=?t96j*z6`8~RjsR***wJPURnH+?L-$^Rb9pkhYp-%LdV1CsSh#k z3fx3ihi_)YBbyKhapk7n3vVo9uGFsufnBw<{k+$Ikz4_K|D?{?zpkj+g(k6kRk7?fUE@r5y@jW8LD zD~>I6MEh?EK^G)82dwx8zlf+YS45ET%*Vqd*yP_Ob4(<{X9aA@Bp{tRaj{bu%b=(g=yJATozMHfycezFEgJv-`qVVkIT{9z8*x<` zBtw_)pnW&m?lC-?`hQPvcFQ7cC>ieI{l36I|ADPz<-9qY&o3r>R{Ih`n3CpA>t!%@;6-%{gS^Y9Wk&_2B{d~|E6W!5=}a>v#15c~ z>R5_FkHPP0$~EGLWQvkFGBMPjXcxU4&*wcm2bVe6*DrU#APq8w zFkSF(J0bfHgKWe(0~V(s5_DlY{ob+wisP(a|?mr~$@ zP~0Z~)GrgLojuYX77Jc3?NFxO_6}AbLsE>Gf4vMMJ42nKqBl+4cyi`X8dqAt_K?AP zw@qDy0KSLH?o-=_69R)p$7%z&D#5A~w^wOJhiMG9{`Ak1N7?2WY-szVLww|iPBeLu z;-P1Pa=ae0yFOna6*AZ|&d(|MB^bUa%D+?@WcfHyRR8L6cqgTQfko2*>;P=edtqy3 z54z9*VWOOPIQqskE(OtXlKh#Ye>qLec>P4 zz%!?fs{P^IT^|NJxk0LEshaj4gWB3wkuVJG7GeV8gHA?TYd5J zm1X@~s~|rjk-1_h4X1Fi#l~GT<|>atX&9T(&s>gT`h?VuK62(`!$*(vt>8=9hBAO` zE4g-$EBe(-n75!8tBEOE3d+GI-_r-Wp@n={C}_J%G)4IVn=^^Db%mL zvtI+n>Y!7b)ST{4;Y`AGoJkOF&4$Z-n=14(a#^}=__u}RFoV{Y+e>|C8PH$Dha9Az zpt7N_lRR0|d6=$A&ITC29;N?Tv1se1{$&h9aLZkI98UPC1m;DY9zPQzgLL@{K4&v%Lq)T6+vQQgvL~$8mvUSOtx#GcC4kC&V_~RN zH;7x1fG?#MOI#D+_KYe%!Ey$(UM-2m&Ta6s13zzVfrz>>ny!otv^aKILiBIG?N z-rXM_#BPy40N%Y|_j3Fx(a5mng`sl!1K_X{7y_mik@tpp`O1$YLTY4jvI`Gxh$X2O zmNmy%&Vr@ca|%KL(O8QD8{ziQOdU0ds?VB=CO~=?#3AHbHtTFfd+CD!4A`(S0fkJ{ zR>&xNAB;S2fIS(+lpUT%+(v{X*6JbPR#skzC0O@lMO8($TomM*DM&S;gF&aykKu~x zM|bB#kv-RnT z%B$Q4Eoj8M2z~m@mOV4W$7FoV_f;RzY&~A$(k*ooc17P+|Fnj)B^apT{3RdOR*R^Y zg3|JpeYpQ&mA&>sx^+?5w4M2{3^u+di>sy(23>7E@)^~=K?z-JxYl?>>7vNo2ToHy zt9z94UoeB*NnH+wYd<15)PT$>-|aMg-nj42rYgz@pH#!lH?pf&ln-MSMerzFwt>2O zI5RTNwYTeDhH{sqtPriB!t+b?Y~<%G(ZXG5F_!noCJ%yy){`r=$cgF54*yJdy5LhT@+N>8WL4g8DNnsp@(r`apSwc@>1-ex=2(V;h_0iSUcO2;UZ1t zUeZ$kU!P*}rmpg~j-KusSj?dI^9uNKE*y(nUQ%8Ck*bw^@z|oJWsA;SScS_a5CA7t zN=nQ5)-R|qmz8r+TqwbJONi&9podrgsR-`rm3ZQQCY zW+%To$jdcuIqbXfJ(qUqiRQo^K@m2!akP2FG@u5ak-Uj82g*Y zFOhP-SEVv%N|j31kfkln_1&Qjyom@l1zjqi`NdL+?T%6QV`6rLnZ5Yu;KBA-tNE(9 zb-hyQ{Jbr0TaoKUU9ET1+6@iuTQNQ)XBa7R-zXQRz#=-$L^2+3!lO{b8=M|F$o_1Y zE%#gSLO>9u7s1DRV8dOHhez3n8!SnT`^20}E>}e(LOazchT@zr7a4#M=Sz4GtMof? z5A7CP<^FxO!K%x5$VxYXrP+DHv5XO!*;v2Tn#&Kqwn8{L_^giwNw$QFYX@d8pyaxa zmJIw`)LbSTPi)ieriC&v-(kQ(i-kSWZohrCHaA2B&o+3lEU;sprhqQU~iEZY>Pn z$Yq>HAI6DksG_rSFbOTZ!_N{2UB$71435#rrMnVyBcFeQVH9(&0v8#88(VcFPk;6v zU9A&d5D6i7N)SRWG610uoF9gXb^MDRMjpn|`cE7W?ikR0lmP~UT=@_+3fxG;I1b$Y z^PxMFE@7Aqm}Ct$5?vOFm4$!F&J#1wjF4EGTbeq>jE-+!WG$S30p=c4-V_GYx^kBehOu)Akq5&fQ*% zU^py4lwiZw=&rENIXjBvj$92B|Nj4VJ^wEz`u!6o6B&%|b>5H{uw&TO-U4o*P$6Y&vjO)meQHoR5( zKpKO83ZIVNva@)oh6UFlZ{6|Gu-12FHH-BaF(I~B!Epg@}0nZPbBPk*yyC&y|9t#CWhwe?b2G$r`clm$_%45 zI^Q14XH~0y&WDjY+aV?LHf|(=`7=+G>o-^%ZUfI0t-mym8?hLc!zfV;%FXsdu#pno zId&xRZVt{0!Nw3((G8iBYYF9H?!v9><|U$7Akwc~(1Bvtu@^PazydQY!PFSZx6@xE zH?v@;gl{bAt8c))4t>};Yv0n>%y&yNJv!c*<<0cd~MYD!2JjZaKS-GmB ztUBB(YJ}+Z7(SXJa!zAs{TB3z?k(Kw{Depgae}i)NTF@J;=1B1xr;t;nSMu9hG+lgBm_}gWG0sECoxOKE0!{3m>wk z=+iYrAMe?42}2dALfyXUsCZ# zy{gu^(vV3x8O{rDk?-6@*t1!pBIouABc15`rRu(8)W^H15r=m~k1w$x+AVS~GZnET zLgol(kxAgbG=9Q>Kj%+Abux0s&Bkc^I=PB=&>KP4tz%J+dvqjKkkR*^v>CiRD#D?T zwR*rO@URnCkA7+O^uOqbPag8>H(WJdMqC|-GL5h>wWvfCqo)^!3KmsWOzi^@h3V8O zg`t|IWhJHXsaafARm1X7zi2k@jo{J&|ur(_o z%V7}Djj#>$NbngMNIkai*b^F(v7u5}*N(#u{V0gtI7rAn_#co5-!=Gdb-LB1WdPy2>6Ia>KP41Lwuz zp%1>fp`)i0w*WTbfuqizwQ_Yok76uTaji)R&j?~WUh?HXX)_or&!Tp7(e|?Zni6J| z1C~eI$h!{OKmBciF@THROKk!m_ab(XCK)7==i$UVfGsss2BlF!z zh?Cs z3>8Vp?FO7pueq&2FH5j+4(yE|yfh4t*%nAwEL)?*VsB@w(Osy0q`b6dsc)rVb(*|B zz&b)}izRCyHl~V}dK5$h%s+XSTRj>9C5TwcqMh&)zxgwYPnxQsy?*bd0zbRxl^6Xy zVG>I+?8<1CJV#mcqGVX8hHFOFt2mN^*PC&nu4iA!6`9! zHiC*olVt)}slD+z>UL-D^SBS1Qv#D~YPH9eB#XSx;4T@?q6+OFHj92LA1;foF@>&$ z!i5xVtcq4#UNt6^q+FrL&P(C-H?$kk!wj-GR$P5jfqk;L3GY9n$6CSL*6i?(tAAOh z?#{9`?lR{nEJ$SnUEiSMhl}6*E7r@0l2N@H!j!2Bit4p^^IC0y_?}i6Xu^!l8`d5Z z)!DLr<3<<v-GaBF*P$oh?Z5Epjgw|!S+dsT@>{0rMUBMznZ{a$;BM6Vncn0s$Rw;h#2@Z$5 z`*k}sTm!Or&>YooMcvq6q_7_;twDRbv3`KZNnOF!R;^4?F0W^@VvS$zrVvTfJrB~- zh&vvma%ZRVF6l2C9X5*SJf7?pAxvtxwS4U^t8;s8Q~Os*=po*OKA4;vmTx%*R_gU_ zeAzf?^31EXhE8^jv^d7VwEh)GeOvpMPWPT*D1sSrXNSmY#}Q?$12Jbp=N*zb(gTLd zHKa!SEpLTHguFD!P0Je29lzQGNC-E{4fw9RwONVL*qh*R3c%kpW7gUbMO{ z-Ah8E`xRn@Z>xkFKY`YuuRM^ydUj^n;r@1VzZQ?{_Jx2 z)X>ZsGx9?PGkL#-%L)?0JN}1LN18Tu|8uE>nTbP>Aw5Affn9j52nIX;7gJFdzLdYc zE&OKcKSVD4Y$}sGEzv%5FmMM$nqfVaZ2hvK1UNCjaU&f#lvkJM+Y}QI@H5^{#T_mE zwfNGtM1dWxI!6m3IrK?S$HzMm5nU1)9+v+2zjdR&JT`Cp#Skn`q(USdSc7VandRx3 zND;H7e-HLTfnS=jHz|3vTxKdnguK;-<6?*z?tFz-iBMzl$+IRLsLbW=@7Jq3a^1-&(w=8>$dhjJhR&lYW$D#74EpQR>oUWJeSz_!2JWv-9Azy zC*{#-suK^7Z%^lB?m$JA-WX$JB zN1H1zDBy}-`;?iR3I3Na>(T8hFcf9EMQk|0uK~L+P(?~^Zd%MBSRLR!-Rg3fsDHt5 z!ZT_i9`^)>PaDM zV|qG1`R2&eBU?t61!7L1*|E`aQ{*(g(o-|YGq(4rh%Ak5;;wMQbhyU3_PhmlR86}m zNb#e`c;%tRUPysm4!NtDLkxCulqCVYvxf(}`0{G(ont1){S@_>GS;<6w3V1lX%)De z_fS*Vn+n*{idXsW_5Zw>VN(Jz@xuuny+8|j!3G>|gtk_8urq~a5{$hHMb*%>wVoAF z+)f-{^vTekbs#3$UzSHMuM#HP+}+(# z#FskYRq@J_Wo6oo0wV-gxs(QCY6l-7IS! zjsWAy_O)zA$`1+ps|r=qh3gLVp3D9;B32~ePT1<>*vx(0q{GvW+bd-b(D_rYj;faT zP;Djg5S9C+EFbhQ8ztf}G?vRxxK9r9)}_CK+|szW9%vq!_xJEFofJ}Ejns1FFFX39 zlh8xKSO!(iVz1YOzUUf&3<4_|fWD^|on(W%!~c*N0m5a;^V zM_IAj$Ca5@REVf{nYvL~Y@o^39sF~z-mx=eM8D>6Y{1Yi5AvWdfZMVj3|+mw2Tw?9 zb^XItui1^Pdk;g_qC2|3vY-HT1r%FsFJ^eu40R3e-fE0p8}GR?OI2DBDPbbiAD*-V z;w{7@>T6XAR@-t3C4x6?ZCcwSj0zR!rzT>Yr8Za*QOiTHMdH5a{sxm%hDI%-zg1TG zdYpG^2>pi{%@9OmE%XP<#+nGTga0YnxY{#Y98esNaMX#^Tb5uiM(;*bjM|3#;+fmkFj@~x>{h2twFT^(y0dRkf=*EF=Wc}~S0 zjSaN0`izB!I2KVd{x;7no>6?_DKkzImso1Wzi(6$9sdcU)m22xXW$$C0NbKn9OSMG ziT0cVw^h}&`VpcuxE;S_Rk`F7c+N=RxW2rB1LKF3%tv@pm)+9>yQLxqkusosEBq62+Y;jwVwG@C<=x1^D~T zz)OKRni0$2kH)?fNThdS5633bAL0(jrci6r%A^$PN?w_iNaIHwj?JL`sT}ersRvTy z=#I1-)8goa45pBl$#4>2BDH2Rh3agE&48dh@<3`L%^k%qZO5@oWp0Qv=#t#t+zfh1 z;12}eGL~KT3fwcUH#d=94{^FIE`hxQuZ(4v z>*f1Fz&LtrBF8!mm`JJlT;5Rv=L@_TFopK!FG z_i~?RXlOgeR56`Iv4T0kc$_2v8zFwZ@CyP<5$uz+6Cq+K4=!o+2(T<*lf-YY#iohh zPl4saZ@OTwS-+D6dl%S5_{|k8)hIS!uzX-l^K_v(%VNtgkkjZ4WP29;mP^P=_$46U zH4^fC2^mXgNyt8gWWPGWK5en{B;J=0asmA61^c>{s(M2dxt-~b>(p8erO~AT=eM+!P1WTmr z1iMkNB)VR(2Lu~IpA&2!umrTw=Ou+#B)t^cB^bqUeWuV&f~5eP1?+azVj6|OB{|+* z;y25Nyj!q}n3E79g}y8))Jn)q`kr7t7W=;TiI^K>Zl+8+Ao0Ei>|S8c3idr(H58Bi*32sX)LM+BQ|u|G;)I>44kfXaK~_etybH^IJO zF~@Lkz1LzXf<0!j48gu{vC)DBV{eQ}2hH(Yp5ir->ju{7FZ z%LFT=5(#;>gglW-C1i{E&1MW#HjCd}st|0OU<(*SKChIJW!CRH@jHW7O32-Utziry zACQps7TYV>I$9-u2LxMBXCt*VdQPw|+9KFXf^8v;65y`@%SLa!MB=>=0XkVMxO5K44_mOGh9{cFIMnI8f(^nUy@R8=sz0&sES zA;98c+&o{LJ|>29&hSe4{xo15ogK??XF8{HM|!>& z{*UR?5%RAB|1QwUnC|%|Wz2$amcX$B3jn!Xpg{97<^XPvMR?j4%kHHa$fvEn>Wos! z3Bz;byFuUvfo%f21%6E6Hi0_?eoEly1l}a@PJv$*_=vzK0K;irfm9A;Fnm_v&jH=q zdxb;NYZ+W)7pHTpy$xSO$7Nn)!x&nCZ$oDYTqUqB^FFw&&D@3d>dkxroarN3D=3|| z3jCtLM+80(=%$sCeG=r7|qU@f4bkB;05 zs3lq}F6WPY0A=hM$+`W+$dAK!$H;AfSC8b>uNV0FkvrgW^T;a!ZxffhM{-Zr`uWO8 zuBGpcycWLuCFC;_=D!5KHj>BJ?*+a$l4~-46uYF1;!!Y0zK<6;Rp1E%D@R=)NT(l+ z=Gs0a@UXxm0>>Z6?y~?5Jw9em%!+N}b9uBD<*oo+0BGnVxrgEmHRRq2-m@|HReWEc zdpK?+TK{)(akL9z;^@v??hjAqz6F6(kVT}X@x?Z?v&7e9@n93VkXcJ05i=G3SLjmq~N zc@1+g#Ms`1$?++`-VkhG!u0qoV8IFOcL~jn&jF^teIv>xo?=hM*2L%f{LY7;uu^#M z8*#A@duqgI;wN~1PmS0eKN(oAq_B_fl901By_^S-o;ng z9X8%I!41H6c_C{t$L{g4IvPp)1=}9HC)hzbbVU8=YshB~1@k%e9l>t}6M;=sOlm%d zW_ws2WTNH1kYnf)!L|pV52nxL5kGYeW7n*hk|iG>OyOm+&`~VI0k~ zSVF=@z&Zrm8|0cFPge=1H8GxU_OLn%(W8n5rzBjBwabeZJ1HR%*t-^6ELhfLNiWDF zAdjvROljuP%^p@q$J3)8R!jMGz{Bcj620nSwa_iR>tS^?h0-8b5N!`$o^T^gqgjIO z2;Pve8`v6)-Ij10u-h&6kYEQb_D#Xw6Kp#jOt>2%XG~$5JLsi^uTUW^wb*YH9s$;9 zv9}VwK}B@HVu8fHSeq@KDtV!V#HVQnwF;)AVEn3f~G*%T_|cs#=2r8zWDuo9zPD}>&oW-^!W&nH7V%H_^rUf*yNb(uH4P{?I3oQ0< zVj`8$8jF25u@=}a!8m8Nw2=0ASPm_s{TfpI7SW3yRtN3bJ04a`iz&#eB;qpE(Gm&? zwmq1ZG}V;TQuV{AngOiQ!*b|M>ht2&0=w43>ZpS5QcT8QB^~hmYN?VAc~~7)(Yu0e z4^B#&XI4;Xy5vPh@d}!)m{3_kHHt}zR#3Bt)zM1YW<#Eqv>Pk!+b#Bqq!p%y4tgPL z;rFVC)zKEsX(yp!P}C~F}0%eV~(;1`mkEMOhX2Fyw}q07US_= zOD}j-YUvz$!^7%m4FzVpDb&(ODaXU=paYoUVYO6Gr5<*^X`l`dtD|*vnTK_nW_n04 z9SFpCf(MGv~?Fc3&@1{07q!{HS_n9_&*ZPf3zR0vw+KG}+DoFk$ zumZ(`CnSH$bkG9D&t?G#LBwJv(mVmv!_QNb*?CU%=HDiusa zcGDV*ama4E#0z=1>887UAve>DzL1-#KoqvzlXsiVR4SO#+(I{7jA?G6{etnx*<-fQ ztAg>Ee#G=rkX5ZR9%|`hlAE%mTEx{%IOEO>r$Ep4Z(EXFg?Mf8Hj zE=>NWxrkPuA}Iu~LOWa}nqxP;i)gR<~ zr@A2znom)MVA~Nd2b!Qu1iOJw81aI+j`n)k%jS9t%;k6-^02vqmI|gN+DXlV?FgPe zA`!Z`OB91vAQ#vki!B|IOE=OXi`9-;2YnLFlf2OS5l74ys8F%sCqZQwEw$KZ1?#rh zJ%U|pv9FI{J=A{1=&2F^ZFbQSi~SJT7b$1Hc`NM_Ovll!v_~*)+goX`VA{5~(W^e} zc6!&t>gWziTfixB$R+e8D)6v_=5AWxVWXUTX|-a(b5gSCe(Lc2YJpwiVRf{Jc6rzm z`U*YdVF%4abil(#Igik*iV64rI?XO2{B{I4r6khV={$>FAlMs;9WrniLl zQ;vrnG~c5cg6)$z=Lb~d`PE`qrrE>l=!dk;!|u5E3wqSUmOxW^(8CUzSLijx zq?Ue7R3@ndn_+%Uk1HlM{~8_iusS+SuX)%K`Yl0Fz>j;@LGwGxQB2Brgl1Wc%XfsX z@N})dG9e!|LcQI_P0b=pA~^!w#B15=0SBFZj8X-SlV5RZQ~vXPV(*b@Ufn z>S0TuUp>#m4x0CAt71Wxtc=-fF_x^1XH)LH zV&B7937D-Gdp_m&z#g&~%XIL?cK5=jAmODNvtc-TRcU}kt2)>Wp| z!|G^+S>s_?NttdBJ806)Rf+{!_RcbaGqnsXduN$Gi=CD<*~v0H6_cE0nR`8~jBgg-A%bBtwK{^IV;x`Dh8S-Ik~3U`i)Lq;EXd@DMopzOPulM zUW-jjt#m>rcbQP3lYvbzS1AT6>zq8ZM==?H6U_mOEyUi_MDv=(Dg_HvYF_FDn`N<< z)GUNtW3kPt7XjNUn6BUR&9&->^saF7&5Itkgr=B4mC%IWr=4l0MzJ8J-Qr9)*IKM8 zZ8uFfdlaM1XbM%s6r zS!S=ro=*FobFwKsOZ|S7mPm8V(vK+iMp`YfH6Hd8=Tvi*hrQ^`GxvJf5<1Q7x7b^t zvcPOx%~Wonzoh-rSzsO)YzGC?v6?V9pUr;P<%~-IjkD0~6^zIG5nzE@_S-=l)01PC znrkh#H9a$?+@zf&eh7(GftjHg-ILDP8jC%gz8ly>7W*dBJJTGr*#7jXF%{+wi~Shb zG80^*>AixGm1e8OIK3)!yJARhe#{EnyO{Iavjgw`we^UOcRY%*6_>nCqq^w+E`zrhOW znbo2pOM!KpR*Rj3cs=H_4eGaEu(XYeZOeKurpGLAQ|y|on7|ejYFF%zti(XCdCp?r z%1RGhV2*53zwd!cpXumyvC)A(^Pa_iku@Rk3A3w9{eGKO5V+8^b}RNSuYO?m=UK4S{DDt0jY{J{05Te09TvUk&G%~jU#t?VP_ zv*tMu+Z4C~>UN1IJ@RvAqGG{@Q9A>lGfORY{-~RPtr2WHb&k3tu+vDV1m8_XU$S#JR(~ zXt7&za_CED8!Uj>?@qz?TI`;j{edr;1sAH{Jvq+?{=+BiKIat@oN%#ptctRO%_nEyOwt?<9flD+mqfODow2zv!OC<&Rf?$mnyI-(}1lu0` zhG6enzx{$Oy^P~A$7Cw6TI~7J?*$$;v#wCTcY%G)Tzi#bamQuR*Ue>DE0!VH&QB>e z`M4bT?Y~yBdE!@donocOnb@zJ)=x9GgIE%H+`KB-cB(|kZ<^-MYRI#Xi;w-LIdlVK z`-1D>_k?**F=AQc3A5mH>bLc{l-MUst75d{xJ39R?-W0}PO$4Oc9UQS6_fes3Gn2c9%LE%vM9GGo7O4p{6@@Y`!qC-%GMkor+xCe~^uxQnUmpnYSO(D%$zi~V3s zEgdjdS?u{S^|3!N_gd^12zk)#w^&~49|O;t*DUt>n054=34T#&{&7q${n#wE*!yFe zV}D{E6-*_^=S{~=9CAA)=C;K?Z=SPQMs9cPPtEMzLPfan&&+DYg0JM>;{42XSnRFb zzr_8_T&5VkpIZxyg}W>kH?|fQ3ws5-n9|4oJ?=&Gj`hnOyAJjX6K|FjXwukRddYMv z7Cd2WBK^W#E7--s#be{*e_G9tvaeZ<$xa7`<%*Ut%h(^*b;A9aA9KXXw>&=g0rI znP;)X`*A(-@0yz}_NQ@u@qaas3w8rN8Gljy-^@V|yDa{F^P0u}KJKD; za^CZ>%i@ibb(f}|IR2XW7^lL+ZitU{`UJayen0M}_@J}X!|sevbY8R}v&Y{bKf=kq zo2hWfN8(eR*&g;}e7bY3#U_k@BtFZz*TbHSAL+a%*mZQu_yh5yor3?+yu3Q@r}1N* zMvGOB|7Cp0xy$o=Eq;RYs>N!@za2l(skleuwIXD`^MZ%H9Y4vLaj)jAd;DMGCp#4$ z78ji6ylb(KjXytrhLd)mhWyz0%-~FCsbJU9r^b&7p6FD3S^aJpKQVZ+bG=~N3uZfa zc~~vYb{_YzqTn3okcZ6*p6UeeXDUz04(dE7WHH`Bo#)I_O!ivmIZFlGLA={J-)XiO z?_th&ZnhZjeV*<-VKLtOT;ROsg~UqAnZ1Y8+fMh7|6^dG^Qd5|*(-GpS-;1|r%3FYn zW(meEy*^m!)YyG8(iT`e3WT&iM9o+odtsN2>)bI zZK;Dnf*ru)d2C1iBp};8F;sVkPK1kw{F8*_Z$qiahv8)TJ{i!Vh4S5>&hn$U_Yc|M zMbqu?{*Sq|N=_Cha{fCd&lifz-9Gm)Wv!FQ+W1e2r8TCpIJ`rD5DL-XkrcEn3g7j@ zM}`Tf?xqU^RnT_;kKRU_?%?e>c$j~zo}Wn~ih)%f!M5W#FNbceG*>7W=*{#CL_bw0Y2> zPTx281VilWP>;A@;e(p16Q^)0rvL_ME?_L31{g=>fQD)WYRI$Y`&@zbKDf4D7%q#U zbw>&Br^ergxGaV=Z+#v$S3>x#xNyxlA~VELJ-%Vd2lrUo1sEsw98X6JdH+#DYU&D= z{=<^i(*n8vVf86c!*Ja?^q%<6oErYtIzL5RxDK`6v;{HC3k8ik7h%-JA^m2`4srj9 zA#LCOF8fqD@`u7vDDP%XpsB!Kq0kveM4yKx0Y8+ z;m@t+LFsF*G|Y<Im|Wmuzuw7r5Dj4rzZ=7oE{Q zCcX+ahv7VHOKHu!^}h?@W9SZvrQ!YG;kf=-Zd|`F_h%!$+R%4}+5sPAUx)r8X`K)X zhgA2>Le7J_FTl5vkdAfv8eH6O^<@`B3f1NQqA<;uet_mkexltC zEjo&OrMPQfQdkQYhw1=hXdPg{a=C%sV{Pqq3Y{;F=eYXK)Ev4>=qR5IOlOxwKx1QZ zcvoT!e;e|ziTbaYc-`dCNTH*#SV}asL|l}YZjtXkf!6^#v=cB!Z2JOqpSWvCw(m2f z^X%9e9P(l5&n{d7E8hgewk7ETM+06&6Xbh}e9x5cIRZ-rmJ3`V@N9wg0$T)b0{m1E zCytNP*fD@{npcP+mEEAQNd1bQ{EG2wEqf)&RB zOmMi~CP+>uP|l>*lwN3hHvx`L-Ok^sJ5nYP@1R~zGbde{ayiYPl!fzCD<^TyZ<>@y zEwq31Zkj1{>gg7^)YH9ybDVEY`eI@|CLV`tGFj;!6-dJN0bmFOx#4_4uBY zy2;6(JQJ{R@?Po{YMY$dljp!?;pB^GyR&Zc>G=Nm})LwD# zl^UKR)Ow}%w!{6TwC$+dxqzcnO8}X|cDiE9sRnr3CzKc&t81G}mV?s>bw9jVDA>J>ULp(0- zrj}{wbuqkWk`TkSItAh9qI92`win-ZsaK{)uTDEJK7pQ?wj%JF@eY6|Nz4^y*zZ!WwD zE>{(zC(wOx+2lMa@R`Ea%uUWKh3BSnE!~uUxf3kv%RC!trj)QDn4Rv1jM+D`C4&aR&UJ9#RXX{F;`|51G4+mX43R5gnWKXRaOa| zFnxdWcC&IiMj5dM!`GbirvD!9te=}BEt25ym_1u|0Jqa+)90qWX}&%^Gy6&U{`5m} zCCJJ8;EgCnLH2ffYkCfB+25UBoLxc*Gm5kSOcQ4?hv7C2(rW5)g0P&v0PsAz(21c& z`Xs&&iu-fo{sP>C^de3Q2VsB4;olMWcg6iZaSs@F4;rSEY&d+H;qZmxK11ARiTiAE zpJ&S9yTDWemYQn7rDio?g*g{+xoH5bG3xMsn2pa_5FY; zbilbFHiZs46XQ_E7^ayV!!*-kE_8}%1D%;&Ol#>d;5l@1QZekW(;;q5qfKzB7MDyq z8{cE(J4wRNmG4D3e^(6q{*#k#j(L!_Bs>B5Si;jW)8O(nzUL(!0!&CeEG`sykX9rn z1lTtu-?zm+NWU7fD1MsLkn#$2{|zY@Coo);1Zr7NCvnKb0xwT~knT*O;~u1p5l;Yi zj<{sjcLEnUPb}mxhXm3hp{%f!zZVF6Lg1^5IlQ55&;i%c$qDt&yoB{;LBa~ENcdgc z%7oPkoe8%k-ktbx;$w+VB<@T6e&UZ3f13DG;vxD~;vW*J5S z+=xRXic(HYS(36WWpm0kDPK&vCFT7ToWR4G*|n*CsoPR7P5pf89jOne?n`|sb(eEr z%%4+F3Ix*9(x%6ZN}ClkF74xi@<4vf;43%>HpyzNWV7lO!^Dy+X64A?+Cn}UK032`rGMcfxo7kjOzn&86z?> zGIBC11EGxkjG~MM8RZ!(GS*}?WHe`N%D6D&l8nnTc4gd^abLz)G9J%(D&xl)FJ}BQ z<4DGTXT)SCWsb}|95*#{X6DJ6^D|$KTa!Vq%S)Exw%6cK|<*c`}{+<=cPRKqk z`=so-*$cAEvK`2S0i0`##YyTooH>lgx%eQ?k0szNSTfFTr9k3H!`Y}ToO;T}S*MXS zl}1q^{Y9a1XDMhR@jGg6(u>vuwaYCsE z=aN>@iMZF{B%C8T8C+{N&UefKzdjY?ZZ3G%d`K!wFcO#IHkoqT2xHK8oRjGQmFwti z?BJb4H>1}+5|2d>eItG*;FIyE06r})2L=90;G6Mt;r{3N5-n?_-c^T%1-zs;DiJYsp0DqK7;S|2^_Lppynqt@gQ7s6Mq7jpZGJt69mo{ zs5#G1d>igRP0TSwFDH%z{7vFSz;`5;lf*Q~CY=ly&BLsuh2HnINlf{(NoT?3n@RP6 z-<9y1H-F8{Pv($IlCMXY%H$gX)mQ68>uM<9nupIPe+Lw96Pj8BTHZs+To(OKOW~Yn z3mh+SroeeAT!)KNG902a1!~P}9yC|YDO|UgN%*S;`ddLur|{+!E|=ET;gn*~v@Sy7 zZz-G~tyO=`Uz@}svr;*()?rTaD!6DW7pHR0uN1gb;7zHVpKw$Bd07N*crNnF1#YJV9W|nB(EQOuo+&c+QvtxHQUlU3L+^ zwe~iN%f|#>Ch(duoQkHna}1|-leph0?wW_=vQGeo=IoOJw`6l3=8l?+Z_Qgy@&bJ4 zB$o+11Mp#q`%Nih+i}a`qUCBI$K}0X++ytdT{MpAe0toO_`Ye}3PArj(pLNPcn(7$ zhT57szO-LyE60Zx263`B)DUF86NB}q1J2{%3!DD5l%Q^$iXSe$$-V+Uk-TIG{6(! zX26At@I4D$$pH_W2{;>W4!F@tfTzOEfxI;ba3MI8gToN>0ZYN(9PqUgz!h+FaH_5h za5cD=0}fRV$mjeVa4NoKVvWF$;sl>V=L&2>JcrH)KXky~Rspty7ebqW*bXF)a{#v@ ztOJ8ZzVYS)a7Tj^R`vM46kO7QT~8C>Cuu$4<=~eNT?vlq(AA*l&^4gv(6v|}IrM4J zbLcbF1Nd2-=W@V7djWTXo`ds29|ybzXR-|44Cvr|&33@saH7hgJCT}$(=nd}ya(wx z^i`ze;GUqX0Ut*?4o;z52l!2-;Lx{_f`c<8p99NWr0BVXa|sdg2~@zb^1EbRS&)3W(lf?gxxB55OfJ5Picu2$*Od223)K z04AHS0gf<_0gg1^032n$1(;)=1RQI=131n+1sK9zA`a!7rvWFK?*mRYKL9K+{|Wk2 z%`^C(B5=C-5x!@b9|L~GJP%lFehS!Y_|BUP03G_6`7glj<`;mM8ovEz2cScj;Y5jn z%`3wz&9C5cg}|%KZ{Tt@phKTBhw*)l!0XI!;c~6OPn+Mt{WE}QHS-62-vH>)=ggb< z-YM|&=54s#DDYPE-}t`G{0Z=O^Jl<2%wGZTG=Bs9lKDH}UB(!P?lv)i|6yVQ?=dj1 zf!$#O;C&_u@XKZd;Qb~Qa1TyR80a$6@%7A< z_|6pYpsDzq1)j13(#uNxRpYM)f2;7f2IIUAvXA`cEo*P=X>B@<+#C3c8(UjxBi^RM zwcrg@-P_gOw2`VB_?kYd!6Ot+of@>bY-@K@8()^#Rg8=Ks08n2^0SF>DBHTWNggz( z65NK~g15?=mhnqIZR^86i*VCA-Z``sK_JpWaubyVCu74e?CI`qZ?i~6eFH8yY>XtZ zsJUtFhK220ZJ4ugsXpE{Ywxu9BHSpAhY0&Q_jGl)Z;W;=#gl7GI$IiT+{*fmC<-Sh zSH)Y`mF-)|b6W;F3!C5+E^tLlS9fF<%UfHU*4MX|x8XVMaJb6$YPp~{q8>}}T4-te zmNq70(<|SI3vK(?gY~VzO|Frih#9Vq<@~awoALU_miCCSD{)jwn{6}$*S5~d&6!E@wNl; zz~XKbcD5v34~v%Jr9A{jH?ME4!JX7py?$dWmEle7?q0G@UfQ&_l^B4*2v@>g&B7Y+ zFSu<}D=q14@9B`}RcqJwbmCo!wN2_6=9uE`@z3Razb}V^OKH$!QsG9GKwv4=ZHFAqTt_3i1&b<9x&R0f<8^m_T(v~hx!q-z5n{#qD?#H|zrTUClQhgNL~D!@~MT&R$Pf*l8s$FSI(ksE{kzk&K(!Mw0$jV4jEqEj4|P1_~=G^ zqW;2(;yLp=WV*bO_zOc@{)>zu4mnS3Z zLNgj)$d9+7fjANuhicmOGFvKMi%AS=bFMf?Zu&MA{U<5~KXsR~P+jZJVN~xGv%Je~ zbnezooiZ%J@_L#ub~fU%N}q#PL0Oyh5vuNK*x1rdRWkM0w=QqTj8ngM1C@7qpWcTr z6)vMoVo4L;UO{&)!P6_f8{2!jP)gU2!&&Zya--LQG`lg&ps@H#fSCRL@t{$he zttog@BjLVu^~1M6jO)*FtC{)Ocx9cP?VZc;j3jp}_FO5C!(gcRJ=_=(jsu2d63WeN z0uUY+Vf=J!89Q4x;>!6&c+9g)9Kv5NHFa6k+}=^OZkVul*um-Tr6zg_9nLQwcVnDji zVW;N$E?16Hxr^Z96QaV7t^{RWq~tOKa;Nj!!uBMOg5+7FN+9i{Hk5U50U7iMw2GD8 z6tP3qidbL&C_Rcm&uIs$-XLfdXhNL*uj-pCJxYfua%Vn)yk+NusGAV1x zT}o?lNs7A^B}>X=xHBXN+&Av*l3Ytdc2c{53$#IMxPTF~Rf-yL+7wVeq$wP`up1a~ z0{er36ct*#a6bfbTeT?=p|R`O?(hFR_sqRByQJ)I4R08o`9iIail%znNmrf9x^_~di zMMP!h#Kea3Pc3o?gQT%~WHS+&UPoYu=W4C=p%WT!O)aioH1<2j*%z&fC7y5K21v zxJIKq-ew0L)4;OH2}#`$q+BbJN|v*et1~*wq54q&TBvFXlQkj``C{j_!l~wB{lvP7 z7Z0W!<9zL=#jA=~X(uAh7FkUfyMlAUO89C3?S)-jquLIq5#@T#0w{{7Ui9AiTS5xW}K(&_UZ#3$vql%uHKD1UB zLiJ|j?9Ij5s|^&8Mor4^Vk1;_Wf~A1)!HRWVB#a&5w)$=IZhQp=3l%D8{oj{gi2I^ z98LKLjCPsS6=p?PJHLbmK69L6u1>{|ZjNNEBx7NC9d_F)Y z9-zXR^@U4I^MMfcEg}-79oFj^yJDt6HQmO@8IA)(jMc+gz^SuE#ml0d+)?1d#~Uk4 zXIG{<$uq#KlF<0dN^RZjjp>F&ek)8jZ=p2NsCQ~&^3?c+)3d?P)bQKXCE11G^z7N^C(pz?5f`RUOrB3}dQ8&&PQ=;S@!6@fXQ=(c^yGOD+Zi1po(2?> z<79%F4KkOErdkk8VoCuROXJ>&gJWJ@jaHS-6yxexTLSL0jn%~V(o;1N3$0KEl|i>A zR#7z#wJwFKTX+~83-e;HreB3>qS>V}uv5rDtR=x)3no%Wlb=L0`!S>v)0|zs#v-M{ znrA#)b~w`i)Mt#Q3VUIFotv9;kuIK>Q7$xE|$zZK;VHglg(hVTe8&yRovb@=z zCW1npWcXL8V8Jt~>IAbj3OyQvRqJSYF_Xxpv6vXp)wzWK0YfGyQV^VN|#;Wn`l$B$@BxGAP-V8g55t?R{JFBDu zD)TFkr;%xtn&kL6Sd^2y3$|)4dQCwk!a7se0&`{$fRJ?D-Kr3+OtSR(lZ}b?$vq2D(6ONwUZ$moA5D z9d|^vWe$kyqL9W&tGev@L?~jLmIZ6B%0cq5yQ&X(Q5tf!#@{lMrFscBjY%lgV-oJ- zia2(t&M#5JV&kS4SYBFQrKDA)!*6_KRh^9&swM(XFI_p+L`kU5BduI0R5^$SDOzpH z7n=yWYHPhUk3CymUc1!PFxD;!52_rkV{@AdtLKn6^XQPs%8tHG)7nM;Es-Er`<%wzlHo69(Og&MaD;>UP zNuQN2H;MsDiJga;26nzrjxs$bNGpQ{6ceFtv7Lu(ip_`0#8iu5qJmITuCbdaFs-W+ zeFn7-VX2nWOLH}2t)2vanBKv$Ulsv#zudfKLD+jr!!BG^fptI0oseYIYL%R_0zGv| zIe9QbR(K19FgR_-iD_tdb}1!8e?HY*X=P~BBhSdA*&%n2%l2)mWhR5PJ<-pc&h1M0 zo>A6n%^59>L2oVu*njIIJA%1mPbeA-O7HTC-QS-9K3S0|I z*uS77T~)nw9;cY}$wNA<$+DRJ0hsOKEUM*-9&iXE=)|a9t4x%$qzP5gfs@ZMSFQOp zLJV}$J28n+2_nWgyiGLLO-(&yW8ScYV{|COFh8QQ>z$G5q`2A{iSRVR(GGq(ZbrQ9 z!O3LKZ*<(SE(M}6VEv9&l6gs+~iK+9GCue8EDekAvzEr(1GkLx`{wxX}no;&?wz<$iz%4@P^7HC3B-+n~mH8Mn zPpkuV>jWY&DnD+Xf(?M4)Br?+(j;%0t62H3GVokRQvH2iCc6Vtq-OonGndT5~X@-D7bwqxccO;~+~ z@AI`~4vn5kAu+K;|D8?ENR?JTyRhJpXDNe)% z|Ls6hbHZn81|n1u+c6=TJjixe1<}PWaG*^H&Jnuq$N~1=j}*9SQTb7YG8AE{L=dP(7mb?Q_6~#Hoz|CNpd1gVS7lx``9Au5DN!B*jTDUA%0J&;) zQ!&7T8isvPYdBSFs^7Q?$5$GY*Vj;RSe!V6?@0IPK)1WC^pOn{r{y_gktr#}@)NDd z26e}`Y4VY-@Z3ReIw0JNC*g@D%Bj2SC67&4Zj$sQEsbAYTE%rQUE1Kc z98nyt$CphmcP#*^DHx|Gb!wqUE)~RAt+EcOoNC^Zz(V@nSZdZS%@}23FK8@DFi}Po z<4nqH(sLpJlju(Sm)3px15trA1ksaxC)NQ9B1B398a=+G`lQZUA78P`5LLPulrSvtK3PjNBv`mKzy5qYbR z89Z2exp`&H*LgR$m05b)oH*ND%|a)E@IKiNd6RGB!x|Q%@?n7+`RIkE5MYEbu<@39V<;cSprIwtz6w= zPoA81QToe1z_vsYyIN~?uMhxKIYLQunWkrk3d_ZsbN-dgp!oRMru`x5_waCD~aL@O8CXqDbR@3H;2GpMi{4 z!&U8tsN2n?HQ*4#kdB!!3EewL(bJDkJgg&=%i5a4k&M=)v2=9U&O=92fa$?}#AyQB zd2G}C7Vhv>QnJiv7Jq_NSqxuUgLn8mnEb!6>Y_^w5C@CuHfXzpvK7$SwI1VZX3^#7 z1ko8#z;ebrYaQwI+MbX!Ox&u>dL<;13%}%zhU^nOdQEf@+bR$|*hnf1ZalByT6PnA zcIoueP0*2v&>o6#DX|>oYF;+LBr;sO1o_n7%$!a(x1g!dwzgpx*b+y@Ht?gkS}u}+ z<0ksJg0`|`TzGB{oX1h?$6Z@((PiWLlNOW0n=~r3UL_Ql*4%(jO<}ZmTp?GblfrjU zb2@s{$r^pnwv{HetitSbkDk}jq6CBZAQy<9#}lu+p5Yr)i|CcuJ8%x0A!w7{7~6YR z4$EZFgkwd?FjL-vtJ2K6#f4S#uFG~!hzDPJLx!N7<`y`+GSR#ODY5Af4i>JMYe+#WE0oq4f>l%Yir8j!)+)DEXAe=(t*?ODpADX~%)SPcU z?S_kuYTv$=o$`F>)`t%rI&}E)L!*bozI}L@P<66#QEaoQ$<(nGXki(wSP|(oL5OhP z6P|0#vstP0XnV!Xg#&K6Qw%4Z^JI1ih6ew03!$01`5UR5e_oq$>T>z4FR*F4KF4n9 zo~|AF5Z$d|$#gToM4>@vT|<{m98Q|gWEqnNamcU*8{Q|;6->L=%0#%FsIwiwWjF1h z=FY4wFPq+(PIxlWok0t($(X?tJxS?LVo=zm6`Rm)G4|C^TV1W=>9M(=(_)T%j~rUk z?C1tQ$%!4xs*ab_Brt}Qk%V+w(gcG`S`kP}Vq{#jZvOC{knX`E+DJb&Pk>58=l z>s!jm+^H)4pyLQ~0k^h#_Ok76%s@fdc>z3L3HT6=$E7%&@S>zW_`R5T^5oiu){c#k zGmqp;^4QHdy@lX`=89Sre@?hM4AWHg+RFMQ0(Bj}yg6F5%W#%;+fLR4mb4dZxY>`j~e((oH##qcv)ISnO{utSu-W)vY-f6Ol{K zFU{_x!WH

}YQ+<#w6pgn2QV#6C?h3^waJQ3gI5Pqcj#mXW5m#%7iqbGRGe0remN z+jOKEY+^J#Q!epo++13@mU4DWK7)M-qej76#T2$>P#!VAeMwXuh^*Q2XRKTarr9N| zL~YaROq6sNiF?a!%lxi4fPHW|+pExs8|^YCc+0G3G>>R9gNI2U8n+mx3?KR@D|rcS z-V)o72^kyNv&iVJ8DIF=QgboXGuEzDO;A$GZfLf~TXP5s(Mqg~;heoJlbwKTkC)&e zX8+DE#kK5bIgwppHz|O{Y{rfOS@6;}Q+6UQt|kc`v)^g4lW!vN26%Ls@;l=DMpG(= zFG|FIX-HAsM=&vb-=a6O<_ZMpl$ez*b_3L|7`=)965CT9Q=B^~^p!|n zX0_}JE8w|~lmM-ej;p+ExlT-zG8IH3R8BmTLX7HZ@%mJS-%~uTaBuK}QjM35mMPcZ z_09?{s6>U=qSCTsJgNRkUPW3X|2(fle89>sb5*Mi`tSiOKTrB4p66+4*7B_K3PpwT zHS%30M(rw8vp)XC+c_9=2PYXvwl5m{D!(g?`;tLTV>%FWyAE&{Bq||yVchaGZ2Ue3 z^=yeWXpLV%S@2aKmw6$qPWYycLFJp|)w7^np~f}FJkPs=uk&i`o5YOpYSv*we4FK= z7|gokffi-J$nawz2~M%ScuNQRQ(0q>QtgHLae zx@fR#gs`v~;tsjXl!tXOz8e24q4A-+@~t*ue#loX1TGyE{6u*wD?IbQ3x-+P^Od3<5idjgn#eb@ zneK^G2UW=gcQyWOGThB2L;#v<&o3lUIW@azC4DkiY{Jw@)#qJ|Oi%1a!t*A*saw7& z%hR&qi|7Pqu^dOaJN0QSoVS|91TPv$gmT^+jdTU{5wO*(E2KE8iY+eN2-NpT!eivX zKuc=Wd#VRBBNei#N1I2gUSfzF!i&gO8B=cK^Ros*4KZSY_^^0^IwX(?uNMfVv~+{2 zL^*26=_REuby~bilrOrglS9+#Gao5NxZt%55V6y-E#;1MsEN#7IK#7JpvT7&qRLp4 z_fut4Jl6DRuoZHpqw)z2I~Ezo0`VdLR0yw}CnR1jR1nUpCiOldL|Usj49*x*t{9|x z!5yd3=>ss2ij)3zUf5G#H4Q??(GEmM;H;ur!4A%Pv}&-QCwved`wG2Uvi2gcaK3V! z+~SX_Q!#Mk;rOf`X$~Ao9cE!bZG?Mb?IXNGSm$+SxWsF{V;8Dx)&&FgS1@#4z{BFx z3OT=ZzMH~F{7JJa?!f4G$J#0&YuNuB1Q7Ujey#RSwtmma!aAx>qSJj6g; zLTG-}mlLF_bgI(Dlxb2#7_qKtnCv_yn&CA6Vu0ZuZ#&y^*!XqPX}4bDf=OL=G7zP@ z_Etg0i)(gkU@pp3N7Td}?9%G9TyV3_FL9)XqQj(obtD@M>@FphbDpa0pl}h z6iJzTHtRrPG)lXaYiV+%e@9y;N*ro@pu5F5E_AlxleFT>K;)3ACYrk^^8IHRw?0h+ zcR#ziH)_f4r`Va$q2}yeKbSXb$TtyIzNQ)8rKf>oLj?r7?xW@dAA=f@?DoAcej13#VC+c6b zO4JFb27yftiyq=Y510_#+?WO>WRwmjYKUc0qe3*b+0^nWPxYq=m=wgC=5CX%*MRW8 z<@N~NQiHB>1$YCB5BfA}{ucl1A#8l+qzy+<6pm`ZX(6{gMK6+u-VrsmXpAzOPashZ zYEE?F9f-q@^dKuu+KOxW0`D?mfyOCZGL_El5M_UYd|{|p=Ls9X zG}0-m6asbgs0BlF@gg_c)wI}4R!P{bW_^S%Murk)iM~+sFu$+SU2*?x+r0zIUC;J7 z#faW=-F;TioFk_rQ7dj%r&uU3$uyI>6bX&qEXSzO?2uU}8 zLNhxaC({%H-7pn8rM(t$X`;em7Tvao9sWklai;iE6R z&-2BlPTrR%7?I{iSfjboObK2ZwW}RbAIxI1s5A;s^`vF2SkRPVr+RXHiuqi&rRS%u zOggU;1d=P78>wopnhB4*2f`lVqUy}HjX717${`2T);VJDG<#l`T6GcOV@eHq*VVHE zMdljs^8l?WhuBd1#G7jH>o8zS!Y*C) z7pOu*8sQ7{WXi@$%$_O3rqje&j%T-OHMKypbCu<{s1>2$9y9 zQn9X?u2SKNt>AG0#{E7>aX@1eng~MP0~bF%^%q`)`C~y&shw^?c z^4xnX?gQ)=q0vrs#1*3!(z~#D|5j3x%#wO5h-E3NAF9``8SLp5mBwjkeEU9F> zV1%;e;9Ka6E~Vsb-nth*ZB}XX4f*!do^i6c`G9Cg`l%P=`XyYZ(8RRAvBtqt!5*&RJ1e~jdr^W>Uv72aJ!;MLcRs+SI+*kVsopjd705*qfG4)ySyDK5942eF;}Cjo9+m z5QzQF@c{)nq*BlAoyxh{D0mzLhF*t_D~~pKa_fF&O;6RW<@7A>bV1j2Jl8j(6JQ32 zU1B`$qIr##)2$evW-y(v-WGi3vu4U|^p{aNOGLo#yo<1yqISVCT{xGZ3U2z!TQrJ@3Z~ZtEI2xed~G{t|9Gzar*NeJ<&~wgK+zuCd2%>^J;KK)nsn__A z%8OvG&-{uDh|09zrf#qgyR$JN&)l7?AzkFamDP~Wfdrv;80dEt8jwU;AS8#Q@Xwt? zq7U3vL#Ij4mhM(&e1yGuw9g`4{&gJnwLkB>W<&eeT!qC|IUsBe502AP-1{_&J>>3b z?e7yjavQ%Zo$?b5M{7Sdko9o{(jkhDP)tUzG(n-7Z&?!}PJ@W@$5c2GLU|Q;ksM+G z0;&Xnd|DO0%svL`D1C-ABs?@mnx<7o^=ZuH3h}CC3=QK6?nf;D*142ZUub@eU-YsU zoO!E79vp$37+m~mW<=O7BBaf`@&uFI_>J>cAl+N)97a{S0V8?jj(Vqxtri#~ z2h)JEYu3@E@~#Ti)FC$rgq3dA^p;AE8y|%8g>awbL+^58r2VMcN3)3dJpU-sqIBs0 z=vMMs>%g(^={mhAHs!rx$a7?39*~*P+ZUS_OA%TL$Z;H&!a981Ju0dBx;PwHzJb2O z_tX*^_<&+}t9DoYU&kq$J|*TrCY{{us}f(IN8XV;Pc3<3ccrC5L1D#74{$OL_h?1h zXF&618u7hCu1&G~#Y@E#U3#SaRY)q_5K@I9pW%zN&~gODKbO@>WE2Rs zC(NLGP6e%0|Jw;`iFKxuICs34iwnUuK9QquDsh5w1}2%N#j{24+s)0bx_<1?i4sl( zH zPWi+s`+(BLV9)U{Dmr29vfua0?NYLP2wZD-8JOKi@CdN>T?S$h*$s=?T(81zb2snQ z&Z{gk#+tTn%X2(JzBK3U+w@%4ZbMpwMlS4(`#w^QeJifuLMv+0VxBIOqY=Cc9cb3H z8`tMHw>#VGFx1<#z=Env_0WEB)`YPTtQ)DLByu_AhL8$LNs*Lr=^&(1OsvpJXO`-f zOM?{aklO4Dr;GGd{dNz{MRHzBw)pd{g;G z?F5#%jqmNP!4yE-@}ErQJ+W?Aqb>ajjm<@Yw;iRrU~v1H%su4He=H&4E&Mtg?Hi~9 z@wdWMNK^Ah;-+Tju)V@Ma@5!@-$mvVAcZ7VSF}8*w*+~66c9@?$M$r`$?^-FO%Z?7 zF324s;q5}%oeJIh!e68du|3^G+tv|!t4qg{j@{8+ijbgmI|U^oNQ$s&$3;e2^cL4o zy)QzbRDse~Z*5NLM*c{G%DYwBZikn@SK#C+8Q|*%B2>vmk%EuuoRN-ZPGq5LROO-^ zKvE7LvoZVo8BfCtwHHr*9$QnouRFC9zgsTBh}PkQdJ;~#8mD(fqSVu_x9C>1cSd$S zLp~?x@S!`G(`?CW6E|U6`S)o{#IN-r%lqh^>(9P*V)@7KoL_86+R2jDu2E_(h0wl9 zjLis~t$Zg)r1^atk6PWbo_keK9E%vBY^`uav6@e5gp%=((wB5ok7~-Mip*X!U1*G) z8Mr^7dgAP5@!4X`OJQEa`1`v%)Az7NyZg1Ccofh*iW2xC>_vqf2-yI3xQX_Kihl0)N( z3!PHl9MLL3!tGO+OYYLrHeKxuMz#gc=G*nVKOS#>dHj~iC15I z;PLN%I$sH;fl4TEyhW&w|6G41SF)(~GfHUJ^CM&#u`DB@Pa#rttq)ZC$eSN57yAY& zlFOBgl+Kj~6>s6blBz3O3tzHIzGUIAD4*4}@fC~swk3Ys!r!GEDl$A=Dpqn_`Rk`E zPtrvB$s)CLRmC~NIl5l7!r!H%3X!{Sut={CsUOAiA<9w#2}#Ee4Tio_seH&9d&jQd zv+KK7&pUSgo?YLy_^)fAMQ?>Lpm^I--!8uW(dsV^{p+1i(ZtYxni$$|$=|T#Z}biJ z6)OF?QeR)+j>>@D%M2`6z6G2@`3>v+1~Jt5NlKUBuyUU?P%blqWgmgvN<3M=m(|!o zHFl6J5Ai=*sN|W5ac0SoM<_qlR=FJq>{c12zN z^L|POWxGpQmM5;=uZytixEHuf&v*B0Q2hgzTbF_^MO|2u3;jEF(aB%^cj>ZQmy#}f zbh%p>YWX>89rs%A7cATN+nh`apoB?1%Kwz+vQ(ZDXr@Y`Kwry;fgJNbwWsq40C`p| z8}Io9e_s=x1GIu_E-%0hm+Y1+ALofS0$}XRM+f9vK)MF1Pm?A`VT{B(?1mZ!qYNSbh718|_Np;9ko-q9?oTV|W*+?qyLz zyW(XkMg@m8+#?n|qTmG!UNBe;gEcfWQnCga$B62KIHq-ZK^JPw<#dJM;ZRJmXrWI? z(wD&CXkHm#Gh|f_`$U87iiUhdmkV4N>`2Hf@PaNc_m9BTbb&FdW<|bcJ-d4#FiCei zn8Xu@t=*!oz`L~ZgI$}F-qPU%PlY8Q|6(3f|`$*i~U(s z2Cg9`<4Wk`9KjG@O!T~Fzh?8*X9RP&d>!m6ua$U$Zq_t$rSf%~-8JFy_41lMTxZtH4a1gs zAwZ2**OfA~-VYMMU545(5z3VYLLb~{FywQ4_u7N5l9q!cl#8V3)>j|{w^D&e@hP~u z-4y}Ng6>K%akx`S7AoBZPnCq!pB3RYtopesTaq@Yh~d&Ma&s&8(YL$8KqqXC0w>h~ zvXWX%8UqYskk5!Uz#v^IIA+5>CTKn+n6!^cyoe=D8Ej0RJY+$S7$%G$5=i%!-?S<> z+Uiqzqb-iz*SGN&N2`YZ4bEAFFAhpX@O*w|{BY=pkMq0xwZHMN&c67cAN%o#fAdnc z{MVlP5-9t^wlps_z(W&`Y-+2 zFZ{|Myz!%d{Nca(t?IvDSUdL4n?Kz9%M(xh_7^L^_h$?3^Z)f9zH;%e{OW%<`}P&WnHk>aYIj>I;ATYiD14@2P)#@!>x_^o2k8(~tj)%HKWsPX`Kc z)wl8-YRNwU>lgDaDHf>cS{JI-ndeez?_Oco##b%Z-o1PK3-F1Px$rdK52@(O6k~iM zgmaWe4pumIVwLYXe5A5^wb`op2U{vPoAdLPOO1+uu%S+-%8kQgoX-%#8);4I~h??^a-tp7ojyzxh_kN!t{ z_%Fq~3gmkWGW`xvQkm}vez$<%Ed|~n@P<{mp~MXfep10t4uJCNb6-h{DjF-HB4rqz z=2_Y!^N}wWpd$qsArI19`LhoFNPTEyPY}zETH85G_`x96kjv5s#G%R?KPcW^7$~;~ z6kjwz?p1+-3=plN(emhBWPAu-Hc%d=gF?5x)m-@afz0Rj4pjI|9p87+96^EBiSBN zF+XSYpb% zIDj59PczYOZ%)6~1jhKki&I-bEsJ(xveQ+S48H_5T+&)4G(M;%Q`LIc} zg?^Ho7UW9KNf5eN0xD!0HCk#Pxxa9C2|R!`wh&y3WZV$HVL;8-@wAj+pU=YD}|ltDJb^XKYfsCQ zD3uPp$DeTo1xkgTc`P&n_H$2RR~|z@+H_(en7<73t3&N3ZUe?kSlsKlml-apc2#f} z=+=hcy$1^ju%Du}xrgLoVr=A8hWPLv-cN}5`(^!zJ-vry5r8G7q+nS~-@?8YfwcEA z&-?h3azzT{@~xukN}_2*Ap{ORS3ZHGT`}09cM9JUh3g0vmfP2984Nr;j1kI{E=P0$ ze{)#IA(%M3Fen-w-isJ3suLqt{fNvVnEo^qCD0a!UKn~o&<3lBe%aXSK9g-GJ~7`4 z`93h=5n*9pL5vv$DHnFqi4icD+dfl7i}0GfWGvD*58V59Qqrac=B^O+FdWsg3~~o({FwwEdJU2AnhA$#hMgN~|7|0~;XcG*x&5hf`_q_p8tJEW`7{trVhtfc z&HMKhpgDj!0;UR!fkF8=UK-?lsYHY2<3fp{_GhI4a3f0m^0OtwW`jrjvqeyiQbfa~ z0BOV2*w2*@+g$v87d@ZrQy)HO@cNu9eDi`}P4I%guS3(osY%(_pmiR0 zTH?AAu@K-Gzaa=3&cbSj+P}Rs^bOUx^M~F|kYCW0N6d|lcA1GMO!Krl6z$AaAfKBjo+9vgd=zZf^x;94M=Bp{E>vbX^SJ>WW*UtOC%SP4dt+=Bp~pAq&_U{aeALbc;){tDzGhvysqgbG zuC5~#^_4pNk{)Wufn4~2KBQgIC;s?|T;;Nq8hy9WDjJ_TH+E){4Qqq+j}FfM6PaE9 zv#4+-K6T%JF_SL@J_ETjG0)*^d>hb?ly5ZbczKoi$^KAzrn~U=(>4UQA+QaBZ3z5d zfIu#2)#3gSHo6-(`Gh}sbG-6B$Nx)T=?fC2@u$-NIKdb3I#;>soowx~)tgRL?q~2S zpS7%C?*Ee?%YVm;PdM}Iit;;KlkG=Urc%e_Cb*$1u-ds|-f1mnPvPa3hgv`Tf=Z>U zr`iV`*H0}&c)Nc?t3UL~cjjm(iTvE%HN9$i{LLU;A7{N87=&Ns-K89>x7k-{c`c{2 zr6t`#6t~G-wv}A%K=Q2!+NR~p=M^@XDM4?UajC~wSbtw7%jUQWZ42^`v4Y{D z$8Ej)gq8E%XV23Q?ReJQwJh~x)Tzz?Gq#;YYZu*HbbPbB)-8G}}I_zM0QUpl9*(h|Os_e#cI&#>W@3gh9dP zcEaF%*4n;8`wr)bpL%jkxD&h`hkP?eoz;HriAZP4+c{=<(4D6j8*YaS&sbS)-VzM; zYJ~5^_-V`AV7D*Z5ZH#mHUzdIunmE22y8=O8v@%9*oMGgE(G4{LzBm_=K~zuKid%4 nhQKxiwjr<$fo%wELtq;M+Ys1>z%~T7A+QaBZ3z7T34#9!YYIH| diff --git a/lib/Net/1.1/NUnitAspEx.dll b/lib/Net/1.1/NUnitAspEx.dll deleted file mode 100644 index 030f906e2ec3e5dd722016cb2dc97ea50ef875c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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 - - - NUnitAspEx - - - -

- Encapsulates a request from within a testsuite using the "asptest://" pseudo-protocol. - - - - - Encapsulates the ugly details of deriving from HttpWebRequest. - - - Since various frameworks like NUnitAsp rely on the output of WebRequest.Create() being of type HttpWebRequest - but HttpWebRequest is not customizable the easy way, this class shields further derived classes from the ugly reflection details. - - - - - Creates a new instance for the given uri. - - the to create this request for. - - - - - - - - - - - Override this method in your derived class and call to set the response object. - - - - - Create the stream to be used for uploading content. - - - - - - Encapsulates a response from an . - - - - - Encapsulates the ugly details of deriving from HttpWebResponse. - - - - - Summary description for HttpReflectionUtils. - - - - - Summary description for HttpWebClient. - - - - - An AspFixtureHost lives inside it's own AppDomain with an initialized HttpRuntime. - - - - - Summary description for IAspFixtureHost. - - - - - Creates a new Host instance within a new AppDomain based on the passed in Properties. - - - You must not call this method from within an existing Host's AppDomain. - - - - - Unload the passed Host's AppDomain. - - - - - Return null to avoid timing out of remoting references - - - - - - Initializes the newly created host instance. - - - - - Use this property to gain access to the Host from within the Host's AppDomain - - - This property is set only within the Host's AppDomain. - Outside the AppDomain it will always return null. - - - - - Use to synchronize access to this host instance - - - - - Returns a reference to the AppDomain, that created this Host instance - - - - - Returns the physical assembly reference location this AppDomain has been created from. - - - - - Summary description for AspTestClient. - - - - - Summary description for AspTestContext. - - - - - Summary description for AspTestExecutionModule. - - - - diff --git a/lib/Net/1.1/Nullables.dll b/lib/Net/1.1/Nullables.dll deleted file mode 100644 index 8b7805a7daa067c84a9f708fc4dfeb3a6831392f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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
}Z`3~eMb#Ek#Q^NZrH-w&2cvlvBL;Wan z3)(yzxdSQBEN3Vu`o++1AmM8$;ko4^bw>0_v|R4~BD7jv>z)#B(QVH0k#?kU)s1v* zp;O*h(%j&-Z% z&@o8cB;73O4oTUUE&GwOZ#VkRip>zcGej@*{c472p8@TE7266Qrkt(t(y2&k|5j-E zH)V~(kG%j zkk-ZSLV9=Xn@A&N&mm2hx$cYVAIeT}*Qk~86OeyTd@<4;@#{i=8+tVKOz6eXq0sB0 z5#iC{6T>sZ_2Kiwt>KRFhr`!|KNY?!e1G`s;U9#b3cnP7H5`o`6}dQaNu(>%7r7zw z{m73ZPez`J{4(-F=ug7+MJ1#&FX$MC(WgYPaT zA$=T?>fpFa75(l^v8NaGsJhI3_p{#veQBRyW9hV%qI z59wrmI@0-iA=1`y~A(O2(>xLw+p2ymb*HW1OENosax@Rfqfp)hp>O zD4D3fE$Q7TIa(c%^i7n6w(~iUPf6z5@0xEjmAYm$illUcy#~uZ&QAPUusqY+*O5L$ zo!i&Z(XzfH-BZ)r(V1=O0>vudW zlj%sebQV|i)Z}&O$@SRUTSCs_ww7$Mkh+%MbW{7L67B2K8`?Lubd>0l>BD%6%a``G zw-%Q!>+GE|r)2TWQ%e@lnN?i8@~o0WT8U4$gO)7woK460?&wjQdNyRT9qsGY1uY$Y zX{lUB-?wBrGk!zsX|?R^Om>mp<@Zm@6=z%VBYt59uc#hB0lbZ>si%D%3y3_`qBHD)ti2==W((>LxOGDp6y6 z9LO3o7>Hif+S)FYh5X9C^}X2^@jf*z$MD*_Iz($-`=#wYoKqXo@ZzQIt>6|zLp8xb zuklCV$FpSsB>`)@tVmyMCtWS-=}B)|-?8QN-9>6JnD&jGH7nEE_S~ZOR--pkkj4hH&XrjSP1*KMYRRT9 z1gJ-Y`J_U7a>N`U20H+h^z>%o_e@r(!!-Ab)OqVa2(D1e5ix1g01WJ}^)5>U65u_u zf|v0=+2V0PkK!Fb3Gdb!IyKCR6pV=!OlcU>+!XR}rnwpL-I6yiUT~X9sDZdNEJE8$ z+c$u6FhmTjp=E2PFEHl@pVQvi3jOe6d+T{%Gnt+xTQ;P-WPx_t+rJPu7Ed~x1}Wz1 zGwVO7w&0OwQFdeBChP=qHO37M>CTP4Z6x9iExpRzm~w4$IkT9Qx%lgRqwGaST%cO; zg?FFAG4P^uaqYnWTJU>F9VkhvUa0Sq+$PlZ04MRSc#FDJ%36Rf_50W0SDJ1w6mb?l z3eSkJ7HmnAc=$2b3{VGzvm}EpYZuD1R%HgIY?Xn!Hk4(7|Crp2w4y;PA(e)vA+-iy zNe1<+V$&krZPDCBElfp@jHu0oeIi+%J)v=W)p<@;P;g3h)n!+`bSl~pQP*Q6Lzvk>D z79eF2)5>XRIudnG6$K^mH;^2pi3Jh4Qcw)Fu`1~^67L!{wIZsvDyE!7bAmYOj2u}xLwbyag<(jnb0RJ!x{&Ci#!b|*zRsn@ zIxDeGB-SPBL}Hzl2rNx0%7v(U{F@C6bYgZWsS>j(VRoXPmwJQht-N}XSI;^Ox?aXu zKQfd;C&*~Pzj-2O9_7rVfO&}qUK$K)uyPtiP6O*8r$OujN;J@}1`#+9!Wx}OMF@6P zV2t=v*}5Xp$OerS6xnEHHHxgpM5D-R6j?yFDaTj=QBC-_P;6UBiI_l@SV%Do6HUA{ z8PsHjHi^(C*1^E0Dh_cWM67Zm5%!P3q6ln32`yR`p^R0w^D61Q3Z?A4%6c7Gn$n^O zL^V4R28xcMG?r*)U2}|Lnyr{-5!0M#7BS6M46rn%m>9&Yb0TqyiNm5eYT}7?tX~(W zsC8DXZuQmvfu4Kd(N5Psr|yoe)+v$zVMl~v%h_K=Bfq1{`hlGpL+I`HLHJe!UymE z>yNiDxMShnPk#1>`(C^H>F0N?{o&&9aV>W~a>dOD?|6LvGpRY>KJP!?hU4B(ebSGw4xsl3gW1_J{y;qM_Ec$GVdD6SVt2K2-aD`Mg=2zKn3#G0pzs_`v zNY$!RRWYe*E>#tms&%ERK8bH5icSVp z1f3JxAA;)>3qnz6q=O{pU}U%-#GDZB4wz?mBz~fp&5@Pce^3^6k@Ai(Q!8I`;n9L$ zk^dfEVaCH$R!e1)Yo^99HP(h>VQ37Gv?_3C7?O(oa|)_(siKZ5kaJ=#rPsMJ7t&o% zI_?suX?3dSngIvkz1;NOiIocJvzgR~p&~I`*7@wx9`)irgdFwG^Yr4bGh3_ae|($;hcxtK1+_NP zkH|T(3i`3J0>2ZBdzB|2ccLN9QvP9&3S+Tv{{iJMWYQ!`N%o3a>{QjkCj7yxhEgD!*NAbfxgC%`Sja6SW%CfOo8&J?YkDUnkBck_}568}OQO zq*i5qjNlJpX*Dt+GLyxt%?7QOE=uBDFNZx7j!#xip<5b@n8CGszyj z%uOd-dXg>4_1X5;jcFFvbf$Z!!6N88MXQs&{yj;&M@=qo-;mApWG?Pa)||VfDS39b zWm9@{CVNQ|e^*M;?Qnbq|LFf;Kfp;aKZlu5T2OE~`SVcd<-_Jq&bv7u*?Cn;{`?EB z6v@)yPaS}UR32)cjdzoLgUHv=7vpG=Ka-_b6KZ+T*@JqXXSJhNe%TT&_J-Q{#tk<0 zqLq2WSS*R(1Y*nY|8EvfT;KzB4@RujV#wPh=VLq(=t21+Y(6?5ZM|sb7qm&Vxfp5T zDMC^;ir!6VP0P%QZxed(Jh%rv%rR*XP}V;WW;qXGDWB&h8&T`EtijmQ=rv7VpHIhI zXr*fLEuUv6k7GL_|6E*orpKRiF%DWw9i8GMdm(a}!M1&=+Kqc!_v(3igGMOh6rFTv?z60$i*v}d!lzXWA7P>*dMex~DZ`Q`Lq zAa?RV+0)CG94QYBI4=wE_x-d)0#7f^m^uO@F1E7ssaeL9GLB^7XuQ)HQu(c2QR?(G2?NUf-fGzx~M$`u7nP_BNd|Uykmp}%8lK59A zcAsZ;F&b%s=XWAAV}sd03xBUuOH^fGQ6GHX8yGp~I{)hfYOlsRDeP0|W#eQ15irih zB3R9_Z$i|V4-87T&&>(c4F3#!VAuo09vJq(um^@cFzkV04-9)?*aPnt59~Gn&4y9) v-Yo_V+cE5cVGj&@VAuo09vJq(um^@cFzkV04-9)?*aO2J81}$B?ScOSk4Y5) diff --git a/lib/Net/1.1/Quartz.dll b/lib/Net/1.1/Quartz.dll deleted file mode 100644 index 6f20b0a6a695728d589ccf369c63599630340187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430080 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

HQdr!qK*zS!?(0+OGgs~BKT(Cuc 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 diff --git a/lib/Net/1.1/Quartz.xml b/lib/Net/1.1/Quartz.xml deleted file mode 100644 index 89ee5c15..00000000 --- a/lib/Net/1.1/Quartz.xml +++ /dev/null @@ -1,17105 +0,0 @@ - - - - Quartz - - - -

- Collection manipulation related utility methods. - - - - - Removes the specified item from list of items and returns - whether removal was success. - - The items to remove from. - The item to remove. - - - - - A hash based set. - - - - - Represents a collection ob objects that contains no duplicate elements. - - - - - Adds a new element to the Collection if it is not already present. - - The object to add to the collection. - Returns true if the object was added to the collection, otherwise false. - - - - Adds all the elements of the specified collection to the Set. - - Collection of objects to add. - true - - - - Returns the first item in the set. - - First object. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The whose elements are copied to the new list. - - is . - - - - Initializes a new instance of the class. - - The capacity. - - - - Unmodifiables the hash set. - - The collection. - - - - - Adds a new element to the ArrayList if it is not already present. - - Element to insert to the ArrayList. - Returns true if the new element was inserted, false otherwise. - - - - Adds all the elements of the specified collection that are not present to the list. - - Collection where the new elements will be added - Returns true if at least one element was added, false otherwise. - - - - Returns the first item in the set. - - First object. - - - - Returns a copy of the HashSet instance. - - Returns a shallow copy of the current HashSet. - - - - A sorted set. - - - - - Returns a portion of the list whose elements are greater than the limit object parameter. - - The start element of the portion to extract. - The portion of the collection whose elements are greater than the limit object parameter. - - - - SupportClass for the TreeSet class. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The whose elements are copied to the new list. - - is . - - - - Initializes a new instance of the class. - - The c. - - - - Unmodifiables the tree set. - - The collection. - - - - - Adds a new element to the ArrayList if it is not already present and sorts the ArrayList. - - Element to insert to the ArrayList. - TRUE if the new element was inserted, FALSE otherwise. - - - - Adds all the elements of the specified collection that are not present to the list. - - Collection where the new elements will be added - Returns true if at least one element was added to the collection. - - - - Returns the first item in the set. - - First object. - - - - Determines whether an element is in the the current TreeSetSupport collection. The IComparer defined for - the current set will be used to make comparisons between the elements already inserted in the collection and - the item specified. - - The object to be locatet in the current collection. - true if item is found in the collection; otherwise, false. - - - - Returns a portion of the list whose elements are greater than the limit object parameter. - - The start element of the portion to extract. - The portion of the collection whose elements are greater than the limit object parameter. - - - - Gets the IComparator object used to sort this set. - - - - - Responsible for creating the instances of - to be used within the instance. - - - Although this interface looks a lot like an 'object pool', implementations - do not have to support the re-use of instances. If an implementation does - not wish to pool instances, then the - method would simply create a new instance, and the - method would do nothing. - - James House - Marko Lahma (.NET) - - - - Initialize the factory, providing a handle to the - that should be made available within the and - the s within it, and a handle to the - that the shell will use in its own - operations with the . - - - - - Called by the - to obtain instances of . - - - - - Called by the - to return instances of . - - - - - JobRunShell instances are responsible for providing the 'safe' environment - for s to run in, and for performing all of the work of - executing the , catching ANY thrown exceptions, updating - the with the 's completion code, - etc. -

- A instance is created by a - on behalf of the which then runs the - shell in a thread from the configured when the - scheduler determines that a has been triggered. -

-
- - - - - James House - Marko Lahma (.NET) -
- - - This interface should be implemented by any class whose instances are intended - to be executed by a thread. - - - - - This method has to be implemented in order that starting of the thread causes the object's - run method to be called in that separately executing thread. - - - - - Create a JobRunShell instance with the given settings. - - A handle to the that produced - this . - The instance that should be made - available within the . - the that should be used by the - when making updates to the . - - - - Initializes the job execution context with given scheduler and bundle. - - The scheduler. - The bundle offired triggers. - - - - Requests the Shutdown. - - - - - This method has to be implemented in order that starting of the thread causes the object's - run method to be called in that separately executing thread. - - - - - Runs begin procedures on this instance. - - - - - Completes the execution. - - if set to true [successful execution]. - - - - Passivates this instance. - - - - - Completes the trigger retry loop. - - The trigger. - The job detail. - The inst code. - - - - - Vetoeds the job retry loop. - - The trigger. - The job detail. - The inst code. - - - - - This is the heart of Quartz, an indirect implementation of the - interface, containing methods to schedule s, - register instances, etc. - - - - - - James House - Marko Lahma (.NET) - - - - Starts this instance. - - - - - Standbies this instance. - - - - - Shutdowns this instance. - - - - - returns true if the given JobGroup - is paused - - The scheduling context. - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - - Initializes the class. - - - - - Get the global - that has the given name. - - - - - - - Create a with the given configuration - properties. - - - - - - Bind the scheduler to remoting infrastructure. - - - - - Un-bind the scheduler from remoting infrastructure. - - - - - Adds an object that should be kept as reference to prevent - it from being garbage collected. - - The obj. - - - - Removes the object from garbae collection protected list. - - The obj. - - - - - Starts the 's threads that fire s. -

- All s that have misfired will - be passed to the appropriate TriggerListener(s). -

-
-
- - - Temporarily halts the 's firing of s. -

- The scheduler is not destroyed, and can be re-started at any time. -

-
-
- - - Halts the 's firing of s, - and cleans up all resources associated with the QuartzScheduler. - Equivalent to . -

- The scheduler cannot be re-started. -

-
-
- - - Halts the 's firing of s, - and cleans up all resources associated with the QuartzScheduler. -

- The scheduler cannot be re-started. -

-
- - if the scheduler will not allow this method - to return until all currently executing jobs have completed. - -
- - - Validates the state. - - - - - Add the identified by the given - to the Scheduler, and - associate the given with it. -

- If the given Trigger does not reference any , then it - will be set to reference the Job passed with it into this method. -

-
-
- - - Schedule the given with the - identified by the 's settings. - - - - - Add the given to the Scheduler - with no associated - . The will be 'dormant' until - it is scheduled with a , or - is called for it. -

- The must by definition be 'durable', if it is not, - SchedulerException will be thrown. -

-
-
- - - Delete the identified from the Scheduler - and any - associated s. - - true if the Job was found and deleted. - - - - Remove the indicated from the - scheduler. - - - - - Remove (delete) the with the - given name, and store the new given one - which must be associated - with the same job. - - The scheduling context. - The name of the to be removed. - The group name of the to be removed. - The new to be stored. - - if a with the given - name and group was not found and removed from the store, otherwise - the first fire time of the newly scheduled trigger. - - - - - Creates a new positive random number - - The last random obtained - Returns a new positive random number - - - - Trigger the identified (Execute it now) - with a non-volatile trigger. - - - - - Trigger the identified (Execute it - now) - with a volatile trigger. - - - - - Pause the with the given name. - - - - - Pause all of the s in the given group. - - - - - Pause the with the given - name - by pausing all of its current s. - - - - - Pause all of the s in the - given group - by pausing all of their s. - - - - - Resume (un-pause) the with the given - name. -

- If the missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
-
- - - Resume (un-pause) all of the s in the - given group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
-
- - - Gets the paused trigger groups. - - The the job scheduling context. - - - - - Resume (un-pause) the with - the given name. -

- If any of the 's s missed one - or more fire-times, then the 's misfire - instruction will be applied. -

-
-
- - - Resume (un-pause) all of the s - in the given group. -

- If any of the s had s that - missed one or more fire-times, then the 's - misfire instruction will be applied. -

-
-
- - - Pause all triggers - equivalent of calling - on every group. -

- When is called (to un-pause), trigger misfire - instructions WILL be applied. -

-
- - -
- - - Resume (un-pause) all triggers - equivalent of calling - on every group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
- -
- - - Get the names of all known groups. - - - - - Get the names of all the s in the - given group. - - - - - Get all s that are associated with the - identified . - - - - - Get the names of all known - groups. - - - - - Get the names of all the s in - the given group. - - - - - Get the for the - instance with the given name and group. - - - - - Get the instance with the given name and - group. - - - - - Get the current state of the identified . - - - - - - - - - Add (register) the given to the Scheduler. - - - - - Delete the identified from the Scheduler. - - true if the Calendar was found and deleted. - - - - Get the instance with the given name. - - - - - Get the names of all registered s. - - - - - Add the given to the - 'sglobal list. -

- Listeners in the 'global' list receive notification of execution events - for ALL s. -

-
-
- - - Add the given to the - 's list, of registered s. - - - - - Remove the given from the - 's list of global listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Remove the identifed from the 's - list of global listeners. - - - true if the identifed listener was found in the list, and removed. - - - - Remove the identifed from - the 's list of registered listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Get the non-global that has the given name. - - - - - Add the given to the - 'sglobal list. -

- Listeners in the 'global' list receive notification of execution events - for ALL s. -

-
-
- - - Add the given to the - 's list, of registered s. - - - - - Remove the given from - the 's list of global listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Remove the identifed from the 's - list of global listeners. - - - true if the identifed listener was found in the list, and removed - - - - Remove the identifed - from the 's list of registered listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Get the non-global - that has the given name. - - - - - Get the global that - has the given name. - - - - - - - Register the given with the - . - - - - - Remove the given from the - . - - - true if the identifed listener was found in the list, and removed. - - - - - Notifies the job store job complete. - - The job scheduling context. - The trigger. - The detail. - The instruction code. - - - - Notifies the scheduler thread. - - - - - Notifies the trigger listeners about fired trigger. - - The job execution context. - - - - - Notifies the trigger listeners about misfired trigger. - - The trigger. - - - - Notifies the trigger listeners of completion. - - The job executution context. - The instruction code to report to triggers. - - - - Notifies the job listeners about job to be executed. - - The jec. - - - - Notifies the job listeners that job exucution was vetoed. - - The job execution context. - - - - Notifies the job listeners that job was executed. - - The jec. - The je. - - - - Notifies the scheduler listeners about scheduler error. - - The MSG. - The se. - - - - Notifies the scheduler listeners about job that was scheduled. - - The trigger. - - - - Notifies the scheduler listeners about job that was unscheduled. - - Name of the trigger. - The trigger group. - - - - Notifies the scheduler listeners about finalized trigger. - - The trigger. - - - - Notifies the scheduler listeners about paused trigger. - - The name. - The group. - - - - Notifies the scheduler listeners resumed trigger. - - The name. - The group. - - - - Notifies the scheduler listeners about paused job. - - The name. - The group. - - - - Notifies the scheduler listeners about resumed job. - - The name. - The group. - - - - Notifies the scheduler listeners about scheduler shutdown. - - - - - Interrupt all instances of the identified InterruptableJob. - - - - - Obtains a lifetime service object to control the lifetime policy for this instance. - - - - - Gets the version of the Quartz Scheduler. - - The version. - - - - Gets the version major. - - The version major. - - - - Gets the version minor. - - The version minor. - - - - Gets the version iteration. - - The version iteration. - - - - Gets the scheduler signaler. - - The scheduler signaler. - - - - Returns the name of the . - - - - - Returns the instance Id of the . - - - - - Returns the of the . - - - - - Gets or sets a value indicating whether to signal on scheduling change. - - - true if schduler should signal on scheduling change; otherwise, false. - - - - - Reports whether the is paused. - - - - - Gets the job store class. - - The job store class. - - - - Gets the thread pool class. - - The thread pool class. - - - - Gets the size of the thread pool. - - The size of the thread pool. - - - - Reports whether the has been Shutdown. - - - - - Return a list of objects that - represent all currently executing Jobs in this Scheduler instance. -

- This method is not cluster aware. That is, it will only return Jobs - currently executing in this Scheduler instance, not across the entire - cluster. -

-

- Note that the list returned is an 'instantaneous' snap-shot, and that as - soon as it's returned, the true list of executing jobs may be different. -

-
-
- - - Get a List containing all of the - s in the 'sglobal list. - - - - - Get a Set containing the names of all the non-global - s registered with the . - - - - - Get a list containing all of the - s in the 'sglobal list. - - - - - Get a Set containing the names of all the non-global - s registered with the . - - - - - Get a List containing all of the - s registered with the . - - - - - Gets or sets the job factory. - - The job factory. - - - - Gets the running since. - - The running since. - - - - Gets the number of jobs executed. - - The number of jobs executed. - - - - Gets a value indicating whether this scheduler supports persistence. - - true if supports persistence; otherwise, false. - - - - Helper class to start scheduler in a delayed fashion. - - - - - ErrorLogger - Scheduler Listener Class - - - - - A helpful abstract base class for implementors of - . - - - The methods in this class are empty so you only need to override the - subset for the events you care about. - - - - - - The interface to be implemented by classes that want to be informed of major - events. - - - - - James House - - - - Called by the when a - is scheduled. - - - - - Called by the when a - is unscheduled. - - - - - Called by the when a - has reached the condition in which it will never fire again. - - - - - Called by the when a - or group of s has been paused. -

- If a group was paused, then the parameter - will be null. -

-
- Name of the trigger. - The trigger group. -
- - - Called by the when a - or group of s has been un-paused. -

- If a group was resumed, then the parameter - will be null. -

-
- Name of the trigger. - The trigger group. -
- - - Called by the when a - or group of s has been paused. -

- If a group was paused, then the parameter will be - null. If all jobs were paused, then both parameters will be null. -

-
- Name of the job. - The job group. -
- - - Called by the when a - or group of s has been un-paused. -

- If a group was resumed, then the parameter will - be null. If all jobs were paused, then both parameters will be null. -

-
- The job group. -
- - - Called by the when a serious error has - occured within the scheduler - such as repeated failures in the , - or the inability to instantiate a instance when its - has fired. -

- The property of the given SchedulerException - can be used to determine more specific information about the type of - error that was encountered. -

-
-
- - - Called by the to inform the listener - that it has Shutdown. - - - - - Get the for this - type's category. This should be used by subclasses for logging. - - - - - The interface to be implemented by classes that want to be informed when a - executes. In general, applications that use a - will not have use for this mechanism. - - - - - - - James House - - - - Called by the when a - is about to be executed (an associated - has occured). -

- This method will not be invoked if the execution of the Job was vetoed - by a . -

-
- -
- - - Called by the when a - was about to be executed (an associated - has occured), but a vetoed it's - execution. - - - - - - Called by the after a - has been executed, and be for the associated 's - method has been called. - - - - - Get the name of the . - - - - - Contains all of the resources (,, - etc.) necessary to create a instance. - - - James House - Marko Lahma (.NET) - - - - Gets the unique identifier. - - Name of the scheduler. - The scheduler instance id. - - - - - Gets the unique identifier. - - - - - - Add the given for the - to use. This method expects the plugin's - "initialize" method to be invoked externally (either before or after - this method is called). - - - - - - Get or set the name for the . - - - if name is null or empty. - - - - - Get or set the instance Id for the . - - - if name is null or empty. - - - - - Get or set the name for the . - - - if name is null or empty. - - - - - Get or set the for the - to use. - - - if threadPool is null. - - - - - Get or set the for the - to use. - - - if jobStore is null. - - - - - Get or set the for the - to use. - - - if jobRunShellFactory is null. - - - - - Get the of all - s for the - to use. - - - - - - Gets or sets a value indicating whether to make scheduler thread daemon. - - - true if scheduler should be thread daemon; otherwise, false. - - - - - Gets or sets the scheduler exporter. - - The scheduler exporter. - - - - The thread responsible for performing the work of firing - s that are registered with the . - - - - - James House - Marko Lahma (.NET) - - - - Support class used to handle threads - - - - - The instance of System.Threading.Thread - - - - - Initializes a new instance of the QuartzThread class - - - - - Initializes a new instance of the Thread class. - - The name of the thread - - - - Initializes a new instance of the Thread class. - - A ThreadStart delegate that references the methods to be invoked when this thread begins executing - - - - Initializes a new instance of the Thread class. - - A ThreadStart delegate that references the methods to be invoked when this thread begins executing - The name of the thread - - - - This method has no functionality unless the method is overridden - - - - - Causes the operating system to change the state of the current thread instance to ThreadState.Running - - - - - Interrupts a thread that is in the WaitSleepJoin thread state - - - - - Blocks the calling thread until a thread terminates - - - - - Blocks the calling thread until a thread terminates or the specified time elapses - - Time of wait in milliseconds - - - - Blocks the calling thread until a thread terminates or the specified time elapses - - Time of wait in milliseconds - Time of wait in nanoseconds - - - - Resumes a thread that has been suspended - - - - - Raises a ThreadAbortException in the thread on which it is invoked, - to begin the process of terminating the thread. Calling this method - usually terminates the thread - - - - - Raises a ThreadAbortException in the thread on which it is invoked, - to begin the process of terminating the thread while also providing - exception information about the thread termination. - Calling this method usually terminates the thread. - - An object that contains application-specific information, such as state, which can be used by the thread being aborted - - - - Suspends the thread, if the thread is already suspended it has no effect - - - - - Obtain a string that represents the current object - - A string that represents the current object - - - - Gets the currently running thread - - The currently running thread - - - - Gets the current thread instance - - - - - Gets or sets the name of the thread - - - - - Gets or sets a value indicating the scheduling priority of a thread - - - - - Gets a value indicating the execution status of the current thread - - - - - Gets or sets a value indicating whether or not a thread is a background thread. - - - - - Gets the randomized idle wait time. - - The randomized idle wait time. - - - - Construct a new for the given - as a non-daemon - with normal priority. - - - - - Construct a new for the given - as a with the given - attributes. - - - - - Signals the main processing loop to pause at the next possible point. - - - - - Signals the main processing loop to pause at the next possible point. - - - - - Signals the main processing loop that a change in scheduling has been - made - in order to interrupt any sleeping that may be occuring while - waiting for the fire time to arrive. - - - the time when the newly scheduled trigger - will fire. If this method is being called do to some other even (rather - than scheduling a trigger), the caller should pass null. - - - - - The main processing loop of the . - - - - - Trigger retry loop that is executed on error condition. - - The bndle. - - - - Releases the trigger retry loop. - - The trigger. - - - - Gets the log. - - The log. - - - - Sets the idle wait time. - - The idle wait time. - - - - Gets a value indicating whether this is paused. - - true if paused; otherwise, false. - - - - Gets or sets the db failure retry interval. - - The db failure retry interval. - - - - An interface to be used by instances in order to - communicate signals back to the . - - James House - Marko Lahma (.NET) - - - - An interface to be used by instances in order to - communicate signals back to the . - - James House - - - - Notifies the scheduler about misfired trigger. - - The trigger that misfired. - - - - Notifies the scheduler about finalized trigger. - - The trigger that has finalized. - - - - Signals the scheduling change. - - - - - Notifies the scheduler about misfired trigger. - - The trigger that misfired. - - - - Notifies the scheduler about finalized trigger. - - The trigger that has finalized. - - - - Signals the scheduling change. - - - - - An object used to pass information about the 'client' to the . - - - James House - Marko Lahma (.NET) - - - - get the instanceId in the cluster. - -

- Set the instanceId. -

-
-
- - - Metadata information about specific ADO.NET driver library. Metadata is used to - create correct types of object instances to interact with the underlying - database. - - - - - Initializes this instance. Parses information and initializes startup - values. - - - - - Gets the name of the parameter which includes the parameter prefix for this - database. - - Name of the parameter. - - - Gets or sets the name of the assembly that holds the connection library. - The name of the assembly. - - - - Gets or sets the name of the product. - - The name of the product. - - - - Gets or sets the type of the connection. - - The type of the connection. - - - - Gets or sets the type of the command. - - The type of the command. - - - - Gets or sets the type of the parameter. - - The type of the parameter. - - - - Gets the type of the command builder. - - The type of the command builder. - - - Gets the command builder's derive parameters method. - The command builder derive parameters method. - - - - Gets or sets the parameter name prefix. - - The parameter name prefix. - - - - Gets or sets the type of the exception that is thrown when using driver - library. - - The type of the exception. - - - - Gets or sets a value indicating whether parameters are bind by name when using - ADO.NET parameters. - - true if parameters are bind by name; otherwise, false. - - - Gets or sets the type of the database parameters. - The type of the parameter db. - - - - Gets the parameter db type property. - - The parameter db type property. - - - - Gets the parameter is nullable property. - - The parameter is nullable property. - - - - Gets or sets the type of the db binary column. This is a string representation of - Enum element because this information is database driver specific. - - The type of the db binary. - - - Gets the type of the db binary. - The type of the db binary. - - - - Sets the name of the parameter db type property. - - The name of the parameter db type property. - - - - Gets or sets a value indicating whether [use parameter name prefix in parameter collection]. - - - true if [use parameter name prefix in parameter collection]; otherwise, false. - - - - - - - - - - - - - - - Returns a new command object for executing SQL statments/Stored Procedures - against the database. - - An new - - - - Returns a new instance of the providers CommandBuilder class. - - In .NET 1.1 there was no common base class or interface - for command builders, hence the return signature is object to - be portable (but more loosely typed) across .NET 1.1/2.0 - A new Command Builder - - - - Returns a new connection object to communicate with the database. - - A new - - - - Returns a new parameter object for binding values to parameter - placeholders in SQL statements or Stored Procedure variables. - - A new - - - - Shutdowns this instance. - - - - - Connection string used to create connections. - - - - - Registers DB metadata information for given provider name. - - - - - - - Initializes a new instance of the class. - - Name of the db provider. - The connection string. - - - - Returns a new command object for executing SQL statments/Stored Procedures - against the database. - - An new - - - - Returns a new instance of the providers CommandBuilder class. - - A new Command Builder - In .NET 1.1 there was no common base class or interface - for command builders, hence the return signature is object to - be portable (but more loosely typed) across .NET 1.1/2.0 - - - - Returns a new connection object to communicate with the database. - - A new - - - - Returns a new parameter object for binding values to parameter - placeholders in SQL statements or Stored Procedure variables. - - A new - - - - Shutdowns this instance. - - - - - Connection string used to create connections. - - - - - - Gets the metadata. - - The metadata. - - - - Summary description for DbProviderFactory. - - - - - This interface can be implemented by any - class that needs to use the constants contained herein. - -
Jeffrey Wescott - James House - - - @deprecated Whether a trigger has misfired is no longer a state, but - rather now identified dynamically by whether the trigger's next fire - time is more than the misfire threshold time in the past. - - - - This class contains utility functions for use in all delegate classes. - - Jeffrey Wescott - - - - Replace the table prefix in a query by replacing any occurrences of - "{0}" with the table prefix. - - The unsubstitued query - The table prefix - The query, with proper table prefix substituted - - - - Obtain a unique key for a given job. - - The job name - The group containing the job - - A unique key - - - - Obtain a unique key for a given trigger. - - The trigger name - The group containing the trigger - A unique key - - - - Base class for database based lock handlers for providing thread/resource locking - in order to protect resources from being altered by multiple threads at the - same time. - - - - - This class extends - to include the query string constants in use by the - class. - - Jeffrey Wescott - - - - An interface for providing thread/resource locking in order to protect - resources from being altered by multiple threads at the same time. - - James House - - - - Grants a lock on the identified resource to the calling thread (blocking - until it is available). - - true if the lock was obtained. - - - - Release the lock on the identified resource if it is held by the calling - thread. - - - - - Determine whether the calling thread owns a lock on the identified - resource. - - - - - Whether this Semaphore implementation requires a database connection for - its lock management operations. - - - - - - - - Interface for Quartz objects that need to know what the table prefix of - the tables used by a ADO.NET JobStore is. - - - - - Initializes a new instance of the class. - - The table prefix. - The SQL. - The default SQL. - The db provider. - - - - Execute the SQL that will lock the proper database row. - - - - - - - - Grants a lock on the identified resource to the calling thread (blocking - until it is available). - - - - - true if the lock was obtained. - - - - Release the lock on the identified resource if it is held by the calling - thread. - - - - - - - Determine whether the calling thread owns a lock on the identified - resource. - - - - - - - - Gets or sets the lock owners. - - The lock owners. - - - - Gets the log. - - The log. - - - - This Semaphore implementation does use the database. - - - - - Gets or sets the table prefix. - - The table prefix. - - - - A FirebirdDelegate specific driver delegate. - - Marko Lahma - - - - This is meant to be an abstract base class for most, if not all, - implementations. Subclasses should override only those methods that need - special handling for the DBMS driver in question. - - Jeffrey Wescott - James House - Marko Lahma (.NET) - - - - This is the base interface for all driver delegate classes. - - -

- This interface is very similar to the - interface except each method has an additional - parameter. -

-

- Unless a database driver has some extremely-DB-specific - requirements, any IDriverDelegate implementation classes should extend the - class. -

-
- Jeffrey Wescott - James House - Marko Lahma (.NET) -
- - - Update all triggers having one of the two given states, to the given new - state. - - The DB Connection - The new state for the triggers - The first old state to update - The second old state to update - Number of rows updated - - - - Get the names of all of the triggers that have misfired - according to - the given timestamp. - - The DB Connection - The timestamp. - An array of objects - - - - Get the names of all of the triggers in the given state that have - misfired - according to the given timestamp. - - The DB Connection - The state. - The time stamp. - An array of objects - - - - Get the names of all of the triggers in the given group and state that - have misfired - according to the given timestamp. - - The DB Connection - Name of the group. - The state. - The timestamp. - An array of objects - - - - Select all of the triggers for jobs that are requesting recovery. The - returned trigger objects will have unique "recoverXXX" trigger names and - will be in the trigger group. - - - In order to preserve the ordering of the triggers, the fire time will be - set from the ColumnFiredTime column in the TableFiredTriggers - table. The caller is responsible for calling - on each returned trigger. It is also up to the caller to insert the - returned triggers to ensure that they are fired. - - The DB Connection - An array of objects - - - - Delete all fired triggers. - - The DB Connection - The number of rows deleted - - - - Delete all fired triggers of the given instance. - - The DB Connection - The instance id. - The number of rows deleted - - - - Delete all volatile fired triggers. - - The DB Connection - The number of rows deleted - - - - Get the names of all of the triggers that are volatile. - - The DB Connection - An array of see cref="Key" /> objects. - - - - Get the names of all of the jobs that are volatile. - - The DB Connection - An array of objects. - - - - Insert the job detail record. - - The DB Connection - The job to insert. - Number of rows inserted. - - - - Update the job detail record. - - The DB Connection. - The job to update. - Number of rows updated. - - -

- Get the names of all of the triggers associated with the given job. -

- -
- The DB Connection - The job name - The job group -
- - - Delete all job listeners for the given job. - - The DB Connection - The name of the job - The group containing the job - The number of rows deleted - - - - Delete the job detail record for the given job. - - The DB Connection - the name of the job - Name of the group. - the number of rows deleted - - - - Check whether or not the given job is stateful. - - The DB Connection - The name of the job - The group containing the job - true if the job exists and is stateful, false otherwise - - - - Check whether or not the given job exists. - - The DB Connection - Name of the job. - Name of the group. - true if the job exists, false otherwise - - - - Update the job data map for the given job. - - The DB Connection - The job. - the number of rows updated - - - - Associate a listener with a job. - - The DB Connection - The job to associate with the listener. - The listener to insert. - The number of rows inserted. - - -

- Get all of the listeners for a given job. -

- -
- The DB Connection - The job name whose listeners are wanted - The group containing the job - array of listener names -
- - - Select the JobDetail object for a given job name / group name. - - The DB Connection - The job name whose listeners are wanted - The group containing the job - The class load helper. - The populated JobDetail object - - - - Select the total number of jobs stored. - - The DB Connection - the total number of jobs stored - - - - Select all of the job group names that are stored. - - The DB Connection. - an array of group names - - - - Select all of the jobs contained in a given group. - - The DB Connection - The group containing the jobs - an array of job names - - - - Insert the base trigger data. - - The DB Connection - The trigger to insert. - The state that the trigger should be stored in. - The job detail. - The number of rows inserted - - - - Insert the simple trigger data. - - The DB Connection - The trigger to insert - The number of rows inserted - - - - Insert the blob trigger data. - - The DB Connection - The trigger to insert - The number of rows inserted - - - - Insert the cron trigger data. - - the DB Connection - The trigger. - the number of rows inserted - - - - Update the base trigger data. - - the DB Connection - The trigger. - The state. - The job detail. - the number of rows updated - - - - Update the simple trigger data. - - the DB Connection - The trigger. - the number of rows updated - - - - Update the cron trigger data. - - the DB Connection - The trigger. - the number of rows updated - - - - Update the blob trigger data. - - the DB Connection - The trigger. - the number of rows updated - - - - Check whether or not a trigger exists. - - the DB Connection - Name of the trigger. - Name of the group. - the number of rows updated - - - - Update the state for a given trigger. - - The DB Connection - The name of the trigger. - The group containing the trigger. - The new state for the trigger. - the number of rows updated - - - - Update the given trigger to the given new state, if it is in the given - old state. - - The DB connection - The name of the trigger. - The group containing the trigger - The new state for the trigger - The old state the trigger must be in - int the number of rows updated - - - - Update the given trigger to the given new state, if it is one of the - given old states. - - The DB connection - The name of the trigger - The group containing the trigger - The new state for the trigger - One of the old state the trigger must be in - One of the old state the trigger must be in - One of the old state the trigger must be in - - int the number of rows updated - - SQLException - - - - Update the all triggers to the given new state, if they are in one of - the given old states AND its next fire time is before the given time. - - The DB connection - The new state for the trigger - One of the old state the trigger must be in - One of the old state the trigger must be in - The time before which the trigger's next fire time must be - int the number of rows updated - - - - Update all triggers in the given group to the given new state, if they - are in one of the given old states. - - The DB connection - The group containing the trigger - The new state for the trigger - One of the old state the trigger must be in - One of the old state the trigger must be in - One of the old state the trigger must be in - The number of rows updated - - - - Update all of the triggers of the given group to the given new state, if - they are in the given old state. - - The DB connection - The group containing the triggers - The new state for the trigger group - The old state the triggers must be in. - int the number of rows updated - - - - Update the states of all triggers associated with the given job. - - The DB Connection - The name of the job. - The group containing the job. - The new state for the triggers. - The number of rows updated - - - - Update the states of any triggers associated with the given job, that - are the given current state. - - The DB Connection - The name of the job - The group containing the job - The new state for the triggers - The old state of the triggers - the number of rows updated - - - - Delete all of the listeners associated with a given trigger. - - The DB Connection - The name of the trigger whose listeners will be deleted - The name of the group containing the trigger - the number of rows deleted - - - - Associate a listener with the given trigger. - - The DB Connectio - The trigger - The name of the listener to associate with the trigger - the number of rows inserted - - - - Select the listeners associated with a given trigger. - - The DB Connection - The name of the trigger - The group containing the trigger - array of trigger listener names - - - - Delete the simple trigger data for a trigger. - - The DB Connection - The name of the trigger - The group containing the trigger - The number of rows deleted - - - - Delete the BLOB trigger data for a trigger. - - The DB Connection - The name of the trigger - The group containing the trigger - The number of rows deleted - - - - Delete the cron trigger data for a trigger. - - The DB Connection - The name of the trigger - The group containing the trigger - the number of rows deleted - - - - Delete the base trigger data for a trigger. - - The DB Connection - The name of the trigger - The group containing the trigger - the number of rows deleted - - - - Select the number of triggers associated with a given job. - - The DB Connection - The name of the job - The group containing the job - the number of triggers for the given job - - - - Select the job to which the trigger is associated. - - The DB Connection - The name of the trigger - The group containing the trigger - The load helper. - - The object associated with the given trigger - - - - - Select the stateful jobs which are referenced by triggers in the given - trigger group. - - The DB Connection - The trigger group. - a List of Keys to jobs. - - - - Select the triggers for a job> - - The DB Connection - The name of the trigger - The group containing the trigger - an array of objects associated with a given job. - - - - Select the triggers for a calendar - - The DB Connection. - Name of the calendar. - - An array of objects associated with a given job. - - - - - Select a trigger. - - The DB Connection. - The name of the trigger. - The group containing the trigger. - The object. - - - - - Select a trigger's JobDataMap. - - The DB Connection. - The name of the trigger. - The group containing the trigger. - The of the Trigger, never null, but possibly empty. - - - - Select a trigger's state value. - - The DB Connection. - The name of the trigger. - The group containing the trigger. - The object. - - - - Select a triggers status (state and next fire time). - - The DB Connection. - The name of the trigger. - The group containing the trigger. - A object, or null - - - - Select the total number of triggers stored. - - The DB Connection. - The total number of triggers stored. - - - - Select all of the trigger group names that are stored. - - The DB Connection. - An array of group names. - - - - Select all of the triggers contained in a given group. - - The DB Connection. - The group containing the triggers. - An array of trigger names. - - - - Select all of the triggers in a given state. - - The DB Connection. - The state the triggers must be in. - An array of trigger s. - - - - Inserts the paused trigger group. - - The conn. - Name of the group. - - - - - Deletes the paused trigger group. - - The conn. - Name of the group. - - - - - Deletes all paused trigger groups. - - The conn. - - - - - Determines whether the specified trigger group is paused. - - The conn. - Name of the group. - - true if trigger group is paused; otherwise, false. - - - - - Selects the paused trigger groups. - - The DB Connection. - - - - - Determines whether given trigger group already exists. - - The conn. - Name of the group. - - true if trigger group exists; otherwise, false. - - - - - Insert a new calendar. - - The DB Connection. - The name for the new calendar. - The calendar. - The number of rows inserted. - - - - Update a calendar. - - The DB Connection. - The name for the new calendar. - The calendar. - The number of rows updated. - - - - Check whether or not a calendar exists. - - The DB Connection. - The name of the calendar. - true if the trigger exists, false otherwise. - - - - Select a calendar. - - The DB Connection. - The name of the calendar. - The Calendar. - - - - Check whether or not a calendar is referenced by any triggers. - - The DB Connection. - The name of the calendar. - true if any triggers reference the calendar, false otherwise - - - - Delete a calendar. - - The DB Connection - The name of the trigger. - The number of rows deleted. - - - - Select the total number of calendars stored. - - The DB Connection - The total number of calendars stored. - - - - Select all of the stored calendars. - - The DB Connection - An array of calendar names. - - - - Select the trigger that will be fired at the given fire time. - - The DB Connection - The time that the trigger will be fired. - - A representing the - trigger that will be fired at the given fire time, or null if no - trigger will be fired at that time - - - - - Insert a fired trigger. - - The DB Connection - The trigger. - The state that the trigger should be stored in. - The job detail. - The number of rows inserted. - - - - Select the states of all fired-trigger records for a given trigger, or - trigger group if trigger name is . - - The DB Connection - Name of the trigger. - Name of the group. - A list of FiredTriggerRecord objects. - - - - Select the states of all fired-trigger records for a given job, or job - group if job name is . - - The DB Connection - Name of the job. - Name of the group. - A List of FiredTriggerRecord objects. - - - - Select the states of all fired-trigger records for a given scheduler - instance. - - The DB Connection - Name of the instance. - A list of FiredTriggerRecord objects. - - - - Delete a fired trigger. - - The DB Connection - The fired trigger entry to delete. - The number of rows deleted. - - - - Get the number instances of the identified job currently executing. - - The DB Connection - Name of the job. - The job group. - - The number instances of the identified job currently executing. - - - - - Insert a scheduler-instance state record. - - The DB Connection - The instance id. - The check in time. - The interval. - The number of inserted rows. - - - - Delete a scheduler-instance state record. - - The DB Connection - The instance id. - The number of deleted rows. - - - - Update a scheduler-instance state record. - - The DB Connection - The instance id. - The check in time. - The number of updated rows. - - - - A List of all current s. -

- If instanceId is not null, then only the record for the identified - instance will be returned. -

-
- The DB Connection - The instance id. - -
- - - Select the next trigger which will fire to fire between the two given timestamps - in ascending order of fire time, and then descending by priority. - - The conn. - highest value of of the triggers (exclusive) - highest value of of the triggers (inclusive) - A (never null, possibly empty) list of the identifiers (Key objects) of the next triggers to be fired. - - - - Select the distinct instance names of all fired-trigger records. - - - This is useful when trying to identify orphaned fired triggers (a - fired trigger without a scheduler state record.) - - The conn. - - - - - Counts the misfired triggers in states. - - The conn. - The state1. - The state2. - The ts. - - - - - Selects the misfired triggers in states. - - The conn. - The state1. - The state2. - The ts. - The count. - The result list. - - - - - Create new StdAdoDelegate instance. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Create new StdAdoDelegate instance. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - if set to true [use properties]. - - - - Insert the job detail record. - - the DB Connection - the new state for the triggers - the first old state to update - the second old state to update - number of rows updated - - - - Get the names of all of the triggers that have misfired. - - the DB Connection - The ts. - an array of objects - - - - Select all of the triggers in a given state. - - The DB Connection - The state the triggers must be in - an array of trigger s - - - - Get the names of all of the triggers in the given state that have - misfired - according to the given timestamp. - - The DB Connection - The state. - The time stamp. - An array of objects - - - - Get the names of all of the triggers in the given states that have - misfired - according to the given timestamp. No more than count will - be returned. - - The conn. - The state1. - The state2. - The ts. - The most misfired triggers to return, negative for all - - Output parameter. A List of objects. Must not be null - - Whether there are more misfired triggers left to find beyond the given count. - - - - Get the number of triggers in the given states that have - misfired - according to the given timestamp. - - - - - - - - - - Get the names of all of the triggers in the given group and state that - have misfired. - - The DB Connection - Name of the group. - The state. - The timestamp. - an array of objects - - - - Select all of the triggers for jobs that are requesting recovery. The - returned trigger objects will have unique "recoverXXX" trigger names and - will be in the - trigger group. - - - In order to preserve the ordering of the triggers, the fire time will be - set from the ColumnFiredTime column in the TableFiredTriggers - table. The caller is responsible for calling - on each returned trigger. It is also up to the caller to insert the - returned triggers to ensure that they are fired. - - The DB Connection - an array of objects - - - - Delete all fired triggers. - - The DB Connection. - The number of rows deleted. - - - - Delete all fired triggers of the given instance. - - The DB Connection - The instance id. - The number of rows deleted - - - - Insert the job detail record. - - The DB Connection. - The job to insert. - Number of rows inserted. - - - - Gets the db presentation for boolean value. Subclasses can overwrite this behaviour. - - Value to map to database. - - - - - Update the job detail record. - - The DB Connection. - The job to update. - Number of rows updated. - - - - Get the names of all of the triggers associated with the given job. - - The DB Connection. - The name of the job. - The group containing the job. - An array of objects - - - - Delete all job listeners for the given job. - - The DB Connection. - The name of the job. - The group containing the job. - The number of rows deleted. - - - - Delete the job detail record for the given job. - - the DB Connection - the name of the job - the group containing the job - the number of rows deleted - - - - Check whether or not the given job is stateful. - - the DB Connection - the name of the job - the group containing the job - - true if the job exists and is stateful, false otherwise - - - - - Check whether or not the given job exists. - - the DB Connection - the name of the job - the group containing the job - true if the job exists, false otherwise - - - - Update the job data map for the given job. - - The conn. - the job to update - the number of rows updated - - - - Associate a listener with a job. - - The DB Connection. - The job to associate with the listener. - The listener to insert. - The number of rows inserted. - - - - Get all of the listeners for a given job. - - The DB Connection. - The job name whose listeners are wanted. - The group containing the job. - Array of listener names. - - - - Select the JobDetail object for a given job name / group name. - - The DB Connection. - The job name whose listeners are wanted. - The group containing the job. - The load helper. - The populated JobDetail object. - - - build Map from java.util.Properties encoding. - - - - Select the total number of jobs stored. - - The DB Connection. - The total number of jobs stored. - - - - Select all of the job group names that are stored. - - The DB Connection. - An array of group names. - - - - Select all of the jobs contained in a given group. - - The DB Connection. - The group containing the jobs. - An array of job names. - - - - Insert the base trigger data. - - the DB Connection - the trigger to insert - the state that the trigger should be stored in - The job detail. - the number of rows inserted - - - - Insert the simple trigger data. - - The DB Connection. - The trigger to insert. - The number of rows inserted. - - - - Insert the cron trigger data. - - the DB Connection - the trigger to insert - the number of rows inserted - - - - Insert the blob trigger data. - - The DB Connection. - The trigger to insert. - The number of rows inserted. - - - - Update the base trigger data. - - The DB Connection. - The trigger to insert. - The state that the trigger should be stored in. - The job detail. - The number of rows updated. - - - - Update the simple trigger data. - - The DB Connection. - The trigger to insert. - The number of rows updated. - - - - Update the cron trigger data. - - The DB Connection. - The trigger to insert. - The number of rows updated. - - - - Update the blob trigger data. - - The DB Connection. - The trigger to insert. - The number of rows updated. - - - - Check whether or not a trigger exists. - - The DB Connection. - The name of the trigger. - The group containing the trigger. - true if the trigger exists, false otherwise - - - - Update the state for a given trigger. - - The DB Connection. - The name of the trigger. - The group containing the trigger. - The new state for the trigger. - The number of rows updated. - - - - Update the given trigger to the given new state, if it is one of the - given old states. - - The DB connection. - The name of the trigger. - The group containing the trigger. - The new state for the trigger. - One of the old state the trigger must be in. - One of the old state the trigger must be in. - One of the old state the trigger must be in. - The number of rows updated. - - - - Update the all triggers to the given new state, if they are in one of - the given old states AND its next fire time is before the given time. - - The DB connection - The new state for the trigger - One of the old state the trigger must be in - One of the old state the trigger must be in - The time before which the trigger's next fire time must be - int the number of rows updated - - - - Update all triggers in the given group to the given new state, if they - are in one of the given old states. - - The DB connection. - The group containing the trigger. - The new state for the trigger. - One of the old state the trigger must be in. - One of the old state the trigger must be in. - One of the old state the trigger must be in. - The number of rows updated. - - - - Update the given trigger to the given new state, if it is in the given - old state. - - the DB connection - the name of the trigger - the group containing the trigger - the new state for the trigger - the old state the trigger must be in - int the number of rows updated - - - - Update all of the triggers of the given group to the given new state, if - they are in the given old state. - - the DB connection - the group containing the triggers - the new state for the trigger group - the old state the triggers must be in - int the number of rows updated - - - - Update the states of all triggers associated with the given job. - - the DB Connection - the name of the job - the group containing the job - the new state for the triggers - the number of rows updated - - - - Updates the state of the trigger states for job from other. - - The conn. - Name of the job. - Name of the group. - The state. - The old state. - - - - - Delete all of the listeners associated with a given trigger. - - the DB Connection - the name of the trigger whose listeners will be deleted - the name of the group containing the trigger - the number of rows deleted - - - - Associate a listener with the given trigger. - - the DB Connection - the trigger - the name of the listener to associate with the trigger - the number of rows inserted - - - - Select the listeners associated with a given trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - - array of trigger listener names - - - - - Delete the simple trigger data for a trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - the number of rows deleted - - - - Delete the cron trigger data for a trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - the number of rows deleted - - - - Delete the cron trigger data for a trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - the number of rows deleted - - - - Delete the base trigger data for a trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - the number of rows deleted - - - - Select the number of triggers associated with a given job. - - the DB Connection - the name of the job - the group containing the job - the number of triggers for the given job - - - - Select the job to which the trigger is associated. - - the DB Connection - the name of the trigger - the group containing the trigger - The load helper. - The object associated with the given trigger - - - - Select the triggers for a job - - the DB Connection - the name of the trigger - the group containing the trigger - - an array of objects - associated with a given job. - - - - - Select the triggers for a calendar - - The DB Connection. - Name of the calendar. - - An array of objects associated with a given job. - - - - - Selects the stateful jobs of trigger group. - - The database connection. - Name of the group. - - - - - Select a trigger. - - the DB Connection - the name of the trigger - the group containing the trigger - The object - - - - Select a trigger's JobDataMap. - - the DB Connection - the name of the trigger - the group containing the trigger - The of the Trigger, never null, but possibly empty. - - - - Select a trigger's state value. - - the DB Connection - the name of the trigger - the group containing the trigger - The object - - - - Select a trigger status (state and next fire time). - - the DB Connection - the name of the trigger - the group containing the trigger - - a object, or null - - - - - Select the total number of triggers stored. - - the DB Connection - the total number of triggers stored - - - - Select all of the trigger group names that are stored. - - the DB Connection - - an array of group names - - - - - Select all of the triggers contained in a given group. - - the DB Connection - the group containing the triggers - - an array of trigger names - - - - - Inserts the paused trigger group. - - The conn. - Name of the group. - - - - - Deletes the paused trigger group. - - The conn. - Name of the group. - - - - - Deletes all paused trigger groups. - - The conn. - - - - - Determines whether the specified trigger group is paused. - - The conn. - Name of the group. - - true if trigger group is paused; otherwise, false. - - - - - Determines whether given trigger group already exists. - - The conn. - Name of the group. - - true if trigger group exists; otherwise, false. - - - - - Insert a new calendar. - - the DB Connection - The name for the new calendar. - The calendar. - the number of rows inserted - IOException - - - - Update a calendar. - - the DB Connection - The name for the new calendar. - The calendar. - the number of rows updated - IOException - - - - Check whether or not a calendar exists. - - the DB Connection - The name of the calendar. - - true if the trigger exists, false otherwise - - - - - Select a calendar. - - the DB Connection - The name of the calendar. - the Calendar - ClassNotFoundException - IOException - - - - Check whether or not a calendar is referenced by any triggers. - - the DB Connection - The name of the calendar. - - true if any triggers reference the calendar, false otherwise - - - - - Delete a calendar. - - the DB Connection - The name of the trigger. - the number of rows deleted - - - - Select the total number of calendars stored. - - the DB Connection - the total number of calendars stored - - - - Select all of the stored calendars. - - the DB Connection - - an array of calendar names - - - - - Select the trigger that will be fired at the given fire time. - - the DB Connection - the time that the trigger will be fired - - a representing the - trigger that will be fired at the given fire time, or null if no - trigger will be fired at that time - - - - - Select the next trigger which will fire to fire between the two given timestamps - in ascending order of fire time, and then descending by priority. - - The conn. - highest value of of the triggers (exclusive) - highest value of of the triggers (inclusive) - A (never null, possibly empty) list of the identifiers (Key objects) of the next triggers to be fired. - - - - Gets the select next trigger to acquire SQL clause. - This can be overriden for a more performant, result limiting - SQL. For Example SQL Server, MySQL and SQLite support limiting returned rows. - - - - - - Insert a fired trigger. - - the DB Connection - the trigger - the state that the trigger should be stored in - The job. - the number of rows inserted - - - - Select the states of all fired-trigger records for a given trigger, or - trigger group if trigger name is . - - The DB connection. - Name of the trigger. - Name of the group. - a List of objects. - - - - Select the states of all fired-trigger records for a given job, or job - group if job name is . - - The DB connection. - Name of the job. - Name of the group. - a List of objects. - - - - Select the states of all fired-trigger records for a given scheduler - instance. - - The DB Connection - Name of the instance. - A list of FiredTriggerRecord objects. - - - - Select the distinct instance names of all fired-trigger records. - - The conn. - - - This is useful when trying to identify orphaned fired triggers (a - fired trigger without a scheduler state record.) - - - - - Delete a fired trigger. - - the DB Connection - the fired trigger entry to delete - the number of rows deleted - - - - Selects the job execution count. - - The DB connection. - Name of the job. - The job group. - - - - - Delete all volatile fired triggers. - - The DB Connection - The number of rows deleted - - - - Inserts the state of the scheduler. - - The conn. - The instance id. - The check in time. - The interval. - - - - - Deletes the state of the scheduler. - - The database connection. - The instance id. - - - - - Updates the state of the scheduler. - - The database connection. - The instance id. - The check in time. - - - - - A List of all current s. -

- If instanceId is not null, then only the record for the identified - instance will be returned. -

-
- The DB Connection - The instance id. - -
- - - Replace the table prefix in a query by replacing any occurrences of - "{0}" with the table prefix. - - The unsubstitued query - The query, with proper table prefix substituted - - - - Create a serialized version of an Object. - - the object to serialize - Serialized object as byte array. - - - - Remove the transient data from and then create a serialized - version of a and returns the underlying bytes. - - The data. - the serialized data as byte array - - - - serialize - - The data. - - - - - Convert the JobDataMap into a list of properties. - - - - - Convert the JobDataMap into a list of properties. - - - - - This method should be overridden by any delegate subclasses that need - special handling for BLOBs. The default implementation uses standard - ADO.NET operations. - - The data reader, already queued to the correct row. - The column index for the BLOB. - The deserialized object from the DataReader BLOB. - - - - Get the names of all of the triggers that are volatile. - - The DB Connection - An array of objects. - - - - Get the names of all of the jobs that are volatile. - - The DB Connection - An array of objects. - - - - This method should be overridden by any delegate subclasses that need - special handling for BLOBs for job details. - - The result set, already queued to the correct row. - The column index for the BLOB. - The deserialized Object from the ResultSet BLOB. - - - - Selects the paused trigger groups. - - The DB Connection. - - - - - Gets the triggers to acquire limit. - - The triggers to acquire limit. - - - - Initializes a new instance of the class. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The logger. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Creates the SQL for select next trigger to acquire. - - - - - Gets the select next trigger to acquire SQL clause. - Firebird specific version with FIRST functionality - - - - - - Conveys the state of a fired-trigger record. - - James House - - - - Gets or sets the fire instance id. - - The fire instance id. - - - - Gets or sets the fire timestamp. - - The fire timestamp. - - - - Gets or sets a value indicating whether [job is stateful]. - - true if [job is stateful]; otherwise, false. - - - - Gets or sets the job key. - - The job key. - - - - Gets or sets the scheduler instance id. - - The scheduler instance id. - - - - Gets or sets the trigger key. - - The trigger key. - - - - Gets or sets the state of the fire instance. - - The state of the fire instance. - - - - Gets or sets a value indicating whether [job requests recovery]. - - true if [job requests recovery]; otherwise, false. - - - - Gets or sets a value indicating whether [trigger is volatile]. - - true if [trigger is volatile]; otherwise, false. - - - - Gets or sets the priority. - - The priority. - - - - Exception class for when a driver delegate cannot be found for a given - configuration, or lack thereof. - - Jeffrey Wescott - - - - - Base class for exceptions thrown by the Quartz . - - - SchedulerExceptions may contain a reference to another - , which was the underlying cause of the SchedulerException. - - James House - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The MSG. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - Initializes a new instance of the class. - - The MSG. - The error code. - - - - Initializes a new instance of the class. - - The cause. - - - - Initializes a new instance of the class. - - The MSG. - The cause. - - - - Initializes a new instance of the class. - - The MSG. - The cause. - The error code. - - - - Creates and returns a string representation of the current exception. - - - A string representation of the current exception. - - - - - - Return the exception that is the underlying cause of this exception. - This may be used to find more detail about the cause of the error. - - The underlying exception, or if there is not - one. - - - - - Get the error code associated with this exception. - This may be used to find more detail about the cause of the error. - - - One of the ERR_XXX constants defined in this class. - - - -

- Determine if the specified error code is in the - category of errors. -

-
-
- -

- Determine if the specified error code is in the - category of errors. -

-
-
- - - Determine if the specified error code is in the - category of errors. - - - - - Determine if the specified error code is in the - category of errors. - - - - - Determine if the specified error code is in the - category of errors. - - - - - Determine if the specified error code is in the - category of errors. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - is meant to be used in an application-server - or other software framework environment that provides - container-managed-transactions. No commit / rollback will be handled by this class. - - - If you need commit / rollback, use - instead. - - Jeffrey Wescott - James House - Srinivas Venkatarangaiah - - - - Contains base functionality for ADO.NET-based JobStore implementations. - - Jeffrey Wescott - James House - Marko Lahma (.NET) - - - - The interface to be implemented by classes that want to provide a - and storage mechanism for the - 's use. - - - Storage of s and s should be keyed - on the combination of their name and group for uniqueness. - - - - - - - - James House - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - Called by the QuartzScheduler to inform the that - the scheduler has started. - - - - - Called by the QuartzScheduler to inform the that - it should free up all of it's resources because the scheduler is - shutting down. - - - - - Store the given and . - - The scheduling context. - The to be stored. - The to be stored. - ObjectAlreadyExistsException - - - - returns true if the given JobGroup - is paused - - - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - - Store the given . - - The context. - The to be stored. - - If , any existing in the - with the same name and group should be - over-written. - - - - - Remove (delete) the with the given - name, and any s that reference - it. - - - If removal of the results in an empty group, the - group should be removed from the 's list of - known group names. - - The context. - The name of the to be removed. - The group name of the to be removed. - - if a with the given name and - group was found and removed from the store. - - - - - Retrieve the for the given - . - - The context. - The name of the to be retrieved. - The group name of the to be retrieved. - - The desired , or null if there is no match. - - - - - Store the given . - - The context. - The to be stored. - If , any existing in - the with the same name and group should - be over-written. - ObjectAlreadyExistsException - - - - Remove (delete) the with the - given name. - - -

- If removal of the results in an empty group, the - group should be removed from the 's list of - known group names. -

-

- If removal of the results in an 'orphaned' - that is not 'durable', then the should be deleted - also. -

-
- The context. - The name of the to be removed. - The group name of the to be removed. - - if a with the given - name and group was found and removed from the store. - -
- - - Remove (delete) the with the - given name, and store the new given one - which must be associated - with the same job. - - The context. - The name of the to be removed. - The group name of the to be removed. - The new to be stored. - - if a with the given - name and group was found and removed from the store. - - - - - Retrieve the given . - - The context. - The name of the to be retrieved. - The group name of the to be retrieved. - - The desired , or null if there is no - match. - - - - - Store the given . - - The context. - The name. - The to be stored. - If , any existing - in the with the same name and group - should be over-written. - If , any s existing - in the that reference an existing - Calendar with the same name with have their next fire time - re-computed with the new . - ObjectAlreadyExistsException - - - - Remove (delete) the with the - given name. - - - If removal of the would result in - s pointing to non-existent calendars, then a - will be thrown. - - The context. - The name of the to be removed. - - if a with the given name - was found and removed from the store. - - - - - Retrieve the given . - - The context. - The name of the to be retrieved. - - The desired , or null if there is no - match. - - - - - Get the number of s that are - stored in the . - - The context. - - - - - Get the number of s that are - stored in the . - - The context. - - - - - Get the number of s that are - stored in the . - - The context. - - - - - Get the names of all of the s that - have the given group name. -

- If there are no jobs in the given group name, the result should be a - zero-length array (not ). -

-
- The CTX. - Name of the group. - -
- - - Get the names of all of the s - that have the given group name. -

- If there are no triggers in the given group name, the result should be a - zero-length array (not ). -

-
-
- - - Get the names of all of the - groups. -

- If there are no known group names, the result should be a zero-length - array (not ). -

-
-
- - - Get the names of all of the - groups. -

- If there are no known group names, the result should be a zero-length - array (not ). -

-
-
- - - Get the names of all of the s - in the . - -

- If there are no Calendars in the given group name, the result should be - a zero-length array (not ). -

-
-
- - - Get all of the Triggers that are associated to the given Job. - - - If there are no matches, a zero-length array should be returned. - - - - - Get the current state of the identified . - - - - - - - - - - Pause the with the given name. - - - - - Pause all of the s in the - given group. - - - The JobStore should "remember" that the group is paused, and impose the - pause on any new triggers that are added to the group while the group is - paused. - - - - - Pause the with the given name - by - pausing all of its current s. - - - - - Pause all of the s in the given - group - by pausing all of their s. -

- The JobStore should "remember" that the group is paused, and impose the - pause on any new jobs that are added to the group while the group is - paused. -

-
- - -
- - - Resume (un-pause) the with the - given name. - -

- If the missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
- - -
- - - Resume (un-pause) all of the s - in the given group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
-
- - - Gets the paused trigger groups. - - The context. - - - - - Resume (un-pause) the with the - given name. -

- If any of the 's s missed one - or more fire-times, then the 's misfire - instruction will be applied. -

-
-
- - - Resume (un-pause) all of the s in - the given group. -

- If any of the s had s that - missed one or more fire-times, then the 's - misfire instruction will be applied. -

-
-
- - - Pause all triggers - equivalent of calling - on every group. -

- When is called (to un-pause), trigger misfire - instructions WILL be applied. -

-
- -
- - - Resume (un-pause) all triggers - equivalent of calling - on every group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

- -
- -
- - - Get a handle to the next trigger to be fired, and mark it as 'reserved' - by the calling scheduler. - - The context. - If > 0, the JobStore should only return a Trigger - that will fire no later than the time represented in this value as - milliseconds. - - - - - - - Inform the that the scheduler no longer plans to - fire the given , that it had previously acquired - (reserved). - - - - - Inform the that the scheduler is now firing the - given (executing its associated ), - that it had previously acquired (reserved). - - null if the trigger or it's job or calendar no longer exist, or - if the trigger was not successfully put into the 'executing' - state. - - - - - Inform the that the scheduler has completed the - firing of the given (and the execution its - associated ), and that the - in the given should be updated if the - is stateful. - - - - - Supports the persistence. - - - - - - Initializes a new instance of the class. - - - - - Gets the connection and starts a new transaction. - - - - - - Called by the QuartzScheduler before the is - used, in order to give it a chance to Initialize. - - - - - - - - Called by the QuartzScheduler to inform the that - it should free up all of it's resources because the scheduler is - shutting down. - - - - - Removes all volatile data. - - - - - Removes all volatile data. - - - - - Will recover any failed or misfired jobs and clean up the data store as - appropriate. - - - - - Will recover any failed or misfired jobs and clean up the data store as - appropriate. - - - - - Store the given and . - - SchedulingContext - Job to be stored. - Trigger to be stored. - - - - returns true if the given JobGroup - is paused - - - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - - Stores the given . - - - The to be stored. - - If , any existing in the - with the same name & group should be over-written. - - - -

- Insert or update a job. -

-
-
- - - Check existence of a given job. - - - - - Store the given . - - - The to be stored. - - If , any existing in - the with the same name & group should - be over-written. - - - if a with the same name/group already - exists, and replaceExisting is set to false. - - - - - Insert or update a trigger. - - - - - Check existence of a given trigger. - - - - - Remove (delete) the with the given - name, and any s that reference - it. - - - - If removal of the results in an empty group, the - group should be removed from the 's list of - known group names. - - - The name of the to be removed. - The group name of the to be removed. - - if a with the given name & - group was found and removed from the store. - - - - - Delete a job and its listeners. - - - - - - - Delete a trigger, its listeners, and its Simple/Cron/BLOB sub-table entry. - - - - - - - - Retrieve the for the given - . - - The name of the to be retrieved. - The group name of the to be retrieved. - The desired , or null if there is no match. - - - - Remove (delete) the with the - given name. - - - -

- If removal of the results in an empty group, the - group should be removed from the 's list of - known group names. -

- -

- If removal of the results in an 'orphaned' - that is not 'durable', then the should be deleted - also. -

-
- The name of the to be removed. - The group name of the to be removed. - - if a with the given - name & group was found and removed from the store. - -
- - - - - - Retrieve the given . - - The name of the to be retrieved. - The group name of the to be retrieved. - The desired , or null if there is no match. - - - - Get the current state of the identified . - - - - - - - - - - Gets the state of the trigger. - - The conn. - The CTXT. - Name of the trigger. - Name of the group. - - - - - Store the given . - - The name of the calendar. - The to be stored. - - If , any existing - in the with the same name & group - should be over-written. - - - if a with the same name already - exists, and replaceExisting is set to false. - - - - - Remove (delete) the with the given name. - - - If removal of the would result in - s pointing to non-existent calendars, then a - will be thrown. - - The name of the to be removed. - - if a with the given name - was found and removed from the store. - - - - - Retrieve the given . - - The name of the to be retrieved. - The desired , or null if there is no match. - - - - Get the number of s that are - stored in the . - - - - - Get the number of s that are - stored in the . - - - - - Get the number of s that are - stored in the . - - - - - Get the names of all of the s that - have the given group name. - - - If there are no jobs in the given group name, the result should be a - zero-length array (not ). - - - - - Get the names of all of the s - that have the given group name. - - - If there are no triggers in the given group name, the result should be a - zero-length array (not ). - - - - - Get the names of all of the - groups. - - - - If there are no known group names, the result should be a zero-length - array (not ). - - - - - Get the names of all of the - groups. - - - - If there are no known group names, the result should be a zero-length - array (not ). - - - - - Get the names of all of the s - in the . - - - If there are no Calendars in the given group name, the result should be - a zero-length array (not ). - - - - - Get all of the Triggers that are associated to the given Job. - - - If there are no matches, a zero-length array should be returned. - - - - - Pause the with the given name. - - - - - - Pause the with the given name. - - - - - - Pause the with the given name - by - pausing all of its current s. - - - - - - Pause all of the s in the given - group - by pausing all of their s. - - - - - - Determines if a Trigger for the given job should be blocked. - State can only transition to StatePausedBlocked/StateBlocked from - StatePaused/StateWaiting respectively. - - StatePausedBlocked, StateBlocked, or the currentState. - - - - Resume (un-pause) the with the - given name. - - - If the missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - - Resume (un-pause) the with the - given name. - - - If any of the 's s missed one - or more fire-times, then the 's misfire - instruction will be applied. - - - - - - Resume (un-pause) all of the s in - the given group. - - - If any of the s had s that - missed one or more fire-times, then the 's - misfire instruction will be applied. - - - - - - Pause all of the s in the given group. - - - - - - Pause all of the s in the given group. - - - - - - Pause all of the s in the - given group. - - - - - - Resume (un-pause) all of the s - in the given group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
- -
- - - Pause all triggers - equivalent of calling - on every group. -

- When is called (to un-pause), trigger misfire - instructions WILL be applied. -

-
- - -
- - - Resume (un-pause) all triggers - equivalent of calling - on every group. - - - If any missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - - Resume (un-pause) all triggers - equivalent of calling - on every group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
- -
- - - Get a handle to the next N triggers to be fired, and mark them as 'reserved' - by the calling scheduler. - - - - - - Inform the that the scheduler no longer plans to - fire the given , that it had previously acquired - (reserved). - - - - - Inform the that the scheduler has completed the - firing of the given (and the execution its - associated ), and that the - in the given should be updated if the - is stateful. - - - - - Get a list of all scheduler instances in the cluster that may have failed. - This includes this scheduler if it is checking in for the first time. - - - - - Create dummy objects for fired triggers - that have no scheduler state record. Checkin timestamp and interval are - left as zero on these dummy objects. - - List of all current s - - - - Cleanup the given database connection. This means restoring - any modified auto commit or transaction isolation connection - attributes, and then closing the underlying connection. - - - - This is separate from closeConnection() because the Spring - integration relies on being able to overload closeConnection() and - expects the same connection back that it originally returned - from the datasource. - - - - - - Closes the supplied connection. - - (Optional) - - - - Rollback the supplied connection. - - (Optional) - - JobPersistenceException thrown if a SQLException occurs when the - connection is rolled back - - - - - Commit the supplied connection. - - The CTH. - if set to true opens a new transaction. - JobPersistenceException thrown if a SQLException occurs when the - - - - Execute the given callback in a transaction. Depending on the JobStore, - the surrounding transaction may be assumed to be already present - (managed). - - - This method just forwards to ExecuteInLock() with a null lockName. - - - - - - Execute the given callback having aquired the given lock. - Depending on the JobStore, the surrounding transaction may be - assumed to be already present (managed). This version is just a - handy wrapper around executeInLock that doesn't require a return - value. - - - The name of the lock to aquire, for example - "TRIGGER_ACCESS". If null, then no lock is aquired, but the - lockCallback is still executed in a transaction. - - - - - - Execute the given callback having aquired the given lock. - Depending on the JobStore, the surrounding transaction may be - assumed to be already present (managed). - - - The name of the lock to aquire, for example - "TRIGGER_ACCESS". If null, then no lock is aquired, but the - lockCallback is still executed in a transaction. - - - - - Execute the given callback having optionally aquired the given lock. - This uses the non-managed transaction connection. This version is just a - handy wrapper around executeInNonManagedTXLock that doesn't require a return - value. - - - The name of the lock to aquire, for example - "TRIGGER_ACCESS". If null, then no lock is aquired, but the - lockCallback is still executed in a non-managed transaction. - - - - - - Execute the given callback having optionally aquired the given lock. - This uses the non-managed transaction connection. - - - The name of the lock to aquire, for example - "TRIGGER_ACCESS". If null, then no lock is aquired, but the - lockCallback is still executed in a non-managed transaction. - - - - - Get or set the datasource name. - - - - - Gets the log. - - The log. - - - - Get or sets the prefix that should be pre-pended to all table names. - - - - - Set whether string-only properties will be handled in JobDataMaps. - - - - - Get or set the instance Id of the Scheduler (must be unique within a cluster). - - - - - Get or set the instance Id of the Scheduler (must be unique within this server instance). - - - - - Get or set whether this instance is part of a cluster. - - - - - Get or set the frequency at which this instance "checks-in" - with the other instances of the cluster. -- Affects the rate of - detecting failed instances. - - - - - Get or set the maximum number of misfired triggers that the misfire handling - thread will try to recover at one time (within one transaction). The - default is 20. - - - - - Gets or sets the database retry interval. - - The db retry interval. - - - - Get or set whether this instance should use database-based thread - synchronization. - - - - - Whether or not to obtain locks when inserting new jobs/triggers. - Defaults to , which is safest - some db's (such as - MS SQLServer) seem to require this to avoid deadlocks under high load, - while others seem to do fine without. - - - Setting this property to will provide a - significant performance increase during the addition of new jobs - and triggers. - - - - - The time span by which a trigger must have missed its - next-fire-time, in order for it to be considered "misfired" and thus - have its misfire instruction applied. - - - - - Don't call set autocommit(false) on connections obtained from the - DataSource. This can be helpfull in a few situations, such as if you - have a driver that complains if it is called when it is already off. - - - - - Set the transaction isolation level of DB connections to sequential. - - - - - Whether or not the query and update to acquire a Trigger for firing - should be performed after obtaining an explicit DB lock (to avoid - possible race conditions on the trigger's db row). This is - is considered unnecessary for most databases (due to the nature of - the SQL update that is performed), and therefore a superfluous performance hit. - - - - - Get or set the ADO.NET driver delegate class name. - - - - - set the SQL statement to use to select and lock a row in the "locks" - table. - - - - - - Get whether the threads spawned by this JobStore should be - marked as daemon. Possible threads include the - and the . - - - - - - Get whether to check to see if there are Triggers that have misfired - before actually acquiring the lock to recover them. This should be - set to false if the majority of the time, there are are misfired - Triggers. - - - - - - Get the driver delegate for DB operations. - - - - - Get whether String-only properties will be handled in JobDataMaps. - - - - - Indicates whether this job store supports persistence. - - - - - - - Implement this interface to provide the code to execute within - the a transaction template that has no return value. - - - - - - Implement this interface to provide the code to execute within - the a transaction template. If no return value is required, execute - should just return null. - - - - - - - - An interface for classes wishing to provide the service of loading classes - and resources within the scheduler... - - James House - - - - Called to give the ClassLoadHelper a chance to Initialize itself, - including the oportunity to "steal" the class loader off of the calling - thread, which is the thread that is initializing Quartz. - - - - - Return the class with the given name. - - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.net.URL object - - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.io.InputStream object - - - - - Helper class for returning the composite result of trying - to recover misfired jobs. - - - - - Initializes a new instance of the class. - - if set to true [has more misfired triggers]. - The processed misfired trigger count. - - - - - Gets a value indicating whether this instance has more misfired triggers. - - - true if this instance has more misfired triggers; otherwise, false. - - - - - Gets the processed misfired trigger count. - - The processed misfired trigger count. - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - - - Called by the QuartzScheduler to inform the that - it should free up all of it's resources because the scheduler is - shutting down. - - - - - Gets the non managed TX connection. - - - - - - Execute the given callback having optionally aquired the given lock. - Because CMT assumes that the connection is already part of a managed - transaction, it does not attempt to commit or rollback the - enclosing transaction. - - - - - - - The name of the lock to aquire, for example - "TRIGGER_ACCESS". If null, then no lock is aquired, but the - txCallback is still executed in a transaction. - - Callback to execute. - - - - Utility class to keep track of both active transaction - and connection. - - - - - Initializes a new instance of the class. - - The connection. - The transaction. - - - - Gets or sets the connection. - - The connection. - - - - Gets or sets the transaction. - - The transaction. - - - - is meant to be used in a standalone environment. - Both commit and rollback will be handled by this class. - - Jeffrey Wescott - James House - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - - - For , the non-managed TX connection is just - the normal connection because it is not CMT. - - - - - - Execute the given callback having optionally aquired the given lock. - For , because it manages its own transactions - and only has the one datasource, this is the same behavior as - . - - - The name of the lock to aquire, for example "TRIGGER_ACCESS". - If null, then no lock is aquired, but the lockCallback is still - executed in a transaction. - - Callback to execute. - - - - - - - - - Exception class for when there is a failure obtaining or releasing a - resource lock. - - - James House - - - - An exception that is thrown to indicate that there has been a failure in the - scheduler's underlying persistence mechanism. - - James House - - - -

- Create a with the given message. -

-
-
- - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - -

- Create a with the given message - and error code. -

-
-
- -

- Create a with the given message - and cause. -

-
-
- -

- Create a with the given message, - cause and error code. -

-
-
- - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - This is a driver delegate for the MySQL ADO.NET driver. - - Marko Lahma - - - - Initializes a new instance of the class. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The logger. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Gets the select next trigger to acquire SQL clause. - MySQL version with LIMIT support. - - - - - - Exception class for when a driver delegate cannot be found for a given - configuration, or lack thereof. - - Jeffrey Wescott - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - This is a driver delegate for the Oracle database. - - Marko Lahma - - - - Initializes a new instance of the class. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The logger. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Creates the SQL for select next trigger to acquire. - - - - - Gets the select next trigger to acquire SQL clause. - Oracle version with rownum support. - - - - - - This is a driver delegate for the PostgreSQL ADO.NET driver. - - Marko Lahma - - - - Initializes a new instance of the class. - - The log. - The table prefix. - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The log. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Gets the select next trigger to acquire SQL clause. - PostgreSQL version with LIMIT support. - - - - - - Conveys a scheduler-instance state record. - - James House - - - - Gets or sets the checkin interval. - - The checkin interval. - - - - Gets or sets the checkin timestamp. - - The checkin timestamp. - - - - Gets or sets the scheduler instance id. - - The scheduler instance id. - - - - Internal in-memory lock handler for providing thread/resource locking in - order to protect resources from being altered by multiple threads at the - same time. - - James House - - - - Grants a lock on the identified resource to the calling thread (blocking - until it is available). - - True if the lock was obtained. - - - Release the lock on the identified resource if it is held by the calling - thread. - - - - - Determine whether the calling thread owns a lock on the identified - resource. - - - - - Gets the thread locks. - - The thread locks. - - - - Whether this Semaphore implementation requires a database connection for - its lock management operations. - - - - - - - - - This is a driver delegate for the SQLiteDelegate ADO.NET driver. - - Marko Lahma - - - - Initializes a new instance of the class. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The logger. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Gets the select next trigger to acquire SQL clause. - SQLite version with LIMIT support. - - - - - - A SQL Server specific driver delegate. - - Marko Lahma - - - - Initializes a new instance of the class. - - the logger to use during execution - the prefix of all table names - The instance id. - The db provider. - - - - Initializes a new instance of the class. - - The logger. - The table prefix. - The instance id. - The db provider. - if set to true [use properties]. - - - - Creates the SQL for select next trigger to acquire. - - - - - Gets the select next trigger to acquire SQL clause. - SQL Server specific version with TOP functionality - - - - - - Internal database based lock handler for providing thread/resource locking - in order to protect resources from being altered by multiple threads at the - same time. - - James House - - - - Initializes a new instance of the class. - - The table prefix. - The select with lock SQL. - - - - Execute the SQL select for update that will lock the proper database row. - - - - Provide thread/resource locking in order to protect - resources from being altered by multiple threads at the same time using - a db row update. - - - Note: This Semaphore implementation is useful for databases that do - not support row locking via "SELECT FOR UPDATE" type syntax, for example - Microsoft SQLServer (MSSQL). - - - - - Initializes a new instance of the class. - - - - - Execute the SQL that will lock the proper database row. - - - - - - - - This implementation of the Calendar excludes a set of days of the year. You - may use it to exclude bank holidays which are on the same date every year. - - - - Juergen Donnerstag - - - - This implementation of the Calendar may be used (you don't have to) as a - base class for more sophisticated one's. It merely implements the base - functionality required by each Calendar. - - - Regarded as base functionality is the treatment of base calendars. Base - calendar allow you to chain (stack) as much calendars as you may need. For - example to exclude weekends you may use WeeklyCalendar. In order to exclude - holidays as well you may define a WeeklyCalendar instance to be the base - calendar for HolidayCalendar instance. - - - Juergen Donnerstag - James House - - - - An interface to be implemented by objects that define spaces of time during - which an associated may fire. - - - Calendars do not define actual fire times, but rather are used to limit a - from firing on its normal schedule if necessary. Most - Calendars include all times by default and allow the user to specify times to - exclude. As such, it is often useful to think of Calendars as being used to - exclude a block of time, as opposed to include - a block of time. (i.e. the schedule "fire every five minutes except on Sundays" could be - implemented with a and a which excludes Sundays) - - James House - Juergen Donnerstag - - - - Determine whether the given UTC time is 'included' by the - Calendar. - - - - - Determine the next UTC time that is 'included' by the - Calendar after the given UTC time. - - - - - Gets or sets a description for the instance - may be - useful for remembering/displaying the purpose of the calendar, though - the description has no meaning to Quartz. - - - - - Set a new base calendar or remove the existing one. - Get the base calendar. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The base calendar. - - - - Initializes a new instance of the class. - - The time zone. - - - - Initializes a new instance of the class. - - The base calendar. - The time zone. - - - - checks whether two arrays have - the same length and - for any given place there are equal elements - in both arrays - - - - - - Get the base calendar. Will be null, if not set. - - - - - Check if date/time represented by timeStamp is included. If included - return true. The implementation of BaseCalendar simply calls the base - calendars IsTimeIncluded() method if base calendar is set. - - - - - - Determine the next UTC time (in milliseconds) that is 'included' by the - Calendar after the given time. Return the original value if timeStamp is - included. Return 0 if all days are excluded. - - - - - - Gets or sets the time zone. - - The time zone. - - - - Gets or sets the description given to the instance by - its creator (if any). - - - - - Set a new base calendar or remove the existing one - - - - - - Constructor - - - - - Constructor - - The base calendar. - - - - Return true, if day is defined to be exluded. - - - - - Redefine a certain day to be excluded (true) or included (false). - - - - - Determine whether the given UTC time (in milliseconds) is 'included' by the - Calendar. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Determine the next UTC time (in milliseconds) that is 'included' by the - Calendar after the given time. Return the original value if timeStampUtc is - included. Return 0 if all days are excluded. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Get or the array which defines the exclude-value of each day of month. - Setting will redefine the array of days excluded. The array must of size greater or - equal 31. - - - - - This implementation of the Calendar excludes the set of times expressed by a - given CronExpression. - - - For example, you could use this calendar to exclude all but business hours (8AM - 5PM) every - day using the expression "* * 0-7,18-23 ? * *". -

- It is important to remember that the cron expression here describes a set of - times to be excluded from firing. Whereas the cron expression in - CronTrigger describes a set of times that can - be included for firing. Thus, if a has a - given cron expression and is associated with a with - the same expression, the calendar will exclude all the times the - trigger includes, and they will cancel each other out. -

-
- Aaron Craven -
- - - Initializes a new instance of the class. - - a String representation of the desired cron expression - - - - Create a with the given cron expression and - . - - - the base calendar for this calendar instance - see BaseCalendar for more information on base - calendar functionality - - a String representation of the desired cron expression - - - - Create a with the given cron expression and - . - - - the base calendar for this calendar instance - see BaseCalendar for more information on base - calendar functionality - - a String representation of the desired cron expression - - - - - Determine whether the given time is 'included' by the - Calendar. - - the time to test - a boolean indicating whether the specified time is 'included' by the CronCalendar - - - - Determine the next time that is 'included' by the - Calendar after the given time. Return the original value if timeStamp is - included. Return 0 if all days are excluded. - - - - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Sets the cron expression for the calendar to a new value. - - The expression. - - - - Returns the object representation of the cron expression that defines the - dates and times this calendar excludes. - - - - - This implementation of the Calendar excludes (or includes - see below) a - specified time range each day. - - - For example, you could use this calendar to - exclude business hours (8AM - 5PM) every day. Each - only allows a single time range to be specified, and that time range may not - * cross daily boundaries (i.e. you cannot specify a time range from 8PM - 5AM). - If the property is (default), - the time range defines a range of times in which triggers are not allowed to - * fire. If is , the time range - is inverted: that is, all times outside the defined time range - are excluded. -

- Note when using , it behaves on the same principals - as, for example, WeeklyCalendar defines a set of days that are - excluded every week. Likewise, defines a - set of times that are excluded every day. -

-
- Mike Funk - Aaron Craven -
- - - Create a with a time range defined by the - specified strings and no baseCalendar. - and - must be in the format "HH:MM[:SS[:mmm]]" where: -
    -
  • - HH is the hour of the specified time. The hour should be - specified using military (24-hour) time and must be in the range - 0 to 23. -
  • -
  • - MM is the minute of the specified time and must be in the range - 0 to 59. -
  • -
  • - SS is the second of the specified time and must be in the range - 0 to 59. -
  • -
  • - mmm is the millisecond of the specified time and must be in the - range 0 to 999. -
  • -
  • items enclosed in brackets ('[', ']') are optional.
  • -
  • - The time range starting time must be before the time range ending - time. Note this means that a time range may not cross daily - boundaries (10PM - 2AM) -
  • -
-
-
- - - Create a with a time range defined by the - specified strings and the specified baseCalendar. - and - must be in the format "HH:MM[:SS[:mmm]]" where: -
    -
  • - HH is the hour of the specified time. The hour should be - specified using military (24-hour) time and must be in the range - 0 to 23. -
  • -
  • - MM is the minute of the specified time and must be in the range - 0 to 59. -
  • -
  • - SS is the second of the specified time and must be in the range - 0 to 59. -
  • -
  • - mmm is the millisecond of the specified time and must be in the - range 0 to 999. -
  • -
  • - items enclosed in brackets ('[', ']') are optional. -
  • -
  • - The time range starting time must be before the time range ending - time. Note this means that a time range may not cross daily - boundaries (10PM - 2AM) -
  • -
-
- The base calendar for this calendar instance see BaseCalendar for more - information on base calendar functionality. -
- - - Create a with a time range defined by the - specified values and no baseCalendar. Values are subject to - the following validations: -
    -
  • - Hours must be in the range 0-23 and are expressed using military - (24-hour) time. -
  • -
  • Minutes must be in the range 0-59
  • -
  • Seconds must be in the range 0-59
  • -
  • Milliseconds must be in the range 0-999
  • -
  • - The time range starting time must be before the time range ending - time. Note this means that a time range may not cross daily - boundaries (10PM - 2AM) -
  • -
-
- The range starting hour of day. - The range starting minute. - The range starting second. - The range starting millis. - The range ending hour of day. - The range ending minute. - The range ending second. - The range ending millis. -
- - - Create a with a time range defined by the - specified values and the specified . Values are - subject to the following validations: -
    -
  • - Hours must be in the range 0-23 and are expressed using military - (24-hour) time. -
  • -
  • Minutes must be in the range 0-59
  • -
  • Seconds must be in the range 0-59
  • -
  • Milliseconds must be in the range 0-999
  • -
  • - The time range starting time must be before the time range ending - time. Note this means that a time range may not cross daily - boundaries (10PM - 2AM) -
  • -
-
- The range starting hour of day. - The range starting minute. - The range starting second. - The range starting millis. - The range ending hour of day. - The range ending minute. - The range ending second. - The range ending millis. -
- - - Create a with a time range defined by the - specified s and no - baseCalendar. The Calendars are subject to the following - considerations: -
    -
  • - Only the time-of-day fields of the specified Calendars will be - used (the date fields will be ignored) -
  • -
  • - The starting time must be before the ending time of the defined - time range. Note this means that a time range may not cross - daily boundaries (10PM - 2AM). (because only time fields are - are used, it is possible for two Calendars to represent a valid - time range and - rangeStartingCalendar.after(rangeEndingCalendar) == true) - -
  • -
-
- The range starting calendar. - The range ending calendar. -
- - - Create a with a time range defined by the - specified s and the specified - . The Calendars are subject to the following - considerations: -
    -
  • - Only the time-of-day fields of the specified Calendars will be - used (the date fields will be ignored) -
  • -
  • - The starting time must be before the ending time of the defined - time range. Note this means that a time range may not cross - daily boundaries (10PM - 2AM). (because only time fields are - are used, it is possible for two Calendars to represent a valid - time range and - rangeStartingCalendarUtc > rangeEndingCalendarUtc == true) -
  • -
-
- The range starting calendar. - The range ending calendar. -
- - - Create a with a time range defined by the - specified values and no baseCalendar. The values are - subject to the following considerations: -
    -
  • - Only the time-of-day portion of the specified values will be - used -
  • -
  • - The starting time must be before the ending time of the defined - time range. Note this means that a time range may not cross - daily boundaries (10PM - 2AM). (because only time value are - are used, it is possible for the two values to represent a valid - time range and rangeStartingTime > rangeEndingTime) -
  • -
-
- The range starting time in millis. - The range ending time in millis. -
- - - Create a with a time range defined by the - specified values and the specified . The values - are subject to the following considerations: -
    -
  • - Only the time-of-day portion of the specified values will be - used -
  • -
  • - The starting time must be before the ending time of the defined - time range. Note this means that a time range may not cross - daily boundaries (10PM - 2AM). (because only time value are - are used, it is possible for the two values to represent a valid - time range and rangeStartingTime > rangeEndingTime) -
  • -
-
- The range starting time in millis. - The range ending time in millis. -
- - - Determine whether the given time is 'included' by the - Calendar. - - - - - - - Determine the next time (in milliseconds) that is 'included' by the - Calendar after the given time. Return the original value if timeStamp is - included. Return 0 if all days are excluded. - - - - - - - - Returns the start time of the time range of the day - specified in . - - - a DateTime representing the start time of the - time range for the specified date. - - - - - Returns the end time of the time range of the day - specified in - - - A DateTime representing the end time of the - time range for the specified date. - - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Sets the time range for the to the times - represented in the specified Strings. - - The range starting time string. - The range ending time string. - - - - Sets the time range for the to the times - represented in the specified values. - - The range starting hour of day. - The range starting minute. - The range starting second. - The range starting millis. - The range ending hour of day. - The range ending minute. - The range ending second. - The range ending millis. - - - - Sets the time range for the to the times - represented in the specified s. - - The range starting calendar. - The range ending calendar. - - - - Sets the time range for the to the times - represented in the specified values. - - The range starting time. - The range ending time. - - - - Gets the start of day, practically zeroes time part. - - The time. - - - - - Gets the end of day, pratically sets time parts to maximum allowed values. - - The time. - - - - - Checks the specified values for validity as a set of time values. - - The hour of day. - The minute. - The second. - The millis. - - - - Indicates whether the time range represents an inverted time range (see - class description). - - true if invert time range; otherwise, false. - - - - This implementation of the Calendar stores a list of holidays (full days - that are excluded from scheduling). - - - The implementation DOES take the year into consideration, so if you want to - exclude July 4th for the next 10 years, you need to add 10 entries to the - exclude list. - - Sharada Jambula - Juergen Donnerstag - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The base calendar. - - - - Determine whether the given time (in milliseconds) is 'included' by the - Calendar. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Determine the next time (in milliseconds) that is 'included' by the - Calendar after the given time. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Add the given Date to the list of excluded days. Only the month, day and - year of the returned dates are significant. - - - - - Removes the excluded date. - - The date to remove. - - - - Returns a of Dates representing the excluded - days. Only the month, day and year of the returned dates are - significant. - - - - - This implementation of the Calendar excludes a set of days of the month. You - may use it to exclude every 1. of each month for example. But you may define - any day of a month. - - - - Juergen Donnerstag - - - - Initializes a new instance of the class. - - - - - Constructor - - The base calendar. - - - - Initialize internal variables - - - - - Return true, if mday is defined to be exluded. - - - - - Redefine a certain day of the month to be excluded (true) or included - (false). - - - - - Check if all days are excluded. That is no day is included. - - boolean - - - - - Determine whether the given time (in milliseconds) is 'included' by the - Calendar. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Determine the next time (in milliseconds) that is 'included' by the - Calendar after the given time. Return the original value if timeStamp is - included. Return DateTime.MinValue if all days are excluded. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Get or set the array which defines the exclude-value of each day of month - Setting will redefine the array of days excluded. The array must of size greater or - equal 31. - - - - - This implementation of the Calendar excludes a set of days of the week. You - may use it to exclude weekends for example. But you may define any day of - the week. - - - - Juergen Donnerstag - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The base calendar. - - - - Initialize internal variables - - - - - Return true, if wday is defined to be exluded. E. g. - saturday and sunday. - - - - - Redefine a certain day of the week to be excluded (true) or included - (false). Use java.util.Calendar's constants like MONDAY to determine the - wday. - - - - - Check if all week ays are excluded. That is no day is included. - - - - - Determine whether the given time (in milliseconds) is 'included' by the - Calendar. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Determine the next time (in milliseconds) that is 'included' by the - Calendar after the given time. Return the original value if timeStamp is - included. Return DateTime.MinValue if all days are excluded. -

- Note that this Calendar is only has full-day precision. -

-
-
- - - Get the array with the week days. - Setting will redefine the array of days excluded. The array must of size greater or - equal 8. java.util.Calendar's constants like MONDAY should be used as - index. A value of true is regarded as: exclude it. - - - - - A singleton implementation of . - - - Here are some examples of using this class: -

- To create a scheduler that does not write anything to the database (is not - persistent), you can call : -

-
-            DirectSchedulerFactory.Instance.CreateVolatileScheduler(10); // 10 threads 
-            // don't forget to start the scheduler: 
-            DirectSchedulerFactory.Instance.GetScheduler().Start();
-            
-

- Several create methods are provided for convenience. All create methods - eventually end up calling the create method with all the parameters: -

-
-            public void createScheduler(String schedulerName, string schedulerInstanceId, ThreadPool threadPool, JobStore jobStore, string rmiRegistryHost, int rmiRegistryPort)
-            
-

- Here is an example of using this method: -

-
-            // create the thread pool 
-            SimpleThreadPool threadPool = new SimpleThreadPool(maxThreads, Thread.NORM_PRIORITY); 
-            threadPool.Initialize(); 
-            // create the job store 
-            JobStore jobStore = new RAMJobStore(); 
-            jobStore.Initialize();
-            
-            DirectSchedulerFactory.Instance.CreateScheduler("My Quartz Scheduler", "My Instance", threadPool, jobStore, "localhost", 1099); 
-            // don't forget to start the scheduler: 
-            DirectSchedulerFactory.Instance.GetScheduler("My Quartz Scheduler", "My Instance").start();
-            
-
> - Mohammad Rezaei - James House - - -
- - - Provides a mechanism for obtaining client-usable handles to - instances. - - - - James House - - - - Returns a client-usable handle to a . - - - - - Returns a handle to the Scheduler with the given name, if it exists. - - - - - Returns handles to all known Schedulers (made by any SchedulerFactory - within this app domain.). - - - - - Initializes a new instance of the class. - - - - - Creates an in memory job store () - The thread priority is set to Thread.NORM_PRIORITY - - The number of threads in the thread pool - - - - Creates a proxy to a remote scheduler. This scheduler can be retrieved - via . - - SchedulerException - - - - Same as , - with the addition of specifying the scheduler name and instance ID. This - scheduler can only be retrieved via . - - The name for the scheduler. - The instance ID for the scheduler. - - SchedulerException - - - - Creates a scheduler using the specified thread pool and job store. This - scheduler can be retrieved via DirectSchedulerFactory#GetScheduler() - - - The thread pool for executing jobs - - - The type of job store - - SchedulerException - if initialization failed - - - - - Same as DirectSchedulerFactory#createScheduler(ThreadPool threadPool, JobStore jobStore), - with the addition of specifying the scheduler name and instance ID. This - scheduler can only be retrieved via DirectSchedulerFactory#getScheduler(String) - - The name for the scheduler. - The instance ID for the scheduler. - The thread pool for executing jobs - The type of job store - - - - Creates a scheduler using the specified thread pool and job store and - binds it to RMI. - - The name for the scheduler. - The instance ID for the scheduler. - The thread pool for executing jobs - The type of job store - The idle wait time. You can specify "-1" for - the default value, which is currently 30000 ms. - The db failure retry interval. - - - - Creates a scheduler using the specified thread pool and job store and - binds it to RMI. - - The name for the scheduler. - The instance ID for the scheduler. - The thread pool for executing jobs - The type of job store - - The idle wait time. You can specify TimeSpan.Zero for - the default value, which is currently 30000 ms. - The db failure retry interval. - - - - Returns a handle to the Scheduler produced by this factory. -

- you must call createRemoteScheduler or createScheduler methods before - calling getScheduler() -

-
- - SchedulerException -
- - - Returns a handle to the Scheduler with the given name, if it exists. - - - - - Gets the log. - - The log. - - - - Gets the instance. - - The instance. - - -

- Returns a handle to all known Schedulers (made by any - StdSchedulerFactory instance.). -

-
-
- - - An implementation of the interface that remotely - proxies all method calls to the equivalent call on a given - instance, via remoting or similar technology. - - - - - James House - - - - This is the main interface of a Quartz Scheduler. - - - - A maintains a registry of - s and s. Once - registered, the is responsible for executing - s when their associated s - fire (when their scheduled time arrives). - - - instances are produced by a - . A scheduler that has already been - created/initialized can be found and used through the same factory that - produced it. After a has been created, it is in - "stand-by" mode, and must have its method - called before it will fire any s. - - - s are to be created by the 'client program', by - defining a class that implements the interface. - objects are then created (also by the client) to - define a individual instances of the . - instances can then be registered with the - via the %IScheduler.ScheduleJob(JobDetail, - Trigger)% or %IScheduler.AddJob(JobDetail, bool)% method. - - - s can then be defined to fire individual - instances based on given schedules. - s are most useful for one-time firings, or - firing at an exact moment in time, with N repeats with a given delay between - them. s allow scheduling based on time of day, - day of week, day of month, and month of year. - - - s and s have a name and - group associated with them, which should uniquely identify them within a single - . The 'group' feature may be useful for creating - logical groupings or categorizations of s and - s. If you don't have need for assigning a group to a - given s of s, then you can use - the constant defined on - this interface. - - - Stored s can also be 'manually' triggered through the - use of the %IScheduler.TriggerJob(string, string)% function. - - - Client programs may also be interested in the 'listener' interfaces that are - available from Quartz. The interface provides - notifications of executions. The - interface provides notifications of - firings. The - interface provides notifications of events and - errors. - - - The setup/configuration of a instance is very - customizable. Please consult the documentation distributed with Quartz. - - - - - - - - - - - - returns true if the given JobGroup - is paused - - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - Get a object describiing the settings - and capabilities of the scheduler instance. - - - Note that the data returned is an 'instantaneous' snap-shot, and that as - soon as it's returned, the meta data values may be different. - - - - - Return a list of objects that - represent all currently executing Jobs in this Scheduler instance. - - -

- This method is not cluster aware. That is, it will only return Jobs - currently executing in this Scheduler instance, not across the entire - cluster. -

-

- Note that the list returned is an 'instantaneous' snap-shot, and that as - soon as it's returned, the true list of executing jobs may be different. - Also please read the doc associated with - - especially if you're using remoting. -

-
- -
- - - Get the names of all groups that are paused. - - - - - Get the global that has - the given name. - - Global job listener's name - - - - - Get the global that - has the given name. - - Global trigger listener's name - - - - - Starts the 's threads that fire s. - When a scheduler is first created it is in "stand-by" mode, and will not - fire triggers. The scheduler can also be put into stand-by mode by - calling the method. - - - The misfire/recovery process will be started, if it is the initial call - to this method on this scheduler instance. - - - - - - - - Calls after the indicated delay. - (This call does not block). This can be useful within applications that - have initializers that create the scheduler immediately, before the - resources needed by the executing jobs have been fully initialized. - - - - - - - - Temporarily halts the 's firing of s. - - -

- When is called (to bring the scheduler out of - stand-by mode), trigger misfire instructions will NOT be applied - during the execution of the method - any misfires - will be detected immediately afterward (by the 's - normal process). -

-

- The scheduler is not destroyed, and can be re-started at any time. -

-
- - -
- - - Halts the 's firing of s, - and cleans up all resources associated with the Scheduler. Equivalent to - . - - - The scheduler cannot be re-started. - - - - - - Halts the 's firing of s, - and cleans up all resources associated with the Scheduler. - - - The scheduler cannot be re-started. - - - if the scheduler will not allow this method - to return until all currently executing jobs have completed. - - - - - - Add the given to the - Scheduler, and associate the given with - it. - - - If the given Trigger does not reference any , then it - will be set to reference the Job passed with it into this method. - - - - - Schedule the given with the - identified by the 's settings. - - - - - Remove the indicated from the scheduler. - - - - - Remove (delete) the with the - given name, and store the new given one - which must be associated - with the same job (the new trigger must have the job name & group specified) - - however, the new trigger need not have the same name as the old trigger. - - - The name of the to be replaced. - - - The group name of the to be replaced. - - - The new to be stored. - - - if a with the given - name and group was not found and removed from the store, otherwise - the first fire time of the newly scheduled trigger. - - - - - Add the given to the Scheduler - with no associated - . The will be 'dormant' until - it is scheduled with a , or - is called for it. - - - The must by definition be 'durable', if it is not, - SchedulerException will be thrown. - - - - - Delete the identified from the Scheduler - and any - associated s. - - true if the Job was found and deleted. - - - - Trigger the identified - (Execute it now) - the generated trigger will be non-volatile. - - - - - Trigger the identified - (Execute it now) - the generated trigger will be volatile. - - - - - Trigger the identified - (Execute it now) - the generated trigger will be non-volatile. - - the name of the Job to trigger - the group name of the Job to trigger - - the (possibly ) JobDataMap to be - associated with the trigger that fires the job immediately. - - - - - Trigger the identified - (Execute it now) - the generated trigger will be volatile. - - the name of the Job to trigger - the group name of the Job to trigger - - the (possibly ) JobDataMap to be - associated with the trigger that fires the job immediately. - - - - - Pause the with the given - name - by pausing all of its current s. - - - - - Pause all of the s in the - given group - by pausing all of their s. - - - The Scheduler will "remember" that the group is paused, and impose the - pause on any new jobs that are added to the group while the group is - paused. - - - - - - Pause the with the given name. - - - - - Pause all of the s in the given group. - - - The Scheduler will "remember" that the group is paused, and impose the - pause on any new triggers that are added to the group while the group is - paused. - - - - - - Resume (un-pause) the with - the given name. - - - If any of the 's s missed one - or more fire-times, then the 's misfire - instruction will be applied. - - - - - Resume (un-pause) all of the s - in the given group. - - - If any of the s had s that - missed one or more fire-times, then the 's - misfire instruction will be applied. - - - - - - Resume (un-pause) the with the given - name. - - - If the missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - Resume (un-pause) all of the s in the - given group. - - - If any missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - - Pause all triggers - similar to calling - on every group, however, after using this method - must be called to clear the scheduler's state of 'remembering' that all - new triggers will be paused as they are added. - - - When is called (to un-pause), trigger misfire - instructions WILL be applied. - - - - - - - - Resume (un-pause) all triggers - similar to calling - on every group. - - - If any missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - - Get the names of all the s in the given group. - - - - - Get all s that are associated with the - identified . - - - - - Get the names of all the s in the given - group. - - - - - Get the for the - instance with the given name and group. - - - - - Get the instance with the given name and - group. - - - - - Get the current state of the identified . - - - - - - - - - - - Add (register) the given to the Scheduler. - - Name of the calendar. - The calendar. - if set to true [replace]. - whether or not to update existing triggers that - referenced the already existing calendar so that they are 'correct' - based on the new trigger. - - - - Delete the identified from the Scheduler. - - Name of the calendar. - - true if the Calendar was found and deleted. - - - - - Get the instance with the given name. - - - - - Get the names of all registered . - - An array of calendar names. - - - - Request the interruption, within this Scheduler instance, of all - currently executing instances of the identified , which - must be an implementor of the interface. - - -

- If more than one instance of the identified job is currently executing, - the method will be called on - each instance. However, there is a limitation that in the case that - on one instances throws an exception, all - remaining instances (that have not yet been interrupted) will not have - their method called. -

- -

- If you wish to interrupt a specific instance of a job (when more than - one is executing) you can do so by calling - to obtain a handle - to the job instance, and then invoke on it - yourself. -

-

- This method is not cluster aware. That is, it will only interrupt - instances of the identified InterruptableJob currently executing in this - Scheduler instance, not across the entire cluster. -

-
- - - - true is at least one instance of the identified job was found and interrupted. - - - -
- - - Add the given to the 's - global list. - - - Listeners in the 'global' list receive notification of execution events - for ALL s. - - - - - Add the given to the 's - list, of registered s. - - - - - Remove the given from the 's - list of global listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Remove the identifed from the 's - list of global listeners. - - Global job listener's name - true if the identifed listener was found in the list, and removed - - - - Remove the identifed from the 's - list of registered listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Get the non-global that has - the given name. - - - - - Add the given to the 's - global list. - - - Listeners in the 'global' list receive notification of execution events - for ALL s. - - - - - Add the given to the 's - list, of registered s. - - - - - Remove the given from the 's - list of global listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Remove the identifed from the 's - list of global listeners. - - The name. - true if the identifed listener was found in the list, and removed. - - - - Remove the identifed from the - 's list of registered listeners. - - - true if the identifed listener was found in the list, and removed. - - - - - Get the non-global that - has the given name. - - - - - Register the given with the - - - - - Remove the given from the - . - - true if the identifed listener was found in the list, and - removed. - - - - - Returns the name of the . - - - - - Returns the instance Id of the . - - - - - Returns the of the . - - - - - Reports whether the is in stand-by mode. - - - - - - - Reports whether the has been Shutdown. - - - - - Set the that will be responsible for producing - instances of classes. - - - JobFactories may be of use to those wishing to have their application - produce instances via some special mechanism, such as to - give the opertunity for dependency injection. - - - - - - Get the names of all known groups. - - - - - Get the names of all known groups. - - - - - Get the names of all registered s. - - - - - Get a List containing all of the s in - the 'sglobal list. - - - - - Get a Set containing the names of all the non-global - s registered with the . - - - - - Get a List containing all of the - s in the 'sglobal list. - - - - - Get a Set containing the names of all the non-global - s registered with the . - - - - - Get a List containing all of the - s registered with the . - - - - - Whether the scheduler has been started. - - - Note: This only reflects whether has ever - been called on this Scheduler, so it will return even - if the is currently in standby mode or has been - since shutdown. - - - - - - - - Construct a instance to proxy the given - RemoteableQuartzScheduler instance, and with the given - . - - - - - returns true if the given JobGroup - is paused - - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - Get a object describiing the settings - and capabilities of the scheduler instance. -

- Note that the data returned is an 'instantaneous' snap-shot, and that as - soon as it's returned, the meta data values may be different. -

-
- -
- - - Calls the equivalent method on the 'proxied' . - - - - - Get the global that has - the given name. - - - - - - - Get the global that - has the given name. - - - - - - - Get the names of all groups that are paused. - - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Get the names of all registered . - - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Remove the identifed from the 's - list of global listeners. - - - - true if the identifed listener was found in the list, and removed - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Remove the identifed from the 's - list of global listeners. - - The name. - - true if the identifed listener was found in the list, and removed. - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Returns the name of the . - - - - - Returns the instance Id of the . - - - - - Gets or sets the remote scheduler address. - - The remote scheduler address. - - - - Returns the of the . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Gets a value indicating whether this instance is paused. - - true if this instance is paused; otherwise, false. - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equialent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Set the that will be responsible for producing - instances of classes. -

- JobFactories may be of use to those wishing to have their application - produce instances via some special mechanism, such as to - give the opertunity for dependency injection. -

-
- - - SchedulerException -
- - - Whether the scheduler has been started. - - - - Note: This only reflects whether has ever - been called on this Scheduler, so it will return even - if the is currently in standby mode or has been - since shutdown. - - - - - - - - Holds references to Scheduler instances - ensuring uniqueness, and - preventing garbage collection, and allowing 'global' lookups. - - James House - Marko Lahma (.NET) - - - - Binds the specified sched. - - The sched. - - - - Removes the specified sched name. - - Name of the sched. - - - - - Lookups the specified sched name. - - Name of the sched. - - - - - Lookups all. - - - - - - Gets the singleton instance. - - The instance. - - - - Responsible for creating the instances of - to be used within the instance. -

- This implementation does not re-use any objects, it simply makes a new - JobRunShell each time is called. -

-
- James House -
- - - Initialize the factory, providing a handle to the - that should be made available within the and - the s within it, and a handle to the - that the shell will use in its own - operations with the . - - - - - Called by the to obtain instances of - . - - - - - Called by the to return instances of - . - - - - - An implementation of the interface that directly - proxies all method calls to the equivalent call on a given - instance. - - - - - James House - - - - returns true if the given JobGroup - is paused - - - - - - - returns true if the given TriggerGroup - is paused - - - - - - - Get a object describiing the settings - and capabilities of the scheduler instance. -

- Note that the data returned is an 'instantaneous' snap-shot, and that as - soon as it's returned, the meta data values may be different. -

-
- -
- - - Calls the equivalent method on the 'proxied' . - - - - - - - - - Get the global that has - the given name. - - - - - - - Get the global that - has the given name. - - - - - - - Construct a instance to proxy the given - instance, and with the given . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Get the names of all registered . - - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Remove the identifed from the 's - list of global listeners. - - - - true if the identifed listener was found in the list, and removed - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Remove the identifed from the 's - list of global listeners. - - The name. - - true if the identifed listener was found in the list, and removed. - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Request the interruption, within this Scheduler instance, of all - currently executing instances of the identified , which - must be an implementor of the interface. - - -

- If more than one instance of the identified job is currently executing, - the method will be called on - each instance. However, there is a limitation that in the case that - on one instances throws an exception, all - remaining instances (that have not yet been interrupted) will not have - their method called. -

-

- If you wish to interrupt a specific instance of a job (when more than - one is executing) you can do so by calling - to obtain a handle - to the job instance, and then invoke on it - yourself. -

-

- This method is not cluster aware. That is, it will only interrupt - instances of the identified InterruptableJob currently executing in this - Scheduler instance, not across the entire cluster. -

-
- - - true is at least one instance of the identified job was found and interrupted. - UnableToInterruptJobException if the job does not implement - - -
- - - Returns the name of the . - - - - - Returns the instance Id of the . - - - - - Returns the of the . - - - - - Whether the scheduler has been started. - - - - Note: This only reflects whether has ever - been called on this Scheduler, so it will return even - if the is currently in standby mode or has been - since shutdown. - - - - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' , - passing the associated with this - instance. - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - Calls the equivalent method on the 'proxied' . - - - - - - - - - An implementation of that - does all of it's work of creating a instance - based on the contenents of a properties file. - - -

- By default a properties are loaded from App.config's quartz section. - If that fails, then the "quartz.properties" - file located (as a embedded resource) in Quartz.dll is loaded. If you - wish to use a file other than these defaults, you must define the system - property 'quartz.properties' to point to the file you want. -

- -

- See the sample properties that are distributed with Quartz for - information about the various settings available within the file. -

- -

- Alternativly, you can explicitly Initialize the factory by calling one of - the methods before calling . -

- -

- Instances of the specified , - , classes will be created - by name, and then any additional properties specified for them in the config - file will be set on the instance by calling an equivalent 'set' method. For - example if the properties file contains the property 'quartz.jobStore. - myProp = 10' then after the JobStore class has been instantiated, the property - 'MyProp' will be set with the value. Type conversion to primitive CLR types - (int, long, float, double, boolean, enum and string) are performed before calling - the property's setter method. -

-
- James House - Anthony Eden - Mohammad Rezaei - Marko Lahma (.NET) -
- - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The props. - - - - Initialize the with - the contenents of a Properties file. - -

- By default a properties file named "quartz.properties" is loaded from - the 'current working directory'. If that fails, then the - "quartz.properties" file located (as a resource) in the org/quartz - package is loaded. If you wish to use a file other than these defaults, - you must define the system property 'quartz.properties' to point to - the file you want. -

-
-
- - - Creates a new name value collection and overrides its values - with system values (environment variables). - - The base properties to override. - A new NameValueCollection instance. - - - - Initialize the with - the contenents of the given Properties object. - - - - - - - - Returns a handle to the Scheduler produced by this factory. - - - - If one of the methods has not be previously - called, then the default (no-arg) method - will be called by this method. - - - -

- Returns a handle to the Scheduler with the given name, if it exists (if - it has already been instantiated). -

-
-
- - - Returns a handle to the default Scheduler, creating it if it does not - yet exist. - - - - - -

- Returns a handle to all known Schedulers (made by any - StdSchedulerFactory instance.). -

-
-
- - - Inspects a file and compares whether it's "last modified date" has changed - since the last time it was inspected. If the file has been updated, the - job invokes a "call-back" method on an identified - that can be found in the - . - - James House - - - - - A marker interface for s that - wish to have their state maintained between executions. - - - instances follow slightly different rules from - regular instances. The key difference is that their - associated is re-persisted after every - execution of the job, thus preserving state for the next execution. The - other difference is that stateful jobs are not allowed to Execute - concurrently, which means new triggers that occur before the completion of - the method will be delayed. - - - - - - James House - Marko Lahma (.NET) - - - - The interface to be implemented by classes which represent a 'job' to be - performed. - - - Instances of this interface must have a - no-argument constructor. provides a mechanism for 'instance member data' - that may be required by some implementations of this interface. - - - - - - James House - Marko Lahma (.NET) - - - - Called by the when a - fires that is associated with the . - - - The implementation may wish to set a result object on the - JobExecutionContext before this method exits. The result itself - is meaningless to Quartz, but may be informative to - s or - s that are watching the job's - execution. - - The execution context. - - - - Initializes a new instance of the class. - - - - - Called by the when a - fires that is associated with the . -

- The implementation may wish to set a result object on the - JobExecutionContext before this method exits. The result itself - is meaningless to Quartz, but may be informative to - s or - s that are watching the job's - execution. -

-
- The execution context. - - -
- - - Gets the last modified date. - - Name of the file. - - - - - Gets the log. - - The log. - - - - Interface for objects wishing to receive a 'call-back' from a - . - - James House - - - - - Ïnforms that certain file has been updated. - - Name of the file. - - - - Built in job for executing native executables in a separate process. - - Matthew Payne - James House - Steinar Overbeck Cook - - - - Required parameter that specifies the name of the command (executable) - to be ran. - - - - - Optional parameter that specifies the parameters to be passed to the - executed command. - - - - - Optional parameter (value should be 'true' or 'false') that specifies - whether the job should wait for the execution of the native process to - complete before it completes. - -

Defaults to .

-
-
- - - Optional parameter (value should be 'true' or 'false') that specifies - whether the spawned process's stdout and stderr streams should be - consumed. If the process creates output, it is possible that it might - 'hang' if the streams are not consumed. - -

Defaults to .

-
-
- - - Optional parameter that specifies the workling directory to be used by - the executed command. - - - - - Initializes a new instance of the class. - - - - - Called by the when a - fires that is associated with the . -

- The implementation may wish to set a result object on the - JobExecutionContext before this method exits. The result itself - is meaningless to Quartz, but may be informative to - s or - s that are watching the job's - execution. -

-
- -
- - - Gets the log. - - The log. - - - - Consumes data from the given input stream until EOF and prints the data to stdout - - cooste - James House - - - - Initializes a new instance of the class. - - The enclosing instance. - The input stream. - The type. - - - - Runs this object as a separate thread, printing the contents of the input stream - supplied during instantiation, to either Console. or stderr - - - - - An implementation of Job, that does absolutely nothing - useful for system - which only wish to use s - and s, rather than writing - Jobs that perform work. - - James House - - - - Do nothing. - - - - - A Job which sends an e-mail with the configured content to the configured - recipient. - - James House - Marko Lahma (.NET) - - - The host name of the smtp server. REQUIRED. - - - The e-mail address to send the mail to. REQUIRED. - - - The e-mail address to cc the mail to. Optional. - - - The e-mail address to claim the mail is from. REQUIRED. - - - The e-mail address the message should say to reply to. Optional. - - - The subject to place on the e-mail. REQUIRED. - - - The e-mail message body. REQUIRED. - - - - Executes the job. - - The job execution context. - - - - Holds a List of references to SchedulerListener instances and broadcasts all - events to them (in order). - - - This may be more convenient than registering all of the listeners - directly with the Scheduler, and provides the flexibility of easily changing - which listeners get notified. - - - - James House - - - - Construct an instance with the given List of listeners. - - The initial List of SchedulerListeners to broadcast to. - - - - Holds a List of references to JobListener instances and broadcasts all - events to them (in order) - if the event is not excluded via filtering - (read on). - - -

- The broadcasting behavior of this listener to delegate listeners may be - more convenient than registering all of the listeners directly with the - Trigger, and provides the flexibility of easily changing which listeners - get notified. -

- -

- You may also register a number of Regular Expression patterns to match - the events against. If one or more patterns are registered, the broadcast - will only take place if the event applies to a job who's name/group - matches one or more of the patterns. -

-
- - - - - - James House -
- - Construct an instance with the given name. - - (Remember to add some delegate listeners!) - - @param name the name of this instance - - - Construct an instance with the given name, and List of listeners. - - @param name the name of this instance - @param listeners the initial List of JobListeners to broadcast to. - - - - If one or more name patterns are specified, only events relating to - jobs who's name matches the given regular expression pattern - will be dispatched to the delegate listeners. - - - - - - If one or more group patterns are specified, only events relating to - jobs who's group matches the given regular expression pattern - will be dispatched to the delegate listeners. - - - - - - Holds a List of references to TriggerListener instances and broadcasts all - events to them (in order) - if the event is not excluded via filtering - (read on). - - -

- The broadcasting behavior of this listener to delegate listeners may be - more convenient than registering all of the listeners directly with the - Trigger, and provides the flexibility of easily changing which listeners - get notified. -

- -

- You may also register a number of Regular Expression patterns to match - the events against. If one or more patterns are registered, the broadcast - will only take place if the event applies to a trigger who's name/group - matches one or more of the patterns. -

-
- - - - - - James House -
- - - The interface to be implemented by classes that want to be informed when a - fires. In general, applications that use a - will not have use for this mechanism. - - - - - - James House - - - - Called by the when a - has fired, and it's associated - is about to be executed. -

- It is called before the method of this - interface. -

-
- The that has fired. - - The that will be passed to the 's method. - -
- - - Called by the when a - has fired, and it's associated - is about to be executed. -

- It is called after the method of this - interface. -

-
- The that has fired. - The that will be passed to - the 's method. - Returns true if job execution should be vetoed, false otherwise. -
- - - Called by the when a - has misfired. -

- Consideration should be given to how much time is spent in this method, - as it will affect all triggers that are misfiring. If you have lots - of triggers misfiring at once, it could be an issue it this method - does a lot. -

-
- The that has misfired. -
- - - Called by the when a - has fired, it's associated - has been executed, and it's method has been - called. - - The that was fired. - - The that was passed to the - 's method. - - - The result of the call on the 's method. - - - - - Get the name of the . - - - - - Construct an instance with the given name. - - (Remember to add some delegate listeners!) - - the name of this instance - - - - Construct an instance with the given name, and List of listeners. - - the name of this instance - the initial List of TriggerListeners to broadcast to - - - - If one or more name patterns are specified, only events relating to - triggers who's name matches the given regular expression pattern - will be dispatched to the delegate listeners. - - - - - - If one or more group patterns are specified, only events relating to - triggers who's group matches the given regular expression pattern - will be dispatched to the delegate listeners. - - - - - - Keeps a collection of mappings of which Job to trigger after the completion - of a given job. If this listener is notified of a job completing that has a - mapping, then it will then attempt to trigger the follow-up job. This - achieves "job chaining", or a "poor man's workflow". - - -

- Generally an instance of this listener would be registered as a global - job listener, rather than being registered directly to a given job. -

-

- If for some reason there is a failure creating the trigger for the - follow-up job (which would generally only be caused by a rare serious - failure in the system, or the non-existence of the follow-up job), an error - messsage is logged, but no other action is taken. If you need more rigorous - handling of the error, consider scheduling the triggering of the flow-up - job within your job itself. -

-
- James House -
- - - A helpful abstract base class for implementors of . - - -

- The methods in this class are empty so you only need to override the - subset for the events you care about. -

- -

- You are required to implement - to return the unique name of your . -

-
- -
- - - Initializes a new instance of the class. - - - - - Called by the when a - is about to be executed (an associated - has occured). -

- This method will not be invoked if the execution of the Job was vetoed - by a . -

-
- - -
- - - Called by the when a - was about to be executed (an associated - has occured), but a vetoed it's - execution. - - - - - - - Called by the after a - has been executed, and be for the associated 's - method has been called. - - - - - - - Get the for this class's category. - This should be used by subclasses for logging. - - - - - Get the name of the . - - - - - - Construct an instance with the given name. - - The name of this instance. - - - - Add a chain mapping - when the Job identified by the first key completes - the job identified by the second key will be triggered. - - a Key with the name and group of the first job - a Key with the name and group of the follow-up job - - - - A helpful abstract base class for implementors of - . - - -

- The methods in this class are empty so you only need to override the - subset for the events - you care about. -

- -

- You are required to implement - to return the unique name of your . -

-
- -
- - - Get the for this - class's category. This should be used by subclasses for logging. - - - - - Get the name of the . - - - - - - Logs a history of all job executions (and execution vetos) via common - logging. - - -

- The logged message is customizable by setting one of the following message - properties to a string that conforms to the syntax of . -

-

- JobToBeFiredMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Job's Name.
1StringThe Job's Group.
2DateThe current time.
3StringThe Trigger's name.
4StringThe Triggers's group.
5DateThe scheduled fire time.
6DateThe next scheduled fire time.
7IntegerThe re-fire count from the JobExecutionContext.
- The default message text is "Job {1}.{0} fired (by trigger {4}.{3}) at: - {2, date, HH:mm:ss MM/dd/yyyy" -

-

- JobSuccessMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Job's Name.
1StringThe Job's Group.
2DateThe current time.
3StringThe Trigger's name.
4StringThe Triggers's group.
5DateThe scheduled fire time.
6DateThe next scheduled fire time.
7IntegerThe re-fire count from the JobExecutionContext.
8ObjectThe string value (toString() having been called) of the result (if any) - that the Job set on the JobExecutionContext, with on it. "NULL" if no - result was set.
- The default message text is "Job {1}.{0} execution complete at {2, date, - HH:mm:ss MM/dd/yyyy} and reports: {8" -

-

- JobFailedMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Job's Name.
1StringThe Job's Group.
2DateThe current time.
3StringThe Trigger's name.
4StringThe Triggers's group.
5DateThe scheduled fire time.
6DateThe next scheduled fire time.
7IntegerThe re-fire count from the JobExecutionContext.
8StringThe message from the thrown JobExecution Exception. -
- The default message text is "Job {1}.{0} execution failed at {2, date, - HH:mm:ss MM/dd/yyyy} and reports: {8" -

-

- JobWasVetoedMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Job's Name.
1StringThe Job's Group.
2DateThe current time.
3StringThe Trigger's name.
4StringThe Triggers's group.
5DateThe scheduled fire time.
6DateThe next scheduled fire time.
7IntegerThe re-fire count from the JobExecutionContext.
- The default message text is "Job {1}.{0} was vetoed. It was to be fired - (by trigger {4}.{3}) at: {2, date, HH:mm:ss MM/dd/yyyy" -

-
-
- - - Provides an interface for a class to become a "plugin" to Quartz. - - - Plugins can do virtually anything you wish, though the most interesting ones - will obviously interact with the scheduler in some way - either actively: by - invoking actions on the scheduler, or passively: by being a , - , and/or . -

- If you use to - Initialize your Scheduler, it can also create and Initialize your plugins - - look at the configuration docs for details. -

-

- If you need direct access your plugin, you can have it explicitly put a - reference to itself in the 's - as part of its - method. -

-
- James House -
- - - Called during creation of the in order to give - the a chance to Initialize. - - - At this point, the Scheduler's is not yet -

- If you need direct access your plugin, you can have it explicitly put a - reference to itself in the 's - as part of its - method. -

-
- - The name by which the plugin is identified. - - - The scheduler to which the plugin is registered. - -
- - - Called when the associated is started, in order - to let the plug-in know it can now make calls into the scheduler if it - needs to. - - - - - Called in order to inform the that it - should free up all of it's resources because the scheduler is shutting - down. - - - - - Called during creation of the in order to give - the a chance to Initialize. - - - - - Called when the associated is started, in order - to let the plug-in know it can now make calls into the scheduler if it - needs to. - - - - - Called in order to inform the that it - should free up all of it's resources because the scheduler is shutting - down. - - - - - Called by the when a is - about to be executed (an associated has occurred). - - This method will not be invoked if the execution of the Job was vetoed by a - . - - - - - - - Called by the after a - has been executed, and be for the associated 's - method has been called. - - - - - - - Called by the when a - was about to be executed (an associated - has occured), but a vetoed it's - execution. - - - - - - - Logger instance to use. Defaults to common logging. - - - - - Get or sets the message that is logged when a Job successfully completes its - execution. - - - - - Get or sets the message that is logged when a Job fails its - execution. - - - - - Gets or sets the message that is logged when a Job is about to Execute. - - - - - Gets or sets the message that is logged when a Job execution is vetoed by a - trigger listener. - - - - - Get the name of the . - - - - - - Logs a history of all trigger firings via the Jakarta Commons-Logging - framework. - - -

- The logged message is customizable by setting one of the following message - properties to a string that conforms to the syntax of . -

- -

- TriggerFiredMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Trigger's Name.
1StringThe Trigger's Group.
2DateThe scheduled fire time.
3DateThe next scheduled fire time.
4DateThe actual fire time.
5StringThe Job's name.
6StringThe Job's group.
7IntegerThe re-fire count from the JobExecutionContext.
- - The default message text is "Trigger {1}.{0} fired job {6}.{5} at: {4, - date, HH:mm:ss MM/dd/yyyy" -

- -

- TriggerMisfiredMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Trigger's Name.
1StringThe Trigger's Group.
2DateThe scheduled fire time.
3DateThe next scheduled fire time.
4DateThe actual fire time. (the time the misfire was detected/handled)
5StringThe Job's name.
6StringThe Job's group.
- - The default message text is "Trigger {1}.{0} misfired job {6}.{5} at: - {4, date, HH:mm:ss MM/dd/yyyy}. Should have fired at: {3, date, HH:mm:ss - MM/dd/yyyy" -

- -

- TriggerCompleteMessage - available message data are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ElementData TypeDescription
0StringThe Trigger's Name.
1StringThe Trigger's Group.
2DateThe scheduled fire time.
3DateThe next scheduled fire time.
4DateThe job completion time.
5StringThe Job's name.
6StringThe Job's group.
7IntegerThe re-fire count from the JobExecutionContext.
8IntegerThe trigger's resulting instruction code.
9StringA human-readable translation of the trigger's resulting instruction - code.
- - The default message text is "Trigger {1}.{0} completed firing job - {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction - code: {9" -

-
- James House -
- - - Called during creation of the in order to give - the a chance to Initialize. - - - - - Called when the associated is started, in order - to let the plug-in know it can now make calls into the scheduler if it - needs to. - - - - - Called in order to inform the that it - should free up all of it's resources because the scheduler is shutting - down. - - - - - Called by the when a - has fired, and it's associated - is about to be executed. -

- It is called before the method of this - interface. -

-
- The that has fired. - The that will be passed to the 's method. -
- - - Called by the when a - has misfired. -

- Consideration should be given to how much time is spent in this method, - as it will affect all triggers that are misfiring. If you have lots - of triggers misfiring at once, it could be an issue it this method - does a lot. -

-
- The that has misfired. -
- - - Called by the when a - has fired, it's associated - has been executed, and it's method has been - called. - - The that was fired. - The that was passed to the - 's method. - The result of the call on the 's method. - - - - Called by the when a - has fired, and it's associated - is about to be executed. -

- It is called after the method of this - interface. -

-
- The that has fired. - The that will be passed to - the 's method. - -
- - - Logger instance to use. Defaults to common logging. - - - - - Get or set the message that is printed upon the completion of a trigger's - firing. - - - - - Get or set the message that is printed upon a trigger's firing. - - - - - Get or set the message that is printed upon a trigger's mis-firing. - - - - - Get the name of the . - - - - - - This plugin catches the event of the VM terminating (such as upon a CRTL-C) - and tells the scheuler to Shutdown. - - - James House - - - - Called during creation of the in order to give - the a chance to Initialize. - - - - - Called when the associated is started, in order - to let the plug-in know it can now make calls into the scheduler if it - needs to. - - - - - Called in order to inform the that it - should free up all of it's resources because the scheduler is shutting - down. - - - - - Determine whether or not the plug-in is configured to cause a clean - Shutdown of the scheduler. -

- The default value is . -

-
- -
- - - Attribute to use with public properties that - can be set with Quartz configuration. Attribute can be used to advice - parsing to use correct type of time span (milliseconds, seconds, minutes, hours) - as it may depend on property. - - - - - - Initializes a new instance of the class. - - The rule. - - - - Gets the rule. - - The rule. - - - - Possible parse rules for s. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This plugin loads XML file(s) to add jobs and schedule them with triggers - as the scheduler is initialized, and can optionally periodically scan the - file for changes. - - - The periodically scanning of files for changes is not currently supported in a - clustered environment. - - James House - Pierre Awaragi - - - - Initializes a new instance of the class. - - - - - - - - - - - Called during creation of the in order to give - the a chance to initialize. - - The name. - The scheduler. - SchedulerConfigException - - - - Called when the associated is started, in order - to let the plug-in know it can now make calls into the scheduler if it - needs to. - - - - Helper method for generating unique job/trigger name for the - file scanning jobs (one per FileJob). The unique names are saved - in jobTriggerNameSet. - - - - Called in order to inform the that it - should free up all of it's resources because the scheduler is shutting - down. - - - - - Gets the log. - - The log. - - - - Comma separated list of file names (with paths) to the XML files that should be read. - - - - - Whether or not jobs defined in the XML file should be overwrite existing - jobs with the same name. - - - - - The interval at which to scan for changes to the file. - If the file has been changed, it is re-loaded and parsed. The default - value for the interval is 0, which disables scanning. - - - - - Whether or not initialization of the plugin should fail (throw an - exception) if the file cannot be found. Default is . - - - - - Whether or not the XML should be validated. Default is . - - - - - Whether or not the XML schema should be validated. Default is . - - - - - A uses all of the - types that are found in this package in its attempts to load a class, when - one scheme is found to work, it is promoted to the scheme that will be used - first the next time a class is loaded (in order to improve perfomance). - - - This approach is used because of the wide variance in class loader behavior - between the various environments in which Quartz runs (e.g. disparate - application servers, stand-alone, mobile devices, etc.). Because of this - disparity, Quartz ran into difficulty with a one class-load style fits-all - design. Thus, this class loader finds the approach that works, then - 'remembers' it. - - James House - - - - Called to give the ClassLoadHelper a chance to Initialize itself, - including the oportunity to "steal" the class loader off of the calling - thread, which is the thread that is initializing Quartz. - - - - - Return the class with the given name. - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.net.URL object - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.io.InputStream object - - - - - that names the scheduler instance using - just the machine hostname. -

- This class is useful when you know that your scheduler instance will be the - only one running on a particular machine. Each time the scheduler is - restarted, it will get the same instance id as long as the machine is not - renamed. -

- -
- - -
- - - An IInstanceIdGenerator is responsible for generating the clusterwide unique - instance id for a nodde. -

- This interface may be of use to those wishing to have specific control over - the mechanism by which the instances in their - application are named. -

- -
- -
- - Generate the instance id for a - - - The clusterwide unique instance id. - - - - - Generate the instance id for a - - The clusterwide unique instance id. - - - - A that uses either the loader of it's own - class. - - - - - James House - - - - Called to give the ClassLoadHelper a chance to Initialize itself, - including the oportunity to "steal" the class loader off of the calling - thread, which is the thread that is initializing Quartz. - - - - Return the class with the given name. - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.net.URL object - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a java.io.InputStream object - - - - - A JobFactory that instantiates the Job instance (using the default no-arg - constructor, or more specifically: ), and - then attempts to set all values in the 's - onto bean properties of the . - - - - - - - James Houser - Marko Lahma (.NET) - - - - The default JobFactory used by Quartz - simply calls - on the job class. - - - - James House - Marko Lahma (.NET) - - - - A JobFactory is responsible for producing instances of - classes. - - - This interface may be of use to those wishing to have their application - produce instances via some special mechanism, such as to - give the opertunity for dependency injection. - - - - - James House - - - - Called by the scheduler at the time of the trigger firing, in order to - produce a instance on which to call Execute. - - -

- It should be extremely rare for this method to throw an exception - - basically only the the case where there is no way at all to instantiate - and prepare the Job for execution. When the exception is thrown, the - Scheduler will move all triggers associated with the Job into the - state, which will require human - intervention (e.g. an application restart after fixing whatever - configuration problem led to the issue wih instantiating the Job. -

- -
- - The TriggerFiredBundle from which the - and other info relating to the trigger firing can be obtained. - - SchedulerException if there is a problem instantiating the Job. - the newly instantiated Job - -
- - - Called by the scheduler at the time of the trigger firing, in order to - produce a instance on which to call Execute. - - - It should be extremely rare for this method to throw an exception - - basically only the the case where there is no way at all to instantiate - and prepare the Job for execution. When the exception is thrown, the - Scheduler will move all triggers associated with the Job into the - state, which will require human - intervention (e.g. an application restart after fixing whatever - configuration problem led to the issue wih instantiating the Job. - - The TriggerFiredBundle from which the - and other info relating to the trigger firing can be obtained. - the newly instantiated Job - SchedulerException if there is a problem instantiating the Job. - - - - Called by the scheduler at the time of the trigger firing, in order to - produce a instance on which to call Execute. - - -

- It should be extremely rare for this method to throw an exception - - basically only the the case where there is no way at all to instantiate - and prepare the Job for execution. When the exception is thrown, the - Scheduler will move all triggers associated with the Job into the - state, which will require human - intervention (e.g. an application restart after fixing whatever - configuration problem led to the issue wih instantiating the Job. -

-
- The TriggerFiredBundle from which the - and other info relating to the trigger firing can be obtained. - the newly instantiated Job - SchedulerException if there is a problem instantiating the Job. -
- - - Sets the object properties. - - The object to set properties to. - The data to set. - - - - Whether the JobInstantiation should fail and throw and exception if - a key (name) and value (type) found in the JobDataMap does not - correspond to a proptery setter on the Job class. - - - - - Get or set whether a warning should be logged if - a key (name) and value (type) found in the JobDataMap does not - correspond to a proptery setter on the Job class. - - - - - This class implements a that - utilizes RAM as its storage device. -

- As you should know, the ramification of this is that access is extrememly - fast, but the data is completely volatile - therefore this - should not be used if true persistence between program shutdowns is - required. -

-
- James House - Sharada Jambula - Marko Lahma (.NET) -
- - - Initializes a new instance of the class. - - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - Called by the QuartzScheduler to inform the that - the scheduler has started. - - - - - Called by the QuartzScheduler to inform the that - it should free up all of it's resources because the scheduler is - shutting down. - - - - - Store the given and . - - The scheduling context. - The to be stored. - The to be stored. - - - - Returns true if the given job group is paused. - - - Job group name - - - - - returns true if the given TriggerGroup is paused. - - - - - - - - Store the given . - - The scheduling context. - The to be stored. - If , any existing in the - with the same name and group should be - over-written. - - - - Remove (delete) the with the given - name, and any s that reference - it. - - The scheduling context. - The name of the to be removed. - The group name of the to be removed. - - if a with the given name and - group was found and removed from the store. - - - - - Remove (delete) the with the - given name. - - The scheduling context. - The name of the to be removed. - The group name of the to be removed. - - if a with the given - name and group was found and removed from the store. - - - - - Store the given . - - The scheduling context. - The to be stored. - If , any existing in - the with the same name and group should - be over-written. - - - - Remove (delete) the with the - given name. - - The scheduling context. - The name of the to be removed. - The group name of the to be removed. - - if a with the given - name and group was found and removed from the store. - - Whether to delete orpahaned job details from scheduler if job becomes orphaned from removing the trigger. - - - - Replaces the trigger. - - The scheduling context. - Name of the trigger. - Name of the group. - The new trigger. - - - - - Retrieve the for the given - . - - The scheduling context. - The name of the to be retrieved. - The group name of the to be retrieved. - - The desired , or null if there is no match. - - - - - Retrieve the given . - - The scheduling context. - The name of the to be retrieved. - The group name of the to be retrieved. - - The desired , or null if there is no match. - - - - - Get the current state of the identified . - - - - - - - - - - - Store the given . - - The scheduling context. - The name. - The to be stored. - If , any existing - in the with the same name and group - should be over-written. - If , any s existing - in the that reference an existing - Calendar with the same name with have their next fire time - re-computed with the new . - - - - Remove (delete) the with the - given name. -

- If removal of the would result in - s pointing to non-existent calendars, then a - will be thrown.

-
- The scheduling context. - The name of the to be removed. - - if a with the given name - was found and removed from the store. - -
- - - Retrieve the given . - - The scheduling context. - The name of the to be retrieved. - - The desired , or null if there is no match. - - - - - Get the number of s that are - stored in the . - - - - - Get the number of s that are - stored in the . - - - - - Get the number of s that are - stored in the . - - - - - Get the names of all of the s that - have the given group name. - - - - - Get the names of all of the s - in the . -

- If there are no ICalendars in the given group name, the result should be - a zero-length array (not ). -

-
-
- - - Get the names of all of the s - that have the given group name. - - - - - Get the names of all of the - groups. - - - - - Get the names of all of the groups. - - - - - Get all of the Triggers that are associated to the given Job. -

- If there are no matches, a zero-length array should be returned. -

-
-
- - - Gets the trigger wrappers for job. - - Name of the job. - Name of the group. - - - - - Gets the trigger wrappers for calendar. - - Name of the cal. - - - - - Pause the with the given name. - - - - - Pause all of the s in the given group. -

- The JobStore should "remember" that the group is paused, and impose the - pause on any new triggers that are added to the group while the group is - paused. -

-
-
- - - Pause the with the given - name - by pausing all of its current s. - - - - - Pause all of the s in the - given group - by pausing all of their s. -

- The JobStore should "remember" that the group is paused, and impose the - pause on any new jobs that are added to the group while the group is - paused. -

-
-
- - - Resume (un-pause) the with the given name. - - - If the missed one or more fire-times, then the - 's misfire instruction will be applied. - - - - - Resume (un-pause) all of the s in the - given group. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
-
- - - Resume (un-pause) the with - the given name. -

- If any of the 's s missed one - or more fire-times, then the 's misfire - instruction will be applied. -

-
-
- - - Resume (un-pause) all of the s - in the given group. -

- If any of the s had s that - missed one or more fire-times, then the 's - misfire instruction will be applied. -

-
-
- - - Pause all triggers - equivalent of calling - on every group. -

- When is called (to un-pause), trigger misfire - instructions WILL be applied. -

-
- -
- - - Resume (un-pause) all triggers - equivalent of calling - on every trigger group and setting all job groups unpaused />. -

- If any missed one or more fire-times, then the - 's misfire instruction will be applied. -

-
- -
- - - Applies the misfire. - - The trigger wrapper. - - - - - Get a handle to the next trigger to be fired, and mark it as 'reserved' - by the calling scheduler. - - - - - - Inform the that the scheduler no longer plans to - fire the given , that it had previously acquired - (reserved). - - - - - Inform the that the scheduler is now firing the - given (executing its associated ), - that it had previously acquired (reserved). - - - - - Inform the that the scheduler has completed the - firing of the given (and the execution its - associated ), and that the - in the given should be updated if the - is stateful. - - - - - Sets the state of all triggers of job to specified state. - - Name of the job. - The job group. - The internal state to set. - - - - Peeks the triggers. - - - - - - - - - The time span by which a trigger must have missed its - next-fire-time, in order for it to be considered "misfired" and thus - have its misfire instruction applied. - - - - - Gets the fired trigger record id. - - The fired trigger record id. - - - - Returns whether this instance supports persistence. - - - - - - - Comparer for triggers. - - - - - Possible internal trigger states - in RAMJobStore - - - - - Waiting - - - - - Acquired - - - - - Executing - - - - - Complete - - - - - Paused - - - - - Blocked - - - - - Paused and Blocked - - - - - Error - - - - - Helper wrapper class - - - - - The key used - - - - - Job's key - - - - - The trigger - - - - - Current state - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. is suitable for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Gets the trigger - - The trigger - - - - Scheduler exporter that exports scheduler to remoting context. - - Marko Lahma - - - - Service interface for scheduler exporters. - - Marko Lahma - - - - Binds (exports) scheduler to external context. - - - - - - Unbinds scheduler from external context. - - - - - - Registers remoting channel if needed. This is determined - by checking whether there is a positive value for port. - - - - - Gets or sets the port used for remoting. - - - - - Gets or sets the name to use when exporting - scheduler to remoting context. - - - - - Sets the channel type when registering remoting. - - - - - - Sets the used when - exporting to remoting context. Defaults to - . - - - - - A that simply calls . - - - - James House - - - - Called to give the ClassLoadHelper a chance to Initialize itself, - including the oportunity to "steal" the class loader off of the calling - thread, which is the thread that is initializing Quartz. - - - - Return the class with the given name. - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a Uri object - - - - Finds a resource with a given name. This method returns null if no - resource with this name is found. - - name of the desired resource - - a Stream object - - - - - The default InstanceIdGenerator used by Quartz when instance id is to be - automatically generated. Instance id is of the form HOSTNAME + CURRENT_TIME. - - - - - - - - - Generate the instance id for a - - The clusterwide unique instance id. - - - - This is class is a simple implementation of a thread pool, based on the - interface. -

- objects are sent to the pool with the - method, which blocks until a becomes available. -

- -

- The pool has a fixed number of s, and does not grow or - shrink based on demand. -

-
- James House - Juergen Donnerstag -
- - - The interface to be implemented by classes that want to provide a thread - pool for the 's use. - - - implementation instances should ideally be made - for the sole use of Quartz. Most importantly, when the method - returns a value of 1 or greater, - there must still be at least one available thread in the pool when the - method is called a few moments (or - many moments) later. If this assumption does not hold true, it may - result in extra JobStore queries and updates, and if clustering features - are being used, it may result in greater imballance of load. - - - James House - - - - Execute the given in the next - available . - - - The implementation of this interface should not throw exceptions unless - there is a serious problem (i.e. a serious misconfiguration). If there - are no available threads, rather it should either queue the Runnable, or - block until a thread is available, depending on the desired strategy. - - - - - Determines the number of threads that are currently available in in - the pool. Useful for determining the number of times - can be called before returning - false. - - - The implementation of this method should block until there is at - least one available thread. - - the number of currently available threads - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - Called by the QuartzScheduler to inform the - that it should free up all of it's resources because the scheduler is - shutting down. - - - - - Gets the size of the pool. - - The size of the pool. - - - - Create a new (unconfigured) . - - - - - Create a new with the specified number - of s that have the given priority. - - - the number of worker s in the pool, must - be > 0. - - - the thread priority for the worker threads. - - - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - Terminate any worker threads in this thread group. - Jobs currently in progress will complete. - - - - - Run the given object in the next available - . If while waiting the thread pool is asked to - shut down, the Runnable is executed immediately within a new additional - thread. - - The to be added. - - - - Creates the worker threads. - - The thread count. - - - - - Terminate any worker threads in this thread group. - Jobs currently in progress will complete. - - - - - Gets or sets the number of worker threads in the pool. - Set has no effect after has been called. - - - - - Get or set the thread priority of worker threads in the pool. - Set operation has no effect after has been called. - - - - - Gets or sets the thread name prefix. - - The thread name prefix. - - - - Gets or sets the value of makeThreadsDaemons. - - - - - Gets the size of the pool. - - The size of the pool. - - - - A Worker loops, waiting to Execute tasks. - - - - - Create a worker thread and start it. Waiting for the next Runnable, - executing it, and waiting for the next Runnable, until the Shutdown - flag is set. - - - - - Create a worker thread, start it, Execute the runnable and terminate - the thread (one time execution). - - - - - Signal the thread that it should terminate. - - - - - Loop, executing targets as they are received. - - - - - This is class is a simple implementation of a zero size thread pool, based on the - {@link org.quartz.spi.ThreadPool} interface. - - - The pool has zero s and does not grow or shrink based on demand. - Which means it is obviously not useful for most scenarios. When it may be useful - is to prevent creating any worker threads at all - which may be desirable for - the sole purpose of preserving system resources in the case where the scheduler - instance only exists in order to schedule jobs, but which will never execute - jobs (e.g. will never have Start() called on it). - - Wayne Fay - - - - Initializes a new instance of the class. - - - - - Called by the QuartzScheduler before the is - used, in order to give the it a chance to Initialize. - - - - - Shutdowns this instance. - - - - - Called by the QuartzScheduler to inform the - that it should free up all of it's resources because the scheduler is - shutting down. - - - - - - Execute the given in the next - available . - - - - - The implementation of this interface should not throw exceptions unless - there is a serious problem (i.e. a serious misconfiguration). If there - are no available threads, rather it should either queue the Runnable, or - block until a thread is available, depending on the desired strategy. - - - - - Determines the number of threads that are currently available in in - the pool. Useful for determining the number of times - can be called before returning - false. - - - the number of currently available threads - - - The implementation of this method should block until there is at - least one available thread. - - - - - Gets the log. - - The log. - - - - Gets the size of the pool. - - The size of the pool. - - - - A simple class (structure) used for returning execution-time data from the - JobStore to the . - - - James House - - - - Initializes a new instance of the class. - - The job. - The trigger. - The calendar. - if set to true [job is recovering]. - The fire time. - The scheduled fire time. - The previous fire time. - The next fire time. - - - - Gets the job detail. - - The job detail. - - - - Gets the trigger. - - The trigger. - - - - Gets the calendar. - - The calendar. - - - - Gets a value indicating whether this is recovering. - - true if recovering; otherwise, false. - - - - Returns the UTC fire time. - - - - - Gets the next UTC fire time. - - The next fire time. - Returns the nextFireTimeUtc. - - - - Gets the previous UTC fire time. - - The previous fire time. - Returns the previous fire time. - - - - Returns the scheduled UTC fire time. - - - - - DateTime related utility methods. - - - - - Assumes that given input is in UTC and sets the kind to be UTC. - Just a precaution if somebody does not set it explicitly. - This only works in .NET Framework 2.0 onwards. - - The datetime to check. - DateTime with kind set to UTC. - - - - Assumes that given input is in UTC and sets the kind to be UTC. - Just a precaution if somebody does not set it explicitly. - - The datetime to check. - DateTime with kind set to UTC. - - - - Manages a collection of IDbProviders, and provides transparent access - to their database. - - - James House - Sharada Jambula - Mohammad Rezaei - - - - Private constructor - - - - - Adds the connection provider. - - Name of the data source. - The provider. - - - - Get a database connection from the DataSource with the given name. - - a database connection - - - - Shuts down database connections from the DataSource with the given name, - if applicable for the underlying provider. - - a database connection - - - - Gets the db provider. - - Name of the ds. - - - - - Get the class instance. - - an instance of this class - - - - - An implementation of that wraps another - and flags itself 'dirty' when it is modified. - - James House - - - - Create a DirtyFlagMap that 'wraps' a . - - - - - Create a DirtyFlagMap that 'wraps' a that has the - given initial capacity. - - - - - Create a DirtyFlagMap that 'wraps' a that has the - given initial capacity and load factor. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - When implemented by a class, removes all elements from the . - - - The is read-only. - - - - - When implemented by a class, determines whether the contains an element with the specified key. - - The key to locate in the . - - if the contains an element with the key; otherwise, . - - - is . - - - - When implemented by a class, removes the element with the - specified key from the . - - The key of the element to remove. - - is . - - The is read-only. - -or- - The has a fixed size. - - - - - When implemented by a class, returns an - for the . - - - An for the . - - - - - When implemented by a class, 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. - is . - - An element with the same key already exists in the . - - - The is read-only. - -or- - The has a fixed size. - - - - - When implemented by a class, copies the elements of - the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - - is . - - is less than zero. - - - is multidimensional. - -or- - - is equal to or greater than the length of . - -or- - The number of elements in the source is greater than the available space from to the end of the destination . - - The type of the source cannot be cast automatically to the type of the destination . - - - - Clear the 'dirty' flag (set dirty flag to ). - - - - - Determines whether the specified obj contains value. - - The obj. - - true if the specified obj contains value; otherwise, false. - - - - - Gets the entries as a set. - - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - if the specified is equal to the - current ; otherwise, . - - - - - Serves as a hash function for a particular type, suitable - for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Gets keyset for this map. - - - - - - Puts the value behind a specified key. - - The key. - The val. - - - - - Puts all. - - The t. - - - - Determine whether the is flagged dirty. - - - - - Get a direct handle to the underlying Map. - - - - - Gets a value indicating whether this instance is empty. - - true if this instance is empty; otherwise, false. - - - - Gets or sets the with the specified key. - - - - - - When implemented by a class, gets the number of - elements contained in the . - - - - - - When implemented by a class, gets an containing the values in the . - - - - - - When implemented by a class, gets an containing the keys of the . - - - - - - When implemented by a class, gets a value indicating whether the - is read-only. - - - - - - When implemented by a class, gets a value indicating whether the - has a fixed size. - - - - - - When implemented by a class, gets an object that - can be used to synchronize access to the . - - - - - - When implemented by a class, gets a value - indicating whether access to the is synchronized - (thread-safe). - - - - - - Utility class for file handling related things. - - - - - Resolves file to actual file if for example relative '~' used. - - File name to check - Expanded file name or actual no resolving was done. - - - - object representing a job or trigger key. - - Jeffrey Wescott - - - - - Utility class for storing two pieces of information together. - - Jeffrey Wescott - - - - Test equality of this object with that. - - object to compare - true if objects are equal, false otherwise - - - - Serves as a hash function for a particular type. is suitable for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Get or sets the first object in the pair. - - - - - Get or sets the second object in the pair. - - - - Construct a new key with the given name and group. - - - - the name - - - the group - - - -

- Return the string representation of the key. The format will be: - <group>.<name>. -

- -
- the string representation of the key - -
- - - Get the name portion of the key. - - the name - - - -

- Get the group portion of the key. -

- -
- the group - -
- - - Wrapper class to access thread local data. - Data is either accessed from thread or HTTP Context's - data if HTTP Context is avaiable. - - Marko Lahma (.NET) - - - - Retrieves an object with the specified name. - - The name of the item. - The object in the call context associated with the specified name or null if no object has been stored previously - - - - Stores a given object and associates it with the specified name. - - The name with which to associate the new item. - The object to store in the call context. - - - - Empties a data slot with the specified name. - - The name of the data slot to empty. - - - - Utility methods that are used to convert objects from one type into another. - - Aleksandar Seovic - - - - Convert the value to the required (if necessary from a string). - - The proposed change value. - - The we must convert to. - - The new value, possibly the result of type conversion. - - - - Determines whether value is assignable to required type. - - The value to check. - Type of the required. - - true if value can be assigned as given type; otherwise, false. - - - - - Instantiates an instance of the type specified. - - The type to instantiate. - - - - - Sets the object properties using reflection. - - The object to set values to. - The properties to set to object. - - - - This is an utility class used to parse the properties. - - James House - - - - Initializes a new instance of the class. - - The props. - - - - Gets the string property. - - The name. - - - - - Gets the string property. - - The name. - The default value. - - - - - Gets the string array property. - - The name. - - - - - Gets the string array property. - - The name. - The default value. - - - - - Gets the boolean property. - - The name. - - - - - Gets the boolean property. - - The name. - if set to true [defaultValue]. - - - - - Gets the byte property. - - The name. - - - - - Gets the byte property. - - The name. - The default value. - - - - - Gets the char property. - - The name. - - - - - Gets the char property. - - The name. - The default value. - - - - - Gets the double property. - - The name. - - - - - Gets the double property. - - The name. - The default value. - - - - - Gets the float property. - - The name. - - - - - Gets the float property. - - The name. - The default value. - - - - - Gets the int property. - - The name. - - - - - Gets the int property. - - The name. - The default value. - - - - - Gets the int array property. - - The name. - - - - - Gets the int array property. - - The name. - The default value. - - - - - Gets the long property. - - The name. - - - - - Gets the long property. - - The name. - The def. - - - - - Gets the TimeSpan property. - - The name. - The def. - - - - - Gets the short property. - - The name. - - - - - Gets the short property. - - The name. - The default value. - - - - - Gets the property groups. - - The prefix. - - - - - Gets the property group. - - The prefix. - - - - - Gets the property group. - - The prefix. - if set to true [strip prefix]. - - - - - Get all properties that start with the given prefix. - - The prefix for which to search. If it does not end in a "." then one will be added to it for search purposes. - Whether to strip off the given in the result's keys. - Optional array of fully qualified prefixes to exclude. For example if is "a.b.c", then might be "a.b.c.ignore". - Group of that start with the given prefix, optionally have that prefix removed, and do not include properties that start with one of the given excluded prefixes. - - - - Reads the properties from assembly (embedded resource). - - The file name to read resources from. - - - - - Reads the properties from file system. - - The file name to read resources from. - - - - - Gets the underlying properties. - - The underlying properties. - - - - An implementation of that wraps another - and flags itself 'dirty' when it is modified, enforces that all keys are - strings. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The initial capacity. - - - - Initializes a new instance of the class. - - The initial capacity. - The load factor. - - - - Gets the keys. - - - - - - Adds the name-value pairs in the given to the . -

- All keys must be s, and all values must be serializable. -

-
-
- - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given value to the 's - data map. - - - - - Adds the given serializable object value to the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Object representing a job or trigger key. - - James House - - - - Construct a new TriggerStatus with the status name and nextFireTime. - - The trigger's status - The next UTC time the trigger will fire - - - - Return the string representation of the TriggerStatus. - - - - - Gets or sets the job key. - - The job key. - - - - Gets or sets the key. - - The key. - - - - Get the name portion of the key. - - the name - - - - Get the group portion of the key. - - the group - - - - Wraps a . - - Chris Bonham - - - - Gets or sets the name of the calendar. - - The name of the calendar. - - - - Gets or sets the name of the class. - - The name of the class. - - - - Gets or sets the calendar. - - The calendar. - - - - Gets or sets a description for the instance - may be - useful for remembering/displaying the purpose of the calendar, though - the description has no meaning to Quartz. - - - - - - Set a new base calendar or remove the existing one. - - - - - - Wraps a and . - - Chris Bonham - James House - - - - Adds a trigger to this bundle. - - The trigger. - - - - Removes the given trigger from this bundle. - - The trigger. - - - - Gets or sets the job detail. - - The job detail. - - - - Gets or sets the triggers associated with this bundle. - - The triggers. - - - - Gets the name of the bundle. - - The name. - - - - Gets the full name. - - The full name. - - - - Gets a value indicating whether this is valid. - - true if valid; otherwise, false. - - - - Parses an XML file that declares Jobs and their schedules (Triggers). - - -

- The xml document must conform to the format defined in - "job_scheduling_data.xsd" -

- -

- After creating an instance of this class, you should call one of the - functions, after which you may call the - function to get a handle to the defined Jobs and Triggers, which can then be - scheduled with the . Alternatively, you could call - the function to do all of this - in one step. -

- -

- The same instance can be used again and again, with the list of defined Jobs - being cleared each time you call a method, - however a single instance is not thread-safe. -

-
- Chris Bonham - James House - Marko Lahma (.NET) -
- - - XML Schema dateTime datatype format. -

- See - http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#dateTime -

-
-
- - - Constructor for JobSchedulingDataProcessor. - - - - - Constructor for JobSchedulingDataProcessor. - - whether or not to validate XML. - whether or not to validate XML schema. - - - - Process the xml file in the default location (a file named - "quartz_jobs.xml" in the current working directory). - - - - - Process the xml file named . - - meta data file name. - - - - Process the xmlfile named with the given system - ID. - - Name of the file. - The system id. - - - - Process the xmlfile named with the given system - ID. - - The stream. - The system id. - - - - Process the xml file in the default location, and schedule all of the - jobs defined within it. - - - - - Process the xml file in the given location, and schedule all of the - jobs defined within it. - - meta data file name. - The scheduler. - if set to true overwrite existing jobs. - - - - Process the xml file in the given location, and schedule all of the - jobs defined within it. - - Name of the file. - The system id. - The sched. - if set to true [over write existing jobs]. - - - - Add the Jobs and Triggers defined in the given map of - s to the given scheduler. - - The job bundles. - The sched. - if set to true [over write existing jobs]. - - - - Returns a for the job name. - - The name. - - a for the job name. - - - - - Returns an from the fileName as a resource. - - Name of the file. - - an from the fileName as a resource. - - - - - Schedules a given job and trigger (both wrapped by a ). - - job wrapper. - - if the Job or Trigger cannot be added to the Scheduler, or - there is an internal Scheduler error. - - - - - Schedules a given job and trigger (both wrapped by a ). - - The job. - The sched. - if set to true [local over write existing jobs]. - - if the Job or Trigger cannot be added to the Scheduler, or - there is an internal Scheduler error. - - - - - Adds a scheduled job. - - The job. - - - - Adds a calendar. - - The sched. - calendar bundle. - SchedulerException if the Calendar cannot be added to the Scheduler, or - - - - Adds a detected validation exception. - - The exception. - - - - Resets the the number of detected validation exceptions. - - - - - Throws a ValidationException if the number of validationExceptions - detected is greater than zero. - - - DTD validation exception. - - - - - Gets or sets whether to overwrite existing jobs. - - - - - Gets the log. - - The log. - - - - Returns a of scheduled jobs. -

- The key is the job name and the value is a - containing the and . -

-
- a of scheduled jobs. - -
- - - Helper class to map constant names to their values. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reports JobSchedulingDataProcessor validation exceptions. - - Chris Bonham - - - - Constructor for ValidationException. - - - - - Constructor for ValidationException. - - exception message. - - - - Constructor for ValidationException. - - collection of validation exceptions. - - - - Gets the validation exceptions. - - The validation exceptions. - - - - Returns the detail message string. - - - - - An exception that is thrown to indicate that there has been a critical - failure within the scheduler's core services (such as loss of database - connectivity). - - James House - - - - Create a with the given message. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - Provides a parser and evaluator for unix-like cron expressions. Cron - expressions provide the ability to specify complex time combinations such as - "At 8:00am every Monday through Friday" or "At 1:30am every - last Friday of the month". - - -

- Cron expressions are comprised of 6 required fields and one optional field - separated by white space. The fields respectively are described as follows: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Field Name Allowed Values Allowed Special Characters
Seconds 0-59 , - /// /
Minutes 0-59 , - /// /
Hours 0-23 , - /// /
Day-of-month 1-31 , - /// ? / L W C
Month 1-12 or JAN-DEC , - /// /
Day-of-Week 1-7 or SUN-SAT , - /// ? / L #
Year (Optional) empty, 1970-2099 , - /// /
-

- The '*' character is used to specify all values. For example, "*" - in the minute field means "every minute". -

-

- The '?' character is allowed for the day-of-month and day-of-week fields. It - is used to specify 'no specific value'. This is useful when you need to - specify something in one of the two fields, but not the other. -

-

- The '-' character is used to specify ranges For example "10-12" in - the hour field means "the hours 10, 11 and 12". -

-

- The ',' character is used to specify additional values. For example - "MON,WED,FRI" in the day-of-week field means "the days Monday, - Wednesday, and Friday". -

-

- The '/' character is used to specify increments. For example "0/15" - in the seconds field means "the seconds 0, 15, 30, and 45". And - "5/15" in the seconds field means "the seconds 5, 20, 35, and - 50". Specifying '*' before the '/' is equivalent to specifying 0 is - the value to start with. Essentially, for each field in the expression, there - is a set of numbers that can be turned on or off. For seconds and minutes, - the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to - 31, and for months 1 to 12. The "/" character simply helps you turn - on every "nth" value in the given set. Thus "7/6" in the - month field only turns on month "7", it does NOT mean every 6th - month, please note that subtlety. -

-

- The 'L' character is allowed for the day-of-month and day-of-week fields. - This character is short-hand for "last", but it has different - meaning in each of the two fields. For example, the value "L" in - the day-of-month field means "the last day of the month" - day 31 - for January, day 28 for February on non-leap years. If used in the - day-of-week field by itself, it simply means "7" or - "SAT". But if used in the day-of-week field after another value, it - means "the last xxx day of the month" - for example "6L" - means "the last friday of the month". When using the 'L' option, it - is important not to specify lists, or ranges of values, as you'll get - confusing results. -

-

- The 'W' character is allowed for the day-of-month field. This character - is used to specify the weekday (Monday-Friday) nearest the given day. As an - example, if you were to specify "15W" as the value for the - day-of-month field, the meaning is: "the nearest weekday to the 15th of - the month". So if the 15th is a Saturday, the trigger will fire on - Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the - 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. - However if you specify "1W" as the value for day-of-month, and the - 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not - 'jump' over the boundary of a month's days. The 'W' character can only be - specified when the day-of-month is a single day, not a range or list of days. -

-

- The 'L' and 'W' characters can also be combined for the day-of-month - expression to yield 'LW', which translates to "last weekday of the - month". -

-

- The '#' character is allowed for the day-of-week field. This character is - used to specify "the nth" XXX day of the month. For example, the - value of "6#3" in the day-of-week field means the third Friday of - the month (day 6 = Friday and "#3" = the 3rd one in the month). - Other examples: "2#1" = the first Monday of the month and - "4#5" = the fifth Wednesday of the month. Note that if you specify - "#5" and there is not 5 of the given day-of-week in the month, then - no firing will occur that month. If the '#' character is used, there can - only be one expression in the day-of-week field ("3#1,6#3" is - not valid, since there are two expressions). -

-

- -

-

- The legal characters and the names of months and days of the week are not - case sensitive. -

-

- NOTES: -

    -
  • Support for specifying both a day-of-week and a day-of-month value is - not complete (you'll need to use the '?' character in one of these fields). -
  • -
  • Overflowing ranges is supported - that is, having a larger number on - the left hand side than the right. You might do 22-2 to catch 10 o'clock - at night until 2 o'clock in the morning, or you might have NOV-FEB. It is - very important to note that overuse of overflowing ranges creates ranges - that don't make sense and no effort has been made to determine which - interpretation CronExpression chooses. An example would be - "0 0 14-6 ? * FRI-MON".
  • -
-

-
- Sharada Jambula - James House - Contributions from Mads Henderson - Refactoring from CronTrigger to CronExpression by Aaron Craven -
- - - Field specification for second. - - - - - Field specification for minute. - - - - - Field specification for hour. - - - - - Field specification for day of month. - - - - - Field specification for month. - - - - - Field specification for day of week. - - - - - Field specification for year. - - - - - Field specification for all wildcard value '*'. - - - - - Field specification for not specified value '?'. - - - - - Field specification for wildcard '*'. - - - - - Field specification for no specification at all '?'. - - - - - Seconds. - - - - - minutes. - - - - - Hours. - - - - - Days of month. - - - - - Months. - - - - - Days of week. - - - - - Years. - - - - - Last day of week. - - - - - Nth day of week. - - - - - Last day of month. - - - - - Nearest weekday. - - - - - Calendar day of week. - - - - - Calendar day of month. - - - - - Expression parsed. - - - - - Constructs a new based on the specified - parameter. - - - String representation of the cron expression the new object should represent - - - - - - Indicates whether the given date satisfies the cron expression. - - - Note that milliseconds are ignored, so two Dates falling on different milliseconds - of the same second will always have the same result here. - - The date to evaluate. - a boolean indicating whether the given date satisfies the cron expression - - - - Returns the next date/time after the given date/time which - satisfies the cron expression. - - the date/time at which to begin the search for the next valid date/time - the next valid date/time - - - - Returns the next date/time after the given date/time which does - not satisfy the expression. - - the date/time at which to begin the search for the next invalid date/time - the next valid date/time - - - - Returns the string representation of the - - The string representation of the - - - - Indicates whether the specified cron expression can be parsed into a - valid cron expression - - the expression to evaluate - a boolean indicating whether the given expression is a valid cron - expression - - - - Builds the expression. - - The expression. - - - - Stores the expression values. - - The position. - The string to traverse. - The type of value. - - - - - Checks the next value. - - The position. - The string to check. - The value. - The type to search. - - - - - Gets the expression summary. - - - - - - Gets the expression set summary. - - The data. - - - - - Skips the white space. - - The i. - The s. - - - - - Finds the next white space. - - The i. - The s. - - - - - Adds to set. - - The val. - The end. - The incr. - The type. - - - - Gets the set of given type. - - The type of set to get. - - - - - Gets the value. - - The v. - The s. - The i. - - - - - Gets the numeric value from string. - - The string to parse from. - The i. - - - - - Gets the month number. - - The string to map with. - - - - - Gets the day of week number. - - The s. - - - - - Gets the time from given time parts. - - The seconds. - The minutes. - The hours. - The day of month. - The month. - - - - - Gets the next fire time after the given time. - - The UTC time to start searching from. - - - - - Creates the date time without milliseconds. - - The time. - - - - - Advance the calendar to the particular hour paying particular attention - to daylight saving problems. - - The date. - The hour. - - - - - Gets the time before. - - The end time. - - - - - NOT YET IMPLEMENTED: Returns the final time that the - will match. - - - - - - Determines whether given year is a leap year. - - The year. - - true if the specified year is a leap year; otherwise, false. - - - - - Gets the last day of month. - - The month num. - The year. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Sets or gets the time zone for which the of this - will be resolved. - - - - - Gets the cron expression string. - - The cron expression string. - - - - Helper class for cron expression handling. - - - - - The value. - - - - - The position. - - - - - A concrete that is used to fire a - at given moments in time, defined with Unix 'cron-like' definitions. - - -

- For those unfamiliar with "cron", this means being able to create a firing - schedule such as: "At 8:00am every Monday through Friday" or "At 1:30am - every last Friday of the month". -

- -

- The format of a "Cron-Expression" string is documented on the - class. -

- -

- Here are some full examples:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Expression Meaning
"0 0 12 * * ?"" /> Fire at 12pm (noon) every day" />
"0 15 10 ? * *"" /> Fire at 10:15am every day" />
"0 15 10 * * ?"" /> Fire at 10:15am every day" />
"0 15 10 * * ? *"" /> Fire at 10:15am every day" />
"0 15 10 * * ? 2005"" /> Fire at 10:15am every day during the year 2005" /> -
"0 * 14 * * ?"" /> Fire every minute starting at 2pm and ending at 2:59pm, every day" /> -
"0 0/5 14 * * ?"" /> Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day" /> -
"0 0/5 14,18 * * ?"" /> Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day" /> -
"0 0-5 14 * * ?"" /> Fire every minute starting at 2pm and ending at 2:05pm, every day" /> -
"0 10,44 14 ? 3 WED"" /> Fire at 2:10pm and at 2:44pm every Wednesday in the month of March." /> -
"0 15 10 ? * MON-FRI"" /> Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday" /> -
"0 15 10 15 * ?"" /> Fire at 10:15am on the 15th day of every month" /> -
"0 15 10 L * ?"" /> Fire at 10:15am on the last day of every month" /> -
"0 15 10 ? * 6L"" /> Fire at 10:15am on the last Friday of every month" /> -
"0 15 10 ? * 6L"" /> Fire at 10:15am on the last Friday of every month" /> -
"0 15 10 ? * 6L 2002-2005"" /> Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005" /> -
"0 15 10 ? * 6#3"" /> Fire at 10:15am on the third Friday of every month" /> -
-

- -

- Pay attention to the effects of '?' and '*' in the day-of-week and - day-of-month fields! -

- -

- NOTES: -

    -
  • Support for specifying both a day-of-week and a day-of-month value is - not complete (you'll need to use the '?' character in on of these fields). -
  • -
  • Be careful when setting fire times between mid-night and 1:00 AM - - "daylight savings" can cause a skip or a repeat depending on whether the - time moves back or jumps forward.
  • -
-

-
- - - - Sharada Jambula - James House - Contributions from Mads Henderson -
- - - The base abstract class to be extended by all triggers. - - -

- s have a name and group associated with them, which - should uniquely identify them within a single . -

- -

- s are the 'mechanism' by which s - are scheduled. Many s can point to the same , - but a single can only point to one . -

- -

- Triggers can 'send' parameters/data to s by placing contents - into the on the . -

-
- - - - - - - James House - Sharada Jambula -
- - - The default value for priority. - - - - - Remove all s from the . - - - - - Create a with no specified name, group, or . - - - Note that the , and - the and properties - must be set before the can be placed into a - . - - - - - Create a with the given name, and default group. - - - Note that the and - properties must be set before the - can be placed into a . - - The name. - - - - Create a with the given name, and group. - - - Note that the and - properties must be set before the - can be placed into a . - - The name. - if , Scheduler.DefaultGroup will be used. - - - - Create a with the given name, and group. - - The name. - if , Scheduler.DefaultGroup will be used. - Name of the job. - The job group. - ArgumentException - if name is null or empty, or the group is an empty string. - - - - - Add the specified name of a to - the end of the 's list of listeners. - - Name of the listener. - - - - Remove the specified name of a - from the 's list of listeners. - - true if the given name was found in the list, and removed - - - - - This method should not be used by the Quartz client. -

- Called when the has decided to 'fire' - the trigger (Execute the associated ), in order to - give the a chance to update itself for its next - triggering (if any). -

- -
- - -
- - - This method should not be used by the Quartz client. - - -

- Called by the scheduler at the time a is first - added to the scheduler, in order to have the - compute its first fire time, based on any associated calendar. -

- -

- After this method has been called, - should return a valid answer. -

-
- - The first time at which the will be fired - by the scheduler, which is also the same value - will return (until after the first firing of the ). - -
- - - This method should not be used by the Quartz client. - - - Called after the has executed the - associated with the - in order to get the final instruction code from the trigger. - - - is the that was used by the - 's method. - is the thrown by the - , if any (may be null). - - - One of the members. - - - - - - - - - - Used by the to determine whether or not - it is possible for this to fire again. -

- If the returned value is then the - may remove the from the . -

-
-
- - - Returns the next time at which the is scheduled to fire. If - the trigger will not fire again, will be returned. Note that - the time returned can possibly be in the past, if the time that was computed - for the trigger to next fire has already arrived, but the scheduler has not yet - been able to fire the trigger (which would likely be due to lack of resources - e.g. threads). - - - The value returned is not guaranteed to be valid until after the - has been added to the scheduler. - - - - - - - Returns the previous time at which the fired. - If the trigger has not yet fired, will be returned. - - - - - Returns the next time at which the will fire, - after the given time. If the trigger will not fire after the given time, - will be returned. - - - - - Validates the misfire instruction. - - The misfire instruction. - - - - - This method should not be used by the Quartz client. -

- To be implemented by the concrete classes that extend this class. -

-

- The implementation should update the 's state - based on the MISFIRE_INSTRUCTION_XXX that was selected when the - was created. -

-
-
- - - This method should not be used by the Quartz client. -

- The implementation should update the 's state - based on the given new version of the associated - (the state should be updated so that it's next fire time is appropriate - given the Calendar's new settings). -

-
- - -
- - - Validates whether the properties of the are - valid for submission into a . - - - - - Return a simple string representation of this object. - - - - - Compare the next fire time of this to that of - another. - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. is suitable for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Get or sets the name of this . - - If name is null or empty. - - - - Get the group of this . If , Scheduler.DefaultGroup will be used. - - - if group is an empty string. - - - - - Get or set the name of the associated . - - - if jobName is null or empty. - - - - - Gets or sets the name of the associated 's - group. If set with , Scheduler.DefaultGroup will be used. - - ArgumentException - if group is an empty string. - - - - - Returns the 'full name' of the in the format - "group.name". - - - - - Gets the key. - - The key. - - - - Returns the 'full name' of the that the - points to, in the format "group.name". - - - - - Get or set the description given to the instance by - its creator (if any). - - - - - Get or set the with the given name with - this Trigger. Use when setting to dis-associate a Calendar. - - - - - Get or set the that is associated with the - . -

- Changes made to this map during job execution are not re-persisted, and - in fact typically result in an illegal state. -

-
-
- - - Whether or not the should be persisted in the - for re-use after program restarts. -

- If not explicitly set, the default value is . -

-
-
- - - Returns an array of s containing the names of all - s assigned to the , - in the order in which they should be notified. - - - - - Returns the last UTC time at which the will fire, if - the Trigger will repeat indefinitely, null will be returned. -

- Note that the return time *may* be in the past. -

-
-
- - - Get or set the instruction the should be given for - handling misfire situations for this - the - concrete type that you are using will have - defined a set of additional MISFIRE_INSTRUCTION_XXX - constants that may be passed to this method. -

- If not explicitly set, the default value is . -

-
- - - - -
- - - This method should not be used by the Quartz client. -

- Usable by - implementations, in order to facilitate 'recognizing' instances of fired - s as their jobs complete execution. -

-
-
- - - Returns the date/time on which the trigger must stop firing. This - defines the final boundary for trigger firings 舒 the trigger will - not fire after to this date and time. If this value is null, no end time - boundary is assumed, and the trigger can continue indefinitely. - - Sets the date/time on which the trigger must stop firing. This defines - the final boundary for trigger firings 舒 the trigger will not - fire after to this date and time. If this value is null, no end time - boundary is assumed, and the trigger can continue indefinitely. - - - - - The time at which the trigger's scheduling should start. May or may not - be the first actual fire time of the trigger, depending upon the type of - trigger and the settings of the other properties of the trigger. However - the first actual first time will not be before this date. - - - Setting a value in the past may cause a new trigger to compute a first - fire time that is in the past, which may cause an immediate misfire - of the trigger. - - - - - Tells whether this Trigger instance can handle events - in millisecond precision. - - - - - The priority of a acts as a tie breaker such that if - two s have the same scheduled fire time, then Quartz - will do its best to give the one with the higher priority first access - to a worker thread. - - - If not explicitly set, the default value is 5. - - - - - - - Gets a value indicating whether this instance has additional properties - that should be considered when for example saving to database. - - - If trigger implementation has additional properties that need to be saved - with base properties you need to make your class override this property with value true. - Returning true will effectively mean that ADOJobStore needs to serialize - this trigger instance to make sure additional properties are also saved. - - - true if this instance has additional properties; otherwise, false. - - - - - Create a with no settings. - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - - - - Create a with the given name and default group. - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - The name. - - - - Create a with the given name and group. - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - The name. - The group. - - - - Create a with the given name, group and - expression. - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - The name. - The group. - The cron expression. - - - - Create a with the given name and group, and - associated with the identified . - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - The name. - The group. - Name of the job. - The job group. - - - - Create a with the given name and group, - associated with the identified , - and with the given "cron" expression. - - - The start-time will also be set to the current time, and the time zone - will be set the the system's default time zone. - - The name. - The group. - Name of the job. - The job group. - The cron expression. - - - - Create a with the given name and group, - associated with the identified , - and with the given "cron" expression resolved with respect to the . - - The name. - The group. - Name of the job. - The job group. - The cron expression. - The time zone. - - - - Create a that will occur at the given time, - until the given end time. -

- If null, the start-time will also be set to the current time, the time - zone will be set the the system's default. -

-
- The name. - The group. - Name of the job. - The job group. - The start time. - The end time. - The cron expression. -
- - - Create a with fire time dictated by the - resolved with respect to the specified - occuring from the until - the given . - - The name. - The group. - Name of the job. - The job group. - The start time. - The end time. - - - - Clones this instance. - - - - - - Returns the next time at which the is scheduled to fire. If - the trigger will not fire again, will be returned. Note that - the time returned can possibly be in the past, if the time that was computed - for the trigger to next fire has already arrived, but the scheduler has not yet - been able to fire the trigger (which would likely be due to lack of resources - e.g. threads). - - - The value returned is not guaranteed to be valid until after the - has been added to the scheduler. - - - - - - - Returns the previous time at which the fired. - If the trigger has not yet fired, will be returned. - - - - - - Sets the next fire time. -

- This method should not be invoked by client code. -

-
- The fire time. -
- - - Sets the previous fire time. -

- This method should not be invoked by client code. -

-
- The fire time. -
- - - Returns the next time at which the will fire, - after the given time. If the trigger will not fire after the given time, - will be returned. - - - - - - - Used by the to determine whether or not - it is possible for this to fire again. -

- If the returned value is then the - may remove the from the . -

-
- -
- - - Validates the misfire instruction. - - The misfire instruction. - - - - - This method should not be used by the Quartz client. -

- To be implemented by the concrete classes that extend this class. -

-

- The implementation should update the 's state - based on the MISFIRE_INSTRUCTION_XXX that was selected when the - was created. -

-
- -
- - -

- Determines whether the date and (optionally) time of the given Calendar - instance falls on a scheduled fire-time of this trigger. -

- -

- Equivalent to calling . -

-
- The date to compare. - -
- - - Determines whether the date and (optionally) time of the given Calendar - instance falls on a scheduled fire-time of this trigger. -

- Note that the value returned is NOT validated against the related - ICalendar (if any). -

-
- The date to compare - If set to true, the method will only determine if the - trigger will fire during the day represented by the given Calendar - (hours, minutes and seconds will be ignored). - -
- - - Called when the has decided to 'fire' - the trigger (Execute the associated ), in order to - give the a chance to update itself for its next - triggering (if any). - - - - - - - Updates the trigger with new calendar. - - The calendar to update with. - The misfire threshold. - - - - Called by the scheduler at the time a is first - added to the scheduler, in order to have the - compute its first fire time, based on any associated calendar. -

- After this method has been called, - should return a valid answer. -

-
- - - the first time at which the will be fired - by the scheduler, which is also the same value - will return (until after the first firing of the ). - -
- - - Gets the expression summary. - - - - - - Gets the next time to fire after the given time. - - The time to compute from. - - - - - NOT YET IMPLEMENTED: Returns the time before the given time - that this will fire. - - The date. - - - - - Gets or sets the cron expression string. - - The cron expression string. - - - - Set the CronExpression to the given one. The TimeZone on the passed-in - CronExpression over-rides any that was already set on the Trigger. - - The cron expression. - - - - Returns the date/time on which the trigger may begin firing. This - defines the initial boundary for trigger firings the trigger - will not fire prior to this date and time. - - - - - - Get or sets the time at which the CronTrigger should quit - repeating - even if repeastCount isn't yet satisfied. - - - - - Sets the time zone for which the of this - will be resolved. - - - If is set after this - property, the TimeZone setting on the CronExpression will "win". However - if is set after this property, the - time zone applied by this method will remain in effect, since the - string cron expression does not carry a time zone! - - The time zone. - - - - Returns the last UTC time at which the will fire, if - the Trigger will repeat indefinitely, null will be returned. -

- Note that the return time *may* be in the past. -

-
-
- - - Tells whether this Trigger instance can handle events - in millisecond precision. - - - - - - The interface to be implemented by s that provide a - mechanism for having their execution interrupted. It is NOT a requirment - for jobs to implement this interface - in fact, for most people, none of - their jobs will. - - -

- The means of actually interrupting the Job must be implemented within the - itself (the method of this - interface is simply a means for the scheduler to inform the - that a request has been made for it to be interrupted). The mechanism that - your jobs use to interrupt themselves might vary between implementations. - However the principle idea in any implementation should be to have the - body of the job's periodically check some flag to - see if an interruption has been requested, and if the flag is set, somehow - abort the performance of the rest of the job's work. An example of - interrupting a job can be found in the java source for the class - Quartz.Examples.Example7.DumbInterruptableJob. It is legal to use - some combination of and - synchronization within and - in order to have the method block until the - signals that it has noticed the set flag. -

- -

- If the Job performs some form of blocking I/O or similar functions, you may - want to consider having the method store a - reference to the calling as a member variable. Then the - impplementation of this interfaces method can call - on that Thread. Before attempting this, make - sure that you fully understand what - does and doesn't do. Also make sure that you clear the Job's member - reference to the Thread when the Execute(..) method exits (preferrably in a - block. -

-
- - - James House -
- - - Called by the when a user - interrupts the . - - void (nothing) if job interrupt is successful. - - - - Scheduler constants. - - - - - A (possibly) usefull constant that can be used for specifying the group - that and instances belong to. - - - - - A constant group name used internally by the - scheduler - clients should not use the value of this constant - ("MANUAL_TRIGGER") for thename of a 's group. - - - - - A constant group name used internally by the - scheduler - clients should not use the value of this constant - ("RECOVERING_JOBS") for thename of a 's group. - - - - - A constant group name used internally by the - scheduler - clients should not use the value of this constant - ("FAILED_OVER_JOBS") for thename of a 's group. - - - - - A constant key that can be used to retrieve the - name of the original from a recovery trigger's - data map in the case of a job recovering after a failed scheduler - instance. - - - - - - A constant key that can be used to retrieve the - group of the original from a recovery trigger's - data map in the case of a job recovering after a failed scheduler - instance. - - - - - - A constant key that can be used to retrieve the - scheduled fire time of the original from a recovery - trigger's data map in the case of a job recovering after a failed scheduler - instance. - - - - - - Holds state information for instances. - - - instances are stored once when the - is added to a scheduler. They are also re-persisted after every execution of - instances. -

- instances can also be stored with a - . This can be useful in the case where you have a Job - that is stored in the scheduler for regular/repeated use by multiple - Triggers, yet with each independent triggering, you want to supply the - Job with different data inputs. -

-

- The passed to a Job at execution time - also contains a convenience that is the result - of merging the contents of the trigger's JobDataMap (if any) over the - Job's JobDataMap (if any). -

-
- - - - - James House -
- - - Create an empty . - - - - - Create a with the given data. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Adds the given value as a string version to the - 's data map. - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the - . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Retrieve the identified value from the . - - - - - Gets the date time. - - The key. - - - - - Gets the value behind the specified key. - - The key. - - - - - Conveys the detail properties of a given instance. - - - Quartz does not store an actual instance of a type, but - instead allows you to define an instance of one, through the use of a . -

- s have a name and group associated with them, which - should uniquely identify them within a single . -

-

- s are the 'mechanism' by which s - are scheduled. Many s can point to the same , - but a single can only point to one . -

-
- - - - - James House - Sharada Jambula -
- - - Create a with no specified name or group, and - the default settings of all the other properties. -

- Note that the , and - properties must be set before the job can be - placed into a . -

-
-
- - - Create a with the given name, default group, and - the default settings of all the other properties. - If , Scheduler.DefaultGroup will be used. - - - If name is null or empty, or the group is an empty string. - - - - - Create a with the given name, and group, and - the default settings of all the other properties. - If , Scheduler.DefaultGroup will be used. - - - If name is null or empty, or the group is an empty string. - - - - - Create a with the given name, and group, and - the given settings of all the other properties. - - The name. - if , Scheduler.DefaultGroup will be used. - Type of the job. - if set to true, job will be volatile. - if set to true, job will be durable. - if set to true, job will request recovery. - - ArgumentException if name is null or empty, or the group is an empty string. - - - - - Validates whether the properties of the are - valid for submission into a . - - - - - Add the specified name of a to the - end of the 's list of listeners. - - - - - Remove the specified name of a from - the 's list of listeners. - - true if the given name was found in the list, and removed - - - - Return a simple string representation of this object. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Determines whether the specified detail is equal to this instance. - - The detail to examine. - - true if the specified detail is equal; otherwise, false. - - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - if the specified is equal to the - current ; otherwise, . - - - - - Checks equality between given job detail and this instance. - - The detail to compare this instance with. - - - - - Serves as a hash function for a particular type, suitable - for use in hashing algorithms and data structures like a hash table. - - - A hash code for the current . - - - - - Get or sets the name of this . - - - if name is null or empty. - - - - - Get or sets the group of this . - If , will be used. - - - If the group is an empty string. - - - - - Returns the 'full name' of the in the format - "group.name". - - - - - Gets the key. - - The key. - - - - Get or set the description given to the instance by its - creator (if any). - - - May be useful for remembering/displaying the purpose of the job, though the - description has no meaning to Quartz. - - - - - Get or sets the instance of that will be executed. - - - if jobType is null or the class is not a . - - - - - Get or set the that is associated with the . - - - - - Set whether or not the the should re-Execute - the if a 'recovery' or 'fail-over' situation is - encountered. -

- If not explicitly set, the default value is . -

-
- -
- - - Whether or not the should not be persisted in the - for re-use after program - restarts. -

- If not explicitly set, the default value is . -

-
- if the should be garbage - collected along with the . - -
- - - Whether or not the should remain stored after it is - orphaned (no s point to it). -

- If not explicitly set, the default value is . -

-
- - if the Job should remain persisted after - being orphaned. - -
- - - Whether or not the implements the interface . - - - - - Gets or sets an array of s containing the names of all - s assigned to the , - in the order in which they should be notified. Setting the array - clears any listener names that were in the list. - - - - - A context bundle containing handles to various environment information, that - is given to a instance as it is - executed, and to a instance after the - execution completes. - - -

- The found on this object (via the - method) serves as a convenience - - it is a merge of the found on the - and the one found on the , with - the value in the latter overriding any same-named values in the former. - It is thus considered a 'best practice' that the Execute code of a Job - retrieve data from the JobDataMap found on this object NOTE: Do not - expect value 'set' into this JobDataMap to somehow be set back onto a - 's own JobDataMap. -

- -

- s are also returned from the - - method. These are the same instances as those past into the jobs that are - currently executing within the scheduler. The exception to this is when your - application is using Quartz remotely (i.e. via RMI) - in which case you get - a clone of the s, and their references to - the and instances have been lost (a - clone of the is still available - just not a handle - to the job instance that is running). -

-
- - - - - - James House -
- - - Create a JobExcecutionContext with the given context data. - - - - - Increments the refire count. - - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Put the specified value into the context's data map with the given key. - Possibly useful for sharing data between listeners and jobs. -

- NOTE: this data is volatile - it is lost after the job execution - completes, and all TriggerListeners and JobListeners have been - notified. -

-
- - - - -
- - - Get the value with the given key from the context's data map. - - - - - - - Get a handle to the instance that fired the - . - - - - - Get a handle to the instance that fired the - . - - - - - Get a handle to the referenced by the - instance that fired the . - - - - - If the is being re-executed because of a 'recovery' - situation, this method will return . - - - - - Gets the refire count. - - The refire count. - - - - Get the convenience of this execution context. - - -

- The found on this object serves as a convenience - - it is a merge of the found on the - and the one found on the , with - the value in the latter overriding any same-named values in the former. - It is thus considered a 'best practice' that the Execute code of a Job - retrieve data from the JobDataMap found on this object. -

- -

NOTE: Do not expect value 'set' into this JobDataMap to somehow be - set back onto a 's own JobDataMap. -

- -

- Attempts to change the contents of this map typically result in an - illegal state. -

- -
-
- - - Get the associated with the . - - - - - Get the instance of the that was created for this - execution. -

- Note: The Job instance is not available through remote scheduler - interfaces. -

-
-
- - - The actual time the trigger fired. For instance the scheduled time may - have been 10:00:00 but the actual fire time may have been 10:00:03 if - the scheduler was too busy. - - Returns the fireTimeUtc. - - - - - The scheduled time the trigger fired for. For instance the scheduled - time may have been 10:00:00 but the actual fire time may have been - 10:00:03 if the scheduler was too busy. - - Returns the scheduledFireTimeUtc. - - - - - Gets the previous fire time. - - The previous fire time. - - - - Gets the next fire time. - - The next fire time. - - - - Returns the result (if any) that the set before its - execution completed (the type of object set as the result is entirely up - to the particular job). - - -

- The result itself is meaningless to Quartz, but may be informative - to s or - s that are watching the job's - execution. -

- - Set the result (if any) of the 's execution (the type of - object set as the result is entirely up to the particular job). - -

- The result itself is meaningless to Quartz, but may be informative - to s or - s that are watching the job's - execution. -

-
-
- - - The amount of time the job ran for. The returned - value will be until the job has actually completed (or thrown an - exception), and is therefore generally only useful to - s and s. - - - - - An exception that can be thrown by a - to indicate to the Quartz that an error - occured while executing, and whether or not the requests - to be re-fired immediately (using the same , - or whether it wants to be unscheduled. - - - Note that if the flag for 'refire immediately' is set, the flags for - unscheduling the Job are ignored. - - - - - James House - - - - Create a JobExcecutionException, with the 're-fire immediately' flag set - to . - - - - - Create a JobExcecutionException, with the given cause. - - The cause. - - - - Create a JobExcecutionException, with the given message. - - - - - Initializes a new instance of the class. - - The message. - The original cause. - - - - Create a JobExcecutionException with the 're-fire immediately' flag set - to the given value. - - - - - Create a JobExcecutionException with the given underlying exception, and - the 're-fire immediately' flag set to the given value. - - - - - Create a JobExcecutionException with the given message, and underlying - exception, and the 're-fire immediately' flag set to the given value. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - Creates and returns a string representation of the current exception. - - - A string representation of the current exception. - - - - - - Gets or sets a value indicating whether to unschedule firing trigger. - - - true if firing trigger should be unscheduled; otherwise, false. - - - - - Gets or sets a value indicating whether to unschedule all triggers. - - - true if all triggers should be unscheduled; otherwise, false. - - - - - Gets or sets a value indicating whether to refire immediately. - - true if to refire immediately; otherwise, false. - - - - Misfire instructions. - - - - - Instruction not set (yet). - - - - - Use smart policy. - - - - - Misfire policy settings for SimpleTrigger. - - - - - Instructs the that upon a mis-fire - situation, the wants to be fired - now by . -

- NOTE: This instruction should typically only be used for - 'one-shot' (non-repeating) Triggers. If it is used on a trigger with a - repeat count > 0 then it is equivalent to the instruction - . -

-
-
- - - Instructs the that upon a mis-fire - situation, the wants to be - re-scheduled to 'now' (even if the associated - excludes 'now') with the repeat count left as-is. This does obey the - end-time however, so if 'now' is after the - end-time the will not fire again. - - -

- NOTE: Use of this instruction causes the trigger to 'forget' - the start-time and repeat-count that it was originally setup with (this - is only an issue if you for some reason wanted to be able to tell what - the original values were at some later time). -

-
-
- - - Instructs the that upon a mis-fire - situation, the wants to be - re-scheduled to 'now' (even if the associated - excludes 'now') with the repeat count set to what it would be, if it had - not missed any firings. This does obey the end-time - however, so if 'now' is after the end-time the will - not fire again. - -

- NOTE: Use of this instruction causes the trigger to 'forget' - the start-time and repeat-count that it was originally setup with. - Instead, the repeat count on the trigger will be changed to whatever - the remaining repeat count is (this is only an issue if you for some - reason wanted to be able to tell what the original values were at some - later time). -

- -

- NOTE: This instruction could cause the - to go to the 'COMPLETE' state after firing 'now', if all the - repeat-fire-times where missed. -

-
-
- - - Instructs the that upon a mis-fire - situation, the wants to be - re-scheduled to the next scheduled time after 'now' - taking into - account any associated , and with the - repeat count set to what it would be, if it had not missed any firings. - - - NOTE/WARNING: This instruction could cause the - to go directly to the 'COMPLETE' state if all fire-times where missed. - - - - - Instructs the that upon a mis-fire - situation, the wants to be - re-scheduled to the next scheduled time after 'now' - taking into - account any associated , and with the - repeat count left unchanged. - - -

- NOTE/WARNING: This instruction could cause the - to go directly to the 'COMPLETE' state if all the end-time of the trigger - has arrived. -

-
-
- - - misfire instructions for CronTrigger - - - - - Instructs the that upon a mis-fire - situation, the wants to be fired now - by . - - - - - Instructs the that upon a mis-fire - situation, the wants to have it's - next-fire-time updated to the next time in the schedule after the - current time (taking into account any associated , - but it does not want to be fired now. - - - - - misfire instructions for NthIncludedDayTrigger - - - - - Instructs the that upon a mis-fire situation, the - wants to be fired now by the - - - - - - Instructs the that upon a mis-fire situation, the - wants to have - nextFireTime updated to the next time in the schedule after - the current time, but it does not want to be fired now. - - - - - A trigger which fires on the Nth day of every interval type - , or - that is not excluded by the associated - calendar. - - - When determining what the Nth day of the month or year - is, will skip excluded days on the - associated calendar. This would commonly be used in an Nth - business day situation, in which the user wishes to fire a particular job on - the Nth business day (i.e. the 5th business day of - every month). Each also has an associated - which indicates at what time of day the trigger is - to fire. -

- All s default to a monthly interval type - (fires on the Nth day of every month) with N = 1 (first - non-excluded day) and set to 12:00 PM (noon). These - values can be changed using the , , and - methods. Users may also want to note the - and - methods. -

-

- Take, for example, the following calendar: -

- - July August September - Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa - 1 W 1 2 3 4 5 W 1 2 W - W H 5 6 7 8 W W 8 9 10 11 12 W W H 6 7 8 9 W - W 11 12 13 14 15 W W 15 16 17 18 19 W W 12 13 14 15 16 W - W 18 19 20 21 22 W W 22 23 24 25 26 W W 19 20 21 22 23 W - W 25 26 27 28 29 W W 29 30 31 W 26 27 28 29 30 - W - - Where W's represent weekend days, and H's represent holidays, all of which - are excluded on a calendar associated with an - with n=5 and - intervalType=IntervalTypeMonthly. In this case, the trigger - would fire on the 8th of July (because of the July 4 holiday), - the 5th of August, and the 8th of September (because - of Labor Day). -
- Aaron Craven -
- - - Indicates a monthly trigger type (fires on the Nth included - day of every month). - - - - indicates a yearly trigger type (fires on the Nth included - day of every year). - - - - - Indicates a weekly trigger type (fires on the Nth included - day of every week). When using this interval type, care must be taken - not to think of the value of as an analog to - . Such a comparison can only - be drawn when there are no calendars associated with the trigger. To - illustrate, consider an with - n = 3 which is associated with a Calendar excluding - non-weekdays. The trigger would fire on the 3rd - included day of the week, which would be 4th - actual day of the week. - - - - - Create an with no specified name, - group, or . This will result initially in a - default monthly trigger that fires on the first day of every month at - 12:00 PM (n = 1, - intervalType=, - fireAtTime="12:00"). - - - Note that , , - , and , must be - called before the can be placed into - a . - - - - - Create an with the given name and - default group but no specified . This will result - initially in a default monthly trigger that fires on the first day of - every month at 12:00 PM (=1, - intervalType=, - fireAtTime=12:00"). -

- Note that and must - be called before the can be placed - into a . -

-
- the name for the -
- - - Create an with the given name and - group but no specified . This will result - initially in a default monthly trigger that fires on the first day of - every month at 12:00 PM (=1, - intervalType=, - fireAtTime=12:00"). -

- Note that and must - be called before the can be placed - into a . -

-
- the name for the - - the group for the - -
- - - Create an with the given name and - group and the specified . This will result - initially in a default monthly trigger that fires on the first day of - every month at 12:00 PM (=1, - intervalType=, - fireAtTime="12:00"). - - The name for the . - The group for the . - The name of the job to associate with the . - The group containing the job to associate with the . - - - - Returns the next UTC time at which the - will fire. If the trigger will not fire again, will be - returned. - - -

- Because of the conceptual design of , - it is not always possible to decide with certainty that the trigger - will never fire again. Therefore, it will search for the next - fire time up to a given cutoff. These cutoffs can be changed by using the - property. The default cutoff is 12 - of the intervals specified by intervalType. -

-

- The returned value is not guaranteed to be valid until after - the trigger has been added to the scheduler. -

-
- the next fire time for the trigger - -
- - - Returns the previous UTC time at which the - fired. If the trigger has not yet - fired, will be returned. - - the previous fire time for the trigger - - - - Returns the first time the will fire - after the specified date. - - -

- Because of the conceptual design of , - it is not always possible to decide with certainty that the trigger - will never fire again. Therefore, it will search for the next - fire time up to a given cutoff. These cutoffs can be changed by using the - property. The default cutoff is 12 - of the intervals specified by intervalType. -

-

- Therefore, for triggers with intervalType = - , if the trigger - will not fire within 12 - weeks after the given date/time, will be returned. For - triggers with intervalType = - - , if the trigger will not fire within 12 - months after the given date/time, will be returned. - For triggers with intervalType = - - , if the trigger will not fire within 12 - years after the given date/time, will be returned. In - all cases, if the trigger will not fire before , - will be returned. -

-
- The time after which to find the nearest fire time. - This argument is treated as exclusive 舒 that is, - if afterTime is a valid fire time for the trigger, it - will not be returned as the next fire time. - - - the first time the trigger will fire following the specified date - -
- - - Called when the has decided to 'fire' the trigger - (Execute the associated ), in order to give the - a chance to update itself for its next triggering - (if any). - - - - - Called by the scheduler at the time a is first - added to the scheduler, in order to have the - compute its first fire time, based on any associated calendar. -

- After this method has been called, - should return a valid answer. -

- -
- the first time at which the will be fired - by the scheduler, which is also the same value - will return (until after the first - firing of the ). - -
- - - Called after the has executed the - associated with the in order - to get the final instruction code from the trigger. - - - The that was used by the - 's method. - - - The thrown by the - , if any (may be ) - - one of the Trigger.INSTRUCTION_XXX constants. - - - - - Used by the to determine whether or not it is - possible for this to fire again. - ' - -

- If the returned value is then the - may remove the from the - -

-
- - A boolean indicator of whether the trigger could potentially fire - again. - -
- - - Indicates whether is a valid misfire - instruction for this . - - Whether is valid. - - - Updates the 's state based on the - MisfireInstruction that was selected when the - was created -

- If the misfire instruction is set to MISFIRE_INSTRUCTION_SMART_POLICY, - then the instruction will be interpreted as - . -

-
- a new or updated calendar to use for the trigger - -
- - - Updates the 's state based on the - given new version of the associated . - - A new or updated calendar to use for the trigger - the amount of time that must - be between "now" and the time the next - firing of the trigger is supposed to occur. - - - - - Calculates the first time an with - intervalType = IntervalTypeWeekly will fire - after the specified date. See for more - information. - - The time after which to find the nearest fire time. - This argument is treated as exclusive 舒 that is, - if afterTime is a valid fire time for the trigger, it - will not be returned as the next fire time. - - the first time the trigger will fire following the specified - date - - - - - Calculates the first UTC time an with - intervalType = will fire - after the specified date. See for more - information. - - - The UTC time after which to find the nearest fire time. - This argument is treated as exclusive 舒 that is, - if afterTime is a valid fire time for the trigger, it - will not be returned as the next fire time. - - the first time the trigger will fire following the specified date - - - - Calculates the first time an with - intervalType = will fire - after the specified date. See for more - information. - - - The UTC time after which to find the nearest fire time. - This argument is treated as exclusive 舒 that is, - if afterTime is a valid fire time for the trigger, it - will not be returned as the next fire time. - - the first time the trigger will fire following the specified - date - - - - - Gets or sets the day of the interval on which the - should fire. If the Nth - day of the interval does not exist (i.e. the 32nd of a - month), the trigger simply will never fire. N may not be less than 1. - - - - - Returns the interval type for the . - - - Sets the interval type for the . If - , the trigger will fire on the - Nth included day of every month. If - , the trigger will fire on the - Nth included day of every year. If - , the trigger will fire on the - Nth included day of every week. - - - - - - - - Returns the fire time for the as a - string with the format "HH:MM[:SS]", with HH representing the - 24-hour clock hour of the fire time. Seconds are optional and their - inclusion depends on whether or not they were provided to - . - - - - - Returns the for the - . - - -

- Because of the conceptual design of , - it is not always possible to decide with certainty that the trigger - will never fire again. Therefore, it will search for the next - fire time up to a given cutoff. These cutoffs can be changed by using the - property. The default cutoff is 12 - of the intervals specified by intervalType" />. -

-

- Because of the conceptual design of , - it is not always possible to decide with certainty that the trigger - will never fire again. Therefore, it will search for the next - fire time up to a given cutoff. These cutoffs can be changed by using the - method. The default cutoff is 12 - of the intervals specified by intervalType". -

-

- In most cases, the default value of this setting (12) is sufficient (it - is highly unlikely, for example, that you will need to look at more than - 12 months of dates to ensure that your trigger will never fire again). - However, this setting is included to allow for the rare exceptions where - this might not be true. -

-

- For example, if your trigger is associated with a calendar that excludes - a great many dates in the next 12 months, and hardly any following that, - it is possible (if is large enough) that you could run - into this situation. -

-
-
- - - Returns the last UTC time the will fire. - If the trigger will not fire at any point between - and , will be returned. - - the last time the trigger will fire. - - - - Tells whether this Trigger instance can handle events - in millisecond precision. - - - - - - Sets or gets the time zone in which the will be resolved. - If no time zone is provided, then the default time zone will be used. - - - - - - - Gets or sets the trigger's calendar week rule. - - The trigger calendar week rule. - - - - Gets or sets the trigger's calendar first day of week rule. - - The trigger calendar first day of week. - - - - An exception that is thrown to indicate that an attempt to store a new - object (i.e. , - or ) in a - failed, because one with the same name and group already exists. - - James House - - -

- Create a with the given - message. -

-
-
- - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - -

- Create a and auto-generate a - message using the name/group from the given . -

- -

- The message will read:
"Unable to store Job with name: '__' and - group: '__', because one already exists with this identification." -

-
-
- -

- Create a and auto-generate a - message using the name/group from the given . -

- -

- The message will read:
"Unable to store Trigger with name: '__' and - group: '__', because one already exists with this identification." -

-
-
- - - An exception that is thrown to indicate that there is a misconfiguration of - the - or one of the components it - configures. - - James House - - - - Create a with the given message. - - - - - Create a with the given message - and cause. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - - Holds context/environment data that can be made available to Jobs as they - are executed. - - - James House - - - - Create an empty . - - - - - Create a with the given data. - - - - - Instructs Scheduler what to do with a trigger and job. - - - - - Instructs the that the - has no further instructions. - - - - - Instructs the that the - wants the to re-Execute - immediately. If not in a 'RECOVERING' or 'FAILED_OVER' situation, the - execution context will be re-used (giving the the - abilitiy to 'see' anything placed in the context by its last execution). - - - - - Instructs the that the - should be put in the state. - - - - - Instructs the that the - wants itself deleted. - - - - - Instructs the that all - s referencing the same as - this one should be put in the state. - - - - - Instructs the that all - s referencing the same as - this one should be put in the state. - - - - - Instructs the that the - should be put in the state. - - - - - Describes the settings and capabilities of a given - instance. - - James House - - - - Initializes a new instance of the class. - - Name of the scheduler. - The scheduler instance. - The scheduler type. - if set to true, scheduler is a remote scheduler. - if set to true, scheduler is started. - if set to true, scheduler is in standby mode. - if set to true, scheduler is shutdown. - The start time. - The number of jobs executed. - The job store type. - if set to true, job store is persistent. - The thread pool type. - Size of the thread pool. - The version string. - - - - Returns a formatted (human readable) string describing all the 's - meta-data values. - - -

- The format of the string looks something like this: -

-            Quartz Scheduler 'SchedulerName' with instanceId 'SchedulerInstanceId' Scheduler class: 'Quartz.Impl.StdScheduler' - running locally. Running since: '11:33am on Jul 19, 2002' Not currently paused. Number of Triggers fired: '123' Using thread pool 'Quartz.Simpl.SimpleThreadPool' - with '8' threads Using job-store 'Quartz.Impl.JobStore' - which supports persistence.
-            
-

-
-
- - - Return a simple string representation of this object. - - - - - Returns the name of the . - - - - - Returns the instance Id of the . - - - - - Returns the class-name of the instance. - - - - - Returns whether the is being used remotely (via remoting). - - - - - Returns whether the scheduler has been started. - - - Note: may return even if - returns . - - - - - Reports whether the is in standby mode. - - - Note: may return even if - returns . - - - - - Reports whether the has been Shutdown. - - - - - Returns the class-name of the instance that is - being used by the . - - - - - Returns the type name of the instance that is - being used by the . - - - - - Returns the number of threads currently in the 's - - - - - Returns the version of Quartz that is running. - - - - - Returns the at which the Scheduler started running. - - null if the scheduler has not been started. - - - - - Returns the number of jobs executed since the - started.. - - - - - Returns whether or not the 's - instance supports persistence. - - - - - A concrete that is used to fire a - at a given moment in time, and optionally repeated at a specified interval. - - - - - - James House - Contributions by Lieven Govaerts of Ebitec Nv, Belgium. - Marko Lahma (.NET) - - - - Used to indicate the 'repeat count' of the trigger is indefinite. Or in - other words, the trigger should repeat continually until the trigger's - ending timestamp. - - - - - Create a with no settings. - - - - - Create a that will occur immediately, and - not repeat. - - - - - Create a that will occur immediately, and - not repeat. - - - - - Create a that will occur immediately, and - repeat at the the given interval the given number of times. - - - - - Create a that will occur immediately, and - repeat at the the given interval the given number of times. - - - - - Create a that will occur at the given time, - and not repeat. - - - - - Create a that will occur at the given time, - and not repeat. - - - - - Create a that will occur at the given time, - and repeat at the the given interval the given number of times, or until - the given end time. - - The name. - A UTC set to the time for the to fire. - A UTC set to the time for the - to quit repeat firing. - The number of times for the to repeat - firing, use for unlimited times. - The time span to pause between the repeat firing. - - - - Create a that will occur at the given time, - and repeat at the the given interval the given number of times, or until - the given end time. - - The name. - The group. - A UTC set to the time for the to fire. - A UTC set to the time for the - to quit repeat firing. - The number of times for the to repeat - firing, use for unlimited times. - The time span to pause between the repeat firing. - - - - Create a that will occur at the given time, - fire the identified and repeat at the the given - interval the given number of times, or until the given end time. - - The name. - The group. - Name of the job. - The job group. - A set to the time for the - to fire. - A set to the time for the - to quit repeat firing. - The number of times for the to repeat - firing, use RepeatIndefinitely for unlimited times. - The time span to pause between the repeat firing. - - - - Validates the misfire instruction. - - The misfire instruction. - - - - - Updates the 's state based on the - MisfireInstruction value that was selected when the - was created. - - - If MisfireSmartPolicyEnabled is set to true, - then the following scheme will be used:
-
    -
  • If the Repeat Count is 0, then the instruction will - be interpreted as .
  • -
  • If the Repeat Count is , then - the instruction will be interpreted as . - WARNING: using MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount - with a trigger that has a non-null end-time may cause the trigger to - never fire again if the end-time arrived during the misfire time span. -
  • -
  • If the Repeat Count is > 0, then the instruction - will be interpreted as . -
  • -
-
-
- - - Called when the has decided to 'fire' - the trigger (Execute the associated ), in order to - give the a chance to update itself for its next - triggering (if any). - - - - - - Updates the instance with new calendar. - - The calendar. - The misfire threshold. - - - - Called by the scheduler at the time a is first - added to the scheduler, in order to have the - compute its first fire time, based on any associated calendar. -

- After this method has been called, - should return a valid answer. -

-
- - The first time at which the will be fired - by the scheduler, which is also the same value - will return (until after the first firing of the ). - -
- - - Returns the next time at which the will - fire. If the trigger will not fire again, will be - returned. The value returned is not guaranteed to be valid until after - the has been added to the scheduler. - - - - - Returns the previous time at which the fired. - If the trigger has not yet fired, will be - returned. - - - - - Set the next UTC time at which the should fire. - This method should not be invoked by client code. - - - - - Set the previous UTC time at which the fired. - This method should not be invoked by client code. - - - - - Returns the next UTC time at which the will - fire, after the given UTC time. If the trigger will not fire after the given - time, will be returned. - - - - - Returns the last UTC time at which the will - fire, before the given time. If the trigger will not fire before the - given time, will be returned. - - - - - Computes the number of times fired between the two UTC date times. - - The UTC start date and time. - The UTC end date and time. - - - - - Determines whether or not the will occur - again. - - - - - Validates whether the properties of the are - valid for submission into a . - - - - - Get or set thhe number of times the should - repeat, after which it will be automatically deleted. - - - - - - Get or set the the time interval at which the should repeat. - - - - - Get or set the number of times the has already - fired. - - - - - Returns the final UTC time at which the will - fire, if repeatCount is RepeatIndefinitely, null will be returned. -

- Note that the return time may be in the past. -

-
-
- - - Tells whether this Trigger instance can handle events - in millisecond precision. - - - - - - All trigger states known to Scheduler. - - - - - Indicates that the is in the "normal" state. - - - - - Indicates that the is in the "paused" state. - - - - - Indicates that the is in the "complete" state. - - - "Complete" indicates that the trigger has not remaining fire-times in - its schedule. - - - - - Indicates that the is in the "error" state. - - -

- A arrives at the error state when the scheduler - attempts to fire it, but cannot due to an error creating and executing - its related job. Often this is due to the 's - class not existing in the classpath. -

- -

- When the trigger is in the error state, the scheduler will make no - attempts to fire it. -

-
-
- - - Indicates that the is in the "blocked" state. - - - A arrives at the blocked state when the job that - it is associated with is a and it is - currently executing. - - - - - - Indicates that the does not exist. - - - - - Convenience and utility methods for simplifying the construction and - configuration of s. - - - Please submit suggestions for additional convenience methods to either the - Quartz user forum or the developer's mail list at - source forge. - - - - James House - - - - Constant indicating last day of month. - - - - - Milliseconds in minute. - - - - - Milliseconds in hour. - - - - - Seconds in day. - - - - - Milliseconds in day. - - - - - Initializes a new instance of the class. - - - - - Set the given 's name to the given value, and its - group to the default group (). - - the tigger to change name to - the new trigger name - - - - Set the given 's name to the given value, and its - group to the given group. - - the tigger to change name to - the new trigger name - the new trigger group - - - - Make a trigger that will fire every day at the given time. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the new trigger -
- - - Make a trigger that will fire every day at the given time. -

- The generated trigger will not have its group or end-time set. - The Start time defaults to 'now'. -

-
- the trigger's name - the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the newly created trigger -
- - - Make a trigger that will fire every week at the given day and time. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- (1-7) the day of week upon which to fire - the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the new trigger -
- - - Make a trigger that will fire every week at the given day and time. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the day of week upon which to fire - the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the newly created trigger -
- - - Make a trigger that will fire every month at the given day and time. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-

- If the day of the month specified does not occur in a given month, a - firing will not occur that month. (i.e. if dayOfMonth is specified as - 31, no firing will occur in the months of the year with fewer than 31 - days). -

-
- (1-31, or -1) the day of week upon which to fire - the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the newly created trigger -
- - - Make a trigger that will fire every month at the given day and time. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-

- If the day of the month specified does not occur in a given month, a - firing will not occur that month. (i.e. if dayOfMonth is specified as - 31, no firing will occur in the months of the year with fewer than 31 - days). -

-
- the trigger's name - (1-31, or -1) the day of week upon which to fire - the hour (0-23) upon which to fire - the minute (0-59) upon which to fire - the newly created trigger -
- - - Make a trigger that will fire times, waiting - between each fire. - - - The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. - - the newly created trigger - - - - Make a trigger that will fire times, waiting - between each fire. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the new trigger -
- - - Make a trigger that will fire every second, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the new trigger -
- - - Make a trigger that will fire every second, indefinitely. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the new trigger -
- - - Make a trigger that will fire every N seconds, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of seconds between firings - the new trigger -
- - - Make a trigger that will fire every N seconds, with the given number of - repeats. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of seconds between firings - the number of times to repeat the firing - the new trigger -
- - - Make a trigger that will fire every N seconds, with the given number of - repeats. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the number of seconds between firings - the number of times to repeat the firing - the new trigger -
- - - Make a trigger that will fire every minute, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the new trigger -
- - - Make a trigger that will fire every minute, indefinitely. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the new trigger -
- - - Make a trigger that will fire every N minutes, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of minutes between firings - the new trigger -
- - - Make a trigger that will fire every N minutes, with the given number of - repeats. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of minutes between firings - the number of times to repeat the firing - the new trigger -
- - - Make a trigger that will fire every N minutes, with the given number of - repeats. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the number of minutes between firings - the number of times to repeat the firing - the new trigger -
- - - Make a trigger that will fire every hour, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the new trigger -
- - - Make a trigger that will fire every hour, indefinitely. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the new trigger -
- - - Make a trigger that will fire every N hours, indefinitely. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of hours between firings - the new trigger -
- - - Make a trigger that will fire every N hours, with the given number of - repeats. -

- The generated trigger will not have its name, group, - or end-time set. The Start time defaults to 'now'. -

-
- the number of hours between firings - the number of times to repeat the firing - the new trigger -
- - - Make a trigger that will fire every N hours, with the given number of - repeats. -

- The generated trigger will not have its group, - or end-time set. The Start time defaults to 'now'. -

-
- the trigger's name - the number of hours between firings - the number of times to repeat the firing - the new trigger -
- - - Returns a date that is rounded to the next even hour above the given - date. -

- For example an input date with a time of 08:13:54 would result in a date - with the time of 09:00:00. If the date's time is in the 23rd hour, the - date's 'day' will be promoted, and the time will be set to 00:00:00. -

-
- the Date to round, if the current time will - be used - the new rounded date -
- - - Returns a date that is rounded to the previous even hour below the given - date. -

- For example an input date with a time of 08:13:54 would result in a date - with the time of 08:00:00. -

-
- the Date to round, if the current time will - be used - the new rounded date -
- - - Returns a date that is rounded to the next even minute above the given - date. -

- For example an input date with a time of 08:13:54 would result in a date - with the time of 08:14:00. If the date's time is in the 59th minute, - then the hour (and possibly the day) will be promoted. -

-
- The Date to round, if the current time will be used - The new rounded date -
- - - Returns a date that is rounded to the previous even minute below the - given date. -

- For example an input date with a time of 08:13:54 would result in a date - with the time of 08:13:00. -

-
- the Date to round, if the current time will - be used - the new rounded date -
- - - Returns a date that is rounded to the next even second above the given - date. - - the Date to round, if the current time will - be used - the new rounded date - - - - Returns a date that is rounded to the previous even second below the - given date. -

- For example an input date with a time of 08:13:54.341 would result in a - date with the time of 08:13:00.000. -

-
- the Date to round, if the current time will - be used - the new rounded date -
- - - Returns a date that is rounded to the next even multiple of the given - minute. -

- For example an input date with a time of 08:13:54, and an input - minute-base of 5 would result in a date with the time of 08:15:00. The - same input date with an input minute-base of 10 would result in a date - with the time of 08:20:00. But a date with the time 08:53:31 and an - input minute-base of 45 would result in 09:00:00, because the even-hour - is the next 'base' for 45-minute intervals. -

- -

- More examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input TimeMinute-BaseResult Time
11:16:412011:20:00
11:36:412011:40:00
11:46:412012:00:00
11:26:413011:30:00
11:36:413012:00:00
11:16:411711:17:00
11:17:411711:34:00
11:52:411712:00:00
11:52:41511:55:00
11:57:41512:00:00
11:17:41012:00:00
11:17:41111:08:00
-

- -
- - the Date to round, if the current time will - be used - - - the base-minute to set the time on - - the new rounded date -
- - - Returns a date that is rounded to the next even multiple of the given - minute. -

- The rules for calculating the second are the same as those for - calculating the minute in the method - . -

-
- The date. - The second base. - -
- - - Returns a list of Dates that are the next fire times of a - . - The input trigger will be cloned before any work is done, so you need - not worry about its state being altered by this method. - - The trigger upon which to do the work - The calendar to apply to the trigger's schedule - The number of next fire times to produce - List of java.util.Date objects - - - - Returns a list of Dates that are the next fire times of a - that fall within the given date range. The input trigger will be cloned - before any work is done, so you need not worry about its state being - altered by this method. -

- NOTE: if this is a trigger that has previously fired within the given - date range, then firings which have already occured will not be listed - in the output List. -

-
- The trigger upon which to do the work - The calendar to apply to the trigger's schedule - The starting date at which to find fire times - The ending date at which to stop finding fire times - List of java.util.Date objects -
- - - Translate a date and time from a users timezone to the another - (probably server) timezone to assist in creating a simple trigger with - the right date and time. - - the date to translate - the original time-zone - the destination time-zone - the translated UTC date - - - - Gets the offset from UT for the given date in the given timezone, - taking into account daylight savings. - - the date that is the base for the offset - the time-zone to calculate to offset to - the offset - - - - This functions determines if the TimeZone uses daylight saving time - - TimeZone instance to validate - True or false depending if daylight savings time is used - - - - An exception that is thrown to indicate that a call to - failed without interrupting the Job. - - - James House - - - - Create a with the given message. - - - - - Create a with the given cause. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The class name is null or is zero (0). - The info parameter is null. - - - diff --git a/lib/Net/1.1/Rhino.Mocks.dll b/lib/Net/1.1/Rhino.Mocks.dll deleted file mode 100644 index bc98d2dc881e07d3eb80a7f5e67e88df85185081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123392 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 - - - Rhino.Mocks.Partial - - - - - Interface for constraints - - - - - determains if the object pass the constraints - - - - - And operator for constraints - - - - - Not operator for constraints - - - - - Or operator for constraints - - - - - Allow overriding of || or && - - - - - - - Allow overriding of || or && - - - - - - - Gets the message for this constraint - - - - - - Constrain that the property has a specified value - - - - - Constrain that the property matches another constraint. - - - - - Creates a new instance. - - Name of the property. - Constraint to place on the property value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint to place on the property value. - - - - Determines if the object passes the constraint. - - - - - Gets the message for this constraint - - - - - - Creates a new instance. - - Name of the property. - Expected value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - Constrain that the parameter must be of the specified type - - - - - Creates a new instance. - - Type. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that determines whether an object is the same object as another. - - - - - Creates a new instance. - - Obj. - - - - Determines if the object passes the constraints. - - - - - Gets the message for this constraint. - - - - - Constrain that the list contains the same items as the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the parameter is one of the items in the list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the object is inside the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Combines two constraints, constraint pass if either is fine. - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Negate a constraint - - - - - Creates a new instance. - - C1. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Combines two constraints - - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain the argument to validate according to regex pattern - - - - - Creates a new instance. - - Pattern. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument contains the specified string. - - - - - Creates a new instance. - - Inner string. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument ends with the specified string - - - - - Creates a new instance. - - End. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument start with the specified string - - - - - Creates a new instance. - - Start. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an object equals another - - - - - Creates a new instance. - - Obj. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that always returns true - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever a comparable is greater than another - - - - - Creates a new instance. - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Central location for constraints - - - - - Evaluate a greater than constraint for . - - The object the parameter should be greater than - - - - Evaluate a less than constraint for . - - The object the parameter should be less than - - - - Evaluate a less than or equal constraint for . - - The object the parameter should be less than or equal to - - - - Evaluate a greater than or equal constraint for . - - The object the parameter should be greater than or equal to - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Evaluate a not equal constraint for . - - The object the parameter should not equal to - - - - Evaluate a same as constraint. - - The object the parameter should the same as. - - - - Evaluate a not same as constraint. - - The object the parameter should not be the same as. - - - - A constraints that accept anything - - - - - - A constraint that accept only nulls - - - - - - A constraint that accept only non null values - - - - - - A constraint that accept only value of the specified type - - - - - Central location for constraints about lists and collections - - - - - Determines whether the specified obj is in the paramter. - The parameter must be IEnumerable. - - Obj. - - - - - Determains whatever the parameter is in the collection. - - - - - Determains that the parameter collection is identical to the specified collection - - - - - Central location for constraints for object's properties - - - - - Constrains the parameter to have property with the specified value - - Name of the property. - Expected value. - - - - - Constrains the parameter to have property with the specified value. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - - Constrains the parameter to have a property satisfying a specified constraint. - - Name of the property. - Constraint for the property. - - - - Constrains the parameter to have a property satisfying a specified constraint. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint for the property. - - - - Determines whether the parameter has the specified property and that it is null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - Central location for all text related constraints - - - - - Constrain the argument to starts with the specified string - - - - - Constrain the argument to end with the specified string - - - - - Constrain the argument to contain the specified string - - - - - Constrain the argument to validate according to regex pattern - - - - - An expectaton violation was detected. - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Signals that an object was call on a mock repostiroy which doesn't - belong to this mock repository or not a mock - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Abstract class that holds common information for - expectations. - - - - - Interface to validate that a method call is correct. - - - - - Validate the arguments for the method. - This method can be called numerous times, so be careful about side effects - - The arguments with which the method was called - - - - Add an actual method call to this expectation - - - - - Returns the return value or throw the exception and setup any output / ref parameters - that has been set. - - - - - Gets the error message. - - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - The return value for a method matching this expectation - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw. - - - - - Gets the method this expectation is for. - - - - - Gets or sets what special condtions there are for this method - repeating. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - An action to execute when the method is matched. - - - - - Set the out / ref parameters for the method call. - The indexing is zero based and ignores any non out/ref parameter. - It is possible not to pass all the parameters. This method can be called only once. - - - - - Documentation Message - - - - - Number of actuall calls made that passed this expectation - - - - - Range of expected calls that should pass this expectation. - - - - - The return value for a method matching this expectation - - - - - The exception to throw on a method matching this expectation. - - - - - The method this expectation is for. - - - - - The return value for this method was set - - - - - Whether this method will repeat - unlimited number of times. - - - - - A delegate that will be run when the - expectation is matched. - - - - - The arguments that matched this expectation. - - - - - Documentation message - - - - - Get the hash code - - - - - Add an actual method call to this expectation - - - - - Returns the return value or throw the exception and setup output / ref parameters - - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Creates a new instance. - - Method. - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if this object equal to obj - - - - - The error message for these arguments - - - - - Asserts that the delegate has the same parameters as the expectation's method call - - - - - Setter for the outpur / ref parameters for this expecataion. - Can only be set once. - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - Gets the method this expectation is for. - - - - - Gets or sets what special condtions there are for this method - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - The return value for a method matching this expectation - - - - - An action to execute when the method is matched. - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw or an action to execute. - - - - - Documentation message - - - - - Gets the error message. - - - - - - Expectation that matchs any arguments for the method. - - - - - Creates a new instance. - - Method. - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Summary description for ArgsEqualExpectation. - - - - - Creates a new instance. - - Expected args. - method this expectation is for - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Get the expected args. - - - - - Call a specified callback to verify the expectation - - - - - Creates a new instance. - - Expectation. - Callback. - - - - Creates a new instance. - - Method. - Callback. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Expect the method's arguments to match the contraints - - - - - Creates a new instance. - - Method. - Constraints. - - - - Creates a new instance. - - Expectation. - Constraints. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - ExpectationsList - - - - - Add a single expectation - - - - - Add a range of expectations - - - - - Whatever the collection contains the expectation - - - - - The index of the expectation - - - - - enumerator - - - - - Indexer - - - - - count of items in list - - - - - Dictionary - - - - - Create a new instance - - - - - Add proxy and state - - - - - Contains a proxy - - - - - Enumerator - - - - - remove an item from the collection - - - - - Indexer - - - - - get the keys for the collection - - - - - Dictionary class - - - - - Create a new instance - - - - - Add proxy and state - - - - - Contains a proxy - - - - - Keys - - - - - Indexer - - - - - Number of items - - - - - Allows to call a method and immediatly get it's options. - - - - - Interface to allows to call a method and immediatly get it's options. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Creates a new instance. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Allows to call a method and immediatly get it's options. - Set the expected number for the call to Any() - - - - - Creates a new instance. - - Proxy. - Mocked instance. - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - This class is reponsible for taking a delegate and creating a wrapper - interface around it, so it can be mocked. - - - - - The scope for all the delegate interfaces create by this mock repositroy. - - - - - Gets a type with an "Invoke" method suitable for use as a target of the - specified delegate type. - - - - - - - Raise events for all subscribers for an event - - - - - Raise events for all subscribers for an event - - - - - Raise the event - - - - - Creates a new instance of EventRaiser - - - - - Raise the event - - - - - Allows to define what would happen when a method - is called. - - - - - Allows to define what would happen when a method - is called. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Get an event raiser for the last subscribed event. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Better syntax to define repeats. - - - - - Get the last call method info. - - - - - Allows to specify the number of time for method calls - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - Repeat the method any number of times. - This has special affects in that this method would now ignore orderring. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - This method must not appear in the replay state. - This has special affects in that this method would now ignore orderring. - - - - - Creates a new instance. - - the repository for this expectation - the recorder for this proxy - the proxy for this expectation - Expectation. - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Gets the event raiser for the last event - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - This method must not appear in the replay state. - - - - - Documentation message for the expectation - - Message - - - - Repeat the method any number of times. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - Better syntax to define repeats. - - - - - Get the last call method info. - - - - - This class will provide hash code for hashtables without needing - to call the GetHashCode() on the object, which may very well be mocked. - This class has no state so it is a singelton to avoid creating a lot of objects - that does the exact same thing. See flyweight patterns. - - - - - Get the hash code for a proxy object without calling GetHashCode() - on the object. - - - - - Compares two instances of mocked objects - - - - - Compare two mocked objects - - - - - The next hash code value for a mock object. - This is safe for multi threading. - - - - - The sole instance of - - - - - This is a dummy type that is used merely to give DynamicProxy the proxy instance that - it needs to create IProxy's types. - - - - - Interface to find the repository of a mocked object - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - The unique hash code of this mock, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Create a new instance of - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - The unique hash code of this proxy, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Range for expected method calls - - - - - Creates a new instance. - - Min. - Max. - - - - Return the string representation of this range. - - - - - Gets or sets the min. - - - - - - Gets or sets the max. - - - - - - Records all the expectations for a mock and - return a ReplayDynamicMockState when Replay() - is called. - - - - - Records all the expectations for a mock - - - - - Different actions on this mock - - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that this mock expectations have passed. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Gets the last expectation. - - - - - Gets the total method calls count. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Records all the expectations for a mock and - return a ReplayPartialMockState when Replay() - is called. - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Options for special repeat option - - - - - This method can be called only as many times as the IMethodOptions.Expect allows. - - - - - This method should never be called - - - - - This method can be call any number of times - - - - - This method will call the original method - - - - - This method will simulate simple property behavior - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Validate all expectations on a mock - - - - - The repository for this state - - - - - The proxy object for this state - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Add a method call for this state' mock. - This allows derived method to cleanly get a the setupresult behavior while adding - their own. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Summary description for RhinoInterceptor. - - - - - Creates a new instance. - - - - - Intercept a method call and direct it to the repository. - - - - - Validate arguments for methods - - - - - Validate that the passed argument is not null. - - The object to validate - The name of the argument - - If the obj is null, an ArgumentNullException with the passed name - is thrown. - - - - - Validate that the arguments are equal. - - Expected args. - Actual Args. - - - - This method is safe for use even if any of the objects is a mocked object - that override equals. - - - - - Throw an object already verified when accessed - - - - - Create a new instance of VerifiedMockState - - The previous mock state, used to get the initial record state - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Records the actions on all the mocks created by a repository. - - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Removes all the repeatable expectations for proxy. - - Mocked object. - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Gets the recorded expectation or null. - - - - - Gets the next expected calls string. - - - - - Moves to parent recorder. - - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Clear the replayer to call (and all its chain of replayers) - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Base class for method recorders, handle delegating to inner recorder if needed. - - - - - List of the expected actions on for this recorder - The legal values are: - * Expectations - * Method Recorders - - - - - The current recorder. - - - - - The current replayer; - - - - - The parent recorder of this one, may be null. - - - - - This contains a list of all the replayers that should be ignored - for a spesific method call. A replayer gets into this list by calling - ClearReplayerToCall() on its parent. This list is Clear()ed on each new invocation. - - - - - All the repeatable methods calls. - - - - - Counts the recursion depth of the current expectation search stack - - - - - Creates a new instance. - - - - - Creates a new instance. - - Parent recorder. - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Remove the all repeatable expectations for proxy. - - Mocked object. - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Moves to parent recorder. - - - - - Gets the recorded expectation or null. - - - - - Clear the replayer to call (and all its chain of replayers). - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Should this replayer be considered valid for this call? - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Handle the real execution of this method for the derived class - - - - - Ordered collection of methods, methods must arrive in specified order - in order to pass. - - - - - Unordered collection of method records, any expectation that exist - will be matched. - - - - - The parent recorder we have redirected to. - Useful for certain edge cases in orderring. - See: FieldProblem_Entropy for the details. - - - - - Creates a new instance. - - Parent recorder. - - - - Creates a new instance. - - - - - Records the specified call with the specified args on the mocked object. - - Mocked object. - Method. - Expectation. - - - - Get the expectation for this method on this object with this arguments - - Mocked object. - Method. - Args. - True is the call was recorded, false otherwise - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Handle the real execution of this method for the derived class - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Gets the next expected calls string. - - - - - Create an exception for an unexpected method call. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Creates a new instance. - - Parent recorder. - - - - Creates a new instance. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Hold an expectation for a method call on an object - - - - - Creates a new instance. - - Proxy. - Method. - Expectation. - - - - Determains if the object equal to this instance - - Obj. - - - - - Gets the hash code. - - - - - - Gets a string representation of this - to assist debugging. - - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Gets the expectation. - - - - - - Holds a pair of mocked object and a method - and allows to compare them against each other. - This allows us to have a distinction between mockOne.MyMethod() and - mockTwo.MyMethod()... - - - - - Creates a new instance. - - Proxy. - Method. - - - - Determains whatever obj equals to this instance. - ProxyMethodPairs are equals when they point to the same /instance/ of - an object, and to the same method. - - Obj. - - - - - Gets the hash code. - - - - - - Gets a string representation of this - to assist debugging. - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Change the recorder from ordered to unordered and vice versa - - - - - Creates a new instance. - - - - - Disposes this instance. - - - - - Utility class for working with method calls. - - - - - Return the string representation of a method call and its arguments. - - The method - The method arguments - Delegate to format the parameter - The string representation of this method call - - - - Return the string representation of a method call and its arguments. - - The method - The method arguments - The string representation of this method call - - - - Delegate to format the argument for the string representation of - the method call. - - - - - Utility to get the default value for a type - - - - - The default value for a type. - Null for reference types and void - 0 for value types. - First element for enums - - Type. - the default value - - - - Allows to set expectation on methods that has return values. - For methods with void return value, you need to use LastCall - - - - - The method options for the last call on /any/ proxy on /any/ repository on the current thread. - This method if not safe for multi threading scenarios, use . - - - - - Get the method options for the last method call on the mockInstance. - - - - - Allows to set various options for the last method call on - a specified object. - If the method has a return value, it's recommended to use Expect - - - - - Allows to get an interface to work on the last call. - - The mocked object - Interface that allows to set options for the last method call on this object - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Call the original method on the class, bypassing the mocking layers, for the last call. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Gets an interface that will raise the last event when called. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Better syntax to define repeats. - - - - - Creates proxied instances of types. - - - - - This is used to record the last repository that has a method called on it. - - - - - this is used to get to the last proxy on this repository. - - - - - For mock delegates, maps the proxy instance from intercepted invocations - back to the delegate that was originally returned to client code, if any. - - - - - All the proxies in the mock repositories - - - - - Creates a new instance. - - - - - Move the repository to ordered mode - - - - - Move the repository to un-ordered mode - - - - - Creates a mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a dynamic mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Arguments for the class' constructor. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - Arguments for the class' constructor. - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the object to move to replay state - - - - Move the mocked object back to record state. - Will delete all current expectations! - - - - - Verify that all the expectations for this object were fulfilled. - - the object to verify the expectations for - - - - Get the method options for the last call on - mockedInstance. - - The mock object - Method options for the last call - - - - Maps an invocation proxy back to the mock object instance that was originally - returned to client code which might have been a delegate to this proxy. - - The mock object proxy from the intercepted invocation - The mock object - - - - This is provided to allow advance extention functionality, where Rhino Mocks standard - functionality is not enough. - - The type to mock - Delegate that create the first state of the mocked object (usualy the record state). - Additional types to be implemented, this can be only interfaces - optional arguments for the constructor - - - - - Method: GetMockedObject - Get an IProxy from a mocked object instance, or throws if the - object is not a mock object. - - - - - Method: GetMockedObjectOrNull - Get an IProxy from a mocked object instance, or null if the - object is not a mock object. - - - - - Pops the recorder. - - - - - Pushes the recorder. - - New recorder. - - - - All the mock objects in this repository will be moved - to record state. - - - - - Replay all the mocks from this repository - - - - - Verify all the mocks from this repository - - - - - Set the exception to be thrown when verified is called. - - - - - Gets the recorder. - - - - - - Gets the replayer for this repository. - - - - - - Gets the last proxy which had a method call. - - - - - Delegate: CreateMockState - This is used internally to cleanly handle the creation of different - RecordMockStates. - - - - - Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)] - - - - - Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification. - - - - - Setup method calls to repeat any number of times. - - - - - Get the method options and set the last method call to repeat - any number of times. - This also means that the method would transcend ordering - - - - - Get the method options for the last method call on the mockInstance and set it - to repeat any number of times. - This also means that the method would transcend ordering - - - - diff --git a/lib/Net/1.1/nunit.core.dll b/lib/Net/1.1/nunit.core.dll deleted file mode 100644 index 1c03ad17adddf9f482375c46d3a3867269e32b95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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

RlP1WMElPw#j9Rx;RrM~{A~V-Xe^ZiY8UHD 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 - - - nunit.framework - - - -

- BinaryConstraint is the abstract base of all constraints - that combine two other constraints in some fashion. - - - - - The Constraint class is the base of all built-in constraints - within NUnit. It provides the operator overloads used to combine - constraints. - - - - - The IConstraintExpression interface is implemented by all - complete and resolvable constraints and expressions. - - - - - Return the top-level constraint for this expression - - - - - - Static UnsetObject used to detect derived constraints - failing to set the actual value. - - - - - The actual value being tested against a constraint - - - - - The display name of this Constraint for use by ToString() - - - - - Argument fields used by ToString(); - - - - - The builder holding this constraint - - - - - Construct a constraint with no arguments - - - - - Construct a constraint with one argument - - - - - Construct a constraint with two arguments - - - - - Sets the ConstraintBuilder holding this constraint - - - - - 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 - - - - Test whether the constraint is satisfied by an - ActualValueDelegate that returns the value to be tested. - The default implementation simply evaluates the delegate - but derived classes may override it to provide for delayed - processing. - - An ActualValueDelegate - True for success, false for failure - - - - Test whether the constraint is satisfied by a given bool reference. - The default implementation simply dereferences the value but - derived classes may override it to provide for delayed processing. - - A reference to 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 - - - - Default override of ToString returns the constraint DisplayName - followed by any arguments within angle brackets. - - - - - - Returns the string representation of this constraint - - - - - 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. - - - - - Returns a DelayedConstraint with the specified delay time. - - The delay in milliseconds. - - - - - Returns a DelayedConstraint with the specified delay time - and polling interval. - - The delay in milliseconds. - The interval at which to test the constraint. - - - - - The display name of this Constraint for use by ToString(). - The default value is the name of the constraint with - trailing "Constraint" removed. Derived classes may set - this to another name in their constructors. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending Or - to the current constraint. - - - - - Class used to detect any derived constraints - that fail to set the actual value in their - Matches override. - - - - - The first constraint being combined - - - - - The second constraint being combined - - - - - Construct a BinaryConstraint 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 - - - - 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 - - - - 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 - - - - CollectionConstraint is the abstract base class for - constraints that operate on collections. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Determines whether the specified enumerable is empty. - - The enumerable. - - true if the specified enumerable is empty; otherwise, false. - - - - - 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 - - - - - - - CollectionItemsEqualConstraint is the abstract base class for all - collection constraints that apply some notion of item equality - as a part of their operation. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Compares two collection members for equality - - - - - Return a new CollectionTally for use in making tests - - The collection to be included in the tally - - - - Flag the constraint to ignore case and return self. - - - - - EmptyCollectionConstraint tests whether a collection 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 - - - - - - CollectionOrderedConstraint is used to test whether a collection is ordered. - - - - - Construct a CollectionOrderedConstraint - - - - - Modifies the constraint to use an IComparer and returns self. - - - - - Modifies the constraint to test ordering by the value of - a specified property and returns self. - - - - - Test whether the collection is ordered - - - - - - - Write a description of the constraint to a MessageWriter - - - - - - Returns the string representation of the constraint. - - - - - - If used performs a reverse comparison - - - - - 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 - - - - - ComparisonAdapter to be used in making the comparison - - - - - 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 - - - - Modifies the constraint to use an IComparer and returns self - - - - - 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. - - - - Delegate used to delay evaluation of the actual value - to be used in evaluating a constraint - - - - - ConstraintBuilder maintains the stacks that are used in - processing a ConstraintExpression. An OperatorStack - is used to hold operators that are waiting for their - operands to be reognized. a ConstraintStack holds - input constraints as well as the results of each - operator applied. - - - - - Initializes a new instance of the class. - - - - - Appends the specified operator to the expression by first - reducing the operator stack and then pushing the new - operator on the stack. - - The operator to push. - - - - Appends the specified constraint to the expresson by pushing - it on the constraint stack. - - The constraint to push. - - - - Sets the top operator right context. - - The right context. - - - - Reduces the operator stack until the topmost item - precedence is greater than or equal to the target precedence. - - The target precedence. - - - - Resolves this instance, returning a Constraint. If the builder - is not currently in a resolvable state, an exception is thrown. - - The resolved constraint - - - - Gets a value indicating whether this instance is resolvable. - - - true if this instance is resolvable; otherwise, false. - - - - - OperatorStack is a type-safe stack for holding ConstraintOperators - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified operator onto the stack. - - The op. - - - - Pops the topmost operator from the stack. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost operator without modifying the stack. - - The top. - - - - ConstraintStack is a type-safe stack for holding Constraints - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified constraint. As a side effect, - the constraint's builder field is set to the - ConstraintBuilder owning this stack. - - The constraint. - - - - Pops this topmost constrait from the stack. - As a side effect, the constraint's builder - field is set to null. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost constraint without modifying the stack. - - The topmost constraint - - - - 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. - - - - - 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 - - - - EqualConstraint is able to compare an actual value with the - expected value provided in its constructor. Two objects are - considered equal if both are null, or if both have the same - value. NUnit has special semantics for some object types. - - - - - If true, strings in error messages will be clipped - - - - - NUnitEqualityComparer used to test equality. - - - - - Initializes a new instance of the class. - - The expected value. - - - - Flag the constraint to use a tolerance when determining equality. - - Tolerance value to be used - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - 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 - - - - 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 - - - - 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. - - - - - Switches the .Within() modifier to interpret its tolerance as - a distance in representable values (see remarks). - - Self. - - Ulp stands for "unit in the last place" and describes the minimum - amount a given value can change. For any integers, an ulp is 1 whole - digit. For floating point values, the accuracy of which is better - for smaller numbers and worse for larger numbers, an ulp depends - on the size of the number. Using ulps for comparison of floating - point results instead of fixed tolerances is safer because it will - automatically compensate for the added inaccuracy of larger numbers. - - - - - Switches the .Within() modifier to interpret its tolerance as - a percentage that the actual values is allowed to deviate from - the expected value. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in days. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in hours. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in minutes. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in seconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in milliseconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in clock ticks. - - Self - - - - 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 - - - - StringConstraint is the abstract base for constraints - that operate on strings. It supports the IgnoreCase - modifier for string operations. - - - - - The expected value - - - - - Indicates whether tests should be case-insensitive - - - - - Constructs a StringConstraint given an expected value - - The expected value - - - - Modify the constraint to ignore case in matching. - - - - - EmptyStringConstraint tests whether a string is empty. - - - - - 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 - - - - NullEmptyStringConstraint tests whether a string is either null or empty. - - - - - Constructs a new NullOrEmptyStringConstraint - - - - - 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 - - - - 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 - - The expected Type. - - - - Test that an object is of the exact type specified - - The actual value. - True if the tested object is of the exact type provided, otherwise false. - - - - Write the description of this constraint to a MessageWriter - - The MessageWriter to use - - - - 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 - - The expected Type - - - - Test whether an object is of the specified type or a derived type - - The object to be tested - True if the object is of the provided type or derives from it, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - 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 - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - AssignableToConstraint is used to test that an object - can be assigned to a given Type. - - - - - Construct an AssignableToConstraint for the type provided - - - - - - Test whether an object can be assigned to the specified type - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - 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 - - - - Flag the constraint to ignore case and return self. - - - - - PropertyExistsConstraint tests that a named property - exists on the object provided through Match. - - Originally, PropertyConstraint provided this feature - in addition to making optional tests on the vaue - of the property. The two constraints are now separate. - - - - - Initializes a new instance of the class. - - The name of the property. - - - - Test whether the property exists for a given object - - The object 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 writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - - PropertyConstraint extracts a named property and uses - its value as the actual value for a chained constraint. - - - - - Abstract base class used for prefixes - - - - - The base constraint - - - - - Construct given a base constraint - - - - - - 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 - - - - Returns the string representation of the constraint. - - - - - - 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, - succeeding if any item succeeds. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - NoItemConstraint applies another constraint to each - item in a collection, failing 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 - - - - - - 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 tolerance - provided is Empty, this method may set it to a default tolerance. - - The expected value - The actual value - A reference to the tolerance in effect - True if the values are equal - - - - Compare two numeric values, performing the usual numeric conversions. - - The expected value - The actual value - The relationship of the values to each other - - - - 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 - - - - PathConstraint serves as the abstract base of constraints - that operate on paths and provides several helper methods. - - - - - The expected path used in the constraint - - - - - Flag indicating whether a caseInsensitive comparison should be made - - - - - Construct a PathConstraint for a give expected path - - The expected path - - - - Returns the string representation of this constraint - - - - - Canonicalize the provided path - - - The path in standardized form - - - - Test whether two paths are the same - - The first path - The second path - - - - - Test whether one path is the same as or under another path - - The first path - supposed to be the parent path - The second path - supposed to be the child path - - - - - Modifies the current instance to be case-insensitve - and returns it. - - - - - Modifies the current instance to be case-sensitve - and returns it. - - - - - Summary description for SamePathConstraint. - - - - - Initializes a new instance of the class. - - The expected path - - - - 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 - - - - SamePathOrUnderConstraint tests that one path is under another - - - - - Initializes a new instance of the class. - - The expected path - - - - 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 - - - - EmptyDirectoryConstraint is used to test that a directory is empty - - - - - 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 - - - - SubDirectoryConstraint is used to test that one directory is a subdirectory of another. - - - - - Initializes a new instance of the class. - - The dir info. - - - - 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 - - - - Builds a list of DirectoryInfo objects, recursing where necessary - - directory to recurse - list of DirectoryInfo objects from the top level - - - - private method to determine whether a directory is within the path - - top-level directory to search - directory to search for - true if found, false if not - - - - Method to compare two DirectoryInfo objects - - first directory to compare - second directory to compare - true if equivalent, false if not - - - - ThrowsConstraint is used to test the exception thrown by - a delegate by applying a constraint to it. - - - - - Initializes a new instance of the class, - using a constraint to be applied to the exception. - - A constraint to apply to the caught exception. - - - - Executes the code of the delegate and captures any exception. - If a non-null base constraint was provided, it applies that - constraint to the exception. - - A delegate representing the code to be tested - True if an exception is thrown and the constraint succeeds, otherwise false - - - - 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 - - - - Returns the string representation of this constraint - - - - - Get the actual exception thrown - used by Assert.Throws. - - - - - ThrowsNothingConstraint tests that a delegate does not - throw an exception. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True if no exception is thrown, otherwise false - - - - 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 - - - - RangeConstraint tests whethe two values are within a - specified range. - - - - - Initializes a new instance of the class. - - From. - To. - - - - 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 - - - - Modifies the constraint to use an IComparer and returns self. - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - The ConstraintOperator class is used internally by a - ConstraintBuilder to represent an operator that - modifies or combines constraints. - - Constraint operators use left and right precedence - values to determine whether the top operator on the - stack should be reduced before pushing a new operator. - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - The syntax element preceding this operator - - - - - The syntax element folowing this operator - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - PrefixOperator takes a single constraint and modifies - it's action in some way. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Returns the constraint created by applying this - prefix to another constraint. - - - - - - - Negates the test of the constraint it wraps. - - - - - Constructs a new NotOperator - - - - - Returns a NotConstraint applied to its argument. - - - - - Abstract base for operators that indicate how to - apply a constraint to items in a collection. - - - - - Constructs a CollectionOperator - - - - - Represents a constraint that succeeds if all the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - they all succeed. - - - - - Represents a constraint that succeeds if any of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - any of them succeed. - - - - - Represents a constraint that succeeds if none of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - none of them succeed. - - - - - Represents a constraint that simply wraps the - constraint provided as an argument, without any - further functionality, but which modifes the - order of evaluation because of its precedence. - - - - - Constructor for the WithOperator - - - - - Returns a constraint that wraps its argument - - - - - Abstract base class for operators that are able to reduce to a - constraint whether or not another syntactic element follows. - - - - - Operator used to test for the presence of a named Property - on an object and optionally apply further tests to the - value of that property. - - - - - Constructs a PropOperator for a particular named property - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Gets the name of the property to which the operator applies - - - - - Operator that tests for the presence of a particular attribute - on a type and optionally applies further tests to the attribute. - - - - - Construct an AttributeOperator for a particular Type - - The Type of attribute tested - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Operator that tests that an exception is thrown and - optionally applies further tests to the exception. - - - - - Construct a ThrowsOperator - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Abstract base class for all binary operators - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Abstract method that produces a constraint by applying - the operator to its left and right constraint arguments. - - - - - Gets the left precedence of the operator - - - - - Gets the right precedence of the operator - - - - - Operator that requires both it's arguments to succeed - - - - - Construct an AndOperator - - - - - Apply the operator to produce an AndConstraint - - - - - Operator that requires at least one of it's arguments to succeed - - - - - Construct an OrOperator - - - - - Apply the operator to produce an OrConstraint - - - - - ConstraintExpression represents a compound constraint in the - process of being constructed from a series of syntactic elements. - - Individual elements are appended to the expression as they are - reognized. Once an actual Constraint is appended, the expression - returns a resolvable Constraint. - - - - - ConstraintExpressionBase is the abstract base class for the - generated ConstraintExpression class, which represents a - compound constraint in the process of being constructed - from a series of syntactic elements. - - NOTE: ConstraintExpressionBase is aware of some of its - derived classes, which is an apparent violation of - encapsulation. Ideally, these classes would be a - single class, but they must be separated in order to - allow parts to be generated under .NET 1.x and to - provide proper user feedback in syntactically - aware IDEs. - - - - - The ConstraintBuilder holding the elements recognized so far - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a string representation of the expression as it - currently stands. This should only be used for testing, - since it has the side-effect of resolving the expression. - - - - - - Appends an operator to the expression and returns the - resulting expression itself. - - - - - Appends a self-resolving operator to the expression and - returns a new ResolvableConstraintExpression. - - - - - Appends a constraint to the expression and returns that - constraint, which is associated with the current state - of the expression being built. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns the constraint provided as an argument - used to allow custom - custom constraints to easily participate in the syntax. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - With is currently a NOP - reserved for future use. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - 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 - - - - Returns the string representation - - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - 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 - - - - Returns the string representation of this constraint - - - - - BasicConstraint is the abstract base for constraints that - perform a simple comparison to a constant value. - - - - - Initializes a new instance of the class. - - The expected. - The description. - - - - 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 - - - - NullConstraint tests that the actual value is null - - - - - Initializes a new instance of the class. - - - - - TrueConstraint tests that the actual value is true - - - - - Initializes a new instance of the class. - - - - - FalseConstraint tests that the actual value is false - - - - - Initializes a new instance of the class. - - - - - NaNConstraint tests that the actual value is a double or float NaN - - - - - Test that the actual value is an NaN - - - - - - - Write the constraint description to a specified writer - - - - - - AttributeExistsConstraint tests for the presence of a - specified attribute on a Type. - - - - - Constructs an AttributeExistsConstraint for a specific attribute Type - - - - - - Tests whether the object provides the expected attribute. - - A Type, MethodInfo, or other ICustomAttributeProvider - True if the expected attribute is present, otherwise false - - - - Writes the description of the constraint to the specified writer - - - - - AttributeConstraint tests that a specified attribute is present - on a Type or other provider and that the value of the attribute - satisfies some other constraint. - - - - - Constructs an AttributeConstraint for a specified attriute - Type and base constraint. - - - - - - - Determines whether the Type or other provider has the - expected attribute and if its value matches the - additional constraint specified. - - - - - Writes a description of the attribute to the specified writer. - - - - - Writes the actual value supplied to the specified writer. - - - - - Returns a string representation of the constraint. - - - - - ResolvableConstraintExpression is used to represent a compound - constraint being constructed at a point where the last operator - may either terminate the expression or may have additional - qualifying constraints added to it. - - It is used, for example, for a Property element or for - an Exception element, either of which may be optionally - followed by constraints that apply to the property or - exception. - - - - - Create a new instance of ResolvableConstraintExpression - - - - - Create a new instance of ResolvableConstraintExpression, - passing in a pre-populated ConstraintBuilder. - - - - - Resolve the current expression to a Constraint - - - - - Appends an And Operator to the expression - - - - - Appends an Or operator to the expression. - - - - - Applies a delay to the match so that a match can be evaluated in the future. - - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - If the value of is less than 0 - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - The time interval used for polling - If the value of is less than 0 - - - - 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 - - - - Test whether the constraint is satisfied by a delegate - - The delegate whose value is to be tested - True for if the base constraint fails, false if it succeeds - - - - Test whether the constraint is satisfied by a given boolean reference. - Overridden to wait for the specified delay period before - calling the base constraint with the dereferenced value. - - A reference to 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 writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - Helper routines for working with floating point numbers - - - The floating point comparison code is based on this excellent article: - http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm - - - "ULP" means Unit in the Last Place and in the context of this library refers to - the distance between two adjacent floating point numbers. IEEE floating point - numbers can only represent a finite subset of natural numbers, with greater - accuracy for smaller numbers and lower accuracy for very large numbers. - - - If a comparison is allowed "2 ulps" of deviation, that means the values are - allowed to deviate by up to 2 adjacent floating point values, which might be - as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. - - - - - Compares two floating point values for equality - First floating point value to be compared - Second floating point value t be compared - - Maximum number of representable floating point values that are allowed to - be between the left and the right floating point values - - True if both numbers are equal or close to being equal - - - Floating point values can only represent a finite subset of natural numbers. - For example, the values 2.00000000 and 2.00000024 can be stored in a float, - but nothing inbetween them. - - - This comparison will count how many possible floating point values are between - the left and the right number. If the number of possible values between both - numbers is less than or equal to maxUlps, then the numbers are considered as - being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - Compares two double precision floating point values for equality - First double precision floating point value to be compared - Second double precision floating point value t be compared - - Maximum number of representable double precision floating point values that are - allowed to be between the left and the right double precision floating point values - - True if both numbers are equal or close to being equal - - - Double precision floating point values can only represent a limited series of - natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 - can be stored in a double, but nothing inbetween them. - - - This comparison will count how many possible double precision floating point - values are between the left and the right number. If the number of possible - values between both numbers is less than or equal to maxUlps, then the numbers - are considered as being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - - Reinterprets the memory contents of a floating point value as an integer value - - - Floating point value whose memory contents to reinterpret - - - The memory contents of the floating point value interpreted as an integer - - - - - Reinterprets the memory contents of a double precision floating point - value as an integer value - - - Double precision floating point value whose memory contents to reinterpret - - - The memory contents of the double precision floating point value - interpreted as an integer - - - - - Reinterprets the memory contents of an integer as a floating point value - - Integer value whose memory contents to reinterpret - - The memory contents of the integer value interpreted as a floating point value - - - - - Reinterprets the memory contents of an integer value as a double precision - floating point value - - Integer whose memory contents to reinterpret - - The memory contents of the integer interpreted as a double precision - floating point value - - - - Union of a floating point variable and an integer - - - The union's value as a floating point variable - - - The union's value as an integer - - - The union's value as an unsigned integer - - - Union of a double precision floating point variable and a long - - - The union's value as a double precision floating point variable - - - The union's value as a long - - - The union's value as an unsigned long - - - - Modes in which the tolerance value for a comparison can - be interpreted. - - - - - The tolerance was created with a value, without specifying - how the value would be used. This is used to prevent setting - the mode more than once and is generally changed to Linear - upon execution of the test. - - - - - The tolerance is used as a numeric range within which - two compared values are considered to be equal. - - - - - Interprets the tolerance as the percentage by which - the two compared values my deviate from each other. - - - - - Compares two values based in their distance in - representable numbers. - - - - - The Tolerance class generalizes the notion of a tolerance - within which an equality test succeeds. Normally, it is - used with numeric types, but it can be used with any - type that supports taking a difference between two - objects and comparing that difference to a value. - - - - - Constructs a linear tolerance of a specdified amount - - - - - Constructs a tolerance given an amount and ToleranceMode - - - - - Tests that the current Tolerance is linear with a - numeric value, throwing an exception if it is not. - - - - - Returns an empty Tolerance object, equivalent to - specifying an exact match. - - - - - Gets the ToleranceMode for the current Tolerance - - - - - Gets the value of the current Tolerance instance. - - - - - Returns a new tolerance, using the current amount as a percentage. - - - - - Returns a new tolerance, using the current amount in Ulps. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of days. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of hours. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of minutes. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of seconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of milliseconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of clock ticks. - - - - - Returns true if the current tolerance is empty. - - - - - ComparisonAdapter class centralizes all comparisons of - values in NUnit, adapting to the use of any provided - IComparer, IComparer<T> or Comparison<T> - - - - - Returns a ComparisonAdapter that wraps an IComparer - - - - - Compares two objects - - - - - Gets the default ComparisonAdapter, which wraps an - NUnitComparer object. - - - - - Construct a ComparisonAdapter for an IComparer - - - - - Compares two objects - - - - - - - - Construct a default ComparisonAdapter - - - - - EqualityAdapter class handles all equality comparisons - that use an IEqualityComparer, IEqualityComparer<T> - or a ComparisonAdapter. - - - - - Compares two objects, returning true if they are equal - - - - - Returns an EqualityAdapter that wraps an IComparer. - - - - - NUnitComparer encapsulates NUnit's default behavior - in comparing two objects. - - - - - Compares two objects - - - - - - - - Returns the default NUnitComparer. - - - - - NUnitEqualityComparer encapsulates NUnit's handling of - equality tests between objects. - - - - - If true, all string comparisons will ignore case - - - - - 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. - - - - - Comparison object used in comparisons for some constraints. - - - - - Compares two objects for equality. - - - - - Helper method to compare two arrays - - - - - Method to compare two DirectoryInfo objects - - first directory to compare - second directory to compare - true if equivalent, false if not - - - - Returns the default NUnitEqualityComparer - - - - - Gets and sets a flag indicating whether case should - be ignored in determining equality. - - - - - Gets and sets a flag indicating that arrays should be - compared as collections, without regard to their shape. - - - - - Gets and sets an external comparer to be used to - test for equality. It is applied to members of - collections, in place of NUnit's own logic. - - - - - Gets and sets a tolerance used to compare objects of - certin types. - - - - - Gets the list of failure points for the last Match performed. - - - - - CollectionTally counts (tallies) the number of - occurences of each object in one or more enumerations. - - - - - Construct a CollectionTally object from a comparer and a collection - - - - - Try to remove an object from the tally - - The object to remove - True if successful, false if the object was not found - - - - Try to remove a set of objects from the tally - - The objects to remove - True if successful, false if any object was not found - - - - The number of objects remaining in the tally - - - - - SetUpFixtureAttribute is used to identify a SetUpFixture - - - - - 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 is not 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 does not start 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 does not start with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not start 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 a string does not end 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 does not end with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not end 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 two strings are not 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 Notequal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - - - - Asserts that two strings are not equal, without regard to case. - - The expected string - The actual string - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - 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 regex pattern to be matched - The actual string - The message to display in case of failure - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - - - - PropertyAttribute is used to attach information to a test as a name/value pair.. - - - - - Construct a PropertyAttribute with a name and string value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and int value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and double value - - The name of the property - The property value - - - - Constructor for derived classes that set the - property dictionary directly. - - - - - Constructor for use by derived classes that use the - name of the type as the property name. Derived classes - must ensure that the Type of the property value is - a standard type supported by the BCL. Any custom - types will cause a serialization Exception when - in the client. - - - - - Gets the property dictionary for this attribute - - - - - 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. - - IEnumerable containing 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. - - IEnumerable containing 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. - - IEnumerable containing 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. - - IEnumerable containing objects to be considered - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable containing objects to be considered - The message that will be displayed on failure - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable 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. - - IEnumerable of objects to be considered - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable 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. - - IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - 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 IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable 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. - - IEnumerable of objects to be considered - Object to be found within collection - - - - Asserts that collection contains actual as an item. - - IEnumerable 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. - - IEnumerable 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. - - IEnumerable of objects to be considered - Object that cannot exist within collection - - - - Asserts that collection does not contain actual as an item. - - IEnumerable 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. - - IEnumerable 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 IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable 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 IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable 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 IEnumerable - 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 IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - 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 IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - - - - 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 - - - - 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 - - - - 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 - - - - - 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 - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - 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. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced boolean, 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 a referenced value, succeeding 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 a referenced value, succeeding 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 . 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 - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Returns a ListMapper based on a collection. - - The original collection - - - - - 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 - - - - Summary description for SetCultureAttribute. - - - - - Construct given the name of a culture - - - - - - GlobalSettings is a place for setting default values used - by the framework in performing asserts. - - - - - Default tolerance for floating point equality - - - - - Summary description for DirectoryAssert - - - - - 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 directories are equal. Two directories 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 directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories 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 directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories 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 directory containing the value that is expected - A directory containing the actual value - - - - Verifies that two directories are equal. Two directories 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 directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories 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 directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories 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 directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - TestCaseAttribute is used to mark parameterized test cases - and provide them with their arguments. - - - - - The ITestCaseData interface is implemented by a class - that is able to return complete testcases for use by - a parameterized test method. - - NOTE: This interface is used in both the framework - and the core, even though that results in two different - types. However, sharing the source code guarantees that - the various implementations will be compatible and that - the core is able to reflect successfully over the - framework implementations of ITestCaseData. - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets the ignore reason. - - The ignore reason. - - - - Construct a TestCaseAttribute with a list of arguments. - This constructor is not CLS-Compliant - - - - - - Construct a TestCaseAttribute with a single argument - - - - - - Construct a TestCaseAttribute with a two arguments - - - - - - - Construct a TestCaseAttribute with a three arguments - - - - - - - - Gets the list of arguments to a test case - - - - - Gets or sets the expected result. - - The result. - - - - Gets or sets the expected exception. - - The expected exception. - - - - Gets or sets the name the expected exception. - - The expected name of the exception. - - - - Gets or sets the expected message of the expected exception - - The expected message of the exception. - - - - Gets or sets the type of match to be performed on the expected message - - - - - Gets or sets the description. - - The description. - - - - Gets or sets the name of the test. - - The name of the test. - - - - Gets or sets the ignored status of the test - - - - - Gets or sets the ignored status of the test - - - - - Gets the ignore reason. - - The ignore reason. - - - - The TestCaseData class represents a set of arguments - and other parameter info to be used for a parameterized - test case. It provides a number of instance modifiers - for use in initializing the test case. - - Note: Instance modifiers are getters that return - the same instance after modifying it's state. - - - - - The argument list to be provided to the test - - - - - The expected result to be returned - - - - - The expected exception Type - - - - - The FullName of the expected exception - - - - - The name to be used for the test - - - - - The description of the test - - - - - A dictionary of properties, used to add information - to tests without requiring the class to change. - - - - - If true, indicates that the test case is to be ignored - - - - - The reason for ignoring a test case - - - - - Initializes a new instance of the class. - - The arguments. - - - - Initializes a new instance of the class. - - The argument. - - - - Initializes a new instance of the class. - - The first argument. - The second argument. - - - - Initializes a new instance of the class. - - The first argument. - The second argument. - The third argument. - - - - Sets the expected result for the test - - The expected result - A modified TestCaseData - - - - Sets the expected exception type for the test - - Type of the expected exception. - The modified TestCaseData instance - - - - Sets the expected exception type for the test - - FullName of the expected exception. - The modified TestCaseData instance - - - - Sets the name of the test case - - The modified TestCaseData instance - - - - Sets the description for the test case - being constructed. - - The description. - The modified TestCaseData instance. - - - - Applies a category to the test - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Ignores this TestCase. - - - - - - Ignores this TestCase, specifying the reason. - - The reason. - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets the ignore reason. - - The ignore reason. - - - - Gets a list of categories associated with this test. - - - - - Gets the property dictionary for this test - - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Thrown when a test executes inconclusively. - - - - - 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 - - - - - 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. - - - - - 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 - - - - - 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 - - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - 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 - - - Expect a message that starts with the parameter string - - - - 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 - - - - 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 - - - - - 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 - - - - - 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. - - - - - 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 - {} - - - - - Default constructor - - - - - Construct with a object[] representing a set of arguments. - In .NET 2.0, the arguments may later be separated into - type arguments and constructor arguments. - - - - - - Descriptive text for this fixture - - - - - The arguments originally provided to the attribute - - - - - Gets or sets a value indicating whether this should be ignored. - - true if ignore; otherwise, false. - - - - Gets or sets the ignore reason. May set Ignored as a side effect. - - The ignore reason. - - - - RequiredAddinAttribute may be used to indicate the names of any addins - that must be present in order to run some or all of the tests in an - assembly. If the addin is not loaded, the entire assembly is marked - as NotRunnable. - - - - - Initializes a new instance of the class. - - The required addin. - - - - Gets the name of required addin. - - The required addin name. - - - - Marks a test to use a combinatorial join of any argument data - provided. NUnit will create a test case for every combination of - the arguments provided. This can result in a large number of test - cases and so should be used judiciously. This is the default join - type, so the attribute need not be used except as documentation. - - - - - Default constructor - - - - - Marks a test to use pairwise join of any argument data provided. - NUnit will attempt too excercise every pair of argument values at - least once, using as small a number of test cases as it can. With - only two arguments, this is the same as a combinatorial join. - - - - - Default constructor - - - - - Marks a test to use a sequential join of any argument data - provided. NUnit will use arguements for each parameter in - sequence, generating test cases up to the largest number - of argument values provided and using null for any arguments - for which it runs out of values. Normally, this should be - used with the same number of arguments for each parameter. - - - - - Default constructor - - - - - Abstract base class for attributes that apply to parameters - and supply data for the parameter. - - - - - Gets the data to be provided to the specified parameter - - - - - ValuesAttribute is used to provide literal arguments for - an individual parameter of a test. - - - - - The collection of data to be returned. Must - be set by any derived attribute classes. - We use an object[] so that the individual - elements may have their type changed in GetData - if necessary. - - - - - Construct with one argument - - - - - - Construct with two arguments - - - - - - - Construct with three arguments - - - - - - - - Construct with an array of arguments - - - - - - Get the collection of values to be used as arguments - - - - - RandomAttribute is used to supply a set of random values - to a single parameter of a parameterized test. - - - - - Construct a set of doubles from 0.0 to 1.0, - specifying only the count. - - - - - - Construct a set of doubles from min to max - - - - - - - - Construct a set of ints from min to max - - - - - - - - Get the collection of values to be used as arguments - - - - - RangeAttribute is used to supply a range of values to an - individual parameter of a parameterized test. - - - - - Construct a range of ints using default step of 1 - - - - - - - Construct a range of ints specifying the step size - - - - - - - - Construct a range of longs - - - - - - - - Construct a range of doubles - - - - - - - - Construct a range of floats - - - - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - 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 - - - - - Helper class with static methods used to supply constraints - that operate on strings. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Helper class with properties and methods that supply - constraints that operate on exceptions. - - - - - Creates a constraint specifying the exact type of exception expected - - - - - Creates a constraint specifying the type of exception expected - - - - - Creates a constraint specifying an expected exception - - - - - Creates a constraint specifying an exception with a given InnerException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying that no exception is thrown - - - - - FactoryAttribute indicates the source to be used to - provide test cases for a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - An array of the names of the factories that will provide data - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - ValueSourceAttribute indicates the source to be used to - provide data for one parameter of a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - The name of the data source to be used - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - The Iz class is a synonym for Is intended for use in VB, - which regards Is as a keyword. - - - - - WUsed on a method, marks the test with a timeout value in milliseconds. - The test will be run in a separate thread and is cancelled if the timeout - is exceeded. Used on a method or assembly, sets the default timeout - for all contained test methods. - - - - - Construct a TimeoutAttribute given a time in milliseconds - - The timeout value in milliseconds - - - - Marks a test that must run in the STA, causing it - to run in a separate thread if necessary. - - On methods, you may also use STAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresSTAAttribute - - - - - Marks a test that must run in the MTA, causing it - to run in a separate thread if necessary. - - On methods, you may also use MTAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresMTAAttribute - - - - - Marks a test that must run on a separate thread. - - - - - Construct a RequiresThreadAttribute - - - - - Construct a RequiresThreadAttribute, specifying the apartment - - - - - Summary description for MaxTimeAttribute. - - - - - Construct a MaxTimeAttribute, given a time in milliseconds. - - The maximum elapsed time in milliseconds - - - - RepeatAttribute may be applied to test case in order - to run it multiple times. - - - - - Construct a RepeatAttribute - - The number of times to run the test - - - - Provides static methods to express the assumptions - that must be met for a test to give a meaningful - result. If an assumption is not met, the test - should produce an inconclusive result. - - - - - 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. - - - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression 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 InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced boolean, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException 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 - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Randomizer returns a set of random values in a repeatable - way, to allow re-running of tests if necessary. - - - - - Get a randomizer for a particular member, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Get a randomizer for a particular parameter, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Construct a randomizer using a random seed - - - - - Construct a randomizer using a specified seed - - - - - Return an array of random doubles between 0.0 and 1.0. - - - - - - - Return an array of random doubles with values in a specified range. - - - - - Return an array of random ints with values in a specified range. - - - - - Get a random seed for use in creating a randomizer. - - - - - 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() - {} - } - - - - - - Used to mark a field for use as a datapoint when executing a theory - within the same fixture that requires an argument of the field's Type. - - - - - Used to mark an array as containing a set of datapoints to be used - executing a theory within the same fixture that requires an argument - of the Type of the array elements. - - - - - The SpecialValue enum is used to represent TestCase arguments - that cannot be used as arguments to an Attribute. - - - - - Null represents a null value, which cannot be used as an - argument to an attriute under .NET 1.x - - - - - Summary description for SetUICultureAttribute. - - - - - Construct given the name of a culture - - - - - - Delegate used by tests that execute code and - capture any thrown exception. - - - - - 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. - - - - - - - Helper for Assert.AreEqual(double expected, double actual, ...) - allowing code generation to work consistently. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - - - - 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. - - - - - Throws an with the message and arguments - that are passed in. This causes the test to be reported as inconclusive. - - 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 inconclusive. - - The message to initialize the with. - - - - Throws an . - This causes the test to be reported as Inconclusive. - - - - - 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, succeeding 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, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - 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. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced boolean, 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 a referenced value, succeeding 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 a referenced value, succeeding 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 - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - The message that will be displayed on failure - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - - - - Verifies that a delegate does not throw an exception - - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects 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 in case of failure - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects 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 in case of failure - - - - 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 in case of failure - Array of objects 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 in case of failure - - - - Asserts that a condition is false. If the condition is true 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 in case of failure - Array of objects 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 in case of failure - - - - 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 display in case of failure - Array of objects 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 display in case of failure - - - - 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 not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects 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 display in case of failure - - - - 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 display in case of failure - Array of objects 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 display in case of failure - - - - 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 - - - - 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 display in case of failure - Array of objects 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 display in case of failure - - - - 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 - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value 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 display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is empty - that is equal to string.Empty - - 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 display in case of failure - Array of objects 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 display in case of 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 display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not null or empty - - The string to be tested - - - - 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 be assigned a value of a given Type. - - The expected Type. - The object under examination - The message 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 - - - - 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 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 - - - - 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 is an instance of a given type. - - The expected Type - The object being examined - 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 - The 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 - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - 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 - The 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 - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - 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 - The 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 - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - 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 - The 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 - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values 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 equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects 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 equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of 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 equal 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. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects 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. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - - - - 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 display in case of failure - Array of objects 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 display in case of failure - - - - 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 display in case of failure - Array of objects 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 display in case of failure - - - - 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 to display in case of failure - Array of objects 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 to display in case of 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 - - - - 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 - Array of objects to be 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 - - - - Gets the number of assertions executed so far and - resets the counter to zero. - - - - - Static helper class used in the constraint-based syntax - - - - - Creates a new SubstringConstraint - - The value of the substring - A SubstringConstraint - - - - Creates a new CollectionContainsConstraint. - - The item that should be found. - A new CollectionContainsConstraint - - - - Attribute used to apply a category to a test - - - - - The name of the category - - - - - Construct attribute for a given category based on - a name. The name may not contain the characters ',', - '+', '-' or '!'. However, this is not checked in the - constructor since it would cause an error to arise at - as the test was loaded without giving a clear indication - of where the problem is located. The error is handled - in NUnitFramework.cs by marking the test as not - runnable. - - The name of the category - - - - Protected constructor uses the Type name as the name - of the category. - - - - - The name of the category - - - - - The TestStatus enum indicates the result of running a test - - - - - The test was inconclusive - - - - - The test has skipped - - - - - The test succeeded - - - - - The test failed - - - - - Provide the context information of the current test - - - - - The TestState of current test. This maps to the ResultState - used in nunit.core and is subject to change in the future. - - - - - The TestStatus of current test. This enum will be used - in future versions of NUnit and so is to be preferred - to the TestState value. - - - - - The name of the currently executing test. If no - test is running, the name of the last test run. - - - - - The properties of the currently executing test - or, if no test is running, of the last test run. - - - - - The ResultState enum indicates the result of running a test - - - - - The result is inconclusive - - - - - The test was not runnable. - - - - - The test has been skipped. - - - - - The test has been ignored. - - - - - The test succeeded - - - - - The test failed - - - - - The test encountered an unexpected exception - - - - - The test was cancelled by the user - - - - diff --git a/src/Spring/CommonAssemblyInfo.cs b/src/Spring/CommonAssemblyInfo.cs index d6b48925..3687af72 100644 --- a/src/Spring/CommonAssemblyInfo.cs +++ b/src/Spring/CommonAssemblyInfo.cs @@ -8,11 +8,7 @@ using System.Reflection; // associated with an assembly. // -#if !NET_2_0 -[assembly: AssemblyConfiguration("net-1.1.win32; Release")] -#else [assembly: AssemblyConfiguration("net-2.0.win32; Release")] -#endif [assembly: AssemblyCompany("http://www.springframework.net")] [assembly: AssemblyProduct("Spring.NET Framework 1.3.1")] [assembly: AssemblyCopyright("Copyright 2002-2011 Spring.NET Framework Team.")] @@ -42,10 +38,6 @@ using System.Reflection; [assembly: AssemblyVersion("1.3.2.30001")] #elif NET_2_0 [assembly: AssemblyVersion("1.3.2.20001")] -#elif NET_1_1 -[assembly: AssemblyVersion("1.3.2.11001")] -#elif NET_1_0 -[assembly: AssemblyVersion("1.3.2.10001")] #endif diff --git a/src/Spring/Spring.Core/AssemblyInfo.cs b/src/Spring/Spring.Core/AssemblyInfo.cs index 47df9e64..59d4af1c 100644 --- a/src/Spring/Spring.Core/AssemblyInfo.cs +++ b/src/Spring/Spring.Core/AssemblyInfo.cs @@ -18,7 +18,6 @@ #endregion -using System; using System.Reflection; using System.Runtime.InteropServices; using System.Security; @@ -41,17 +40,3 @@ using System.Security; [assembly: SecurityCritical] #endif - -#if NET_1_0 || NET_1_1 -namespace System.Security -{ - /// - /// - [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Method)] - internal class SecurityCriticalAttribute : Attribute - { } - [AttributeUsage(AttributeTargets.Method)] - internal class SecurityTreatAsSafeAttribute : Attribute - { } -} -#endif diff --git a/src/Spring/Spring.Core/Context/Support/ResourceSetMessageSource.cs b/src/Spring/Spring.Core/Context/Support/ResourceSetMessageSource.cs index c22de4cc..841e558b 100644 --- a/src/Spring/Spring.Core/Context/Support/ResourceSetMessageSource.cs +++ b/src/Spring/Spring.Core/Context/Support/ResourceSetMessageSource.cs @@ -141,15 +141,11 @@ namespace Spring.Context.Support /// protected override void ApplyResourcesToObject(object value, string objectName, CultureInfo culture) { -#if !NET_1_0 if(value != null) { ComponentResourceManager crm = new ComponentResourceManager(value.GetType()); crm.ApplyResources(value, objectName, culture); } -#else - throw new NotSupportedException("Operation not supported in .NET 1.0 Release."); -#endif } /// diff --git a/src/Spring/Spring.Core/Context/Support/StaticMessageSource.cs b/src/Spring/Spring.Core/Context/Support/StaticMessageSource.cs index 8884961b..b9aa9fd8 100644 --- a/src/Spring/Spring.Core/Context/Support/StaticMessageSource.cs +++ b/src/Spring/Spring.Core/Context/Support/StaticMessageSource.cs @@ -128,14 +128,10 @@ namespace Spring.Context.Support /// protected override void ApplyResourcesToObject(object value, string objectName, CultureInfo cultureInfo) { -#if !NET_1_0 if(value != null) { new ComponentResourceManager(value.GetType()).ApplyResources(value, objectName, cultureInfo); } -#else - throw new System.NotSupportedException("Operation not supported in .NET 1.0 Release."); -#endif } /// diff --git a/src/Spring/Spring.Core/Core/TypeConversion/TimeSpanConverter.cs b/src/Spring/Spring.Core/Core/TypeConversion/TimeSpanConverter.cs index 98be9ec3..bb1635e4 100644 --- a/src/Spring/Spring.Core/Core/TypeConversion/TimeSpanConverter.cs +++ b/src/Spring/Spring.Core/Core/TypeConversion/TimeSpanConverter.cs @@ -30,58 +30,9 @@ using System.Text.RegularExpressions; namespace Spring.Core.TypeConversion { #region Specifier parsers - - #if NET_1_1 - - /// - /// Nullable TimeSpan - /// - /// - /// Can be replaced with a TimeSpan? in .NET 2 - /// - class TimeSpanNullable { - - readonly bool _hasValue; - readonly TimeSpan _value; - - /// - /// ctor without Value; - /// - public TimeSpanNullable() { - _hasValue = false; - } - - /// - /// ctor with Value - /// - /// - public TimeSpanNullable(TimeSpan timeSpan) { - _hasValue = true; - _value = timeSpan; - } - - /// - /// HasValue - /// - public bool HasValue { - get { return _hasValue; } - } - - /// - /// Value if HasValue==true - /// - public TimeSpan Value { - get { return _value; } - } - } - - #else - + using TimeSpanNullable = Nullable; - #endif - - /// /// Base parser for custom specifiers. /// diff --git a/src/Spring/Spring.Core/Globalization/Localizers/ResourceSetLocalizer.cs b/src/Spring/Spring.Core/Globalization/Localizers/ResourceSetLocalizer.cs index 5d68fdde..b67a5186 100644 --- a/src/Spring/Spring.Core/Globalization/Localizers/ResourceSetLocalizer.cs +++ b/src/Spring/Spring.Core/Globalization/Localizers/ResourceSetLocalizer.cs @@ -62,7 +62,6 @@ namespace Spring.Globalization.Localizers /// A list of resources to apply. protected override IList LoadResources(object target, IMessageSource messageSource, CultureInfo culture) { -#if ! NET_1_0 IList resources; resources = new ArrayList(); @@ -102,10 +101,6 @@ namespace Spring.Globalization.Localizers } } return resources; -#else - throw new NotSupportedException("Operation not supported in .NET 1.0 Release."); -#endif } - } } \ No newline at end of file diff --git a/src/Spring/Spring.Core/Objects/Factory/Config/ConfigurationReader.cs b/src/Spring/Spring.Core/Objects/Factory/Config/ConfigurationReader.cs index daa46214..795b0b8d 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Config/ConfigurationReader.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Config/ConfigurationReader.cs @@ -318,14 +318,13 @@ namespace Spring.Objects.Factory.Config return ((IConfigurationSectionHandler)handler).Create(null, null, sectionContent); } -#if !NET_1_0 && !NET_1_1 // NET 2.0 ConfigurationSection if (typeof(ConfigurationSection).IsAssignableFrom(handlerType)) { ConfigurationSection section = CreateConfigurationSection(handlerType, new XmlNodeReader(sectionContent)); return section; } -#endif + // Not supported throw ConfigurationUtils.CreateConfigurationException("Configuration section '" + configSectionName + "' is neither of type IConfigurationSectionHandler nor ConfigurationSection."); } @@ -379,7 +378,6 @@ namespace Spring.Objects.Factory.Config } -#if !NET_1_0 && !NET_1_1 private delegate void DeserializeSectionMethod(ConfigurationSection section, XmlReader reader); private static DeserializeSectionMethod deserialized = (DeserializeSectionMethod)Delegate.CreateDelegate(typeof(DeserializeSectionMethod), typeof(ConfigurationSection).GetMethod("DeserializeSection", @@ -392,7 +390,6 @@ namespace Spring.Objects.Factory.Config deserialized(section, reader); return section; } -#endif /// /// Populates the supplied with values from diff --git a/src/Spring/Spring.Core/Objects/Factory/Support/AbstractObjectFactory.cs b/src/Spring/Spring.Core/Objects/Factory/Support/AbstractObjectFactory.cs index 50c58383..f7e87e9a 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Support/AbstractObjectFactory.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Support/AbstractObjectFactory.cs @@ -179,28 +179,12 @@ namespace Spring.Objects.Factory.Support { this.log = LogManager.GetLogger(this.GetType()); this.caseSensitive = caseSensitive; -#if NET_1_0 || NET_1_1 - if (caseSensitive) - { - this.aliasMap = new Hashtable(); - this.singletonCache = new Hashtable(); - this.singletonLocks = new Hashtable(); - this.singletonsInCreation = new Hashtable(); - } - else - { - this.aliasMap = new CaseInsensitiveHashtable(); - this.singletonCache = new CaseInsensitiveHashtable(); - this.singletonLocks = new CaseInsensitiveHashtable(); - this.singletonsInCreation = new CaseInsensitiveHashtable(); - } -#else + IEqualityComparer comparer = (caseSensitive) ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase; this.aliasMap = new OrderedDictionary(comparer); this.singletonCache = new OrderedDictionary(comparer); this.singletonLocks = new OrderedDictionary(comparer); this.singletonsInCreation = new OrderedDictionary(comparer); -#endif this.prototypesInCreation = new LogicalThreadContextSetVariable(); } @@ -1941,14 +1925,8 @@ namespace Spring.Objects.Factory.Support try { string objectName = TransformedObjectName(name); -#if NET_1_1 - lock (monitor) - { - nestingCount++; - } -#else Interlocked.Increment(ref nestingCount); -#endif + #region Instrumentation if (log.IsDebugEnabled) { diff --git a/src/Spring/Spring.Core/Objects/Factory/Support/DefaultListableObjectFactory.cs b/src/Spring/Spring.Core/Objects/Factory/Support/DefaultListableObjectFactory.cs index 9409db72..ccb7be7f 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Support/DefaultListableObjectFactory.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Support/DefaultListableObjectFactory.cs @@ -998,11 +998,8 @@ namespace Spring.Objects.Factory.Support { string[] candidateNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(this, requiredType, true, descriptor.Eager); -#if NET_1_0 || NET_1_1 - IDictionary result = new Hashtable(); -#else IDictionary result = new OrderedDictionary(candidateNames.Length); -#endif + foreach (DictionaryEntry entry in resolvableDependencies) { Type autoWiringType = (Type)entry.Key; diff --git a/src/Spring/Spring.Core/Objects/Factory/Support/PropertiesObjectDefinitionReader.cs b/src/Spring/Spring.Core/Objects/Factory/Support/PropertiesObjectDefinitionReader.cs index 705056ba..154a2313 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Support/PropertiesObjectDefinitionReader.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Support/PropertiesObjectDefinitionReader.cs @@ -243,7 +243,6 @@ namespace Spring.Objects.Factory.Support /// The number of object definitions registered. public int RegisterObjectDefinitions(ResourceSet rs, string prefix) { -#if ! NET_1_0 // Simply create a map and call overloaded method IDictionary id = new Hashtable(); foreach (DictionaryEntry de in rs) @@ -251,9 +250,6 @@ namespace Spring.Objects.Factory.Support id.Add(de.Key, de.Value); } return RegisterObjectDefinitions(id, prefix); -#else - throw new NotSupportedException("Operation not supported on NET 1.0"); -#endif } /// diff --git a/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs b/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs index c4d36054..7e953511 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs @@ -402,17 +402,8 @@ namespace Spring.Objects.Factory.Xml IResource schema = resourceLoader.GetResource(schemaLocation); try { -#if NET_1_0 - XmlTextReader schemaDocument = new XmlTextReader(schemaLocation, schema.InputStream); - schemas.Add(namespaceUri, schemaDocument); -#elif NET_1_1 - XmlTextReader schemaDocument = new XmlTextReader(schemaLocation, schema.InputStream); - schemas.Add(namespaceUri, schemaDocument, new XmlResourceUrlResolver()); -#else XmlTextReader schemaDocument = new XmlTextReader(schema.Uri.AbsoluteUri, schema.InputStream); schemas.Add(namespaceUri, schemaDocument); - -#endif } catch (Exception e) { diff --git a/src/Spring/Spring.Core/Util/ConfigurationUtils.cs b/src/Spring/Spring.Core/Util/ConfigurationUtils.cs index 6ee9c589..cc4327a3 100644 --- a/src/Spring/Spring.Core/Util/ConfigurationUtils.cs +++ b/src/Spring/Spring.Core/Util/ConfigurationUtils.cs @@ -59,9 +59,6 @@ namespace Spring.Util /// Object created by a corresponding . public static object GetSection(string sectionName) { -#if !NET_2_0 - return ConfigurationSettings.GetConfig(sectionName.TrimEnd('/')); -#else try { return ConfigurationManager.GetSection(sectionName.TrimEnd('/')); @@ -72,9 +69,8 @@ namespace Spring.Util } catch (Exception ex) { - throw ConfigurationUtils.CreateConfigurationException(string.Format("Error reading section {0}", sectionName), ex); + throw CreateConfigurationException(string.Format("Error reading section {0}", sectionName), ex); } -#endif } /// @@ -94,11 +90,7 @@ namespace Spring.Util /// Name of the configuration section. public static void RefreshSection(string sectionName) { -#if !NET_2_0 - // TODO : Add support for .NET 1.x -#else ConfigurationManager.RefreshSection(sectionName); -#endif } /// @@ -111,11 +103,7 @@ namespace Spring.Util /// Configuration exception. public static Exception CreateConfigurationException(string message, Exception inner, string fileName, int line) { -#if !NET_2_0 - return new ConfigurationException(message, inner, fileName, line); -#else return new ConfigurationErrorsException(message, inner, fileName, line); -#endif } /// @@ -139,11 +127,7 @@ namespace Spring.Util /// Configuration exception. public static Exception CreateConfigurationException(string message, Exception inner, XmlNode node) { -#if !NET_2_0 - return new ConfigurationException(message, inner, node); -#else return new ConfigurationErrorsException(message, inner, node); -#endif } /// @@ -165,11 +149,7 @@ namespace Spring.Util /// Configuration exception. public static Exception CreateConfigurationException(string message, Exception inner) { -#if !NET_2_0 - return new ConfigurationException(message, inner); -#else return new ConfigurationErrorsException(message, inner); -#endif } /// @@ -200,11 +180,7 @@ namespace Spring.Util /// public static bool IsConfigurationException(Exception exception) { -#if !NET_2_0 - return exception is ConfigurationException; -#else return exception is ConfigurationErrorsException; -#endif } /// @@ -218,11 +194,7 @@ namespace Spring.Util { return ((ITextPosition)node).LineNumber; } -#if !NET_2_0 - return ConfigurationException.GetXmlNodeLineNumber(node); -#else return ConfigurationErrorsException.GetLineNumber(node); -#endif } /// @@ -236,11 +208,7 @@ namespace Spring.Util { return ((ITextPosition)node).Filename; } -#if !NET_2_0 - return ConfigurationException.GetXmlNodeFilename(node); -#else return ConfigurationErrorsException.GetFilename(node); -#endif } @@ -304,7 +272,6 @@ namespace Spring.Util /// public static void ResetConfigurationSystem() { -#if NET_2_0 if (SystemUtils.MonoRuntime) { return; @@ -312,18 +279,6 @@ namespace Spring.Util FieldInfo initStateRef = typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static); object notStarted = Activator.CreateInstance(initStateRef.FieldType); initStateRef.SetValue(null, notStarted); -#endif -#if NET_1_1 - FieldInfo initStateRef = typeof(ConfigurationSettings).GetField("_initState",BindingFlags.NonPublic|BindingFlags.Static); - object notStarted = Activator.CreateInstance(initStateRef.FieldType); - initStateRef.SetValue(null,notStarted); -#endif -#if NET_1_0 - FieldInfo initStateRef = typeof(ConfigurationSettings).GetField("_configurationInitialized",BindingFlags.NonPublic|BindingFlags.Static); - FieldInfo configSystemRef = typeof(ConfigurationSettings).GetField("_configSystem",BindingFlags.NonPublic|BindingFlags.Static); - initStateRef.SetValue(null,false); - configSystemRef.SetValue(null,null); -#endif } // private static T CreateDelegate(MethodInfo method) // { diff --git a/src/Spring/Spring.Core/Util/SystemUtils.cs b/src/Spring/Spring.Core/Util/SystemUtils.cs index af578325..0f4d9fdb 100644 --- a/src/Spring/Spring.Core/Util/SystemUtils.cs +++ b/src/Spring/Spring.Core/Util/SystemUtils.cs @@ -118,11 +118,7 @@ namespace Spring.Util } else { -#if NET_1_0 || NET_1_1 - return Thread.CurrentThread.GetHashCode().ToString(); -#else return Thread.CurrentThread.ManagedThreadId.ToString(); -#endif } } } diff --git a/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/LocalSessionFactoryObject.cs b/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/LocalSessionFactoryObject.cs index 6f9be45c..ee9a0853 100644 --- a/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/LocalSessionFactoryObject.cs +++ b/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/LocalSessionFactoryObject.cs @@ -127,11 +127,7 @@ namespace Spring.Data.NHibernate public IApplicationContext ApplicationContext { set { this.applicationContext = value; } -#if NET_1_1 - get { return this.applicationContext; } -#else protected get { return this.applicationContext; } -#endif } /// diff --git a/src/Spring/Spring.Data/Data/Core/ServiceDomainPlatformTransactionManager.cs b/src/Spring/Spring.Data/Data/Core/ServiceDomainPlatformTransactionManager.cs index d10b0c47..fb27fd07 100644 --- a/src/Spring/Spring.Data/Data/Core/ServiceDomainPlatformTransactionManager.cs +++ b/src/Spring/Spring.Data/Data/Core/ServiceDomainPlatformTransactionManager.cs @@ -18,8 +18,6 @@ #endregion -#if (!NET_1_0) - #region Imports using System; @@ -397,5 +395,3 @@ namespace Spring.Data.Core } } } - -#endif // (!NET_1_0) diff --git a/src/Spring/Spring.Data/Data/Support/DefaultServiceDomainAdapter.cs b/src/Spring/Spring.Data/Data/Support/DefaultServiceDomainAdapter.cs index 9bd573ec..3cd327fc 100644 --- a/src/Spring/Spring.Data/Data/Support/DefaultServiceDomainAdapter.cs +++ b/src/Spring/Spring.Data/Data/Support/DefaultServiceDomainAdapter.cs @@ -18,8 +18,6 @@ #endregion -#if (!NET_1_0) - using System.EnterpriseServices; namespace Spring.Data.Support @@ -91,4 +89,3 @@ namespace Spring.Data.Support } } } -#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data/Data/Support/IServiceDomainAdapter.cs b/src/Spring/Spring.Data/Data/Support/IServiceDomainAdapter.cs index 2c7f1617..9f9228cd 100644 --- a/src/Spring/Spring.Data/Data/Support/IServiceDomainAdapter.cs +++ b/src/Spring/Spring.Data/Data/Support/IServiceDomainAdapter.cs @@ -18,8 +18,6 @@ #endregion -#if (!NET_1_0) - using System.EnterpriseServices; namespace Spring.Data.Support @@ -72,5 +70,3 @@ namespace Spring.Data.Support } } - -#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data/Data/Support/SimpleServiceConfig.cs b/src/Spring/Spring.Data/Data/Support/SimpleServiceConfig.cs index ebf75957..b585de46 100644 --- a/src/Spring/Spring.Data/Data/Support/SimpleServiceConfig.cs +++ b/src/Spring/Spring.Data/Data/Support/SimpleServiceConfig.cs @@ -18,8 +18,6 @@ #endregion -#if (!NET_1_0) - using System.EnterpriseServices; namespace Spring.Data.Support @@ -123,4 +121,3 @@ namespace Spring.Data.Support } } } -#endif \ No newline at end of file diff --git a/src/Spring/Spring.Services/EnterpriseServices/EnterpriseServicesExporter.cs b/src/Spring/Spring.Services/EnterpriseServices/EnterpriseServicesExporter.cs index d441c495..c9fd9e09 100644 --- a/src/Spring/Spring.Services/EnterpriseServices/EnterpriseServicesExporter.cs +++ b/src/Spring/Spring.Services/EnterpriseServices/EnterpriseServicesExporter.cs @@ -18,7 +18,7 @@ #endregion -#if (!NET_1_0 && !MONO) +#if !MONO #region Imports @@ -614,4 +614,4 @@ namespace Spring.EnterpriseServices } } -#endif // (!NET_1_0) +#endif // (!MONO) diff --git a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentContextHandler.cs b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentContextHandler.cs index 8197a014..de66f829 100644 --- a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentContextHandler.cs +++ b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentContextHandler.cs @@ -18,7 +18,7 @@ #endregion -#if (!NET_1_0 && !MONO) +#if !MONO #region Imports diff --git a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentExporter.cs b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentExporter.cs index 1bd427a5..b51d6c00 100644 --- a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentExporter.cs +++ b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentExporter.cs @@ -18,7 +18,7 @@ #endregion -#if (!NET_1_0 && !MONO) +#if !MONO #region Imports @@ -353,4 +353,4 @@ namespace Spring.EnterpriseServices } } -#endif // (!NET_1_0) +#endif // !MONO diff --git a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentFactory.cs b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentFactory.cs index 62d3438f..605b404a 100644 --- a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentFactory.cs +++ b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentFactory.cs @@ -1,179 +1,176 @@ -#region License - -/* - * Copyright 2002-2010 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#endregion - -#if (!NET_1_0 && !MONO) - -#region Imports - +#region License + +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#endregion + +#if !MONO + +#region Imports + using System; -using System.Diagnostics; using System.Reflection; -using Spring.Util; -using Spring.Objects.Factory; -using Spring.Objects.Factory.Support; -using Spring.Objects.Factory.Config; - -#endregion - -namespace Spring.EnterpriseServices -{ - /// - /// Factory Object that instantiates and configures ServicedComponent. - /// - /// - ///

- /// This factory object should be used to instantiate and configure - /// serviced components created by . - ///

- ///
- /// Aleksandar Seovic - public class ServicedComponentFactory : IConfigurableFactoryObject, IInitializingObject - { - #region Fields - - private string name; - private string server; - - private bool isSingleton; - private IObjectDefinition productTemplate; - - private Type componentType; - private object singletonInstance; - - #endregion - - #region Constructor(s) / Destructor - - /// - /// Creates new instance of serviced component factory. - /// - public ServicedComponentFactory() - { - this.isSingleton = false; - } - - #endregion - - #region Properties - - /// - /// Gets or sets component name, as registered with COM+ Services. - /// - public string Name - { - get { return name; } - set { name = value; } - } - - /// - /// Gets or sets name of the remote server that COM+ component is registered with. - /// - public string Server - { - get { return server; } - set { server = value; } - } - - #endregion - - #region IConfigurableFactoryObject Members - - /// - /// Returns configured instance of the serviced component. - /// - /// Configured instance of the serviced component. - public object GetObject() - { - if (IsSingleton) - { - if (singletonInstance == null) - { - singletonInstance = CreateInstance(); - } - return singletonInstance; - } - else - { - return CreateInstance(); - } - } - - /// - /// Returns type of serviced component. - /// - public Type ObjectType - { - get { return componentType; } - } - - /// - /// Gets or sets whether serviced component should be treated as singleton. Default is false. - /// - public bool IsSingleton - { - get { return isSingleton; } - set { isSingleton = value; } - } - - /// - /// Gets or sets the template object definition - /// that should be used to configure proxy instance. - /// - public IObjectDefinition ProductTemplate - { - get { return productTemplate; } - set { productTemplate = value; } - } - - #endregion - - #region IInitializingObject Members - - /// - /// Initializes factory object. - /// - public void AfterPropertiesSet() - { - ValidateConfiguration(); +using Spring.Objects.Factory; +using Spring.Objects.Factory.Config; + +#endregion + +namespace Spring.EnterpriseServices +{ + /// + /// Factory Object that instantiates and configures ServicedComponent. + /// + /// + ///

+ /// This factory object should be used to instantiate and configure + /// serviced components created by . + ///

+ ///
+ /// Aleksandar Seovic + public class ServicedComponentFactory : IConfigurableFactoryObject, IInitializingObject + { + #region Fields + + private string name; + private string server; + + private bool isSingleton; + private IObjectDefinition productTemplate; + + private Type componentType; + private object singletonInstance; + + #endregion + + #region Constructor(s) / Destructor + + /// + /// Creates new instance of serviced component factory. + /// + public ServicedComponentFactory() + { + this.isSingleton = false; + } + + #endregion + + #region Properties + + /// + /// Gets or sets component name, as registered with COM+ Services. + /// + public string Name + { + get { return name; } + set { name = value; } + } + + /// + /// Gets or sets name of the remote server that COM+ component is registered with. + /// + public string Server + { + get { return server; } + set { server = value; } + } + + #endregion + + #region IConfigurableFactoryObject Members + + /// + /// Returns configured instance of the serviced component. + /// + /// Configured instance of the serviced component. + public object GetObject() + { + if (IsSingleton) + { + if (singletonInstance == null) + { + singletonInstance = CreateInstance(); + } + return singletonInstance; + } + else + { + return CreateInstance(); + } + } + + /// + /// Returns type of serviced component. + /// + public Type ObjectType + { + get { return componentType; } + } + + /// + /// Gets or sets whether serviced component should be treated as singleton. Default is false. + /// + public bool IsSingleton + { + get { return isSingleton; } + set { isSingleton = value; } + } + + /// + /// Gets or sets the template object definition + /// that should be used to configure proxy instance. + /// + public IObjectDefinition ProductTemplate + { + get { return productTemplate; } + set { productTemplate = value; } + } + + #endregion + + #region IInitializingObject Members + + /// + /// Initializes factory object. + /// + public void AfterPropertiesSet() + { + ValidateConfiguration(); componentType = Type.GetTypeFromProgID(Name, Server); AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); - } - - #endregion - - #region Private Methods - - private void ValidateConfiguration() - { - if (Name == null) - { - throw new ArgumentException("The Name property is required."); - } - } - - /// - /// Creates new instance of serviced component. - /// - /// New instance of serviced component. - private object CreateInstance() - { + } + + #endregion + + #region Private Methods + + private void ValidateConfiguration() + { + if (Name == null) + { + throw new ArgumentException("The Name property is required."); + } + } + + /// + /// Creates new instance of serviced component. + /// + /// New instance of serviced component. + private object CreateInstance() + { return Activator.CreateInstance(componentType); } @@ -182,8 +179,8 @@ namespace Spring.EnterpriseServices return Assembly.LoadFrom(componentType.Assembly.CodeBase); } - #endregion - } -} - -#endif // (!NET_1_0) + #endregion + } +} + +#endif // !MONO diff --git a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentHelper.cs b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentHelper.cs index aa5551ce..4c8769ba 100644 --- a/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentHelper.cs +++ b/src/Spring/Spring.Services/EnterpriseServices/ServicedComponentHelper.cs @@ -18,23 +18,20 @@ #endregion -#if (!NET_1_0 && !MONO) +#if !MONO #region Imports using System; -using System.Configuration; using System.Diagnostics; using System.EnterpriseServices; using System.IO; using System.Reflection; -using System.Xml; using Spring.Context; using Spring.Context.Support; using Spring.Core.IO; using Spring.Objects.Factory.Config; using Spring.Util; -using ConfigXmlDocument = Spring.Util.ConfigXmlDocument; #endregion diff --git a/src/Spring/Spring.Web/AssemblyInfo.cs b/src/Spring/Spring.Web/AssemblyInfo.cs index 5dc1373e..1f285198 100644 --- a/src/Spring/Spring.Web/AssemblyInfo.cs +++ b/src/Spring/Spring.Web/AssemblyInfo.cs @@ -11,17 +11,3 @@ using System.Web.UI; [assembly: AllowPartiallyTrustedCallers] [assembly: SecurityCritical] #endif - -#if NET_1_0 || NET_1_1 -namespace System.Security -{ - /// - /// - [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Method)] - internal class SecurityCriticalAttribute : Attribute - { } - [AttributeUsage(AttributeTargets.Method)] - internal class SecurityTreatAsSafeAttribute : Attribute - { } -} -#endif diff --git a/src/Spring/Spring.Web/Context/Support/WebApplicationContext.cs b/src/Spring/Spring.Web/Context/Support/WebApplicationContext.cs index 859bd5a6..c2c2bf5f 100644 --- a/src/Spring/Spring.Web/Context/Support/WebApplicationContext.cs +++ b/src/Spring/Spring.Web/Context/Support/WebApplicationContext.cs @@ -323,15 +323,7 @@ namespace Spring.Context.Support { s_weblog.Error(string.Format("failed creating context '{0}', Stacktrace:\n{1}", contextName, new StackTrace()), ex); } -#if NET_1_1 - if (ConfigurationUtils.IsConfigurationException(ex)) - { - if (ex.InnerException != null) - { - throw ex.InnerException; - } - } -#endif + throw; } } diff --git a/src/Spring/Spring.Web/Context/Support/WebSupportModule.cs b/src/Spring/Spring.Web/Context/Support/WebSupportModule.cs index abe4084b..ff034cf5 100644 --- a/src/Spring/Spring.Web/Context/Support/WebSupportModule.cs +++ b/src/Spring/Spring.Web/Context/Support/WebSupportModule.cs @@ -139,11 +139,7 @@ namespace Spring.Context.Support { if (modules[moduleKey] is SessionStateModule) { -#if !NET_1_1 HookSessionEvent((SessionStateModule)modules[moduleKey]); -#else - HookSessionEvent11(); -#endif } } } @@ -315,7 +311,6 @@ namespace Spring.Context.Support } } -#if !NET_1_1 private static void HookSessionEvent(SessionStateModule sessionStateModule) { // Hook only into InProcState - all others ignore SessionEnd anyway @@ -362,58 +357,6 @@ namespace Spring.Context.Support , CultureInfo.InvariantCulture ); } -#else - private static Type t_SessionDictionary; - - private static void HookSessionEvent11() - { - // Hook only into InProcState - all others ignore SessionEnd anyway - t_SessionDictionary = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.SessionDictionary"); - - Type t_InProcStateClientManager = - typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.InProcStateClientManager"); - - TypeRegistry.RegisterType( "InProcStateClientManager", t_InProcStateClientManager ); - - CacheItemRemovedCallback circ = new CacheItemRemovedCallback( OnCacheItemRemoved ); - CACHEKEYPREFIXLENGTH = (int)ExpressionEvaluator.GetValue(null, "InProcStateClientManager.CACHEKEYPREFIXLENGTH"); - s_originalCallback = (CacheItemRemovedCallback)ExpressionEvaluator.GetValue(null, "InProcStateClientManager.s_callback"); - ExpressionEvaluator.SetValue(null, "InProcStateClientManager.s_callback", circ); - } - - private static HttpSessionState CreateSessionState(string key, object state1) - { - string id = key.Substring(CACHEKEYPREFIXLENGTH); - object dict = ExpressionEvaluator.GetValue(state1, "dict"); - if (dict == null) - { - dict = Activator.CreateInstance(t_SessionDictionary, true); - } - object staticObjects = ExpressionEvaluator.GetValue(state1, "staticObjects"); - int timeout = (int)ExpressionEvaluator.GetValue(state1, "timeout"); - bool isCookieless = (bool)ExpressionEvaluator.GetValue(state1, "isCookieless"); - - HttpSessionState state2 = (HttpSessionState)Activator.CreateInstance( - typeof(HttpSessionState) - , BindingFlags.Instance|BindingFlags.NonPublic - , null - , new object[] - { - id, - dict, - staticObjects, - timeout, - false, - isCookieless, - SessionStateMode.InProc, - true - } - , CultureInfo.InvariantCulture - ); - return state2; - } -#endif - #endregion Session Handling Stuff } } \ No newline at end of file diff --git a/src/Spring/Spring.Web/Objects/Factory/Support/WebObjectUtils.cs b/src/Spring/Spring.Web/Objects/Factory/Support/WebObjectUtils.cs index 38a9d0cd..9a3e2e26 100644 --- a/src/Spring/Spring.Web/Objects/Factory/Support/WebObjectUtils.cs +++ b/src/Spring/Spring.Web/Objects/Factory/Support/WebObjectUtils.cs @@ -18,16 +18,8 @@ #endregion -#if !NET_1_1 -using System.Web.Compilation; -#endif -#if NET_1_1 -using System.Reflection; -using System.Web.UI; -#endif using System; using System.IO; -//using System.Web; using Common.Logging; using Spring.Util; using IHttpHandler = System.Web.IHttpHandler; @@ -45,18 +37,6 @@ namespace Spring.Objects.Factory.Support // CLOVER:OFF -#if NET_1_1 - // Required method for resolving control types - private static MethodInfo miGetCompiledUserControlType = null; - - static WebObjectUtils() - { - Type tUserControlParser = typeof(System.Web.UI.UserControl).Assembly.GetType("System.Web.UI.UserControlParser"); - miGetCompiledUserControlType = - tUserControlParser.GetMethod("GetCompiledUserControlType", BindingFlags.Static | BindingFlags.NonPublic); - } -#endif - /// /// Creates a new instance of the class. /// diff --git a/src/Spring/Spring.Web/Util/VirtualEnvironment.cs b/src/Spring/Spring.Web/Util/VirtualEnvironment.cs index 23b945f7..bfa60f57 100644 --- a/src/Spring/Spring.Web/Util/VirtualEnvironment.cs +++ b/src/Spring/Spring.Web/Util/VirtualEnvironment.cs @@ -24,12 +24,10 @@ using System; using System.Collections; using System.Collections.Specialized; using System.IO; -using System.Reflection; using System.Web; using System.Web.Caching; using System.Web.Compilation; using System.Web.SessionState; -using System.Web.UI; using Common.Logging; #endregion @@ -236,16 +234,6 @@ namespace Spring.Util private static readonly ILog log = LogManager.GetLogger(typeof (HttpRuntimeEnvironment)); -#if NET_1_1 - // Required method for resolving control types - private static MethodInfo miGetCompiledUserControlType = null; - - static HttpRuntimeEnvironment() - { - Type tUserControlParser = typeof(System.Web.UI.UserControl).Assembly.GetType("System.Web.UI.UserControlParser"); - miGetCompiledUserControlType = tUserControlParser.GetMethod("GetCompiledUserControlType", BindingFlags.Static | BindingFlags.NonPublic); - } -#endif private class RewriteContext : IDisposable { private string originalPath; @@ -269,11 +257,8 @@ namespace Spring.Util { originalPath = ctx.Request.Url.PathAndQuery; string newPath = newVirtualPath + "currentcontext.dummy"; -#if NET_1_1 - ctx.RewritePath(newPath); -#else + ctx.RewritePath(newPath, rebaseClientPath); -#endif #region Instrumentation @@ -294,11 +279,8 @@ namespace Spring.Util { log.Debug("restoring path from " + ctx.Request.FilePath + " back to " + originalPath); } -#if NET_1_1 - ctx.RewritePath(originalPath); -#else + ctx.RewritePath(originalPath, rebaseClientPath); -#endif } } } @@ -340,9 +322,7 @@ namespace Spring.Util { return ctx.Request.MapPath(virtualPath); } -#if NET_1_1 - throw new ArgumentException("can't map context relative path outside a context"); -#else + if (VirtualPathUtility.IsAbsolute(virtualPath) && virtualPath.StartsWith(HttpRuntime.AppDomainAppVirtualPath)) { virtualPath = VirtualPathUtility.ToAppRelative(virtualPath); @@ -354,7 +334,6 @@ namespace Spring.Util return physicalPath; } return virtualPath; -#endif } public IDisposable RewritePath(string virtualDirectory, bool rebaseClientPath) @@ -381,33 +360,15 @@ namespace Spring.Util { string rootedVPath = WebUtils.CombineVirtualPaths(CurrentExecutionFilePath, virtualPath); - Type type = null; -#if NET_1_1 - if (virtualPath.EndsWith(".aspx")) - { - type = CreateInstanceFromVirtualPath(virtualPath, typeof(Page)).GetType(); - } - else if (virtualPath.EndsWith(".ascx")) - { - type = (Type)miGetCompiledUserControlType.Invoke(null, new object[] { rootedVPath, null, HttpContext.Current }); - } -#else - type = BuildManager.GetCompiledType(rootedVPath); // requires rooted virtual path! -#endif + Type type = BuildManager.GetCompiledType(rootedVPath); + return type; } public object CreateInstanceFromVirtualPath(string virtualPath, Type requiredBaseType) { string rootedVPath = WebUtils.CombineVirtualPaths(CurrentExecutionFilePath, virtualPath); - object result; -#if NET_1_1 - HttpContext ctx = HttpContext.Current; - string physicalPath = ctx.Server.MapPath(rootedVPath); - result = PageParser.GetCompiledPageInstance(virtualPath, physicalPath, ctx); -#else - result = BuildManager.CreateInstanceFromVirtualPath(rootedVPath, requiredBaseType); -#endif + object result = BuildManager.CreateInstanceFromVirtualPath(rootedVPath, requiredBaseType); if (!requiredBaseType.IsAssignableFrom(result.GetType())) { throw new HttpException(string.Format("Type '{0}' from virtual path '{1}' does not inherit from '{2}'", result.GetType(), rootedVPath, requiredBaseType)); diff --git a/src/Spring/Spring.Web/Web/UI/Controls/ContentReplacer.cs b/src/Spring/Spring.Web/Web/UI/Controls/ContentReplacer.cs index 23e4f57c..ef17eef5 100644 --- a/src/Spring/Spring.Web/Web/UI/Controls/ContentReplacer.cs +++ b/src/Spring/Spring.Web/Web/UI/Controls/ContentReplacer.cs @@ -71,19 +71,8 @@ namespace Spring.Web.UI.Controls if (!Visible) return; //log.Debug(string.Format("OnPreRender Content['{0}']", this.contentPlaceHolderID)); -#if NET_1_1 - Control ctlRoot = this.Page; - if (ctlRoot is Spring.Web.UI.Page) - { - MasterPage masterPage = ((Spring.Web.UI.Page) ctlRoot).Master; - if (masterPage != null) - { - ctlRoot = masterPage; - } - } -#else Control ctlRoot = (this.Page.Master != null) ? (Control)this.Page.Master : (Control)this.Page; -#endif + Control ctl = ctlRoot.FindControl(this.contentPlaceHolderID); if (ctl != null) { diff --git a/src/Spring/Spring.Web/Web/UI/Controls/DataBindingPanel.cs b/src/Spring/Spring.Web/Web/UI/Controls/DataBindingPanel.cs index fada342e..1ff9275f 100644 --- a/src/Spring/Spring.Web/Web/UI/Controls/DataBindingPanel.cs +++ b/src/Spring/Spring.Web/Web/UI/Controls/DataBindingPanel.cs @@ -50,11 +50,7 @@ namespace Spring.Web.UI.Controls [PersistChildren(true), ToolboxData("<{0}:DataBindingPanel runat=\"server\" Width=\"125px\" Height=\"50px\"> "), ParseChildren(false), -#if NET_1_1 - Designer("System.Web.UI.Design.WebControls.PanelDesigner, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), -#else Designer("System.Web.UI.Design.WebControls.PanelContainerDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), -#endif AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class DataBindingPanel : Panel diff --git a/src/Spring/Spring.Web/Web/UI/Controls/Head.cs b/src/Spring/Spring.Web/Web/UI/Controls/Head.cs index d8b0a0de..9acf4923 100644 --- a/src/Spring/Spring.Web/Web/UI/Controls/Head.cs +++ b/src/Spring/Spring.Web/Web/UI/Controls/Head.cs @@ -78,11 +78,8 @@ namespace Spring.Web.UI.Controls /// The object that receives the server control content. protected override void Render(HtmlTextWriter writer) { -#if NET_1_1 - bool hasIntrinsicHead = false; -#else bool hasIntrinsicHead = (this.Page.Header != null); -#endif + // don't render begin/end element if we are nested within an ASP.NET control if (!hasIntrinsicHead) { diff --git a/src/Spring/Spring.Web/Web/UI/Controls/Panel.cs b/src/Spring/Spring.Web/Web/UI/Controls/Panel.cs index c7692310..2ee702cf 100644 --- a/src/Spring/Spring.Web/Web/UI/Controls/Panel.cs +++ b/src/Spring/Spring.Web/Web/UI/Controls/Panel.cs @@ -49,11 +49,7 @@ namespace Spring.Web.UI.Controls [PersistChildren(true), ToolboxData("<{0}:Panel runat=\"server\" Width=\"125px\" Height=\"50px\"> "), ParseChildren(false), -#if NET_1_1 - Designer("System.Web.UI.Design.WebControls.PanelDesigner, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), -#else Designer("System.Web.UI.Design.WebControls.PanelContainerDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), -#endif AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class Panel : System.Web.UI.WebControls.Panel, ISupportsWebDependencyInjection diff --git a/test/Spring/CommonAssemblyInfo.cs b/test/Spring/CommonAssemblyInfo.cs index c24d192e..5e50cfc6 100644 --- a/test/Spring/CommonAssemblyInfo.cs +++ b/test/Spring/CommonAssemblyInfo.cs @@ -32,10 +32,6 @@ using System.Runtime.CompilerServices; [assembly: AssemblyVersion("1.3.1.30001")] #elif NET_2_0 [assembly: AssemblyVersion("1.3.1.20001")] -#elif NET_1_1 -[assembly: AssemblyVersion("1.3.1.11001")] -#elif NET_1_0 -[assembly: AssemblyVersion("1.3.1.10001")] #endif // diff --git a/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/InheritanceAopProxyTests.cs b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/InheritanceAopProxyTests.cs index 29873f57..9f16ffb7 100644 --- a/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/InheritanceAopProxyTests.cs +++ b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/InheritanceAopProxyTests.cs @@ -26,7 +26,6 @@ using NUnit.Framework; using Spring.Objects; using Spring.Aop.Interceptor; -using Spring.Proxy; using System.Reflection; using Spring.Expressions; @@ -229,7 +228,6 @@ namespace Spring.Aop.Framework.DynamicProxy Assert.AreEqual(3, ni.Count); } -#if !NET_1_0 [Test] public void DoesNotInterceptInternalMethod() { @@ -247,7 +245,6 @@ namespace Spring.Aop.Framework.DynamicProxy proxiedClass.InternalToDo(); Assert.AreEqual(0, ni.Count); } -#endif [Test] public void InterceptVirtualMethodThatBelongsToAnInterface() @@ -426,7 +423,6 @@ namespace Spring.Aop.Framework.DynamicProxy } -#if !NET_1_0 // "internal virtual" is not supported on net 1.0 CLR // see http://support.microsoft.com/?scid=kb%3Ben-us%3B317129&x=11&y=12 internal virtual void InternalToDo() @@ -434,8 +430,6 @@ namespace Spring.Aop.Framework.DynamicProxy } -#endif - internal protected virtual void InternalProtectedToDo() { diff --git a/test/Spring/Spring.Aop.Tests/Aop/Support/AttributeMatchMethodPointcutTests.cs b/test/Spring/Spring.Aop.Tests/Aop/Support/AttributeMatchMethodPointcutTests.cs index 2d920dfb..a3face48 100644 --- a/test/Spring/Spring.Aop.Tests/Aop/Support/AttributeMatchMethodPointcutTests.cs +++ b/test/Spring/Spring.Aop.Tests/Aop/Support/AttributeMatchMethodPointcutTests.cs @@ -178,7 +178,7 @@ namespace Spring.Aop.Support Assert.IsTrue(matches, "Implementing method from subclass was not decorated with the target attribute " + "but the method from an indirectly implemented interface was, so this must match."); } -#if !NET_1_0 && !NET_1_1 + /// /// Confirms that methods, explicitly implemented in the derived classes will match /// @@ -198,7 +198,7 @@ namespace Spring.Aop.Support } } -#endif + #region Helper classes definitions [AttributeUsage(AttributeTargets.Method)] diff --git a/test/Spring/Spring.Aop.Tests/Aspects/Exception/CaptureOutputLogger.cs b/test/Spring/Spring.Aop.Tests/Aspects/Exception/CaptureOutputLogger.cs index 9d1bd996..e384ea2e 100644 --- a/test/Spring/Spring.Aop.Tests/Aspects/Exception/CaptureOutputLogger.cs +++ b/test/Spring/Spring.Aop.Tests/Aspects/Exception/CaptureOutputLogger.cs @@ -1,9 +1,3 @@ - - -using System; -using System.Collections; -using System.Globalization; -using System.Text; using Common.Logging; using Common.Logging.Simple; @@ -12,17 +6,12 @@ namespace Spring.Aspects.Exceptions public class CaptureOutputLogger : TraceLogger { public static readonly string NAME = "capturingLogger"; -#if NET_1_0 || NET_1_1 - public CaptureOutputLogger() - : base(NAME, LogLevel.All, false, false, null) - {} -#else public CaptureOutputLogger() : base(NAME, LogLevel.All, false, false, null) + // TODO: use this line when upgrading to Common.Logging 2.0: // : base(false, NAME, LogLevel.All, true, false, false, null) { } -#endif // private LogLevel _currentLogLevel = LogLevel.All; // diff --git a/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs b/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs index 374c4a9c..45a6e1d1 100644 --- a/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs +++ b/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs @@ -30,7 +30,6 @@ using NUnit.Framework; using Spring.Objects; using Spring.Proxy; using Spring.Objects.Factory.Support; -using Spring.Reflection.Dynamic; using Spring.Util; #endregion @@ -53,7 +52,6 @@ namespace Spring.Context.Support private static void ResetConfigurationSystem() { -#if NET_2_0 if (SystemUtils.MonoRuntime) { return; @@ -61,28 +59,6 @@ namespace Spring.Context.Support FieldInfo initStateRef = typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static); object notStarted = Activator.CreateInstance(initStateRef.FieldType); initStateRef.SetValue(null, notStarted); -#endif -#if NET_1_1 - FieldInfo initStateRef = typeof(ConfigurationSettings).GetField("_initState",BindingFlags.NonPublic|BindingFlags.Static); - - if (initStateRef!=null) - { - object notStarted = Activator.CreateInstance(initStateRef.FieldType); - initStateRef.SetValue(null,notStarted); - } - else - { - FieldInfo configurationInitializedRef = typeof(ConfigurationSettings).GetField("_configurationInitialized",BindingFlags.NonPublic|BindingFlags.Static); - configurationInitializedRef.SetValue(null, false); - } - -#endif -#if NET_1_0 - FieldInfo initStateRef = typeof(ConfigurationSettings).GetField("_configurationInitialized",BindingFlags.NonPublic|BindingFlags.Static); - FieldInfo configSystemRef = typeof(ConfigurationSettings).GetField("_configSystem",BindingFlags.NonPublic|BindingFlags.Static); - initStateRef.SetValue(null,false); - configSystemRef.SetValue(null,null); -#endif } /// @@ -100,7 +76,7 @@ namespace Spring.Context.Support { return ContextRegistry.GetContext(); // this must fail! } -#if !NET_1_1 + [Test] public void ThrowsInvalidOperationExceptionOnRecursiveCallsToGetContext() { @@ -119,7 +95,6 @@ namespace Spring.Context.Support } } } -#endif [Test] public void RegisterRootContext() diff --git a/test/Spring/Spring.Core.Tests/Context/Support/ResourceSetMessageSourceTests.cs b/test/Spring/Spring.Core.Tests/Context/Support/ResourceSetMessageSourceTests.cs index a74b22ff..d715d728 100644 --- a/test/Spring/Spring.Core.Tests/Context/Support/ResourceSetMessageSourceTests.cs +++ b/test/Spring/Spring.Core.Tests/Context/Support/ResourceSetMessageSourceTests.cs @@ -334,7 +334,6 @@ namespace Spring.Context.Support return sbText.ToString(); } -#if ! NET_1_0 /// /// Test applying a family of resources to an object. /// @@ -351,7 +350,6 @@ namespace Spring.Context.Support Assert.AreEqual("Mark", to.Name); Assert.AreEqual(35, to.Age); } -#endif /// /// Test when the code being resolves itself implements IMessageResolvable. diff --git a/test/Spring/Spring.Core.Tests/Context/Support/StaticMessageSourceTests.cs b/test/Spring/Spring.Core.Tests/Context/Support/StaticMessageSourceTests.cs index 1cdf8fba..ad1e060f 100644 --- a/test/Spring/Spring.Core.Tests/Context/Support/StaticMessageSourceTests.cs +++ b/test/Spring/Spring.Core.Tests/Context/Support/StaticMessageSourceTests.cs @@ -80,27 +80,14 @@ namespace Spring.Context.Support msgSource.ToString()); } - [Test] public void ApplyResources() { TestObject value = new TestObject(); StaticMessageSource msgSource = new StaticMessageSource(); -#if ! NET_1_0 msgSource.ApplyResources(value, "testObject", CultureInfo.InvariantCulture); Assert.AreEqual("Mark", value.Name, "Name property value not applied."); Assert.AreEqual(35, value.Age, "Age property value not applied."); -#else - try - { - msgSource.ApplyResources(value, "testObject", CultureInfo.InvariantCulture); - Assert.Fail("Should not be supported in 1.0"); - } catch (NotSupportedException e) - { - Assert.AreEqual("Operation not supported in .NET 1.0 Release.", - e.Message); - } -#endif } [Test] @@ -108,21 +95,9 @@ namespace Spring.Context.Support { TestObject value = new TestObject(); StaticMessageSource msgSource = new StaticMessageSource(); -#if ! NET_1_0 msgSource.ApplyResources(null, "testObject", CultureInfo.InvariantCulture); Assert.AreEqual(null, value.Name); Assert.AreEqual(0, value.Age); -#else - try - { - msgSource.ApplyResources(null, "testObject", CultureInfo.InvariantCulture); - Assert.Fail("Should not be supported in 1.0"); - } catch (NotSupportedException e) - { - Assert.AreEqual("Operation not supported in .NET 1.0 Release.", - e.Message); - } -#endif } [Test] @@ -130,7 +105,7 @@ namespace Spring.Context.Support { TestObject value = new TestObject(); StaticMessageSource msgSource = new StaticMessageSource(); -#if ! NET_1_0 + try { msgSource.ApplyResources(value, null, CultureInfo.InvariantCulture); @@ -141,18 +116,6 @@ namespace Spring.Context.Support } Assert.AreEqual(null, value.Name); Assert.AreEqual(0, value.Age); -#else - try - { - msgSource.ApplyResources(value, null, CultureInfo.InvariantCulture); - Assert.Fail("Should not be supported in 1.0"); - } - catch (NotSupportedException e) - { - Assert.AreEqual("Operation not supported in .NET 1.0 Release.", - e.Message); - } -#endif } [Test] diff --git a/test/Spring/Spring.Core.Tests/Globalization/Localizers/ResourceSetLocalizerTests.cs b/test/Spring/Spring.Core.Tests/Globalization/Localizers/ResourceSetLocalizerTests.cs index 1647a7b8..df22f720 100644 --- a/test/Spring/Spring.Core.Tests/Globalization/Localizers/ResourceSetLocalizerTests.cs +++ b/test/Spring/Spring.Core.Tests/Globalization/Localizers/ResourceSetLocalizerTests.cs @@ -31,8 +31,6 @@ using Spring.Context.Support; #endregion -#if ! NET_1_0 - namespace Spring.Globalization.Localizers { /// @@ -64,5 +62,3 @@ namespace Spring.Globalization.Localizers } } } - -#endif diff --git a/test/Spring/Spring.Core.Tests/Objects/Factory/Config/DictionaryVariableSourceTests.cs b/test/Spring/Spring.Core.Tests/Objects/Factory/Config/DictionaryVariableSourceTests.cs index 1e98a2be..6ece0496 100644 --- a/test/Spring/Spring.Core.Tests/Objects/Factory/Config/DictionaryVariableSourceTests.cs +++ b/test/Spring/Spring.Core.Tests/Objects/Factory/Config/DictionaryVariableSourceTests.cs @@ -123,7 +123,7 @@ namespace Spring.Objects.Factory.Config Assert.AreEqual("value2", dvs.ResolveVariable("key2")); } -#if (!NET_2_0 && !NET_1_0 && !NET_1_1) +#if !NET_2_0 [Test] public void Initialize_WithInlineDictionarySyntax() { diff --git a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/CollectionMergingGenericTests.cs b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/CollectionMergingGenericTests.cs index 9aed790f..418dbc5c 100644 --- a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/CollectionMergingGenericTests.cs +++ b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/CollectionMergingGenericTests.cs @@ -18,14 +18,9 @@ #endregion -#if !NET_1_1 #region Imports -using System; -using System.Collections; -using System.Collections.Specialized; using NUnit.Framework; -using Spring.Collections; using Spring.Objects.Factory.Support; #endregion @@ -65,4 +60,3 @@ namespace Spring.Objects.Factory.Xml } } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/NamespaceParserRegistryTests.cs b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/NamespaceParserRegistryTests.cs index 646fec9f..5c2f3f4c 100644 --- a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/NamespaceParserRegistryTests.cs +++ b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/NamespaceParserRegistryTests.cs @@ -20,10 +20,7 @@ #region Imports -using System; -using System.IO; using System.Xml; -using System.Xml.Schema; using NUnit.Framework; using Spring.Core.IO; using Spring.Objects.Factory.Config; @@ -69,7 +66,6 @@ namespace Spring.Objects.Factory.Xml NamespaceParserRegistry.Reset(); } -#if !NET_1_0 /// /// This test doesn't work on .NET 1.0 because there are no XmlResolvers for schema loading... /// @@ -85,6 +81,5 @@ namespace Spring.Objects.Factory.Xml ConfigXmlDocument newDoc = new ConfigXmlDocument(); newDoc.Load(vr); } -#endif } } \ No newline at end of file diff --git a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectFactoryTests.cs b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectFactoryTests.cs index 1a73a2b0..daf513af 100644 --- a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectFactoryTests.cs +++ b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectFactoryTests.cs @@ -1126,14 +1126,9 @@ namespace Spring.Objects.Factory.Xml ITestObject kerry = (ITestObject) xof.GetObject("spouse"); ITestObject kerry2 = (ITestObject)xof.GetObject("spouse2"); ArrayCtorDependencyObject rod7 = (ArrayCtorDependencyObject) xof.GetObject("rod7"); -#if NET_1_0 || NET_1_1 - // Lack of OrderedDictionary means we can't predict the ordering of the autowiring. - Assert.IsNotNull(rod7.Spouse1); - Assert.IsNotNull(rod7.Spouse2); -#else + Assert.AreEqual(kerry, rod7.Spouse1); Assert.AreEqual(kerry2, rod7.Spouse2); -#endif } [Test] diff --git a/test/Spring/Spring.Core.Tests/Objects/TestObject.cs b/test/Spring/Spring.Core.Tests/Objects/TestObject.cs index 86e1b2b9..1f9ed460 100644 --- a/test/Spring/Spring.Core.Tests/Objects/TestObject.cs +++ b/test/Spring/Spring.Core.Tests/Objects/TestObject.cs @@ -22,9 +22,7 @@ using System; using System.Collections; -#if !NET_1_1 using System.Collections.Generic; -#endif using System.Collections.Specialized; using System.ComponentModel; using System.ComponentModel.Design.Serialization; @@ -269,13 +267,11 @@ namespace Spring.Objects set { this.someList = value;} } -#if !NET_1_1 public virtual List SomeGenericStringList { get { return someGenericStringList; } set { this.someGenericStringList = value; } } -#endif public virtual NameValueCollection SomeNameValueCollection { @@ -408,9 +404,7 @@ namespace Spring.Objects private IDictionary sharedState; private NameValueCollection someNameValueCollection; -#if !NET_1_1 private List someGenericStringList; -#endif #endregion diff --git a/test/Spring/Spring.Core.Tests/Util/ReflectionUtilsTests.cs b/test/Spring/Spring.Core.Tests/Util/ReflectionUtilsTests.cs index 73c4fb39..0a19184d 100644 --- a/test/Spring/Spring.Core.Tests/Util/ReflectionUtilsTests.cs +++ b/test/Spring/Spring.Core.Tests/Util/ReflectionUtilsTests.cs @@ -1213,12 +1213,7 @@ namespace Spring.Util { IList attrs = ReflectionUtils.GetCustomAttributes(typeof(ClassWithAttributes)); -#if NET_1_1 - // "GetCustomAttributes() does not return SecurityAttribute in .NET 1.x" - Assert.AreEqual(1, attrs.Count); -#else Assert.AreEqual(2, attrs.Count); -#endif } [Test] @@ -1226,12 +1221,7 @@ namespace Spring.Util { IList attrs = ReflectionUtils.GetCustomAttributes(typeof(ClassWithAttributes).GetMethod("MethodWithAttributes")); -#if NET_1_1 - // "GetCustomAttributes() does not return SecurityAttribute in .NET 1.x" - Assert.AreEqual(1, attrs.Count); -#else Assert.AreEqual(2, attrs.Count); -#endif } #endregion diff --git a/test/Spring/Spring.Data.Integration.Tests/Data/OracleAdoTemplateTests.cs b/test/Spring/Spring.Data.Integration.Tests/Data/OracleAdoTemplateTests.cs index be9ae6fe..42593adb 100644 --- a/test/Spring/Spring.Data.Integration.Tests/Data/OracleAdoTemplateTests.cs +++ b/test/Spring/Spring.Data.Integration.Tests/Data/OracleAdoTemplateTests.cs @@ -18,8 +18,6 @@ #endregion -#if (!NET_1_0) - #region using System; @@ -263,5 +261,3 @@ namespace Spring.Data } } } - -#endif // (!NET_1_0) \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationAdvisorTests.cs b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationAdvisorTests.cs index a7918ab6..c2a472fc 100644 --- a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationAdvisorTests.cs +++ b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationAdvisorTests.cs @@ -18,11 +18,9 @@ #endregion -#if !NET_1_0 #region Imports using System; -using System.Collections; using System.Runtime.Serialization; using NUnit.Framework; using Spring.Aop.Framework; @@ -229,4 +227,3 @@ namespace Spring.Dao.Attributes } } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationInterceptorTests.cs b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationInterceptorTests.cs index 0642fd25..c36ff0ba 100644 --- a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationInterceptorTests.cs +++ b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationInterceptorTests.cs @@ -17,10 +17,9 @@ */ #endregion -#if !NET_1_0 + #region Imports -using NUnit.Framework; using Spring.Aop.Framework; using Spring.Dao.Support; using Spring.Objects.Factory.Support; @@ -54,4 +53,3 @@ namespace Spring.Dao.Attributes } } } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationPostProcessorTests.cs b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationPostProcessorTests.cs index 9e04a560..5beba1da 100644 --- a/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationPostProcessorTests.cs +++ b/test/Spring/Spring.Data.Tests/Dao/Attributes/PersistenceExceptionTranslationPostProcessorTests.cs @@ -17,7 +17,7 @@ */ #endregion -#if !NET_1_0 + #region Imports using NUnit.Framework; @@ -99,4 +99,3 @@ namespace Spring.Dao.Attributes } } } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Data/Common/DbProviderFactoryTests.cs b/test/Spring/Spring.Data.Tests/Data/Common/DbProviderFactoryTests.cs index 4d6ba88a..25f0d869 100644 --- a/test/Spring/Spring.Data.Tests/Data/Common/DbProviderFactoryTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Common/DbProviderFactoryTests.cs @@ -225,43 +225,6 @@ namespace Spring.Data.Common } - -#if NET_1_1 - - [Test] - public void DefaultInstanceWithOleDb11() - { - IDbProvider provider = DbProviderFactory.GetDbProvider("OleDb-1.1"); - Assert.AreEqual("OleDb, provider V1.0.5000.0 in framework .NET V1.1", provider.DbMetadata.ProductName); - Assert.IsNotNull(provider.CreateCommand()); - Assert.IsNotNull(provider.CreateCommandBuilder()); - Assert.IsNotNull(provider.CreateConnection()); - Assert.IsNotNull(provider.CreateDataAdapter()); - Assert.IsNotNull(provider.CreateParameter()); - Assert.AreEqual("?", provider.CreateParameterName("Foo")); - } - - [Test] - public void DefaultInstanceWithSqlServer2000() - { - IDbProvider provider = DbProviderFactory.GetDbProvider("SqlServer-1.1"); - AssertIsSqlServer2000(provider); - Assert.IsNull(provider.ConnectionString); - Assert.IsNotNull(provider.CreateCommand()); - Assert.IsNotNull(provider.CreateCommandBuilder()); - Assert.IsNotNull(provider.CreateConnection()); - Assert.IsNotNull(provider.CreateDataAdapter()); - Assert.IsNotNull(provider.CreateParameter()); - Assert.AreEqual("@Foo", provider.CreateParameterName("Foo")); - } - - private void AssertIsSqlServer2000(IDbProvider provider) - { - Assert.AreEqual("Microsoft SQL Server, provider V1.0.5000.0 in framework .NET V1.1", - provider.DbMetadata.ProductName); - AssertCommonSqlServerErrorCodes(provider); - } -#endif private void AssertIsSqlServer2005(IDbProvider provider) { Assert.AreEqual("Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0", @@ -286,7 +249,5 @@ namespace Spring.Data.Common // This had better NOT be Assert.IsFalse(Array.IndexOf(codes.BadSqlGrammarCodes, "1xx56") >= 0); } - - } -} \ No newline at end of file +} diff --git a/test/Spring/Spring.Data.Tests/Data/Common/MultiDelegatingDbProviderTests.cs b/test/Spring/Spring.Data.Tests/Data/Common/MultiDelegatingDbProviderTests.cs index d0f583db..dd228373 100644 --- a/test/Spring/Spring.Data.Tests/Data/Common/MultiDelegatingDbProviderTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Common/MultiDelegatingDbProviderTests.cs @@ -212,11 +212,9 @@ namespace Spring.Data.Common IDbDataAdapter mockDataAdapter = (IDbDataAdapter) mocks.CreateMock(typeof (IDbDataAdapter)); Expect.Call(dbProvider.CreateDataAdapter()).Return(mockDataAdapter).Repeat.Once(); -#if !NET_1_1 DbCommandBuilder mockDbCommandBuilder = (DbCommandBuilder) mocks.CreateMock(typeof (DbCommandBuilder)); Expect.Call(dbProvider.CreateCommandBuilder()).Return(mockDbCommandBuilder).Repeat.Once(); -#endif Expect.Call(dbProvider.CreateParameterName("p1")).Return("@p1").Repeat.Once(); Expect.Call(dbProvider.CreateParameterNameForCollection("c1")).Return("cc1"); @@ -226,9 +224,7 @@ namespace Spring.Data.Common Exception e = new Exception("foo"); Expect.Call(dbProvider.ExtractError(e)).Return("badsql").Repeat.Once(); -#if !NET_1_1 DbException dbException = (DbException) mocks.CreateMock(typeof (DbException)); -#endif MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider(); @@ -245,19 +241,12 @@ namespace Spring.Data.Common Assert.IsNotNull(multiDbProvider.CreateCommand()); Assert.IsNotNull(multiDbProvider.CreateParameter()); Assert.IsNotNull(multiDbProvider.CreateDataAdapter()); - -#if !NET_1_1 - Assert.IsNotNull(multiDbProvider.CreateCommandBuilder() as DbCommandBuilder); -#endif Assert.AreEqual("@p1", multiDbProvider.CreateParameterName("p1")); Assert.AreEqual("cc1", multiDbProvider.CreateParameterNameForCollection("c1")); Assert.IsNotNull(multiDbProvider.DbMetadata); Assert.AreEqual("badsql", multiDbProvider.ExtractError(e)); - -#if !NET_1_1 Assert.IsTrue(multiDbProvider.IsDataAccessException(dbException)); -#endif Assert.IsFalse(multiDbProvider.IsDataAccessException(e)); mocks.VerifyAll(); } diff --git a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs index 15fae3e3..6b436ecf 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs @@ -18,9 +18,6 @@ #endregion - -#if (!NET_1_0) - #region Imports using System; @@ -276,4 +273,3 @@ namespace Spring.Data.Core } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Data/TestObjectMgr.cs b/test/Spring/Spring.Data.Tests/Data/TestObjectMgr.cs index 49beb475..ea14389c 100644 --- a/test/Spring/Spring.Data.Tests/Data/TestObjectMgr.cs +++ b/test/Spring/Spring.Data.Tests/Data/TestObjectMgr.cs @@ -63,18 +63,12 @@ namespace Spring.Data { LOG.Debug("TransactionActive = " + TransactionSynchronizationManager.ActualTransactionActive); } -#if !NET_1_0 && !NET_1_1 + [Transaction(TransactionPropagation.Required, IsolationLevel.Unspecified, Timeout = 50, RollbackFor = new Type[]{typeof(ArgumentNullException)}, ReadOnly = false, EnterpriseServicesInteropOption = System.Transactions.EnterpriseServicesInteropOption.Automatic, NoRollbackFor = new Type[] { typeof(ArithmeticException), typeof(NotSupportedException) })] -#else - [Transaction(TransactionPropagation.Required, IsolationLevel.Unspecified, Timeout = 50, - RollbackFor = new Type[]{typeof(ArgumentNullException)}, - ReadOnly = false, - NoRollbackFor = new Type[] { typeof(ArithmeticException), typeof(NotSupportedException) })] -#endif public void DeleteTwoTestObjects(string name1, string name2) { } diff --git a/test/Spring/Spring.Data.Tests/Support/ErrorCodeExceptionTranslatorTests.cs b/test/Spring/Spring.Data.Tests/Support/ErrorCodeExceptionTranslatorTests.cs index a51ce46f..055cd4ea 100644 --- a/test/Spring/Spring.Data.Tests/Support/ErrorCodeExceptionTranslatorTests.cs +++ b/test/Spring/Spring.Data.Tests/Support/ErrorCodeExceptionTranslatorTests.cs @@ -1,4 +1,3 @@ -#if !NET_1_0 #region Licence /* @@ -107,4 +106,3 @@ namespace Spring.Support } } } -#endif \ No newline at end of file diff --git a/test/Spring/Spring.Services.Tests/EnterpriseServices/ServicedComponentExporterTests.cs b/test/Spring/Spring.Services.Tests/EnterpriseServices/ServicedComponentExporterTests.cs index 8326fb4f..3d7f5a07 100644 --- a/test/Spring/Spring.Services.Tests/EnterpriseServices/ServicedComponentExporterTests.cs +++ b/test/Spring/Spring.Services.Tests/EnterpriseServices/ServicedComponentExporterTests.cs @@ -18,7 +18,7 @@ #endregion -#if (NET_2_0 && !MONO) +#if !MONO #region Imports @@ -215,4 +215,4 @@ namespace Spring.EnterpriseServices } } -#endif // (!NET_1_0) +#endif // !MONO diff --git a/test/Spring/Spring.Web.Tests/Web/Support/AbstractHandlerFactoryTests.cs b/test/Spring/Spring.Web.Tests/Web/Support/AbstractHandlerFactoryTests.cs index 707b552b..ad4106c2 100644 --- a/test/Spring/Spring.Web.Tests/Web/Support/AbstractHandlerFactoryTests.cs +++ b/test/Spring/Spring.Web.Tests/Web/Support/AbstractHandlerFactoryTests.cs @@ -25,7 +25,6 @@ using System.Web; using NUnit.Framework; using Rhino.Mocks; using Spring.Context; -using Spring.Objects.Factory.Config; using Spring.Objects.Factory.Support; #endregion @@ -214,54 +213,15 @@ namespace Spring.Web.Support private static IDisposable Record(MockRepository mocks) { -#if !NET_1_1 return mocks.Record(); -#else - return new RecordModeChanger(mocks); -#endif } private static IDisposable Playback(MockRepository mocks) { -#if !NET_1_1 return mocks.Playback(); -#else - return new PlaybackModeChanger(mocks); -#endif } -#if NET_1_1 - private class RecordModeChanger : IDisposable - { - private MockRepository _mocks; - public RecordModeChanger(MockRepository mocks) - { - _mocks = mocks; - } - - public void Dispose() - { - _mocks.ReplayAll(); - } - } - - private class PlaybackModeChanger : IDisposable - { - private MockRepository _mocks; - - public PlaybackModeChanger(MockRepository mocks) - { - _mocks = mocks; - } - - public void Dispose() - { - _mocks.VerifyAll(); - } - } -#endif - -#endregion Rhino.Mocks Compatibility Adapter + #endregion Rhino.Mocks Compatibility Adapter } } diff --git a/test/Spring/Spring.Web.Tests/Web/Support/ResultFactoryRegistryTests.cs b/test/Spring/Spring.Web.Tests/Web/Support/ResultFactoryRegistryTests.cs index f60d2467..95442265 100644 --- a/test/Spring/Spring.Web.Tests/Web/Support/ResultFactoryRegistryTests.cs +++ b/test/Spring/Spring.Web.Tests/Web/Support/ResultFactoryRegistryTests.cs @@ -23,7 +23,6 @@ using System; using NUnit.Framework; using Rhino.Mocks; -using Spring.Util; #endregion @@ -136,54 +135,14 @@ namespace Spring.Web.Support private static IDisposable Record( MockRepository mocks ) { -#if !NET_1_1 return mocks.Record(); -#else - return new RecordModeChanger(mocks); -#endif } private static IDisposable Playback( MockRepository mocks ) { -#if !NET_1_1 return mocks.Playback(); -#else - return new PlaybackModeChanger(mocks); -#endif } -#if NET_1_1 - private class RecordModeChanger : IDisposable - { - private MockRepository _mocks; - - public RecordModeChanger(MockRepository mocks) - { - _mocks = mocks; - } - - public void Dispose() - { - _mocks.ReplayAll(); - } - } - - private class PlaybackModeChanger : IDisposable - { - private MockRepository _mocks; - - public PlaybackModeChanger(MockRepository mocks) - { - _mocks = mocks; - } - - public void Dispose() - { - _mocks.VerifyAll(); - } - } -#endif - #endregion Rhino.Mocks Compatibility Adapter } } \ No newline at end of file