[seam-commits] Seam SVN: r11952 - in branches/enterprise/JBPAPP_5_0: build and 50 other directories.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Wed Jan 13 11:19:48 EST 2010
Author: manaRH
Date: 2010-01-13 11:19:37 -0500 (Wed, 13 Jan 2010)
New Revision: 11952
Added:
branches/enterprise/JBPAPP_5_0/build/resteasy.pom.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/
branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/seam.properties
branches/enterprise/JBPAPP_5_0/examples/restbay/src/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SubresourceTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/dbunitdata.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/view/
branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html
branches/enterprise/JBPAPP_5_0/examples/tasks/
branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/seam.properties
branches/enterprise/JBPAPP_5_0/examples/tasks/src/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/
branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/bg.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-delete.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-done.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-edit.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-undo.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/tasks-logo.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html
branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css
branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml
branches/enterprise/JBPAPP_5_0/jbpm-jpdl-3.2.5.SP5.pom
branches/enterprise/JBPAPP_5_0/src/resteasy/
branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/
branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties
branches/enterprise/JBPAPP_5_0/src/resteasy/org/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd
branches/enterprise/JBPAPP_5_0/src/resteasy/seam.properties
Removed:
branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/resources/seam.properties
branches/enterprise/JBPAPP_5_0/examples/restbay/src/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java
branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml
branches/enterprise/JBPAPP_5_0/examples/restbay/view/
branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html
branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/resources/seam.properties
branches/enterprise/JBPAPP_5_0/examples/tasks/src/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java
branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/
branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/bg.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-delete.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-done.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-edit.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-undo.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/tasks-logo.png
branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html
branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css
branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js
branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml
branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml
branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/
branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties
branches/enterprise/JBPAPP_5_0/src/resteasy/org/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java
branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd
branches/enterprise/JBPAPP_5_0/src/resteasy/seam.properties
Modified:
branches/enterprise/JBPAPP_5_0/build.xml
branches/enterprise/JBPAPP_5_0/build/build.xml
branches/enterprise/JBPAPP_5_0/build/ci.build.xml
branches/enterprise/JBPAPP_5_0/build/classpath.tmpl
branches/enterprise/JBPAPP_5_0/build/common.build.xml
branches/enterprise/JBPAPP_5_0/build/root.pom.xml
branches/enterprise/JBPAPP_5_0/build/validate.xml
branches/enterprise/JBPAPP_5_0/doc/Seam_Reference_Guide/en-US/Webservices.xml
branches/enterprise/JBPAPP_5_0/examples/build.xml
branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-ear-war.list
branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-war.list
Log:
JBPAPP-3380
Modified: branches/enterprise/JBPAPP_5_0/build/build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/build.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -48,6 +48,7 @@
<deployWithSources pom="${excel.pom}" jar="${lib.dir}/jboss-seam-excel.jar" repositoryId="offline.repository.jboss.org" srcjar="${lib.dir}/src/jboss-seam-excel-sources.jar"/>
<deployWithSources pom="${remoting.pom}" jar="${lib.dir}/jboss-seam-remoting.jar" repositoryId="offline.repository.jboss.org" srcjar="${lib.dir}/src/jboss-seam-remoting-sources.jar"/>
<deployWithSources pom="${ui.pom}" jar="${lib.dir}/jboss-seam-ui.jar" repositoryId="offline.repository.jboss.org" srcjar="${lib.dir}/src/jboss-seam-ui-sources.jar"/>
+ <deployWithSources pom="${resteasy.pom}" jar="${lib.dir}/jboss-seam-resteasy.jar" repositoryId="offline.repository.jboss.org" srcjar="${lib.dir}/src/jboss-seam-resteasy-sources.jar"/>
<deployExample name="booking" repositoryId="offline.repository.jboss.org"/>
<deployExampleNoDs name="numberguess" repositoryId="offline.repository.jboss.org"/>
<deployExample name="dvdstore" path="${seam.dir}/examples/dvdstore" repositoryId="offline.repository.jboss.org"/>
Modified: branches/enterprise/JBPAPP_5_0/build/ci.build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/ci.build.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/ci.build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -23,6 +23,7 @@
<deploySnapshotPom pom="${parent.pom}" />
<deploySnapshot pom="${core.pom}" jar="${lib.dir}/jboss-seam.jar" srcjar="${lib.dir}/src/jboss-seam-sources.jar" />
<deploySnapshot pom="${debug.pom}" jar="${lib.dir}/jboss-seam-debug.jar" srcjar="${lib.dir}/src/jboss-seam-debug-sources.jar"/>
+ <deploySnapshot pom="${resteasy.pom}" jar="${lib.dir}/jboss-seam-resteasy.jar" srcjar="${lib.dir}/src/jboss-seam-resteasy-sources.jar"/>
<deploySnapshot pom="${gen.pom}" jar="${lib.dir}/gen/jboss-seam-gen.jar" srcjar="${lib.dir}/gen/src/jboss-seam-gen-sources.jar"/>
<deploySnapshot pom="${ioc.pom}" jar="${lib.dir}/jboss-seam-ioc.jar" srcjar="${lib.dir}/src/jboss-seam-ioc-sources.jar"/>
<deploySnapshot pom="${mail.pom}" jar="${lib.dir}/jboss-seam-mail.jar" srcjar="${lib.dir}/src/jboss-seam-mail-sources.jar"/>
Modified: branches/enterprise/JBPAPP_5_0/build/classpath.tmpl
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/classpath.tmpl 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/classpath.tmpl 2010-01-13 16:19:37 UTC (rev 11952)
@@ -3,6 +3,7 @@
<classpathentry kind="src" path="src/main"/>
<classpathentry kind="src" path="ui/src/main/java"/>
<classpathentry kind="src" path="src/remoting"/>
+ <classpathentry kind="src" path="src/resteasy"/>
<classpathentry kind="src" path="src/ioc" excluding="org/jboss/seam/ioc/microcontainer/**/*"/>
<classpathentry kind="src" path="src/mail"/>
<classpathentry kind="src" path="src/pdf"/>
Modified: branches/enterprise/JBPAPP_5_0/build/common.build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/common.build.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/common.build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -97,8 +97,8 @@
<pomfile name="parent.pom" value="${build.dir}/parent.pom.xml" />
<install pom="${parent.pom}" />
<pomfile name="core.pom" value="${build.dir}/core.pom.xml" artifactName="jboss-seam" />
- <pomfile name="core.wls.pom" value="${build.dir}/core.pom.xml" artifactName="jboss-seam-wls-compatible" />
<pomfile name="debug.pom" value="${build.dir}/debug.pom.xml" />
+ <pomfile name="resteasy.pom" value="${build.dir}/resteasy.pom.xml" />
<pomfile name="gen.pom" value="${build.dir}/gen.pom.xml" />
<pomfile name="ioc.pom" value="${build.dir}/ioc.pom.xml" />
<pomfile name="mail.pom" value="${build.dir}/mail.pom.xml" />
@@ -118,6 +118,7 @@
<copyDependencies id="pdf" pom="${pdf.pom}" todir="${lib.dir}" scope="runtime" />
<copyDependencies id="excel" pom="${excel.pom}" todir="${lib.dir}" scope="runtime" />
<copyDependencies id="remoting" pom="${remoting.pom}" todir="${lib.dir}" scope="runtime" />
+ <copyDependencies id="resteasy" pom="${resteasy.pom}" todir="${lib.dir}" scope="runtime" />
<copyDependencies id="ui" pom="${ui.pom}" todir="${lib.dir}" scope="runtime" />
<copyDependencies id="gen" pom="${gen.pom}" todir="${lib.dir}/gen" scope="runtime" />
<copyDependencies id="core" pom="${core.pom}" todir="${lib.dir}" scope="compile" />
@@ -127,6 +128,7 @@
<copyDependencies id="pdf" pom="${pdf.pom}" todir="${lib.dir}" scope="compile" />
<copyDependencies id="excel" pom="${excel.pom}" todir="${lib.dir}" scope="compile" />
<copyDependencies id="remoting" pom="${remoting.pom}" todir="${lib.dir}" scope="compile" />
+ <copyDependencies id="resteasy" pom="${resteasy.pom}" todir="${lib.dir}" scope="compile" />
<copyDependencies id="ui" pom="${ui.pom}" todir="${lib.dir}" scope="compile" />
<copyDependencies id="gen" pom="${gen.pom}" todir="${lib.dir}/gen" scope="compile" />
<property name="copyseamdependenciesdone" value="true" />
@@ -140,6 +142,7 @@
<dependency groupId="org.jboss.seam" artifactId="jboss-seam-mail" version="${complete.version}" />
<dependency groupId="org.jboss.seam" artifactId="jboss-seam-pdf" version="${complete.version}" />
<dependency groupId="org.jboss.seam" artifactId="jboss-seam-remoting" version="${complete.version}" />
+ <dependency groupId="org.jboss.seam" artifactId="jboss-seam-resteasy" version="${complete.version}" />
<dependency groupId="org.jboss.seam" artifactId="jboss-seam-ui" version="${complete.version}" />
<dependency groupId="org.jboss.seam" artifactId="jboss-seam-excel" version="${complete.version}" />
</copyInlineDependencies>
@@ -176,6 +179,7 @@
<deploy pom="${core.pom}" jar="${seam.dir}/lib/jboss-seam.jar" repositoryId="@{repositoryId}" />
<deploy pom="${ui.pom}" jar="${seam.dir}/lib/jboss-seam-ui.jar" repositoryId="@{repositoryId}" />
<deploy pom="${remoting.pom}" jar="${seam.dir}/lib/jboss-seam-remoting.jar" repositoryId="@{repositoryId}" />
+ <deploy pom="${resteasy.pom}" jar="${seam.dir}/lib/jboss-seam-resteasy.jar" repositoryId="@{repositoryId}" />
<deploy pom="${pdf.pom}" jar="${seam.dir}/lib/jboss-seam-pdf.jar" repositoryId="@{repositoryId}" />
<deploy pom="${excel.pom}" jar="${seam.dir}/lib/jboss-seam-excel.jar" repositoryId="@{repositoryId}" />
<deploy pom="${mail.pom}" jar="${seam.dir}/lib/jboss-seam-mail.jar" repositoryId="@{repositoryId}" />
@@ -202,6 +206,7 @@
<propertyref name="parent.pom" />
<propertyref name="ui.pom" />
<propertyref name="remoting.pom" />
+ <propertyref name="resteasy.pom" />
<propertyref name="pdf.pom" />
<propertyref name="gen.pom" />
<propertyref name="excel.pom" />
@@ -238,6 +243,7 @@
<propertyref name="parent.pom" />
<propertyref name="ui.pom" />
<propertyref name="remoting.pom" />
+ <propertyref name="resteasy.pom" />
<propertyref name="gen.pom" />
<propertyref name="pdf.pom" />
<propertyref name="excel.pom" />
@@ -273,6 +279,7 @@
<propertyref name="parent.pom" />
<propertyref name="ui.pom" />
<propertyref name="remoting.pom" />
+ <propertyref name="resteasy.pom" />
<propertyref name="gen.pom" />
<propertyref name="pdf.pom" />
<propertyref name="excel.pom" />
@@ -341,6 +348,7 @@
<outputDependencyReport module="pdf" />
<outputDependencyReport module="excel" />
<outputDependencyReport module="ioc" />
+ <outputDependencyReport module="resteasy" />
<echo>Dependency Report written to ${seam.dir}/dependency-report.txt</echo>
</target>
Added: branches/enterprise/JBPAPP_5_0/build/resteasy.pom.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/resteasy.pom.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/build/resteasy.pom.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-resteasy</artifactId>
+ <parent>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>parent</artifactId>
+ <version>@seam.version@</version>
+ </parent>
+
+ <!-- See root pom for notes on how to declare dependencies -->
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ <type>ejb</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxrs</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxb-provider</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jettison-provider</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-atom-provider</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss.web</groupId>
+ <artifactId>servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>${version.testng}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+</project>
\ No newline at end of file
Modified: branches/enterprise/JBPAPP_5_0/build/root.pom.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/root.pom.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/root.pom.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -52,7 +52,8 @@
<properties>
<version.richfaces>3.3.1.GA</version.richfaces>
<version.drools>5.0.1</version.drools>
- <version.testng>5.8</version.testng>
+ <version.testng>5.9</version.testng>
+ <version.resteasy>1.2.1.GA</version.resteasy>
</properties>
<dependencyManagement>
@@ -100,6 +101,12 @@
<artifactId>jboss-seam-remoting</artifactId>
<version>@seam.version@</version>
</dependency>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-resteasy</artifactId>
+ <version>@seam.version@</version>
+ </dependency>
<dependency>
<groupId>org.jboss.seam</groupId>
@@ -310,8 +317,72 @@
<artifactId>jgroups</artifactId>
<version>2.6.13.GA</version>
</dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxrs</artifactId>
+ <version>${version.resteasy}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.annotation</groupId>
+ <artifactId>jsr250-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>tjws</groupId>
+ <artifactId>webserver</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.scannotation</groupId>
+ <artifactId>scannotation</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxb-provider</artifactId>
+ <version>${version.resteasy}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.stream</groupId>
+ <artifactId>sjsxp</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jettison-provider</artifactId>
+ <version>${version.resteasy}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-atom-provider</artifactId>
+ <version>${version.resteasy}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
Modified: branches/enterprise/JBPAPP_5_0/build/validate.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build/validate.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build/validate.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -18,7 +18,8 @@
http://jboss.com/products/seam/pages ${src.schema.dir}/pages-${schema.version}.xsd
http://jboss.com/products/seam/pdf ${seam.dir}/src/pdf/org/jboss/seam/pdf/pdf-${schema.version}.xsd
http://jboss.com/products/seam/persistence ${src.schema.dir}/persistence-${schema.version}.xsd
- http://jboss.com/products/seam/remoting ${src.schema.dir}/remoting-${schema.version}.xsd
+ http://jboss.com/products/seam/remoting ${src.schema.dir}/remoting-${schema.version}.xsd
+ http://jboss.com/products/seam/resteasy ${seam.dir}/src/resteasy/org/jboss/seam/resteasy/resteasy-${schema.version}.xsd
http://jboss.com/products/seam/security ${src.schema.dir}/security-${schema.version}.xsd
http://jboss.com/products/seam/theme ${src.schema.dir}/theme-${schema.version}.xsd
http://jboss.com/products/seam/transaction ${src.schema.dir}/transaction-${schema.version}.xsd
Modified: branches/enterprise/JBPAPP_5_0/build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/build.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -26,6 +26,7 @@
<property name="classes.ioc.dir" value="${classes.dir}/iocclasses" />
<property name="classes.mail.dir" value="${classes.dir}/mailclasses" />
<property name="classes.debug.dir" value="${classes.dir}/debugclasses" />
+ <property name="classes.resteasy.dir" value="${classes.dir}/resteasyclasses" />
<property name="classes.remoting.dir" value="${classes.dir}/remotingclasses" />
<property name="classes.gen.dir" value="${classes.dir}/genclasses" />
<property name="classes.test.dir" value="${classes.dir}/testclasses" />
@@ -43,6 +44,7 @@
<property name="src.ioc.dir" value="src/ioc" />
<property name="src.mail.dir" value="src/mail" />
<property name="src.debug.dir" value="src/debug" />
+ <property name="src.resteasy.dir" value="src/resteasy" />
<property name="src.gen.dir" value="src/gen" />
<property name="src.remoting.dir" value="src/remoting" />
<property name="src.test.dir" value="src/test" />
@@ -74,6 +76,7 @@
<property name="dist.src.ioc.dir" value="${dist.dir}/src/ioc" />
<property name="dist.src.mail.dir" value="${dist.dir}/src/mail" />
<property name="dist.src.debug.dir" value="${dist.dir}/src/debug" />
+ <property name="dist.src.resteasy.dir" value="${dist.dir}/src/resteasy" />
<property name="dist.src.gen.dir" value="${dist.dir}/src/gen" />
<property name="dist.src.remoting.dir" value="${dist.dir}/src/remoting" />
<property name="dist.src.test.dir" value="${dist.dir}/src/test" />
@@ -171,7 +174,7 @@
<delete dir="${lib.dir}" quiet="${quietclean}" />
</target>
- <target name="build" depends="jarcore,jarexcel,jarpdf,jarioc,jarmail,jarremoting,jardebug,jargen,jarui" description="Build all distribution .jar files" />
+ <target name="build" depends="jarcore,jarexcel,jarpdf,jarioc,jarmail,jarremoting,jardebug,jargen,jarui, jarresteasy" description="Build all distribution .jar files" />
<target name="select-compiler">
<available classname="org.eclipse.jdt.core.JDTCompilerAdapter" property="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
@@ -300,7 +303,20 @@
<archive classesdir="${classes.debug.dir}" module="jboss-seam-debug" pom="${debug.pom}" srcdir="${src.debug.dir}"/>
</target>
+ <!-- ########################### RESTeasy TARGETS ###########################-->
+
+ <target name="initresteasy" depends="init, jarcore">
+ <init classesdir="${classes.resteasy.dir}" srcdir="${src.resteasy.dir}" modulename="resteasy" pom="${resteasy.pom}" />
+ </target>
+ <target name="compileresteasy" depends="initresteasy, select-compiler">
+ <compile classesdir="${classes.resteasy.dir}" srcdir="${src.resteasy.dir}" classpath="compile.resteasy.path" />
+ </target>
+
+ <target name="jarresteasy" depends="compileresteasy" description="Build the distribution .jar file for the resteasy -> Log4J bridge integration package">
+ <archive classesdir="${classes.resteasy.dir}" module="jboss-seam-resteasy" pom="${resteasy.pom}" srcdir="${src.resteasy.dir}" outputdir="${lib.dir}" />
+ </target>
+
<!-- ########################### GEN TARGETS ###########################-->
<target name="initgen" depends="init">
@@ -374,7 +390,9 @@
<cleanexample name="quartz" />
<cleanexample name="seamdiscs" />
<cleanexample name="seambay" />
+ <cleanexample name="restbay" />
<cleanexample name="nestedbooking" />
+ <cleanexample name="tasks" />
</target>
<target name="undeployexamples" description="Undeploy all examples">
@@ -402,7 +420,9 @@
<undeployexample name="quartz" />
<undeployexample name="seamdiscs" />
<undeployexample name="seambay" />
+ <undeployexample name="restbay" />
<undeployexample name="nestedbooking" />
+ <undeployexample name="tasks" />
</target>
<target name="testexamples" description="Run the example tests">
@@ -417,6 +437,7 @@
<testexample name="blog" />
<testexample name="seamdiscs" />
<testexample name="seambay" />
+ <testexample name="restbay" />
<testexample name="seamspace" />
<testexample name="drools" />
<testexample name="mail" />
@@ -458,9 +479,11 @@
<ant dir="examples/remoting/gwt" target="validateConfiguration" inheritall="false" />
<ant dir="examples/remoting/helloworld" target="validateConfiguration" inheritall="false" />
<ant dir="examples/seambay" target="validateConfiguration" inheritall="false" />
+ <ant dir="examples/restbay" target="validateConfiguration" inheritall="false" />
<ant dir="examples/seamdiscs" target="validateConfiguration" inheritall="false" />
<!--<ant dir="examples/seampay" target="validateConfiguration" inheritall="false" />-->
<ant dir="examples/seamspace" target="validateConfiguration" inheritall="false" />
+ <ant dir="examples/tasks" target="validateConfiguration" inheritall="false" />
<ant dir="examples/todo" target="validateConfiguration" inheritall="false" />
<ant dir="examples/ui" target="validateConfiguration" inheritall="false" />
</target>
@@ -480,6 +503,7 @@
<copysource destdir="${dist.src.remoting.dir}" srcdir="${src.remoting.dir}" />
<copysource destdir="${dist.src.mail.dir}" srcdir="${src.mail.dir}" />
<copysource destdir="${dist.src.debug.dir}" srcdir="${src.debug.dir}" />
+ <copysource destdir="${dist.src.resteasy.dir}" srcdir="${src.resteasy.dir}" />
<copysource destdir="${dist.src.gen.dir}" srcdir="${src.gen.dir}" />
<copysource destdir="${dist.src.test.dir}" srcdir="${src.test.dir}" />
@@ -558,6 +582,7 @@
<include name="quartz/**/*" />
<include name="drools/**/*" />
<include name="nestedbooking/**/*" />
+ <include name="tasks/**/*" />
<include name="remoting/chatroom/**/*" />
<include name="remoting/helloworld/**/*" />
<include name="remoting/gwt/**/*" />
@@ -1050,6 +1075,7 @@
<propertyref name="ioc.pom" />
<propertyref name="mail.pom" />
<propertyref name="debug.pom" />
+ <propertyref name="resteasy.pom" />
<propertyref name="testng.jvmargs"/>
</propertyset>
</ant>
@@ -1059,6 +1085,7 @@
<target name="downloadDependenciesSources" description="Download source jars for all dependencies" depends="init">
<dependenciesWithSources id="core" scope="compile" pom="${core.pom}" />
<dependenciesWithSources id="debug" scope="compile" pom="${debug.pom}" />
+ <dependenciesWithSources id="resteasy" scope="compile" pom="${resteasy.pom}" />
<dependenciesWithSources id="gen" scope="compile" pom="${gen.pom}" />
<dependenciesWithSources id="ioc" scope="compile" pom="${ioc.pom}" />
<dependenciesWithSources id="mail" scope="compile" pom="${mail.pom}" />
@@ -1090,6 +1117,7 @@
<dependencies id="pdf" scope="compile" pom="${pdf.pom}" />
<dependencies id="excel" scope="compile" pom="${excel.pom}" />
<dependencies id="remoting" scope="compile" pom="${remoting.pom}" />
+ <dependencies id="resteasy" scope="compile" pom="${resteasy.pom}" />
<dependencies id="ui" scope="compile" pom="${ui.pom}" />
<eclipseClasspath tofile=".classpath" file="${build.dir}/classpath.tmpl" filterProperty="automagic.classpath.entries">
<path refid="compile.core.path" />
@@ -1100,7 +1128,8 @@
<path refid="compile.pdf.path" />
<path refid="compile.excel.path" />
<path refid="compile.remoting.path" />
- <path refid="compile.ui.path" />
+ <path refid="compile.resteasy.path" />
+ <path refid="compile.ui.path" />
<path refid="ftest.path" />
</eclipseClasspath>
</target>
Modified: branches/enterprise/JBPAPP_5_0/doc/Seam_Reference_Guide/en-US/Webservices.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/doc/Seam_Reference_Guide/en-US/Webservices.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/doc/Seam_Reference_Guide/en-US/Webservices.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -198,4 +198,695 @@
</sect1>
+ <sect1>
+ <title>RESTful HTTP webservices with RESTEasy</title>
+
+ <para>
+ Seam integrates the RESTEasy implementation of the JAX-RS specification (JSR 311). You can decide how
+ "deep" the integration into your Seam application is going to be:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Seamless integration of RESTEasy bootstrap and configuration, automatic detection of resources
+ and providers.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Serving HTTP/REST requests with the SeamResourceServlet, no external servlet or configuration in
+ web.xml required.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Writing resources as Seam components, with full Seam lifecycle management and interception (bijection).
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2>
+ <title>RESTEasy configuration and request serving</title>
+
+ <para>
+ First, get the RESTEasy libraries and the <literal>jaxrs-api.jar</literal>, deploy them with the
+ other libraries of your application. Also deploy the integration library,
+ <literal>jboss-seam-resteasy.jar</literal>.
+ </para>
+
+ <para>
+ On startup, all classes annotated <literal>@javax.ws.rs.Path</literal> will be discovered automatically
+ and registered as HTTP resources. Seam automatically accepts and serves HTTP requests with its built-in
+ <literal>SeamResourceServlet</literal>. The URI of a resource is build as follows:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The URI starts with the host and context path of your application,
+ e.g. <literal>http://your.hostname/myapp</literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Then the pattern mapped in <literal>web.xml</literal> for the <literal>SeamResourceServlet</literal>,
+ e.g <literal>/seam/resource</literal> if you follow the common examples, is appended.
+ Change this setting to expose your RESTful resources under a different base.
+ Note that this is a global change and other Seam resources (e.g. <literal>s:graphicImage</literal>)
+ are then also served under that base path.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The RESTEasy integration for Seam then appends a configurable string to the base path, by default
+ this is <literal>/rest</literal>. Hence, the full base path of your resources would e.g. be
+ <literal>/myapp/seam/resource/rest</literal>. We recommend that you change this string in your application,
+ you could for example add a version number to prepare for a future REST API upgrade of your services
+ (old clients would keep the old URI base): <literal>/myapp/seam/resource/restv1</literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Finally, the actual resource is available under the defined <literal>@Path</literal>, e.g. a resource
+ mapped with <literal>@Path("/customer")</literal> would be available under
+ <literal>/myapp/seam/resource/rest/customer</literal>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ As an example, the following resource definition would return a plaintext representation for any
+ GET requests using the URI <literal>http://your.hostname/myapp/seam/resource/rest/customer/123</literal>:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[@Path("/customer")
+public class MyCustomerResource {
+
+ @GET
+ @Path("/{customerId}")
+ @Produces("text/plain")
+ public String getCustomer(@PathParam("customerId") int id) {
+ return ...;
+ }
+
+}]]></programlisting>
+
+ <para>
+ No additional configuration is required, you do not have to edit <literal>web.xml</literal> or any
+ other setting if these defauls are acceptable. However, you can configure RESTEasy in your Seam application.
+ First import the <literal>resteasy</literal> namespace into your XML configuration file header:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<components
+ xmlns="http://jboss.com/products/seam/components"
+ xmlns:resteasy="http://jboss.com/products/seam/resteasy"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=
+ http://jboss.com/products/seam/resteasy
+ http://jboss.com/products/seam/resteasy-2.2.xsd
+ http://jboss.com/products/seam/components
+ http://jboss.com/products/seam/components-2.2.xsd">]]></programlisting>
+
+ <para>
+ You can then change the <literal>/rest</literal> prefix as mentioned earlier:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:application resource-path-prefix="/restv1"/>]]></programlisting>
+
+ <para>
+ The full base path to your resources is now <literal>/myapp/seam/resource/restv1/{resource}</literal> - note
+ that your <literal>@Path</literal> definitions and mappings do NOT change. This is an application-wide
+ switch usually used for versioning of the HTTP interface.
+ </para>
+
+ <para>
+ Seam will scan your classpath for any deployed <literal>@javax.ws.rs.Path</literal> resources and any
+ <literal>@javax.ws.rs.ext.Provider</literal> classes. You can disable scanning and configure these
+ classes manually:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:application
+ scan-providers="false"
+ scan-resources="false"
+ use-builtin-providers="true">
+
+ <resteasy:resource-class-names>
+ <value>org.foo.MyCustomerResource</value>
+ <value>org.foo.MyOrderResource</value>
+ <value>org.foo.MyStatelessEJBImplementation</value>
+ </resteasy:resource-class-names>
+
+ <resteasy:provider-class-names>
+ <value>org.foo.MyFancyProvider</value>
+ </resteasy:provider-class-names>
+
+ </resteasy:application>]]></programlisting>
+
+ <para>
+ The <literal>use-built-in-providers</literal> switch enables (default) or disables the RESTEasy built-in
+ providers. We recommend you leave them enabled, as they provide plaintext, JSON, and JAXB marshalling
+ out of the box.
+ </para>
+
+ <para>
+ RESTEasy supports plain EJBs (EJBs that are not Seam components) as resources. Instead of configuring the
+ JNDI names in a non-portable fashion in <literal>web.xml</literal> (see RESTEasy documentation), you can
+ simply list the EJB implementation classes, not the business interfaces, in <literal>components.xml</literal>
+ as shown above. Note that you have to annotate the <literal>@Local</literal> interface of the EJB with
+ <literal>@Path</literal>, <literal>@GET</literal>, and so on - not the bean implementation class. This allows
+ you to keep your application deployment-portable with the global Seam <literal>jndi-pattern</literal> switch
+ on <literal><core:init/></literal>. Note that plain (non-Seam component) EJB resources will not be found
+ even if scanning of resources is enabled, you always have to list them manually. Again, this whole paragraph
+ is only relevant for EJB resources that are not also Seam components and that do not have
+ an <literal>@Name</literal> annotation.
+ </para>
+
+ <para>
+ Finally, you can configure media type and language URI extensions:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:application>
+
+ <resteasy:media-type-mappings>
+ <key>txt</key><value>text/plain</value>
+ </resteasy:media-type-mappings>
+
+ <resteasy:language-mappings>
+ <key>deutsch</key><value>de-DE</value>
+ </resteasy:language-mappings>
+
+</resteasy:application>]]></programlisting>
+
+ <para>
+ This definition would map the URI suffix of <literal>.txt.deutsch</literal> to
+ additional <literal>Accept</literal> and <literal>Accept-Language</literal> header values
+ <literal>text/plain</literal> and <literal>de-DE</literal>.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Resources as Seam components</title>
+
+ <para>
+ Any resource and provider instances are managed by RESTEasy by default. That means a resource class
+ will be instantiated by RESTEasy and serve a single request, after which it will be destroyed. This is
+ the default JAX-RS lifecycle. Providers are instantiated once for the whole application and are
+ effectively singletons and supposed to be stateless.
+ </para>
+
+ <para>
+ You can write resources as Seam components and benefit from the richer lifecycle management
+ of Seam, and interception for bijection, security, and so on. Simply make your resource class a
+ Seam component:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[@Name("customerResource")
+ at Path("/customer")
+public class MyCustomerResource {
+
+ @In
+ CustomerDAO customerDAO;
+
+ @GET
+ @Path("/{customerId}")
+ @Produces("text/plain")
+ public String getCustomer(@PathParam("customerId") int id) {
+ return customerDAO.find(id).getName();
+ }
+
+}]]></programlisting>
+
+ <para>
+ An instance of <literal>customerResource</literal> is now handled by Seam when a request hits the
+ server. This is a Seam JavaBean component that is <literal>EVENT</literal>-scoped, hence no different
+ than the default JAX-RS lifecycle. You get full Seam injection and interception support, and all other Seam
+ components and contexts are available to you. Currently also supported are <literal>APPLICATION</literal>
+ and <literal>STATELESS</literal> resource Seam components. These three scopes allow you to create an effectively
+ stateless Seam middle-tier HTTP request-processing application.
+ </para>
+
+ <para>
+ You can annotate an interface and keep the implementation free from JAX-RS annotations:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[@Path("/customer")
+public interface MyCustomerResource {
+
+ @GET
+ @Path("/{customerId}")
+ @Produces("text/plain")
+ public String getCustomer(@PathParam("customerId") int id);
+
+}]]></programlisting>
+
+ <programlisting role="JAVA"><![CDATA[@Name("customerResource")
+ at Scope(ScopeType.STATELESS)
+public class MyCustomerResourceBean implements MyCustomerResource {
+
+ @In
+ CustomerDAO customerDAO;
+
+ public String getCustomer(int id) {
+ return customerDAO.find(id).getName();
+ }
+
+}]]></programlisting>
+
+ <para>
+ You can use <literal>SESSION</literal>-scoped Seam components. By default, the session will however be shortened
+ to a single request. In other words, when an HTTP request is being processed by the RESTEasy integration code,
+ an HTTP session will be created so that Seam components can utilize that context. When the request has
+ been processed, Seam will look at the session and decide if the session was created only to serve that
+ single request (no session identifier has been provided with the request, or no session existed for the request).
+ If the session has been created only to serve this request, the session will be destroyed after the request!
+ </para>
+
+ <para>
+ Assuming that your Seam application only uses event, application, or stateless components, this procedure
+ prevents exhaustion of available HTTP sessions on the server. The RESTEasy integration with Seam assumes
+ by default that sessions are not used, hence anemic sessions would add up as every REST request would start
+ a session that will only be removed when timed out.
+ </para>
+
+ <para>
+ If your RESTful Seam application has to preserve session state across REST HTTP requests, disable this
+ behavior in your configuration file:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:application destroy-session-after-request="false"/>]]></programlisting>
+
+ <para>
+ Every REST HTTP request will now create a new session that will only be removed by timeout or explicit
+ invalidation in your code through <literal>Session.instance().invalidate()</literal>.
+ It is your responsibility to pass a valid session identifier along with your HTTP requests, if you want
+ to utilize the session context across requests.
+ </para>
+
+ <para>
+ <literal>CONVERSATION</literal>-scoped resource components and mapping of conversations to temporary HTTP
+ resources and paths is planned but currently not supported.
+ </para>
+
+ <para>
+ EJB Seam components are supported as REST resources. Always annotate the local business interface, not
+ the EJB implementation class, with JAX-RS annotations. The EJB has to be <literal>STATELESS</literal>.
+ </para>
+
+ <note>
+ <para>
+ Sub-resources as defined in the JAX RS specification, section 3.4.1, can not be Seam component instances
+ at this time. Only root resource classes can be registered as Seam components. In other words, do not
+ return a Seam component instance from a root resource method.
+ </para>
+ </note>
+
+ <note>
+ <para>
+ Provider classes can currently not be Seam components. Although you can configure an
+ <literal>@Provider</literal> annotated class as a Seam component, it will at runtime be managed
+ by RESTEasy as a singleton with no Seam interception, bijection, etc. The instance will not be
+ a Seam component instance. We plan to support Seam component lifecycle for JAX-RS providers in
+ the future.
+ </para>
+ </note>
+
+ </sect2>
+
+ <sect2>
+ <title>Securing resources</title>
+
+ <para>
+ You can enable the Seam authentication filter for HTTP Basic and Digest authentication in
+ <literal>components.xml</literal>:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<web:authentication-filter url-pattern="/seam/resource/rest/*" auth-type="basic"/>]]></programlisting>
+
+ <para>
+ See the Seam security chapter on how to write an authentication routine.
+ </para>
+
+ <para>
+ After successful authentication, authorization rules with the common
+ <literal>@Restrict</literal> and <literal>@PermissionCheck</literal> annotations are in effect. You can
+ also access the client <literal>Identity</literal>, work with permission mapping, and so on. All
+ regular Seam security features for authorization are available.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Mapping exceptions to HTTP responses</title>
+
+ <para>
+ Section 3.3.4 of the JAX-RS specification defines how checked or unchecked exceptions are handled by the
+ JAX RS implementation. In addition to using an exception mapping provider as defined by JAX-RS, the integration
+ of RESTEasy with Seam allows you to map exceptions to HTTP response codes within Seam's <literal>pages.xml</literal>
+ facility. If you are already using <literal>pages.xml</literal> declarations, this is easier to maintain than
+ potentially many JAX RS exception mapper classes.
+ </para>
+
+ <para>
+ Exception handling within Seam requires that the Seam filter is executed for your HTTP request. Ensure that
+ you do filter <emphasis>all</emphasis> requests in your <literal>web.xml</literal>, not - as
+ some Seam examples might show - a request URI pattern that doesn't cover your REST request paths.
+ The following example intercepts <emphasis>all</emphasis> HTTP requests and enables Seam exception handling:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<filter>
+ <filter-name>Seam Filter</filter-name>
+ <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+</filter>
+
+<filter-mapping>
+ <filter-name>Seam Filter</filter-name>
+ <url-pattern>/*</url-pattern>
+</filter-mapping>]]></programlisting>
+
+ <para>
+ To convert the unchecked <literal>UnsupportedOperationException</literal> thrown by your resource
+ methods to a <literal>501 Not Implemented</literal> HTTP status response, add the following to your
+ <literal>pages.xml</literal> descriptor:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<exception class="java.lang.UnsupportedOperationException">
+ <http-error error-code="501">
+ <message>The requested operation is not supported</message>
+ </http-error>
+</exception>]]></programlisting>
+
+ <para>
+ Custom or checked exceptions are handled the same:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<exception class="my.CustomException" log="false">
+ <http-error error-code="503">
+ <message>Service not available: #{org.jboss.seam.handledException.message}</message>
+ </http-error>
+</exception>]]></programlisting>
+
+ <para>
+ You do not have to send an HTTP error to the client if an exception occurs. Seam allows you to map the
+ exception as a redirect to a view of your Seam application. As this feature is typically used for human
+ clients (web browsers) and not for REST API remote clients, you should pay extra attention to conflicting
+ exception mappings in <literal>pages.xml</literal>.
+ </para>
+
+ <para>
+ Note that the HTTP response still passes through the servlet container, so an additional mapping might apply
+ if you have <literal><error-page></literal> mappings in your <literal>web.xml</literal> configuration.
+ The HTTP status code would then be mapped to a rendered HTML error page with status <literal>200 OK</literal>!
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Exposing entities via RESTful API</title>
+
+ <para>
+ Seam makes it really easy to use a RESTful approach for accessing application data. One of the improvements that
+ Seam introduces is the ability to expose parts of your SQL database for remote access via plain HTTP calls.
+ For this purpose, the Seam/RESTEasy integration module provides two components: <literal>ResourceHome</literal> and
+ <literal>ResourceQuery</literal>, which benefit from the API provided by the Seam Application Framework
+ (<xref linkend="framework"/>). These components allow you to bind domain model entity classes to an HTTP API.
+ </para>
+
+ <sect3>
+ <title>ResourceQuery</title>
+
+ <para>
+ ResourceQuery exposes entity querying capabilities as a RESTful web service. By default, a simple
+ underlying Query component, which returns a list of instances of a given entity class, is created automatically.
+ Alternatively, the ResourceQuery component can be attached to an existing Query component in more sophisticated
+ cases. The following example demonstrates how easily ResourceQuery can be configured:
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:resource-query
+ path="/user"
+ name="userResourceQuery"
+ entity-class="com.example.User"/>]]></programlisting>
+
+ <para>
+ With this single XML element, a ResourceQuery component is set up. The configuration is straightforward:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The component will return a list of <literal>com.example.User</literal> instances.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The component will handle HTTP requests on the URI path <literal>/user</literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The component will by default transform the data into XML or JSON (based on client's preference).
+ The set of supported mime types can be altered by using the <literal>media-types</literal> attribute,
+ for example:
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <programlisting role="XML"><![CDATA[<resteasy:resource-query
+ path="/user"
+ name="userResourceQuery"
+ entity-class="com.example.User"
+ media-types="application/fastinfoset"/>]]></programlisting>
+
+ <para>
+ Alternatively, if you do not like configuring components using XML, you can set up the component by extension:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[@Name("userResourceQuery")
+ at Path("user")
+public class UserResourceQuery extends ResourceQuery<User>
+{
+}]]></programlisting>
+
+ <para>
+ Queries are read-only operations, the resource only responds to GET requests. Furthermore, ResourceQuery allows
+ clients of a web service to manipulate the resultset of a query using the following path parameters:
+ </para>
+
+ <informaltable>
+ <tgroup cols='3'>
+ <thead>
+ <row>
+ <entry>Parameter name</entry>
+ <entry>Example</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>start</entry>
+ <entry>/user?start=20</entry>
+ <entry>Returns a subset of a database query result starting with the 20th entry.</entry>
+ </row>
+ <row>
+ <entry>show</entry>
+ <entry>/user?show=10</entry>
+ <entry>Returns a subset of the database query result limited to 10 entries.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>
+ For example, you can send an HTTP GET request to <literal>/user?start=30&show=10</literal> to get a list of
+ entries representing 10 rows starting with row 30.
+ </para>
+
+ <note>
+ <para>
+ RESTEasy uses JAXB to marshall entities. Thus, in order to be able to transfer them over the wire, you
+ need to annotate entity classes with <literal>@XMLRootElement</literal>. Consult the JAXB and
+ RESTEasy documentation for more information.
+ </para>
+ </note>
+
+ </sect3>
+
+ <sect3>
+
+ <title>ResourceHome</title>
+
+ <para>
+ Just as ResourceQuery makes Query's API available for remote access, so does ResourceHome for the Home
+ component. The following table describes how the two APIs (HTTP and Home) are bound together.
+ </para>
+
+ <table>
+ <tgroup cols='4'>
+ <thead>
+ <row>
+ <entry>HTTP method</entry>
+ <entry>Path</entry>
+ <entry>Function</entry>
+ <entry>ResourceHome method</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>GET</entry>
+ <entry>{path}/{id}</entry>
+ <entry>Read</entry>
+ <entry>getResource()</entry>
+ </row>
+ <row>
+ <entry>POST</entry>
+ <entry>{path}</entry>
+ <entry>Create</entry>
+ <entry>postResource()</entry>
+ </row>
+ <row>
+ <entry>PUT</entry>
+ <entry>{path}/{id}</entry>
+ <entry>Update</entry>
+ <entry>putResource()</entry>
+ </row>
+ <row>
+ <entry>DELETE</entry>
+ <entry>{path}/{id}</entry>
+ <entry>Delete</entry>
+ <entry>deleteResource()</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ You can GET, PUT, and DELETE a particular user instance by sending HTTP requests to /user/{userId}
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Sending a POST request to <literal>/user</literal> creates a new user entity instance and persists it.
+ Usually, you leave it up to the persistence layer to provide the entity instance with an identifier
+ value and thus an URI. Therefore, the URI is sent back to the client in the
+ <literal>Location</literal> header of the HTTP response.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The configuration of ResourceHome is very similar to ResourceQuery except that you need to explicitly specify the underlying
+ Home component and the Java type of the entity identifier property.
+ </para>
+
+ <programlisting role="XML"><![CDATA[<resteasy:resource-home
+ path="/user"
+ name="userResourceHome"
+ entity-home="#{userHome}"
+ entity-id-class="java.lang.Integer"/>]]></programlisting>
+
+ <para>Again, you can write a subclass of ResourceHome instead of XML:</para>
+
+ <programlisting role="JAVA"><![CDATA[@Name("userResourceHome")
+ at Path("user")
+public class UserResourceHome extends ResourceHome<User, Integer>
+{
+
+ @In
+ private EntityHome<User> userHome;
+
+ @Override
+ public Home<?, User> getEntityHome()
+ {
+ return userHome;
+ }
+}]]></programlisting>
+
+ <para>
+ For more examples of ResourceHome and ResourceQuery components, take a look at the <emphasis>Seam Tasks</emphasis>
+ example application, which demonstrates how Seam/RESTEasy integration can be used together with a jQuery web client.
+ In addition, you can find more code example in the <emphasis>Restbay</emphasis> example, which is used mainly
+ for testing purposes.
+ </para>
+
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <title>Testing resources and providers</title>
+
+ <para>
+ Seam includes a unit testing utility class that helps you create unit tests for a RESTful
+ architecture. Extend the <literal>SeamTest</literal> class as usual and use the
+ <literal>ResourceRequestEnvironment.ResourceRequest</literal> to emulate HTTP requests/response cycles:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+
+public class MyTest extends SeamTest {
+
+ ResourceRequestEnvironment sharedEnvironment;
+
+ @BeforeClass
+ public void prepareSharedEnvironment() throws Exception {
+ sharedEnvironment = new ResourceRequestEnvironment(this) {
+ @Override
+ public Map<String, Object> getDefaultHeaders() {
+ return new HashMap<String, Object>() {{
+ put("Accept", "text/plain");
+ }};
+ }
+ };
+ }
+
+ @Test
+ public void test() throws Exception
+ {
+ //Not shared: new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/my/relative/uri)
+
+ new ResourceRequest(sharedEnvironment, Method.GET, "/my/relative/uri)
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addQueryParameter("foo", "123");
+ request.addHeader("Accept-Language", "en_US, de");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("foobar");
+ }
+
+ }.run();
+ }
+}]]></programlisting>
+
+ <para>
+ This test only executes local calls, it does not communicate with the <literal>SeamResourceServlet</literal>
+ through TCP. The mock request is passed through the Seam servlet and filters and the response is then
+ available for test assertions. Overriding the <literal>getDefaultHeaders()</literal> method in a shared
+ instance of <literal>ResourceRequestEnvironment</literal> allows you to set request headers for every
+ test method in the test class.
+ </para>
+
+ <para>
+ Note that a <literal>ResourceRequest</literal> has to be executed in a <literal>@Test</literal> method
+ or in a <literal>@BeforeMethod</literal> callback. You can not execute it in any other callback,
+ such as <literal>@BeforeClass</literal>.
+ </para>
+
+ </sect2>
+
+ </sect1>
+
</chapter>
Modified: branches/enterprise/JBPAPP_5_0/examples/build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/build.xml 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/examples/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -188,6 +188,19 @@
<include name="jboss-seam-remoting.jar" if="seam.remoting.lib" />
</fileset>
+ <!-- Seam RESTEasy integration, with required dependencies -->
+ <fileset id="seam.resteasy.jar" dir="${lib.dir}">
+ <include name="jboss-seam-resteasy.jar" if="seam.resteasy.lib" />
+ <include name="jaxrs-api.jar" if="seam.resteasy.lib" />
+ <include name="resteasy-jaxrs.jar" if="seam.resteasy.lib" />
+ <include name="resteasy-jaxb-provider.jar" if="seam.resteasy.lib" />
+ <include name="resteasy-jettison-provider.jar" if="seam.resteasy.lib" />
+ <include name="jettison.jar" if="seam.resteasy.lib" />
+ <include name="resteasy-atom-provider.jar" if="seam.resteasy.lib" />
+ <include name="slf4j-api.jar" if="seam.resteasy.lib" />
+ <include name="slf4j-log4j12.jar" if="seam.resteasy.lib" />
+ </fileset>
+
<!-- jboss-el -->
<fileset id="jboss-el.jar" dir="${lib.dir}">
<include name="jboss-el.jar" />
@@ -643,6 +656,7 @@
<fileset refid="spring.jar" />
<fileset refid="jcaptcha.jar" />
<fileset refid="antlr.jar" />
+ <fileset refid="seam.resteasy.jar" />
<fileset refid="seam.remoting.jar" />
<fileset refid="el-ri.jar" />
<fileset refid="trinidad-api.jar" />
@@ -794,6 +808,7 @@
<fileset refid="search.jar" />
<fileset refid="richfaces-api.jar" />
<fileset refid="groovy.jar" />
+ <fileset refid="seam.resteasy.jar" />
<fileset refid="trinidad-api.jar" />
<fileset refid="el-ri.jar"/>
<mapper type="flatten" />
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay)
Property changes on: branches/enterprise/JBPAPP_5_0/examples/restbay
___________________________________________________________________
Name: svn:ignore
+ exploded-archives
test-build
dist
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-
-
-<project name="RestBay" default="deploy" basedir=".">
-
- <!-- Example name -->
- <property name="Name" value="RestBay Example"/>
- <property name="example.name" value="jboss-rest-bay"/>
-
- <!-- Libraries -->
- <property name="facelets.lib" value="yes"/>
- <property name="seam.ui.lib" value="yes"/>
- <property name="seam.resteasy.lib" value="yes"/>
-
- <property name="example.ds" value="jboss-rest-bay-ds.xml"/>
-
- <import file="../build.xml"/>
-
-</project>
-
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+
+
+<project name="RestBay" default="deploy" basedir=".">
+
+ <!-- Example name -->
+ <property name="Name" value="RestBay Example"/>
+ <property name="example.name" value="jboss-rest-bay"/>
+
+ <!-- Libraries -->
+ <property name="facelets.lib" value="yes"/>
+ <property name="seam.ui.lib" value="yes"/>
+ <property name="seam.resteasy.lib" value="yes"/>
+
+ <property name="example.ds" value="jboss-rest-bay-ds.xml"/>
+
+ <import file="../build.xml"/>
+
+</project>
+
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,8 +0,0 @@
-RestBay Example
-===============
-
-This example shows Seam/JAX-RS RESTful HTTP webservices integration.
-Deployment on Tomcat has not been tested, use JBoss AS.
-
-Visit http://localhost:8080/rest-bay on JBoss AS
-
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/readme.txt 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,8 @@
+RestBay Example
+===============
+
+This example shows Seam/JAX-RS RESTful HTTP webservices integration.
+Deployment on Tomcat has not been tested, use JBoss AS.
+
+Visit http://localhost:8080/rest-bay on JBoss AS
+
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<application xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
- version="5">
-
- <display-name>RestBay</display-name>
-
- <module>
- <web>
- <web-uri>jboss-rest-bay.war</web-uri>
- <context-root>/rest-bay</context-root>
- </web>
- </module>
-
- <module>
- <ejb>jboss-rest-bay.jar</ejb>
- </module>
-
- <module>
- <ejb>jboss-seam.jar</ejb>
- </module>
-
-</application>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/application.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
+ version="5">
+
+ <display-name>RestBay</display-name>
+
+ <module>
+ <web>
+ <web-uri>jboss-rest-bay.war</web-uri>
+ <context-root>/rest-bay</context-root>
+ </web>
+ </module>
+
+ <module>
+ <ejb>jboss-rest-bay.jar</ejb>
+ </module>
+
+ <module>
+ <ejb>jboss-seam.jar</ejb>
+ </module>
+
+</application>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
- version="3.0">
-
- <interceptors>
- <interceptor>
- <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
- </interceptor>
- </interceptors>
-
- <assembly-descriptor>
- <interceptor-binding>
- <ejb-name>*</ejb-name>
- <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
- </interceptor-binding>
- </assembly-descriptor>
-
-</ejb-jar>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/ejb-jar.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+ version="3.0">
+
+ <interceptors>
+ <interceptor>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor>
+ </interceptors>
+
+ <assembly-descriptor>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor-binding>
+ </assembly-descriptor>
+
+</ejb-jar>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE jboss-app
- PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN"
- "http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd">
-
-<jboss-app>
- <loader-repository>
- seam.jboss.org:loader=rest-bay
- </loader-repository>
-</jboss-app>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/jboss-app.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE jboss-app
+ PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN"
+ "http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd">
+
+<jboss-app>
+ <loader-repository>
+ seam.jboss.org:loader=rest-bay
+ </loader-repository>
+</jboss-app>
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="restbayDatabase">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <jta-data-source>java:/restbayDatasource</jta-data-source>
- <properties>
- <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
- <property name="hibernate.show_sql" value="false"/>
- <!-- These are the default for JBoss EJB3, but not for HEM: -->
- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
- <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
- <property name="jboss.entity.manager.factory.jndi.name" value="java:/restbayEntityManagerFactory"/>
- </properties>
- </persistence-unit>
-</persistence>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/META-INF/persistence.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ version="1.0">
+ <persistence-unit name="restbayDatabase">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:/restbayDatasource</jta-data-source>
+ <properties>
+ <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+ <property name="hibernate.show_sql" value="false"/>
+ <!-- These are the default for JBoss EJB3, but not for HEM: -->
+ <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
+ <property name="jboss.entity.manager.factory.jndi.name" value="java:/restbayEntityManagerFactory"/>
+ </properties>
+ </persistence-unit>
+</persistence>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<components xmlns="http://jboss.com/products/seam/components"
- xmlns:core="http://jboss.com/products/seam/core"
- xmlns:persistence="http://jboss.com/products/seam/persistence"
- xmlns:security="http://jboss.com/products/seam/security"
- xmlns:drools="http://jboss.com/products/seam/drools"
- xmlns:async="http://jboss.com/products/seam/async"
- xmlns:web="http://jboss.com/products/seam/web"
- xmlns:resteasy="http://jboss.com/products/seam/resteasy"
- xmlns:framework="http://jboss.com/products/seam/framework"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation=
- "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
- http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
- http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd
- http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.2.xsd
- http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
- http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
- http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.2.xsd
- http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.2.xsd
- http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd">
-
- <core:init jndi-pattern="@jndiPattern@" debug="true"/>
-
- <core:manager conversation-timeout="120000"
- concurrent-request-timeout="500"
- conversation-id-parameter="cid"/>
-
- <persistence:managed-persistence-context name="entityManager" auto-create="true"
- persistence-unit-jndi-name="java:/restbayEntityManagerFactory"/>
-
- <async:quartz-dispatcher/>
-
- <framework:entity-home name="categoryHome"
- entity-class="org.jboss.seam.example.restbay.Category"
- auto-create="true"/>
-
- <resteasy:application resource-path-prefix="/restv1">
- <resteasy:resource-class-names>
- <value>org.jboss.seam.example.restbay.resteasy.statelessejb.StatelessEjbTestResourceBean</value>
- </resteasy:resource-class-names>
- </resteasy:application>
-
- <resteasy:resource-home path="/configuredCategory" name="configuredCategoryResourceHome"
- entity-home="#{categoryHome}" entity-id-class="java.lang.Integer"
- media-types="application/xml application/json"/>
-
- <resteasy:resource-query path="/configuredCategory" name="configuredCategoryResourceQuery"
- entity-class="org.jboss.seam.example.restbay.Category"
- media-types="application/xml application/json"/>
-
- <web:authentication-filter
- url-pattern="/seam/resource/restv1/secured/*"
- auth-type="basic"
- realm="Seam RestBay Application"/>
-
- <security:identity authenticate-method="#{testAuthenticator.authenticate}" />
-
-</components>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/components.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+ xmlns:core="http://jboss.com/products/seam/core"
+ xmlns:persistence="http://jboss.com/products/seam/persistence"
+ xmlns:security="http://jboss.com/products/seam/security"
+ xmlns:drools="http://jboss.com/products/seam/drools"
+ xmlns:async="http://jboss.com/products/seam/async"
+ xmlns:web="http://jboss.com/products/seam/web"
+ xmlns:resteasy="http://jboss.com/products/seam/resteasy"
+ xmlns:framework="http://jboss.com/products/seam/framework"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=
+ "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
+ http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
+ http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd
+ http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.2.xsd
+ http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
+ http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
+ http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.2.xsd
+ http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.2.xsd
+ http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd">
+
+ <core:init jndi-pattern="@jndiPattern@" debug="true"/>
+
+ <core:manager conversation-timeout="120000"
+ concurrent-request-timeout="500"
+ conversation-id-parameter="cid"/>
+
+ <persistence:managed-persistence-context name="entityManager" auto-create="true"
+ persistence-unit-jndi-name="java:/restbayEntityManagerFactory"/>
+
+ <async:quartz-dispatcher/>
+
+ <framework:entity-home name="categoryHome"
+ entity-class="org.jboss.seam.example.restbay.Category"
+ auto-create="true"/>
+
+ <resteasy:application resource-path-prefix="/restv1">
+ <resteasy:resource-class-names>
+ <value>org.jboss.seam.example.restbay.resteasy.statelessejb.StatelessEjbTestResourceBean</value>
+ </resteasy:resource-class-names>
+ </resteasy:application>
+
+ <resteasy:resource-home path="/configuredCategory" name="configuredCategoryResourceHome"
+ entity-home="#{categoryHome}" entity-id-class="java.lang.Integer"
+ media-types="application/xml application/json"/>
+
+ <resteasy:resource-query path="/configuredCategory" name="configuredCategoryResourceQuery"
+ entity-class="org.jboss.seam.example.restbay.Category"
+ media-types="application/xml application/json"/>
+
+ <web:authentication-filter
+ url-pattern="/seam/resource/restv1/secured/*"
+ auth-type="basic"
+ realm="Seam RestBay Application"/>
+
+ <security:identity authenticate-method="#{testAuthenticator.authenticate}" />
+
+</components>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<faces-config version="1.2"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
-
- <application>
- <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
- </application>
-
-</faces-config>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/faces-config.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faces-config version="1.2"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
+
+ <application>
+ <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
+ </application>
+
+</faces-config>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<pages xmlns="http://jboss.com/products/seam/pages"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd">
-
- <exception class="java.lang.UnsupportedOperationException" log="false">
- <http-error error-code="501">
- <message>The request operation is not supported: #{org.jboss.seam.handledException.message}</message>
- </http-error>
- </exception>
-
- <exception class="org.jboss.seam.security.AuthorizationException" log="false">
- <http-error error-code="403">
- <message>Not authorized to access resource: #{org.jboss.seam.handledException.message}</message>
- </http-error>
- </exception>
-
-</pages>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/pages.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pages xmlns="http://jboss.com/products/seam/pages"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd">
+
+ <exception class="java.lang.UnsupportedOperationException" log="false">
+ <http-error error-code="501">
+ <message>The request operation is not supported: #{org.jboss.seam.handledException.message}</message>
+ </http-error>
+ </exception>
+
+ <exception class="org.jboss.seam.security.AuthorizationException" log="false">
+ <http-error error-code="403">
+ <message>Not authorized to access resource: #{org.jboss.seam.handledException.message}</message>
+ </http-error>
+ </exception>
+
+</pages>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,93 +0,0 @@
-<?xml version="1.0" ?>
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- version="2.5">
-
- <!-- Seam -->
-
- <listener>
- <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
- </listener>
-
- <filter>
- <filter-name>Seam Filter</filter-name>
- <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>Seam Filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <servlet>
- <servlet-name>Seam Resource Servlet</servlet-name>
- <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Seam Resource Servlet</servlet-name>
- <url-pattern>/seam/resource/*</url-pattern>
- </servlet-mapping>
-
- <!-- Facelets development mode (disable in production) -->
-
- <context-param>
- <param-name>facelets.DEVELOPMENT</param-name>
- <param-value>false</param-value>
- </context-param>
-
- <context-param>
- <param-name>facelets.SKIP_COMMENTS</param-name>
- <param-value>true</param-value>
- </context-param>
-
- <!-- JSF -->
-
- <context-param>
- <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
- <param-value>.xhtml</param-value>
- </context-param>
-
- <context-param>
- <param-name>com.sun.faces.numberOfViewsInSession</param-name>
- <param-value>15</param-value>
- </context-param>
-
- <context-param>
- <param-name>com.sun.faces.numberOfLogicalViews</param-name>
- <param-value>15</param-value>
- </context-param>
-
- <context-param>
- <param-name>com.sun.faces.responseBufferSize</param-name>
- <param-value>32768</param-value>
- </context-param>
-
- <servlet>
- <servlet-name>Faces Servlet</servlet-name>
- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.seam</url-pattern>
- </servlet-mapping>
-
- <security-constraint>
- <display-name>Restrict raw XHTML Documents</display-name>
- <web-resource-collection>
- <web-resource-name>XHTML</web-resource-name>
- <url-pattern>*.xhtml</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>NONE</role-name>
- </auth-constraint>
- </security-constraint>
-
- <session-config>
- <session-timeout>10</session-timeout>
- </session-config>
-
-</web-app>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/WEB-INF/web.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,93 @@
+<?xml version="1.0" ?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
+
+ <!-- Seam -->
+
+ <listener>
+ <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+ </listener>
+
+ <filter>
+ <filter-name>Seam Filter</filter-name>
+ <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Seam Filter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <servlet>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <url-pattern>/seam/resource/*</url-pattern>
+ </servlet-mapping>
+
+ <!-- Facelets development mode (disable in production) -->
+
+ <context-param>
+ <param-name>facelets.DEVELOPMENT</param-name>
+ <param-value>false</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>facelets.SKIP_COMMENTS</param-name>
+ <param-value>true</param-value>
+ </context-param>
+
+ <!-- JSF -->
+
+ <context-param>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>com.sun.faces.numberOfViewsInSession</param-name>
+ <param-value>15</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>com.sun.faces.numberOfLogicalViews</param-name>
+ <param-value>15</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>com.sun.faces.responseBufferSize</param-name>
+ <param-value>32768</param-value>
+ </context-param>
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.seam</url-pattern>
+ </servlet-mapping>
+
+ <security-constraint>
+ <display-name>Restrict raw XHTML Documents</display-name>
+ <web-resource-collection>
+ <web-resource-name>XHTML</web-resource-name>
+ <url-pattern>*.xhtml</url-pattern>
+ </web-resource-collection>
+ <auth-constraint>
+ <role-name>NONE</role-name>
+ </auth-constraint>
+ </security-constraint>
+
+ <session-config>
+ <session-timeout>10</session-timeout>
+ </session-config>
+
+</web-app>
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,3 +0,0 @@
-# The pattern in components.xml is replaced by an application server specific value in the ant build. This value is used for running tests
-
-jndiPattern \#{ejbName}/local
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/components.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,3 @@
+# The pattern in components.xml is replaced by an application server specific value in the ant build. This value is used for running tests
+
+jndiPattern \#{ejbName}/local
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,108 +0,0 @@
-insert into category (categoryId, name) values (1, 'Antiques');
- insert into category (categoryId, name, parent_category_id) values (1001, 'Furniture', 1);
- insert into category (categoryId, name, parent_category_id) values (1002, 'Silverware', 1);
-
-insert into category (categoryId, name) values (2, 'Art');
- insert into category (categoryId, name, parent_category_id) values (2001, 'Paintings', 2);
- insert into category (categoryId, name, parent_category_id) values (2002, 'Prints', 2);
- insert into category (categoryId, name, parent_category_id) values (2003, 'Sculptures', 2);
-
-insert into category (categoryId, name) values (3, 'Books');
- insert into category (categoryId, name, parent_category_id) values (3001, 'Fiction', 3);
- insert into category (categoryId, name, parent_category_id) values (3002, 'Non Fiction', 3);
- insert into category (categoryId, name, parent_category_id) values (3003, 'Comic Books', 3);
- insert into category (categoryId, name, parent_category_id) values (3004, 'Children', 3);
-
-insert into category (categoryId, name) values (4, 'Cameras and Photography');
- insert into category (categoryId, name, parent_category_id) values (4001, 'Digital Cameras', 4);
- insert into category (categoryId, name, parent_category_id) values (4002, 'Memory Cards', 4);
- insert into category (categoryId, name, parent_category_id) values (4003, 'Film Cameras', 4);
- insert into category (categoryId, name, parent_category_id) values (4004, 'Video Cameras', 4);
-
-insert into category (categoryId, name) values (5, 'Cars and Boats');
- insert into category (categoryId, name, parent_category_id) values (5001, 'Cars', 5);
- insert into category (categoryId, name, parent_category_id) values (5002, 'Motorcycles', 5);
- insert into category (categoryId, name, parent_category_id) values (5003, 'Car Parts', 5);
-
-insert into category (categoryId, name) values (6, 'Cell Phones');
- insert into category (categoryId, name, parent_category_id) values (6001, 'Mobile Phones', 6);
- insert into category (categoryId, name, parent_category_id) values (6002, 'Mobile Accessories', 6);
- insert into category (categoryId, name, parent_category_id) values (6003, 'Prepaid cards', 6);
-
-insert into category (categoryId, name) values (7, 'Clothing and Shoes');
- insert into category (categoryId, name, parent_category_id) values (7001, 'Women', 7);
- insert into category (categoryId, name, parent_category_id) values (7002, 'Men', 7);
- insert into category (categoryId, name, parent_category_id) values (7003, 'Girls', 7);
- insert into category (categoryId, name, parent_category_id) values (7004, 'Boys', 7);
- insert into category (categoryId, name, parent_category_id) values (7005, 'Babies', 7);
-
-insert into category (categoryId, name) values (8, 'Computers');
- insert into category (categoryId, name, parent_category_id) values (8001, 'Notebooks', 8);
- insert into category (categoryId, name, parent_category_id) values (8002, 'Desktop PCs', 8);
- insert into category (categoryId, name, parent_category_id) values (8003, 'Servers', 8);
- insert into category (categoryId, name, parent_category_id) values (8004, 'Hardware', 8);
- insert into category (categoryId, name, parent_category_id) values (8005, 'Software', 8);
-
-insert into category (categoryId, name) values (9, 'Music');
- insert into category (categoryId, name, parent_category_id) values (9001, 'CDs', 9);
- insert into category (categoryId, name, parent_category_id) values (9002, 'Records', 9);
-
-insert into category (categoryId, name) values (10, 'Electronics');
- insert into category (categoryId, name, parent_category_id) values (10001, 'Home Audio', 10);
- insert into category (categoryId, name, parent_category_id) values (10002, 'MP3 Players', 10);
- insert into category (categoryId, name, parent_category_id) values (10003, 'Television', 10);
- insert into category (categoryId, name, parent_category_id) values (10004, 'Home theatre', 10);
-
-insert into category (categoryId, name) values (11, 'Home and Garden');
- insert into category (categoryId, name, parent_category_id) values (11001, 'Kitchen', 11);
- insert into category (categoryId, name, parent_category_id) values (11002, 'Real Estate', 11);
- insert into category (categoryId, name, parent_category_id) values (11003, 'Furniture', 11);
-
-insert into category (categoryId, name) values (12, 'Musical Instruments');
- insert into category (categoryId, name, parent_category_id) values (12001, 'Guitars', 12);
- insert into category (categoryId, name, parent_category_id) values (12002, 'Pianos and Keyboards', 12);
- insert into category (categoryId, name, parent_category_id) values (12003, 'Percussion', 12);
- insert into category (categoryId, name, parent_category_id) values (12004, 'Orchestral', 12);
-
-insert into category (categoryId, name) values (13, 'Sporting goods');
- insert into category (categoryId, name, parent_category_id) values (13001, 'Golf', 13);
- insert into category (categoryId, name, parent_category_id) values (13002, 'Fishing', 13);
- insert into category (categoryId, name, parent_category_id) values (13003, 'Tennis', 13);
-
-insert into category (categoryId, name) values (14, 'Toys');
- insert into category (categoryId, name, parent_category_id) values (14001, 'Remote control', 14);
- insert into category (categoryId, name, parent_category_id) values (14002, 'Cars and trucks', 14);
- insert into category (categoryId, name, parent_category_id) values (14003, 'Dolls', 14);
- insert into category (categoryId, name, parent_category_id) values (14004, 'Educational', 14);
-
-insert into category (categoryId, name) values (15, 'Video Games');
- insert into category (categoryId, name, parent_category_id) values (15001, 'PC', 15);
- insert into category (categoryId, name, parent_category_id) values (15002, 'Nintendo Wii', 15);
- insert into category (categoryId, name, parent_category_id) values (15003, 'Sony Playstation 3', 15);
- insert into category (categoryId, name, parent_category_id) values (15004, 'XBox 360', 15);
-
-insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (1, 'honestjoe', 0, 0, CURRENT_TIMESTAMP, 'Sydney, NSW, Australia');
-insert into user (userId, username, password, account_id) values (1, 'demo', 'demo', 1);
-
-insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (2, 'bob', 0, 0, CURRENT_TIMESTAMP, 'Brisbane, QLD, Australia');
-insert into user (userId, username, password, account_id) values (2, 'bob', 'bob', 2);
-
-insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (19264723, 1, 'Whistler''s Mother, original painting by James McNeill Whistler', '+Whistler''s Mother'+char(10)+'*Arrangement in Grey and Black*: The Artist''s Mother, famous under its colloquial name Whistler''s Mother, is an 1871 oil-on-canvas painting by American-born painter James McNeill Whistler. The painting is 56.81 x 63.94 inches (144.3 x 162.4 cm), displayed in a frame of Whistler''s own design, and is currently owned by the Musée d''Orsay in Paris.', 2, 5999999.00, 0, CURRENT_TIMESTAMP, 1, 0);
-insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (62748261, 1, 'Lost Tales Volume 1 by J.R.R. Tolkien', 'THE BOOK OF LOST TALES, I, stands at the beginning of the entire conception of Middle-earth and Valinor. Here is the whole, glorious history of Middle-earth that J.R.R. Tolkien brought to mythic and dramatic life with his classic fantasy novels of the Ring Cycle.', 3, 4.50, 0, CURRENT_TIMESTAMP, 1, 0);
-insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (71234567, 1, 'Nikon D80 Digital Camera', 'The D80 features a new 10.2 effective megapixel DX Format CCD image sensor, bringing a new level of high resolution and sharp detail to the class while also providing plenty of freedom to crop creatively and print impressive enlargements. Nikon''s DX Format sensor and Nikon F bayonet lens mount design assure unprecedented compatibility across the comprehensive assortment of AF Nikkor lenses and DX Nikkor lenses designed exclusively for Nikon digital SLR cameras.', 4001, 899, 0, CURRENT_TIMESTAMP, 1, 0);
-insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (73219532, 1, 'Pontiac Firebird Trans Am T-top', 'In good condition, this car has had some custom work done on it.', 5001, 199000, 0, CURRENT_TIMESTAMP, 1, 0);
-
-insert into auctionImage (imageId, auction_id, data) values (1, 19264723, '89504E470D0A1A0A0000000D49484452000000C8000000B7080300000060F2E1B80000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445956836B5874746423BCAA6764A4541A67636CAA5695B5653D8AC75D5A967E5B877F8D699ECC589BA9877BB9457D9B687865419767267A39C8E3A3532DAB578E8C996A88557AB8764885922CAA884E5BB87030203716D63F9E8B6504B466D6962CDA45B615D54D9CEB0B48A67DBC78D956A44413B3899958E9B724634291469655C513211956527FCE7A9764817ABA49AB8B4A8867B69F4CB888B6335A47B574437229B755621180FE7C27B845933F7DAA7171211DAB99527221835302B8B6445AD8348C39D75BDA56D302B27DAB369514732FEF9CB7B542759544C2B2722BB8C5255514BC4945AD3AD856239128A8479F2CE957B55339E6F38FEFCD5694624ECD5A8726A5BEDD6B4AF833B764B2365615A8B6027EAD79A928B77684219AB7B40C59C63FCFBE7EACCA4BC8D5B93621B0F0909BB9248B48C51CC9C63C5964BFBE19E645448C493533A2F1AB2AEA6C59B5CA37B416D695D4A402BCFB287B4946CC49D6BF7D48FFDEEC255442!
7AC7C4BBC9361F3DCB61910099D8766B38C5CB38451CC9B5BA27340C59562656155E3D9C5A37D62ADA9A2A37B4BBC946C7C4F185D594FC49B51B58D71CFC0A5CCB477B493627B786FEFE6A5BD9C6E865C41A99476BD9B61CC9D6BE8D38CFDF1B5CBB7966A6354776346C49E81956D51B17D448B836DDECFC48A6A52C38D57A3744BCBAC9030260D634A36BCA2852B1F0DF2D0A69F8258785A40AD8F67C8B06AA9A4908F5C25CB9B53724931EFE4B1E8CDB2B2AC9CAB8C6EB2855E9B927E6753397B715D555144EDE6C4D5AD918D755AC4956C594219634C44754410BEA25BB59C6BC08D49544D4EB9B49D523A21C9965CD3A1665C534566604C673A20584E38140C0FCA9651453C3D896F489F6D44F9EED99D6F2D877F8F7C75896D6A53746C79B07D53332C2DB49B616C502AD19D58824E21BA8550655E61AB754BA88F5CA87540905F35412D1F69676EBB865E5E5A43E1AF643C383E6E400F2E2F2A6F70630808092B2B2D0C0C0C101010231D1B906F3FBEBAAE303131A07052BE8E6552403048414D4B22051E1F1E55564555594DE0C09D755C50EBF67C9B000059A54944415478DA947D0D405475BAFE611860401CD44140C481B9CA0888BA32201032A068CC0CA032192124709D1052888FC4829071600D1DBD6A1AD49AE24DB2D034AB5D35D9D25259C592D0E5DE56B6841!
233C9908F75D5ACF6FFBCBFDF9901DBFAEFDEF7CC9C3973E683DF739EF7793!
F7EE7E80
813B6CE733C24DBB2658BA727BB61D9E2E1E13145B4FF98F2F87F3C8A85DB7FC17E47F7DFFDE977AF4D7863DEE9835BBDC367CF0E0F0AAA0D9FBD7BC78EC0B8B8DDBBE376C7ED78737720B67607CE6E9C8D175E5DBF7EED57DEDE6BBDBCB71E3CBDC5D1D171DEF6795BB73BCEAD3AB861DEBCEDA7B756797D75B06AF576AF83AB0F1E38F8E21BA74FCF3B3D6FDEE9D378DF3CDCEB2ACA1C0F39CF8BF2F49C327E8A876F94E74B51535EC2B2E5A1C71F7F61E5F4C7C7BF347DFABBE385A7BD77874FBE535D5D9D5396EF2C93796E993265FCF8F118FEF277FFC8ECE13FFFF93F6921FBF37F8A1BB4FDC73FFF71D273FBC7CFF1F8C92305D0531CE7CE1D3DD97BF3E4F5DEDE9347CF1DBD7AF2C10D1B566F98BB61F4E6D1BBDE4F714C9930E1FDF7E7FCF4D34F53F0D6146CCC99F274CA1C0CCD23E5FD091352764DD8B56BF491CD4746C3C68D1EBD79F2E4A3F81E7CDDE60DB0C978EA15EE153EFBEF383CBBE3E2E202777F10B77B08C7E940ED8103B387BCBC85B9291ECE516BC2606B56329BFEC2CB640F3FFC08378CF991FF7CC0FEFC9F8FFCF9E13F3FFCF033CFBC3CFDF197A64C719F12E5EBE9BBC5D5B92EC739A7AEA2AE2CC7D9D959764876C8D939C0795ED9860D39756565CECE8E8E4F83E9C741B387C7168F2D5BE61D3A346FDE3CF802764F90793C3D65CAD3F31C7138!
B6E0131B1CE74E98B07AF5DC37DE7074F4240E1D1D274C709CE0F1BBA727BC9F3267CEEF5E7BEDB5378076F3E60D9B374C1EFDE2FAF5B385C98E390EE90E9B563CB962935BD4FCF9F3A3C85E82AD7C41B497B1D08DECDD77DF7DE171BC88D1E0BE65CAA153F3B71C0A381570EAED804D9B56380504ACC3E3A64DEB3605B8060404DC0808983FDFD575BE6B80AB9B9BE77CCFA8299E51519EF3E1249EF4A7B03FE05451C0A9530187E6630FEDF5747575057EE79CB29C32E7436587E6391FDA7268DEA19C9C535B9C9DCB9CCBE6CDFBABDCF9100C47E2AF7F5D0DA73CE075A0E2ABD96BBD850DAECE39F1D13EC67207A715019BBEC09F3F15303F80D921FCAD43046DFE162C87020E61C0A74E6D3A255F01C3B857E4C5C7A7A7A7177738393965A7A73B39A5673BE13936F0485B2BD81327DA745871E6C94DF4B1534FAE600B1D3A0787F4F46C07D8A653F4859B3615ACC8CB5B41AF19D2D3E3E3F3F21CD25714C8E50E799B0A1C563864171717E37BF2707770C057E5ADC8F3F28AF73A7020F5E2D0412FE1447D806B4EF9D22B3E637C9E78E289D0D0D04CDC43B189A787E99119F6D076E813879F18E33366CCC68D1BC7F8C0D84EDB8B993E63323333E94DB68F8D19F3C418FA26FAEEC3F451DB6B6C7538131F09A54F7774748476848676300BEDC8EE604F845001A3C93C8C77!
F9E0BBF137376223D1676362E298C4449FCC4C9FE84C8D3014B7E495BADABA!
3A21E75C
AB6B4E5DDCC2850BBFFDE8231AE0460C74CC4676C387C7D0B8690F8DE630DBA24DDB6B3EE2887DD84EFA3856ECEDEC755A6DE45FE673D8670CB0307800884F1E3E4CC782BE634CE6133E99EC8BF02413DF8681D30BECEEE37365E3C619DCB2B0907DFBED421AF0C285590B179E7DF3404090A94828CB5FF74551C5DCE8EFA72DFCF6DB6F3FC29B181C801E33E6CA18FBF83EE228C78CA187191B377E34E3233CCCD8C8863A63069E32FBF65BFE25788FF8FC23767C3E6207801D8D31FC2810BA19573672A4EC9B7DF821F3E107D276087CF813FA8BDC683B71C647DFE29695B570DAF7A9AF06CA83E4C982636B6B7E6B5D59F2C2EF812F2BEB231AC5952B893E3E87A30FC34271D80E1F1E730507E630BE1547F1CAD22B57AE2CDD88750FBD01073634B40747901E7C7A0E0B3D3D0239674F0FF6C239E83BC861C84F0E1FEE0915D897E22BC78CC17AE3C62B890C0C0DFA0A01FC881FFD2C76CCE9B09365D1116187896F7C84C3FD6D167899F6FDC28B414379B506B950DFDA9A5CEF5C96A3591A2704065EB27C79B9FCCB2F2F7F7999D9F53B77AE5F0E0F3F3A39FCEF97D75F3FBAFE32E239621E82FBF5C947995DBF7CB9BCFCCBABE5E59672B3B92BBBA101028E2F379797973798CB1D4C06F3E5CB86BDD8DFD5B5F772D7F5BDD7F79299BABACCF858797CF62532600F0C0C140!
27BE8CE569AB8E8D4779626A65E599AB5E4934F3E7967E9D2A55045B44FE261A3201885504D6666E2951957962C5C382DFAE2EC8BF2F8BC22A13EE0ED8273D5151B26C7ADBF73C2D95196E2E14B367EFCF2E5FB7FFFD873648F3DF6D8EF7FFFFBC77ECBB61EFBE3737F7CEEB7CFD1AEFFA0E4F6B4E3DCD35BCBB6575599CDB5E5E6CB00116FAE3099AA4C55E6A37293B9EE44C586B20D5B37383ACE2D4B9179F87AC852F8E258E638D771EE76CA767726E35671A7AAA2A2AA62C39DB9658E8EF5734FECBA33F9CEE4A3938F5E0EF73EFAF7F0F5978F5EA6E3E65D853F741447A7BCB111E544DC3B4BE2761F1892D7AEC811E6AE7B7BEFB99CA31B28EF8E7EEDE93953E6FCD7949FFECB5692E0FEDF5846189EE2F65FFFF537AA54FEF0DAEF7EF7C68437DE98BB1D839A3B61FB89B2131B566F9FBB1DE9CB71FB8409F3E66279C3F18DD513B09AE7B87D5E190A92D3DBB7CF7B63DEDC0D1B46AF3EB8FA08D2F77AEFF55EEBC367AF67367BF76CA4EEBFCF9E8D1CFEF7D9E1E18DA88066AFC706B3A3DEEB8F7A1F3D7A70F569DC46AFF60EF78E8B9B3D7B481EE4502438BA3EB937BFBE62AEC7A8C5CB1F7A77D2BBEF4E9AF44724F66790DA617F7EE4CF8F3C62CBF1A2E1E9338F3CFCCC1F9F7BF78547294F6FF18CF288F238E4CC12394B67CEF3E8D9A143C881F3B744454D41D21!
EFFD21456BF79501AF5406EF7402AF7F098830798E36B5B263CFDF46B4F638!
56A85F6C
CF99DC76B13525E9BC08D1EE980ED7AE38DD1BB4623A7BF38FAC5D3DB8FBC5A265B1F377BFD90BCBC2B59A8CF2F28C84FAE720490F10FF9E614B9F26478CA15B910D990F2E329B60F09F1D0A15387D8C321ECDEC48C92DB0A4A7C0EC55087036D8946CF9E94F3444746DFF136AB20363D89A7C8AC487EF1F1C5C574A3C761B314436CB5C5C54877F179555579E6BC3C39AA1C543E393975A88190E31DB79C3E307A97DC33FC2218D954DC5524B4B67EF169AB7CB26CCEFEC58B1F5AEC4101EF897F324A6094CD787E43A07FC29E42D82EFB9B587E23EBC066077BC67674883B11BF6837CF19A19962B21823260CE4B8CC4CEC159F903DC177B0ED508125EB50A123D4A943481D2A9B5B250BBF18543BB429FB4C91E0DAFAC5B92FAA37A4CC19B5D8FDA1F1A39C911737B258CDD3E218CA2657688DD51584C88F107C6760F9E80AA234A227E5129E405908F5197325F1CA18D1368A8F14B9C78899447CE50A520F7DD1158AA5B4CCA090FA114B49333ECAA2983BE3DB8F449BC1C2F218CA8B5452B02F98967AFAD4DC3B73670F0D1D085A91FD361871FD22799DBC2CC563FFE2F1FBDD178745EF68AC0D2FF70ABF1CEE653E7A94CACB3B2760F5BB5067A7EC826D184DEBD173B16334D68E8E5030EAD50A39621582D5F60A04968A9CBA737253757E757275757E7D7DD9DCB2B9DBB7!
6FDF505156B69D95E4938F561D3D1AEEE58DBF128E90B41EA246004675DEB3A367C78ED41DD1587A52A31397BEB3343A31118706C96BC6D219388000C773FA342F537EFD1DD9ECDAA003C5C9D99FCA85D62FBEF874DD9DB2145F0019E53E7EF1AE09E8163C9F7E3A8596D79EFEDDEFA03AD8D3AF91E4DE40D3F0C61B4C71A35763397264EDFAB5070E1C089F7D00C12508F75ABE34CE6EC40D71C6CBEBAB2AEFB507F146EF232FBEF8221EB178A3C93A72F008DD8F6C5EFDE2EAD1EC156CB22F3F3D7AF4E9D1DB776DA7CE64FBE87964380E6515751BCACACAB6DED970A7EACE86F01DEF58CC45F5775A0F00487641C3A7C9E45A9F9EABAE97CD798831B2FFB949A377EF7AEDB539BF9B83F8CAA3ED7FF3D583F65B2CFFFD1FC825BE7328F6A4A43C3D61CB842D147771A30D4799634ACAF89F589B3665CA9C9FE6A4A450FF043BB10BBDD6EACD47366FF6C682E8BB7EFD1104DEF5A0C69B0EC807AC757A15CB8EB81D3B76BC4ABB3E78F5D5573FD8FD2A42F3ABA06EC78694A0A0F873B23BCEDEC826F10ED905A4914FCF1454CC0590FD8B478D5FBCFCB949CFFDE76F7FFB47BA61356CFFF15B1A3D862FA695E553C64FE13D92275AA82D6408BA8E689610800FA1377576441CF6941D9ACF5AA72D4F4FA135822D026D4A0A85D80908B51328E292E18594F73D00577C32873593!
CBC7FFF4D3F847F73FF628D9BBEF221D3F3AFEA7F13FEDF2DEBED8AB31AF48!
66CEF72A
0EF232E7599EAC83463E2D483E512FF3786894FBFEF18BF74F9AF4D0335B3E9F9198B8143541260A652C8246ACAA0594CD8246A3C9BC92A8D144472746631BFE9C1A1DFDA6060FA9D1AF68A253133F4F4CC49E546CC1DBA377E01D1AACB0D60CC509713D71FC3BF0C9A54B53D9A7F1AEC0C09E2194297881DF87822C8220A05CC13E6168E8E2ECDA211C7A78B1D7575FCDDE3E21674D78505E80CC2BE7686DAD9721DEF8C55F05D98D4F3F2D28724C791F7964D4E2FDC4C8F4973F680A0EBE160CBB9670ED9A42DBA988E855A8150ADCAF29D8034CABD5E295CE04BD5EA173D125E95A94A2B5B424295B925AECA66B7111AD9B2D2E2AAB0A4F7449E775BA55A27DC86CD5C8A7AF63F9906F61F39BF75E7FFDBDF7DE7BFD9D1DAFBC79D1D931276C7D507C806B55595571B997BC5C80D85D5D9FFCB4A0DE51E6FBD0E2C570AEE593A63F377DFA81DEF6F6F67BEDF7A4520CC945A773E9F657A95419DD1918818ACCC52529A94529954A2512B55AEAE7F79D9F3FECEB909090EE10DAF88E9EFA63FD9D1F5E1C3B769B688B16CD5AB468D1B645DBB6CDFADF6D0FD8D86D63616C35F62F7E63BFC337FA616BEC587C81F8E5DDDD5FDF53CC9CBA6DED21591D80C0B5AA72AA2C8D5EA662235CCBD5F5ED270DADB214DF87D60008B916807CA09690B54B08098EB14EA5D20182CEEA8207B!
AE1F8B70086B45DDDABEE958694F89594E06F014746085949087B02F3FFDADFDFCF6F2C8D7378C8DC668DDD767C1B1BF977808A01D3988FD3B0D3E8CBFCFDB87DE757E247A008CEB696D23FCD9CFAE2264FB9FBE4C678B97355455590A536AFDC78264770BDF1E419871C990712E278E0580E8D4C5FC980B44BEE492452A512379DCA25E9479DCB8F56971F9392408632A919BBA512697BAF5AD12BC9F02F29E1E30EA9C90014C24448FCBBD978BEF663C7F9C1C38FF571A0602F310863C581FBD388F11852C21EFCFD4B68EF5FFCFCFFE2EFFF9716C95B33A7AE0DF094876D088A4F6E35D555D5D6D65E8E0F753008CE37DE3E73065AF77DE825F7518B173320D32FAA25EDEA76E9BD7670A294B628935C5CE0F9492D706C1082ADE624006C012924977615065DF2D9673B3F0BD95953B3B3E4B31262E8B39D256925696C6C6339101AFCAC6D8C04B6CD3DC96FA4F9DB6E7E3836FE251C09DFF117DA0290E7A71E0B70AB0B9B0B20AED773AA1AC36BCBCB8D2B920567682439DFD1171A715FBC78145CEB5D06440210ED0404060456064447D2C083AEB919AA3EDFACBC0B8D0008A850F6F6F62A98A9B5BD0AB6D9DBDB8E1B94460B7885934A43381046909D8C613A4A00807B1588F067DBB092AFFDBEF607B17E7F69290590B501BE150464AFCC54B735A83CDC7C55484F46D47!
AF2EDA27C99C74F2B171323147E5F5879917030634094248B9616523D1C0BA!
C2401C80
5E585E6F3D25209460E2025ED2EFFFB17D8D7B4FA5FB2FFF99FFF610F7C93DB22894A8461B7612A6C479F20B007711961635BD48C117779547D509E5C76A7A2AAB1DC2B7EC8188FA875A3E0C975D5AD1EEEDCB57ECFC47EB15D092814BAA40C880B0F53E45C49A476A54EA96CBEA05CA0949482110212D2BEEDA9B766CE9C396E1CEE33673E8FCD99CFC3663EFFD453B8FDE6374FFD86D6CA9A6D634778DAD891AEE52FBA561A16E656F0AE92120E8562C9D778D545F1D6F3E3D69E7297BB5507AD2892A1A7B4C47BD51A350E147E3FFDF4ED1C34B8702DC4ADE5CF3C474058604500A6B085C0054692A00DDCA0155D12D44E22B98037B513232E0022F9FAF971643347D8F3B4C09E22FBCD6FFE06202A1B906D0F309286C5C64A1AC64DF1C2AFC49FE32861B18405B216ADC8C88D9C460031E56CBD448C087972E10680ACAB96C9C8B516A34B7C66D2A4E92F5C6444DC9348296A2939102673889EBC8B5C0B7C2C90422304C43FA4044066721420E60F7F98F9070E854010231CC76F94D66D22215CE83620ECD0DBDC2B64581C25885D14CD2990877C1DE2E772731C18A98B92BB9EA8958391B2AA4BC55FD51A87D2F304B71B9F3EB9C994C2811023939E9B34FD15268D7BCCAD08084BC474835080A44589E8BB40BA0040DBD5C38CBC358E50906FBDF5D65B1CD6F3CFFFE9A93F!
3DF5D41F8003409E02101E6945ADFBD9C49E56220638F6C45F44C580004509638432928BF6D8CC99C79CA3AA02728AE5724F53595550A3B9D6223831209F6E3221214E5F339EC2EF9F01642507A264C106A9AF8534C20D30C8800E6C49188EDB6A1D80A88911722D4231F3AD716F89EEF50766BF2103315230E26753C90824240C9B54281FFA95D84330C321BA96BF2A61D9CC712FCE8B32B50248B2A7497E34A831BCBCD8A9410E20679ECC2F7294FD841265144A943F4F7F6ED20BAFB42BED8C50B9E4D28DAA44C73C8CC1A1C28AF23A03A2502465D484B47F3D932B64DCB23DB065CB961DC30D36F5D8A265536D4094C340B6B15C2EA6426804D2B025909212AE177F0E81FC8B548300ACD22F9B3AF5585D94C9B5AED854E07A34EF68A0A5F672B9537C3CA2D69933EBEAEB5310B516030A732D004962381823481C2E2C6CD19AF19144FB281E00079068936A5435BD702D781312EFF1597BF6CC9AB5873D1C3F7E7CD6F190EF66914608C902EBD8918CF871B5D3BD24CDDFAE8B10A28255582525ACD4610AFA9A18D1EF993A151AA908A82BAE90CB8EE6790941976B8DC50D0E00B2E2CC991C6284B4CE5DEB8557A42DA2DA6D8C70C75291D259BD98C40A1435AF835B6A426A1462D47AEBD8F1B49D213B8F97D4A876D6586BC6A67DBC13A518C8F8DBDF0006AE856C300285!
2D27A6A5A5F15C8E353EC034C2F9B0030161212E09CB1890B2FC9C5A79C17C!
AFA23B3D
81B5431AA7F83C62E4C9E46A99A7EF4351E347AD81D8DF9DC41951B2C825A5E49104D722182A5126903BF91655BE2C972B6B326A7ABB9944C68D3B96F699B526C4AF645B8D2AA3A6662C021A0E3917FB6FFE26D58DB5552C7EB61A8B1ED3A852C480D3A00ED43A3B1929252C5CED0CC9F0E7410D0FE45AFFB3B628AABAA82228AF607E5E8EB927A83628CEE8E020CCBFB1F74903C4EEBED29D89FD610099FEB1A445C4718F5C2BC925A3DB2E76CA25494C23A242149D2D00A2E87E1E1227209FEDFCB866E7D8123F545D288659D1E1477E05247F9310103F5BE41D2BA262A12A8D460B624276EE4C5BB46C5B491A6303E486705494F04354FA45E3A6AE2D0A3B915C468C1C9597075E6A1CD258107EE743235D47651EEEA3DC911017FFFEE1497F9CF4C29BC8EC528A5C121108274325424176A42ADE0E444A1AE97E7EDC4C11C84E84533FC8532CBF21ECA7B8487E23D16D63CFFDEC48388E340EC42FEDB392CF8EA71DDFB6ECD89EB11C081C8D6452C2D3BC0B340246DCF38BCA6AF30CAE7979B59782E05AC5C8ECF36F749DE99AEC28731F15361E40F63F3C09AEF51E80B44B2562D4D2B9A88810ABCB08A3F82B5533D7EABDAD54D5D4A8996B4D05903DCBF6CCDA767C166F3CA889422BC56B14680440ECE2E0C177ACBDDAFD2CE4E38F672D1B77ECD89E3DC7F71C5B96B6F3B!
31AC865A75D2640E6A21F3B75D9DABAB0FA1C06C49C178FA618564CB556838379B24CB678947BD8E2C5EEBF7F8480AC42F845F52121D7A21E5195319C47380E16B40807FA60ADB4BB46A51635F2D6B1597B58009E85080C088B8068D12C5E694123147EFDFC6C40781249E36DC7CE8F9B4BEF1E5FF6228E0508D9732C6DE7CE1A722CA0A107E218AEF5DDB1FFD9B329ACDED9B1D1C120F392E76900C3A2F182D803E20D5D771C53168F0A0B5B1C06207F244648EAC8128C111D4F232C8588FD37DC8DB587BC75D74A55191CC8D47153671E3B8EE03B6BDB67DFD99A414A1933FFF614D30867843361CBEA884E4448C8C7172222224A41C91BC70065CFB2B11F436B805153033C35C44948864AFFD9D4457BE46165BE1382E2F39CCD79759AA120A1311AD5AF6C5D3680C83CC78F725F1C66630440DA79A72B5552C9DB8DA8A52304ACE272E15A0723E2240418E1AE3575EAB899C7E0E47EC7D3FC43BE13DBC2458B962D630AB103B19529363AA8F508C95875174022561D3BF616BC0B40667DFCB14A458C30630D740803B2765398B36F4A509E83CC2C77061063ADA616AEB5A9A1C174C251062064BF7FE4B96700E49ED2D655C1B39254DD6CDE0319A425C92E1029698480DC062304844B64E6B859B3A815476C2275CC221C4C231C48F336B191E2524FE38CF8A761BCAB5EF95!
07DF7C30BB38E8D23EF8273A69DB7AAC8B918109A0CC8A82120CBE05A8E6E2!
9C5790EA
E5526D38EA1DA38CD50719130DFD5C1E1FA9D7AD9E235BEEE58F63FFCEE33D35F789D55F1E846949C918C6EABCE85267D684EC545A7B4455F42D2A9ED94A8541F2BBE1EF71670A038456902752C5B347519167084DBB8E7593A44ADC5808CF5B3E50FDB140980EC5C7531FC1F1FAE3AFF0D54B2ECAD1797CD5A36EBBCD50A4AE05100B21348325400326ED11EC64831C47EC760DE11D8B8432314A3430C70E83299EA65CB47B9B9FBBAF9FE1E40263D7E01EAA0FEF01E4D5661F02135D6241DEBD65B5809CC6AC6762E76AD08A49BE743EA40785F45C52F95F0F61A9E03B1CD8E8C1D9E6E28F1A3698BF75E39E07DFCEE85F7D296BD786C1C53898A5112C2BD8B114240A6AE3D1596E3FB7471DE8A1B274CA6389AF5D380115940B679EF9D13885A6EBEBE9EC4C81F5F7EFC7526F5F6760A4E54FC8658939A75E4582D62854253281211482780D4EC54A89863F17E64B81779CA06840CE137699BBD45B7052DCA984883AA55AF7F7E60D7F1BBEFAD9AB5ECD88B8CD7101B9010824140BA6301E4C54DEE65514F17CB0B5CAB4DA6C0B8C0B8DAA17483E0E15A1E6FAA208DF8FABA797AEC7F843142057ABB5AC2A22C58806735B3D9134041CF4EF308AC6624897426243020DDC3A5FBCC61287F607DD5534F711C7F9328B7F93D6869AC194102AF59F5FADDF7BC47BFFAE1F9B4637B!
5E3CF622C2F7CE6F542A3E51468E155293A1AA894D1B37F5D8A6B0324F596D72416B91C11C3414A7A935667B099EAD0DE6E43B48886BDC7CDD5A6570AD492F3FFE2C7996BA9775EC4A90510320E0A185DDF9ECA8C8080849E86C57D5402354FB3228CFFFC18663A6ADCFE5B5D69FFEB640B9CDEE51BCBFA546248D798F6EF63FEE5E5C3DFAD50BEF211D521FB0A7E6FCC72A71BE8C42162402D79A39F5D8DBD088ACDC24773D67300C5D8CDB6111E2AB0437D7F8AE8A0A47C7F1A33CDDDDEA65FB99469EE5F5070141B3DBACB3EA9218105A92D03052EDDBCEF20811A25513906EF22AAE1370F3A07F3DFF3C2BB5189034BF92EF462049437DC508517DB3F9831DBB0F8E3EF28F0BAB961D5BFBCDF165B354DFC0B54A868140F40032F3C50077675FCFC68282563980C4C569CA8DD955C2FC000703809046C6BBC9DE67510B40A0905EB55ACA674D9BAD560644C94951523A14631611A265AE657DEBAD1759AD05EE8F3138B03FFCE14FE80FC9BBFEF49B3FC1162C184B2595389945356F5A08852C98F595ED1FECF0AE0AF75EFF8FF7661DDBB3F3B3E37BB67DFC0D5CABC436114B2289FDEC4FCF9FDEE4EEE826B3C8935D0B0C154340922788404C398E1EE3117EDD64BEA491175E7A96A22F80B0A4A804105D339B034E5226B1A9767816698824024208488D5A1BA1A0CC5CAA!
2E9594962E582059B04079E1876FBE39FF8DF51BEB79EBF91FAC3F58BFF946!
21F98EF2
F858D6CAA689456F1AD5B83BCF7FB0352EEEA89797F79159AF22F4C2F64024351C4306EBDD3390D9177CF7D9F14D51CE6EB22FE59FBA269B4CB385B8A172E3D53CC11340AE9F90B98191C5EEADBE8F01C8F497EE92D87BD54AB59A015152E4E5270C68F65A2996BE3C66257492D8553AD4CB08751256694AD823DFA66E929AFCE6A46672529A4E15CB12AA7659EBB4330365D537AFBCB223307CBD97B7F76C02729C6A4FE476042BEA06A868A4B825C11F5C80841825BB6AD84440868676084663B99CF2C81900F108438912251B06020C0A5D3307D2E2A253B1D994A4165592B2459C79E09516F26182C4AAFA18CB37D61F7556172BB298954E3DD4A8AC743CFDC78AB3D2B6D6636C096BD259E3C4D940BADBA952ADBAF0CA8EF0F0F507D7BFFAC1DA638B66A5BDBEF31F1F53FEC8E0D3416C8D44BF33E3E2A628574F6864856BB5E14E5060DC905168900B9E5F38745D3FE1E1B9780D3A12DFF1DCB5EEB279464844CD7C8BE6801810658B1FCD69B3E02B329290A06F97E8307632DD0F569DF51B6C138C1A9603481268926C53D97EDFA5B186D08F4F2BECA435468B68615D657DF69DC0F070AF8BAF7EB0FED8A2E3C7577D58F20DE22F9AB60C3271B21F45E42B8C118BFCC9D6645345D0D00E8DB1078CB8053838984EA08C5F130520EE003269E54B67C1487BBB629B4ACD4F9!
120174A552ECCC9880FDEB02B6C40B4D21F388CF358AC0C938A0DA0863B379B16B10119CB4E79F8B1E69C81D9491E534314AE5AF0A666BDD7EC570ECC9A3575D1F145C7C7CEAAC111A2EF517120241374BE699BC25C3D658DC945ADF2EAEADA40CDD055A181C26F7A83215FE6418C84B9873DF6F0F449D3A7102338E2D22411088A2CA9BF4ACA4F96B0742811271E12605A29864E20E8649AD52AB20328EC6409861C5232A24E14B3B9BFBF38D90309D3591515F3AD8BAFEE7EE5D503B3F68CDBB367D1F159CB6A92446EBB6D9464C0118F3F090D00C8A6D6E46A53505C7460B660313320A6FC566AAC50FF2EDEFFC84308BF77DB2928C178F8A51CD8A253B269C7162A24956C6E8E475F3D32BB959B4EA75B65678446C0442A4E80FA8DECA5FCD814B51F9B5F60473C4465FDF19B0B1FBFF2DE7B00B26C192544142935497464F055DDEC909470A910103759A3BC8080046AA23516C1A916E1D7C99C5C2DF36540C2DC1F7DF88549107B293C4BAD001F4CEDAC4C645C28D9E48A72B8AB02219D3AE937183BEE2EF073AB0803CE9251C3E6D6D8C45B89BFDFC8592C3B9012727BE2AE46F5834E7761C185F756BDB2F6C565E31621008FFDCE8A38A7B3F2D3977CE234E4B39090E36FBBB97A3A7EB9178C5454D3E9614B68B9191DE29906430E0702D7FAFDC32F3CB3F2A5D2763A5!
BA02056105159164C6248A4366B6F17832F4C21D17142AC5616B458D422D72!
68D96703
A58DCB217276CD62A248401C9E0B011E3503E9CFFE6E38FFFB1E7C565533F0B51470E0E2648080973AD6EDBC9BD12FFE39B0044F6651E34B2B73A4E83D64A538C84F87657BCE10407829EFDD187E15A53CEB633CFA1AE9C4E912875492A9554F96392C8C6C82C92A04D5033203ABAE9AC3A1B2724602E921036F1365CF3FAF153067C721A54F0D0A0B222D39C3F8EE6126EB5C75AA31D1C1C8C552829F7108E10BBF91F2F726B85D80D9B5AF79A0024CE1298E85425786E6A70D82BBA165ADDFD8F80912967D50C891A40D45470A9FCFD5A5A7EFC91F220533AE5758A5A9D14B31290EF9840CEEBAC36E31A11D54E48FC1E38C346D1D7961F6A443D8191E6E60B48E7633F9BB5CD2FC3453F180B246A65334722B2411F416667400A5CE5A63B9AE8A12121BAD84B707D3BBBCBC6481831321D4022D44CECED6CA60409BADB452A6951FEC8F4D1A2646713A4A829D11D6A13F47AAD244947B1D78EC31E80336A441C3F03C24FDDECA4584A40288F008855A9BC609DF5F1CDD21ABF906E250819BCDF94C06A56AE113EBBD51D92F66994B34CF6A54381F35E0089130463345CCBB5E8AA83A1DE0EE4F79C113A15AA56485849C5FDA985A68279134FDDBA54AA504B140AA534419AA05723B8E8ACE7CF5BAD762C3AEEF8E2D41A5349892DEE8A40326AF8C2F98087599B9592B1D6C8FB!
CAE66D19FEED0424363656D29CC44379088FE4C4481131526E4E6E3524DF090CD468CA338B0D82AC20DBC17C429612C6813CF6F0CA97A74F890010A54421492217A200AC744902A0967BACF24249A5E635BC42AA1E946AF512028244C281E89850B8E7D7D866A0C532C576464DCCD219193C66A9080E2A6C494648E460677388BFCA5F31C890442A58E0A2BCC8CE5A1192E37551AEF33DCB0D72CAEC814371D1826041AD657070309B5A53C2E8A4EE1A778A5A103B97B352C2C256BB145A6F414A6CE194F06B2228B777EA13145089BA99015945BC503261BAE72AC9105D8B052E7F712A9A15E619ACF4A8A9E1314EC508D185E823D54ADD77AA906EFDE020C256EC60ACB4B93989123CABE5BF26D11F3FE51930DFE34B43DEBA64136A2D8DC628184D82B3A1CBC17087158D2B01E4B1871F2746F82C22CD2FB013BB2E192ED290B1CDEC24550B2B73A52D1250A3A5323E011E46A990542222B1B2E84F03B49F1360912BA4C496CF33481D901043A0B27956887E30C1EA1252A25225314206236323D5507B1267C49FE7F6B422CF0099DB975D862203AA5F34ED9668631E5C0B404C322A1A1F128140ECBC246C674530C69DC4B208BBAE434A9E2555B7E8D4CA24C4AD04BD0240887D74F5CDE7752E3AD1444678ACF163E36715169DB2E5F55506AB2B33C4372268E942D483B112!
A595204B8990C8FB83F707152C6E596B28707D1DD20D20C7EBE6E7CB7CBFCC!
33E49B92
4D41468D70553324171CE57B1BC0088A46CEC8330C08C55D88BD852512DE6228D965366C4AB89D9E21274AB4C8220ABD42D2CCC6DEACFB810111BD8B0E35AF90180FFC641A3BBFC926A928CF10673C54ABAC3F841CF31F8CBC2969AE811B86F446DEC742BE45710BBE65E5A984B956DD8D00003124E71B2A0C419734966C02526FB87AD594DC2A5B438C84898C5C53E3A02BD42CFAD2ACBC52D2425264D7755028A3FA1E40A84841F46D514B81E287F3CDE4CD76467832E11538EB3DD835007EACABA861F983BB15D308C58845631591916A14A07E7E192AE6570C8A9E620DE5F7EE8CAFFDFDE92AAAE339F35B01C454946F3A670A12E22C1661284F702E307E6992B7CA461123C340588D0227C22A091257F92749432010CAED2D52356121A4A56A855E9FD0AE55323E74C34058DCAAE149519C9AE29198C75D962A993F89E18DE2F536EBE0FD48A9B544E7E717D212C31889A1C0554AB30674CD58065C8BAE393A5EE7DAEAEADB283F579F9C9F2C040EA1642C0690BD168B596424CC06A4903C4A41133EC82549ED12153262BBCA45D2CE2A60A90A725192F741EBFA043D5C8F7C0BAEDCFC20210C4B8D588197F0333F7C3684CD1A7242AC7CC3AAF3D342150A3C858EA43183913131241294290404D90472E7674401C45936BED15094232F9243233D1DD9C55F09AE864BB51C8!
8EF4AF7C5EECF7146502F22E32975A8B7A4D874D12541167028EB6740D7BB284401D743424489A28ED007AB2549F84BE459493F03C21B3C9E94C52B664A78E45589D2E048ACD61FACD0F7FD48B555E5F275924A1D13138985A9248125AF662B87886F389E23739EFF53A33CF95CF23A431018E9281EAA129C93AF965F97B7BA829195EE61E319235B0AA96254F4AAD55ACA7CED126A462875F0C9857B2E4A2621B516158A42A1BFAF6F272034BD90D43C1209F31BB1B9E3E7CE9846E0559C10FE067603A10920245219A272B1B624915B45DE8F21DF8ABD59CA80501CECF667516BDE7C67D94FB579E78A8AF2E5E45A82D1F815C46E293799444658F89DBE061A81D720B86AE9020DD4556C825489FC685D40C8D494F5593F024EB0D2B7131BCDE400CD761CA2906DF91B7EC54E68B21E5DC57B5BDE4BB274A86B56C6C60CC60C365B95AA966E35E303CF4149EC4D85522A15816474237E1CCFF17496F9D6E615E58313E1529060B4801102626040DCC9B51E7BF9F1E7C0888235B22479AD82CFA420BD83147F2BBB1A3309C992C3401ED1AB29B537332C48CE3A22C6DEBA838E6ED6CA96883D49897F062FAE9830546274B3FED0A2A0BC11AB54E95C923262C9B3EEC73028B1098A05F8FBEC2BBBC165774DDAA9F965AE60A4A83E39B94830060A0DC5025CCBC1584E518B31820!
EF1E5F1D3574E492026E8DEACA50D127812055D66782E55ABDAF1CA6D94BEF!
AD804758
23A8949A45949C98B90F0BE849CA6BB5B95C16B767E655F892D99D7A87EFCF147AB08E4BC4EAD8FA148250DB12A93BA317EA287800CEAB50A56ED41252E2C9EABD24EB9E6388F0FCF43CC4A5E17680CB234141BBD049983803AB2DE936BC477FFCB8F4F5AB92558CD295148B45A0572075DC0284DD2216AA99949D5BAF64E85E2260A944E6DAC3E58C1A6DF940C08E0342B936CEE45FDB68A1589E20526FE34FB63E5A9E347AB5894597F50321C31284892925AD491DCB5C80613B4143E592E01926E7CE567A73CEB5DC707E59DAB4E96AF331A838C4ED99603428EC1586EDE9B2F5BB35804B2FCE5951EC1284FDAB5DC6ED3E9053A243AB85608C7C1A4AEE8D5EAA9418C8DD52B1802EAE99B955CF53A1B14FC6948A484E77756308A8C90EFFD28A6CD1FD4FA4136F058854A29EDA44D92089112C97C42C255E2A20229D69D459E9EAD3F21D6562717E40F7538598CF1C67868E44BB3C10446C21890475F5E8EEA574F575B43025A6A67A93EA47A970A483F0200BD5319D62955EB298DC0D40C01BF105B0C5FB6828BB5EE35AC022EE1A7FD436C45226FF009903A961FFFC8D8053F48B4781C20BF62F7FB9D08391C48920E40BA5D7ECC3835DF97C46E5A977C0E1A09321A1D3AE29147AE9A4D5D5CECE3C37C1F7BF9D197A76F49E0D78B6A09C86DA5BFA4191D2E3BA948AD2F80!
48D01D6A3BB552F4EC5A3DBA1F70A614F9E0A434DB2AC71A2A73C56B494A32F80571353B55E45DFC06DF6A56C40E324FC25A2DD18AA0C8A0F741AD9666414420743DBA0B807838BA075599107F8B842144AD74A772C139AF3CDE64AAF758B326ECA1307702F2CC74E411FAB882F3A2EC96B00E914FA3D2892C244317A5A2B393D5F0B1E45A0B943624E46476242A31198694F0061D50FC50FBF2591616D7A866C6D00763B82618A061208445CBC681F88FA8C8AF56D85934DF138C542517AD2BCA178420A325DD295EC8C9AB35EF35B4BA31D77247F87DE899955BB4ED0AF1A27EF2D0766A0AF98975099F5E51A8553A7527CDCFE915DA586D21F2FF0534DC0C0A4B28493AD6D7519D25CEAA85F0B9383AEF54A3E2D58BD505D9432949888D8C14D3464CE40320C8F41C08028E54C9280190BAF9BECEBE074CC945F9F9F942B470C9E8906D16EAF3AE96A343F4080B0B031088FDD167561E2220D0BB1438B4BDED52159DB8A2F97764907676264B51A3D46A3B69C61440904BA45C203C66914292C469A11AF142125E3266D08C678D9842AC3A9A90D1C60E521A17E51D33F82021F751A130206A76B5ABD20E8418290838D1DADAE3730940E2F38432438325BE2BDF978044B9FB3EF7F2E3CF4C3F44E1173A50334AD474F196A4DD652755904A52BACB0F6A255E437D8284481AA1!
E60730A4CDEC51C9A4CE53448DAD60E417608510901AD245420295A4D4D00E!
875A716B
2492483D07C2A64094747165B775A77CBE87CC3DDC50D45A9FDF8A7E5DB01023399B56A41B4C8E6E00F290BBBBE76393964F5A79484FE1973E2FA1AB7FA4AC3B6CA949AA41C9AB432A41215FCA80B09015AB8F555F48B22B44C9DB079AFB60B5480697093F1DC24A7895DFD845DF29B42AE98821DBA4F1A06BDD874412880F3E99AEE4224993CFF775FDC9CB941F509F9F6F34A2637748AF021087F4BDD5F5BE61885A51EE3C8F1CA23C42690F318458A5F92009F2618654AA430AA1634FE779B40C879EBA4406A0599C1D86E9B85FD99B763EE71E92B113DB35218B8E4D5D366BD1225D1B1BED405BCCAF5B2C01E9558840942E56628434E21E2E2F6ACD87D83BAE0A1D0DD9D4585D6D38B3B7DE77315CCBD706A409403A51FF3256253FB2EB02939AD12BB42C4253A268CFA0F9150684E6E7E80C892D912C504A16B024AC13E7E8C4E9449ABE55599B17007F82E2F8AC0FD2DE3CBFD34FCD70F011131A51EAFC61806DED2BBC799B53C25C2B892E7E0B39E5EA26F3F59217B4169DCBD708419A8E867402E2D470665D354A9430BAF6E12106E41AAFB4288F3046E87C08B0D448918F5AF0AD2D74F906B916D880DCF5B7A54AFB74BD44D408ABE45994A2F91130888CC3F41099B0F3D5B4B8B47FEC5934B6BB77206660C08663D8CB806200BB10CD620B6FB33188AE4522B1EE3C3!
5DFD31940025A7300A44308BDEA0046725638749D59774246E117401E9D8E5A0BAE059742C62320ED3479022F6BFF7ADB370B1001248AA4A476A91A799ECEF28010A95EDFD94E6448C107821B51636F49E82CA922413FC8448D862FA65331F8E107AFBEFAC1AC65CBB66D0BD1F77342DA606CA35254C90041C1479A0A6F924CD5FCEA7662A45BB5B3CED5CDD1CD4BFE452B1A924C8DA0716A70920B39671C1AF6B6B67A88401E9ABE7CFACA53C1D48524507CD52A7A7BD1AAF7227F246D2B61173649593BA2C471EA4CE05AD7774A201B96DDE15A5CEC7CE63449DD198BBE8F6A72169106DADAFFE272FCE37F7C30EB833DB3A6EED1B70D60C4FD0423B7ADADB2B2BF52743472ACB64A345A4D099C11FE8FA4D85556AA9D702D570FAFA2D6D6FCEA6A8D8FD0D3E1E094276C3873E64C57800CE11740A011911175CB2A04A7845EFAE72CD21F2512F423EDDD4AC2D74EF35BCA16E443899662AFBE534F40864F9DF08CC2E68714B1312CD751A981BB42E9123276D9FF94CC3AF6C1ACE3B396BD7573A072A0AD6DA0BFBF9F708085B6CA61183131FBF0E95814BFC3626FA194A8AA39E52C73F488AF43CCAAAE88D618351DE9D972E18EE98C43D70D37008902239ECBA7EF87460AAF69EF49A5DDD64EA9E2B6A257F223AAC65E690B886027E3D8DCB6B6532A49008EC14EB860025C6!
B810437A9941C8C750FA85212C8E3599263D587BE45E5FF976DDB3242B61D5!
BB46DD9B
2B742722B898B0132E6591C466525574C645353CCFDE04E5663A8C5ABF9D835E13BEB0264AE1E07922BF28BAA4DD11A21DAC901AE7527AFA1E18C9B2780F842EC6EFBA73F0AD72A542728FC69F6AAFD96B6F7B6F2473A512271A1E21D72699752360442052AF8D858123CD5F1ECCA271B2154A9E8D476F532286DB7B72529AD21DDDDFEFE8B76AEDAB66DAAAA327740C4418FC3D9A4520C5E2033F8B6626442D48191EE8FEB021C651EB572537272F59D68419389A2D124783B3434801124C4A8516E6E9E8F4E7F74D29A79D750114A3A6F75AA3B3B7B7BEF6528C426444DB3F04A29BE96CE8D50E17B132D09748C1A85CD4696121428FE02758ACAC898B6FBC32E8F91DD8A6CBBDD2BE9855FC60EEA23F552053BF49075DB805DEDCCA96C418BDA2A1E39D93F5BE3C5966AA7DCD5D1D5A3512E3719AAF7A66A041FC1A1C3245415671BBB6EDC700B73775BE31605200F4D5F332FE22E34DD79BB5D7BBBB757716F1BDADCDE76EAAF68D6974EF22869D637813C4B1F4B73827A74A3702C76E5868414DFFC43B34E3F22AC0ED887D88F3835D04FE38CE9A7683522F98D78425199182189B0CE8A74C9FA6817176BC6A65667C7945A7951B221DF909A89B231BBE3A870B0DC2274B9324616BB45B93D8A7E64CDBC0F91246EDF6EEFEDEC6D57F4B684B4487B2179CA053CCD53E5A84D!
E84C806B0DC6EAF570310521908897A028418AF20745E588AE6238573047B2016BEB7F10490C511343B2A7B720ED0C6AB5BCFA65618B4D38A2684C0E70764D6994D7559BF24DD18942748FB1C32CACBE1C78C92C232060C40D79E4D1E9A30EDD55D2DC82FAD63D974E756F2F54DEAB56B4E8C8C1927452059DADA213D39DA003AEA51F041689084302A5138E05D2C8814A1A53DB483E08473F43C209686B1B1881A48D499FF9187B4F53252A14ADCDB7182508852D2E1905F96587522EC98BAA0D15044473D8186A12B6160348ABAF5B58541480782E1FB59F5C0B72D6696F2BDA5D90187B291DF6F2EBD0DA754A691236B4EC9A07643AE520124542AC56B24022190603E50FE652D6E0428E612ECFC63A30C0731D7BEC6F6329C4469058783134CCB72A4923FA4EC24294B04495D462556D5A57E69A1264AA4B3618BA12333B841E63A641A8680C02104F59541463643C03A255B7BBB0939D8ADBBD5408B3AA5E4DD75F239FD009207043E7D7D9B47F67E4A01E40A4507A29FF37BEA024A18D8DDA1692F89116632D7B0431904B3FDB63A78CE5C536111C01894DA0CBA88814358B8868785B74AB8A02729C3D83AA92E5D7F30C00A2F131F6E4095B2D8197C2AB5B5B39236ECB1793D83BD5DAA41AE4A14E2844AAA06A04C55E8B0BFA0175A7CA452B25AE13F40968DC6F472AB4!
31E45A0B9846D4A27BA9635860A5A10E504C22E7CF65AE847D1C483F254206!
E401BD33
D7E2509051EE27204931EF12033025F755750175F91E41F17293D900204E9AC31D0052511BF8F72FEFD403086384BB5682C22584FE3D45AFE2B6144D263C74AC52D97D4FDD8294DE4E735DF8724AE814B43A891605D14167224A49EDD205372B19211CC800F717C2C6860F87220CFD1C53CCC8086D07435E09207A0A299472A976254E2EA08CFBB0AEA8ACC8E3527C95A1CBC19C98199AA9B11C8E17EE9407ED6EAC3ED7EACE80B8ED7F7CFFF4957F0D56B434AB15F7DA6F51DC65C136497AAFBDB7C5AF59AF6C467172FB169B65EC1C44E2A69301833729C794AA23C008C402A5D3C831DEDC36EE3C03CC6FFA6DBBFAF9ABF44A3F79D6FD81FB2C770C3095D864820D722D42A215733BBB30FCFCA6A29C228FA0F23CC3E5F8A38963044D687A4FB150512E040148BD6F94DBA8F970AD8716BFBC725E44E73D159AF2965B943FE05C6A8554A550DD73F1937462A888EDB76FDFEC44A53508A9EB11EF6F69812102C229E51AB9D94FC73517464ED26F1306C69F9BCB052E3A1869C59637C47B3FCF8FCCBD2AD90C60825694BB848944795EBEA98C8098F3C2CBC3AF4487FA843A01C89DDAC0A0C6BDE7EA49EC3237DFC50F8D7FF9A553EADE960B38F094C015BDAC75675574779A55721B406EB7DF56DC4A505052472E8C8C641991A4CE70944A4A590D4583CEA572D026065EE4E6F!
67341B347C6080FB73CE4E2B93D0AB70D54EE4BE8ECE401F8364DA74958E0BA209797257B06D5C6E7D5D6865F391CEAD3E194192F6C2D17021B4DC9ADEE6E0444B69F80CCFB1032C651EF55A342D1F2F96C17658D427D412AB9FD83420BE9286EA10905190829B109A80B491D12BAC0541DA1288D6563ED678C00098F4E4CEEB6DDFD04126B1BC40131BF90AA6CF54A1B732DF2AC4EDB9410BF5E61815C9E23F7182A2E8F6FAC6D4C3D9C7938B4C3C72C6C8D8F6BBCDC554D620FBBE1261BBFD21D40D85462EF3D3AA9D0CE7A2BB4BD687193A42E524948BBBA17D10AB98326A43AA965A7AE2FE1A6B6507B1347EF666C2C86DC8711F6F5F335595F9BDD72FBB02BD766FCE0F78B405808A05080EDCA81CADC413DBBB2AD93E74536F18CC3B5A220C7E01B585C1C1F54FBF72B3D9999A14688BDCA1C78E9B2A1DA31CCCD6D3131B2723CE511652789C3C5E5767BE72D84E15E6D3B9D6C835CD01BF6AADB93F0CD7A9A910227FA84E001EA39D8D82AD11CB1F161B07D7D7D1C0407D26F133BA3C186032D08C4C45CAC5F0C656C83B265CC406E650C3BB54BDE1BC9AF4D415514BC429E6FF0102CC58C119FC33E991D9966A12A1E40AAF6D653F845C945405E3A0520A8B47A5D92B49D9D68087AB56A6582324DD1F2177F6BB7E2767BBB343641ADBF0942622BF157B43191F8B37C6!
07DB63BD944209928E2217FE2412B9730E6B671DFAAE49589188DFB6D60781!
D53C934C
622D9400C3F5D420DB37E4541759767A0A5B8B6D1F2F72B00E24340B602084DC7934644206B4E6925A8E33BEF2111020F38ED54F52628D428E0DB95AADE16E83F56DF1EABA5A9CEC1CA844A54A903B96D76670190BE891C09812166FAFB6C112C57046973AC814A0A07237088C9075BD43DD24121B49523B2665BB0435E729E2CD0581BDF1814944AFF4B2269A4AAD878C96C36E5C3B5C2EC40EED2447C2738912021D2AC7C0BCD467403925E714FAFD6C1AF1262A175EAFF0A6FC6F6C7540EA3A0C14F9CD8F78001481B23C006D42E10B4E9B9B604C9DC8E7B1E4F9678A5AF5FD4913D5B56028883C92C0B3216C75B2C97A2E9BFE262AE552C18CB2F9B5C0988CC06A45441F30EBDDACEDEDBBDB73BD9B4BB1649110C49D1C8AB93683E0BBD089BDDD1D349CC7E8E61A2CDA71812EE551C4AEECF4CDC81A3CE1E996C449C141F581FDF963B40618147BC1145B27E85D9E0200B0A2A8EBFDA7809AE352634D4A71C1A112E992FDF9145B9DD0893CD972D1E3565FA9ABF5E43B8EA54DF6B57E851332628B49DD0089D18012F2DB7E161D2588516CAA31E36B232762072900FCDCEC430108CAA8F45AE5C3B21F44E11D9801D180F003CF5F040478ED52F9229C6631148535EBCC1E01C64292E2F26460E6FECF1F16914EA8A35C6F2F88AD628374F0ABFCBC148D85FAF25495BD4A80D!
6FDFBA759B0AE09B5A14EEFC5233ABB653A92D1D445315098D54122584878D6E629FCDB5208DFE61466C831CB6892221228AE14046AE2506ED36A634DA214E17715ADADA621D1ACC86FA4644ADAB163092E97338F170A350518C38664EAE8FBA21836BC91673208A7B5655676F67A71E486E533DA2602DE76DA9BA3942F1F105B091C05D6B106167203721762239FE443EF6894448BFE8546D2C1473246D0FC211473F9C6D44F28663B62D828B9C705E726357A49B1D721A6B117E2F05456F7C82FE43CF20A1AA566369309B5ADD64B2B0F93764EE2BDDA7879DBA865A13EAEEBC0520B76EB5DFBEC92E710021F7D01AAA3EBB4028F47441155102A547C6F4310933776238FA6CE3C031168150B9486808132B55F88456AE0D823D770E6FD95311159836B5F703C8E5F87CB8567C6D636D2AFF9FF88284C996388BD9905CEDE6EA491A0190952F9DBA4693499D0A54EA80428C24B0CA4D812E076EF6C30505499D65F6CAC1CAFB9131CC59B0D8F898389146698BBB6C347CF08C17961D28E672E988A9933BA1282BDBDAC6487F9B6D6AA28D187128CF2E021088A43C7523FB3F048DC2D120C162CE939F9BEF0A466432F751EE2BC34EE925F47F67118CDBFA5BBDB71537D50ABD96956FB78046A257532322298D1C4C40EA1DEC8B24FF1191101DE459B603DAC754C3D23A0B55FD!
7DB93CCAB22AA63F37B7EFE791FAC14DAEFB7EBB4018232BCCD9F941B5F45F!
3C7ABDF3
91CF18E82450F00AD204C65FCECB97B9CAD6C86EB8112351F39AB46A346648EAF76F91DC6FDE962AF5440A22F12DF4D0120985AC08A02085B0A9C489B913EDD6C76256BF98DCFBD96AD8E9FB8707DBFF0B08FAFB47EEE9B757397620FD0072C6904D512B3BDEA9EB9DA5D1D14B97FA084295313AD0CB9C973CDF15798469048C50530618E89D6EDDBA094BA0896A54A16CFAFD56884E19194B174E32AEFBF5B1EDB103187C2E836003239628C3F98457910F8C74E2AF50F1C01E9BFCB9D829C0C1B5F21A722CB5160031456725267E9EB53150C8137604D69AF3AA5DF3B96BADF15D19B63598F84840E7741F1AB979F33670101DD440A3999248B4D4850437F3B333039109912C87E43E48091FAA888AC1B06799BE5F3191321BA336926C0992B56603FDB1C8ECD0487150767C8361C7D2C4A5594B96C2B58468C17239EF5C6B8E6CB1E70D99EF62DF95517F6DA2F68FA6D96FD3B9B55B3769A56557F86A63F5B7D48A4814A1918334058722A86D60624C2405DF1138FE09081BD444F1B98D267BFEFC1918717FBFFD055BA6A73A676020D621DD60915B6A8D00628A5E9AB864C992CF838472BADCA931FE5C72BD6CB14C26732320A722F969CE41FDED9BB7D8E3FDFBBDDBE85C9B96B8A1996B3D21816FA16768CBA5C26FA238ECBE077C6BE4135BCAFF3921FF54993D006CA23D0!
2B3484751AF09409C8A026B2DE9D9E979D1331267A412905A8B60F932C82C3754CBC23CDD1810F7534DFC34E7E06D2D13C860ECFDFBB7BB5BE8E20060D01214D4BD5469E552B9C86EC3FAE81B81434C2CC3A39A38B20EFB674F9BF8209091159B2D95F6B7C5A6673BA4E70BC5B5E9E5D9A6E8199F672D5D923824840F192DE58D7906B349E6EED6DA2AF3F504234DFA603A87A3D5DEBFC94F40DFBA7F0B5985E6AC636FD24B0391F7D9199C4A0AA4AC62E2103831F6C03502905DCC3698131FC0F16084B0F9D6C4BE61BDE7B285925164BA437C76D150636DFCE56C7374D6D2A5001224845FEA70B258E2BBE24DF561BEAEE74EC8521623FCEAD98500C87B8309B10484E677911507091664423D15C18811AB3E1C2EEE552290BE61D7EA7BB00C7E4041C3B0EC1F9928B268D7BE18B40606EC9D726E537ABC21BBE852716DB9D978293A0B1259B2148C0842C7554BB9B9FC4E6B985B6B81C9D1714DD4BC48AE043020D112103A7710AB671739507112CBFC2AB2B2ADD256CE46E68E707F4E0ECB84F6616195FBB3433F0288E892E2C26089AFF68B1D594C656524FA685AC1B5D20DD9C9C6E2F2788B1098FA09625656A245B81C1ADA616C8C37979B1CDDDD5CD7994E94AD893AB54F41A70C22511992BAF7B14E3992C1D0DB36060763C476AA8F57BEB6C1D8814CE49AB0C3C81D0!
E5B233433FC01F1483CF83ABEBA8D00D0F9ABC8C8262AEE2A9BD2D3F702C85!
554F11A2
1FA131032A3C722D4863ED181A6D15C7EBDDADD13402AE6AEA1CC4E572F0DB21B45DAD8D8260682CEE0122574094924B5D4BC439AD8F7402614E5923B0C8925995C9BE38C18E80881D8DFD96767966EB9A020A632D26E0012ECE420CF3618B389110D772D1F8B501CDAD17135DBC1A1BCFC04C47ECE5CE5380AE1970D9CAC6930765F6CF03E460B4311CB11D2D509956D2223F664383200E7DA42942D9451401821765BB4B603E91BF1DE3EFB5BE88469652543203212D9D4905E0046B2B38B2D43424F5656D6921900522E84763434C43B947F79C7DDB3F55CF91D00791B518BC6CBD134C506C7068B209A188626767D710C4D3CF136A9EF014E8673C7C49F1560C372983852E83FFBE488103EB18F608884341110BA1A223D5D1E5F2D94038810A4C9CA3AB96429CAF8CB426828FDFFFBE6EB27DC65ADADE5C4480043D0D48471E31EDBB48F03625FD4241E1C263D4EC9C4E18C3DA2767C201FDA1F7F3EEC07D1FE3C13814642D1D4B42F383898EEC1FBF635355DCB4E4F6E48161AB2CB8D9AA1E8250032C32750A8ED093DDC6076C8EB3A7A878098AF236A9D8A6C62009AC40778177FD6D4241E95C1260E45ECD57F6934237CE601B1FC6CC4BFF4C989F6E03B113062830B0B2322AE15465CBB56782D785F61F035A77479B63C303BBBA158A3495D7892800842ADD0D3D35070!
CE10FFE5645FD7FCD6649363989B333B02DC0A61C3EBE0E0A67D3638FBF67DDF1419C325F28B4046942BC351E99F0FFD3FE3B157CB13FB2A239B180E661804065618E184A8552D646797170B9A44EE5A0424B3A721795D41F9E5EBBEF3D7B59EAB908545393735D1FBAF15165E8B8828C51A0B47C5181669099E56B8AF895AC35F3BAE2353C4AFEDB729FE810A87E626481AD8AE8CDD771338CE96128E0830024200242F3B592877022343EF64657D9295052041822634BBE05C41F6D1EB6EAE45AD7BAB1DC3A09160BC9D7D34A2B4948E0483C268B9161C1CCB5921206CAA77E2AF03F92715FFF2DE07F1F23964F407D83DD0145B68670403092ED41223068B018C64176B029700C692AC448D30A4C9ECB96AC82F28375F97B9AECBDF5B2F0B739BD7D454A8050682B1E0D9D2BBB415A1C50264D7E0AAD7D87F335D78F2644413CDB04DFC9728FA7E1D9FAD8CB4876A36A9C472601B7CAB3F12A288B02309A6634A40AE260B57C18810B86421124956A2205C1284D0AB79456F373498DC5CCFE59F436F353F805CEB5AE9DD5200797601EC2EF1426818410C4E61E1B49385D30AC148DFFF9F8F5F8C4B0FAAC896FCC4271C07820975FC91FB82454AE82FC3DBB58510BB035CEB6A71B64533B464217064656A8446A1A7C39897B3CEA161EF0D00494E718B723B8578078DD16717!
3C7B77C182D205A5B088528682D935FAF29311FB2A6D09F1FF4748DFAFB994!
5D28C3E1
DBE65814E26348ED2C68D9D5CEFF3034525E0046B22D42DC276004404285C69ECC50A339E09C4343B5DB1700229345B9054452D8028CBB60E5EE820B84A574040CF675F0AC93FB6886E7C166FD5705FF4B443CE8632304D2C6521544D237CC4804795521A1816BC51B048B25DD32A439BBF0247C2B3313623F7CD862CE2F307725DF58975CCF1809008EC208C6C182BB00423870BF7BF76E69A98808AA2B2D3D19C1268272FBFE8F2A9F389281BE8923C316C751C9EB91186224988DFE1A5B15924B17461811B50CA10444089C064296906B05099982A5217F6F43D7F51BEB0A5AABDDDC7CDD8A8299CC4107A4BEE0026CC1B0DD657898464E9E2C0C8E1C2E7CFF4F421F1EFCC8F7E48AC52E4D6236DD8FEC27460A29F0302A0A0913B956B643795EA8A5381E8C4C6362A71FB412320F1B0988990391819173C111A0E102605CB8504A383EBCB0E0C208249C92936408244D48F103957DFF3AC8FE4BF1D8F207E703455D5B5F5F25855FEE5B1C86A230A2A3A1EBAA994EBD1987A217669148342290F273050DE6BD37D69D031099FB8DA2E0521A317CE90218F9905122B2729745B0D2889B85FB5876DCB78FD73F9195FF9E7BF53D48D68350C8AF6278E741A52995D87D95FB380ED207DD99D8B3BBAEC60B43966CA390B8108DD58C2C1F1148F6DE82ECCBA61B01C9AD10BB9BDBB!
A6BB628F56C44040D9EEE04C4AE782A16F645B2539FE2299B89FF9E3D5034F6F53D5049F6B551EB012083D4011192D8C8BEFE265E20913C22B478D40603C865026244F59BB81048B2BE9DA11102358999C6AB7B0DD90DC4088B5A378ACE9632A99F7DF6D988D2BB8C0909A3A8D45EF31406130D91F65EF7976BA99FEDEAFB8570363C89447331BC5E1F8CE48577F0BEC8FE360212CC705C13FF3480345C35675ED238916B2D4466FF76A946B82824FA18AF1AC8B5E6B732206E3702A695B26C18F1EC02107281E3289500881ABBD580739301A1F2B7D276B6E617C7DCD7F7AF32BEBDC12275100034759191BC0D4243973B6063A490FB1555491DE90D4EE64C638FD32541438CCC58B814E157937838D4D855E0D0B5F7C617EB92CF1110E708AA4AC8B31694DAD4215D401118B291308D906BB1521EC7B15F3C09F52F4BAE5FAED76DF9BC92FA0ED654A34940EF100BFDC50EE4EEE338506A88780AAF1901E472E625C1221090854B961290B8CCC4C382D17CCEA1CB7463DDBAE46459BEEF8DFC695C22DCB32EF06CB8A0D496444A2314A514AD8209089BE160AC4CFC37AAC70743967DD685F7E634721C1E34A4687EF6015370A13E06AE652BBD0BED8C3434181B00C42808C234CE480F8A469F4CE16A5741BC39F946C1BA73D5B25637D7645653314E287CD165320484AB9D0A9!
752149085C1E45B1468DA2A45FF9A98FB8B19BDEF973A9111732D84043868F!
02C0EEAF
79101078044563615168EE88C3890EC0EA7F2C35F0A1D8251C37E6A6F2134122720BD5BE42B1A1C4CAE05E7F2ABDD646EAE056721F4081042E990270F866801772F80A1FFA5ED5AF03E7BD7881B9547B9BF2A869F37B923E7805847CBFB5950124B2058640FBE49F91640AE053308D74452B4A14E4663760FFD648C20D06F22662DDCA8115235993E82656F5176BC897EE426DF5326BB917F96C72CCAEB4C1E1246070F5D04451DC1A0D0B1822FEC139B4630F4EBAAEEFBE5025E9CA0041D3472186188DD67772600E19D69210F5E6C53E8301A8D3D702CDC177EF2C9C2255900F22680745C4D0E70B2185CCF19AAEB7D5D65F33F3DCB1C0830EE5E605904DEC50217B62E9452C1A5B6856172051B314DFB067F2D7FFF73DEEF1BEE80E19D237AEB7DBC15D5D35A1BDC3431F21AA383B7A7C137098E60EC300A3EC61E4130062E24DF3A4940E05AA1C5F99B9C2CA6D6737BF79EF075F5747DF22CE138F96C2979D6DDBBA267914E08CDDD91E9A490E3D8C7E6299A6273FF6F9523CF24B995FB86670886A70AD8D09B2245604CF2B4F3667044B153A81125A240BF8D48E1F7E4B74BA38537334520C6AED675C977AADD5CE7BB3E39EDD98867CF9E7DF62E558CA5AC2A612611F1702485D77862B413128964FF7FAAB6F8ABB9681AF8A400D7B21D113F4EC136B7B2BF5068CCCEEC10!
7C044D0FB91689FDE4C6682115403A8CF9014E46736B72F2DE3B6EAEB21B4FA2DB7F1669FD6C292B7C9FB50B9D3FDE1D51A814EE63920F6EA21923FCD5817FBFAD1227C2C8ADC44C115C384C091F321B3FADAFD91126A04471CAECC84C0410C42D56A2646DCC14A235A13EA1C6E480F44BA6D682BD7BAB65F900320D118BEA93BB17982D78D65EFA5EA0B28BAAFB5256594788AEC534DF44F1A6EFDFACB66CFA8884B20BED484602D9C76928B4259060FBC494D1097E95184A8CF47C42254AD612BAD4FFF018E491B7D3853BF97B0DC926D75659EB8AB31188BC28189FE552BFC0EB5E9E56D033DE2D0590B311D32222A67195EC639A67A570E4FF610E05457A243E5968CF115C0EFB827942B13DB141E2E01282AF851A0F77088902D46D146832286BE10C00C9CC3C8CCE6A53BA603A6730ECBD236B9505384C230C182CE9C3868409E56EA94D2F88070C46E134D101602CA555FEBB02A15CCA0A2A1B001B193CC107DB0F104B2FC3110D1AC9F4310A1B054D66A8934073D8590B3FA77F0FF3C418C1D85004D73AD7D5B5D7E4D92AFB624561E1D988B3627F4EF595D8E3F239946B6C0EA5900F7FDFB0058B9ACFFD9738FAC45630B2491F9C200A5CD44830FF22AA5178A21FE16EFB68663D3836F25AB64F223A114113DAE344B556D60CAE9131D08839B9E192E953872E838118!
7972DA3E7BA9C9ABCE6B62DD663B32DC6CD18ACF07F3397F24F8DC074E40FD!
8A4C0807
9B62267135F110CE73EBF0B990A61126FE112AEF821B7DAE040248A610DAC1802CF97649345CCBE7708F312F39DE72FD6D4383C9207395057C7196D7CCD3C40E33A2D036636A73021B10FC2D76EE829D176313F454DAFF7CC6A7CF3E156FABB0FAC4A92BDB598FE161DABE841BAF7E9A86DF421377C196A52812AFA0B4123A7A18230BB3C00FFD4CA7A52BD9E14BF3B9BD97CDD7EB5D65AE4527BF9F760D4BF0B4C2EFAF7D1FFC7DF0BEEF1F3836E2B7B3E9F8CA7FB67FDD2DE6DAE7E06C78446BE315E803663F50EC04226E4D4159593D3D898853A1C69E69C4C8C2193E426A74E618C1D2258F6F34271BCA2F9BEB5D5364F3E2ABF21CE21D1C1CD2B3E38B8BCBCB8BAF161B9D8CF4C3CB870F1F663F2D98983863E9D2A5ACF0249B06638F6C75F2EC34D49BAF3FBB04F7F75EC7265D9A80FBB34B4E621B9996D9C9B30BB34E662DF97CE9129ACF616FF8FCF32567CF7EF2FA92773EA1674B3FFFFC9DCFB16B69E2E79FA762214BFDFCF5251752772CF944D39388E81B2AF46451465C480931FAF0985027074303C05C2DBF5CE55CEF3977FD6B739E9EF2D314761BBF7CF9F8E5E3E97726D92F4D4E89E2BF8EEBE9B1658BA3B3734E7585499E97176F708807F03C835C5E5050E45C975DBBF5B4F357A7E76DDF3EEFAB83A70F1D9CB7FAF47CB71B376EB8067CD1FA7681C16C315!
778E5E5D41539E7B0DF803CE4EC5C5694F3D7D5A74FAFFEEAC0ECD55E8D97C36B8F7A7B1DADAAAAF2AAF2FAEAF4E90DAB2BB64E3E3AD9DB2B7C765C5CDC3FDE79FD59014034F44BD740F1EDC9931B8991C33EA116735EBCC5DC55FCE55193CC599647BFB418DDD313483F094D3F491AC756B0DD78BE9BDB0771BBE97730A371EFD1C4D14F37D2AD877EC0FA556357D0AAB3EBDFFCC781F56F7EF5CADA57E65D589BF6A69783F94CC199EC86E40EA70EA325283535957F7807FB39CD38FCC137DF79FD9D77DE01454BB350D17E026E4F8A64C3BEFF7EDAF7B4E2B42FF93C10E2EE89CE147C96B0DF360723D189570E0B41F179664B79D7E5C6EB4753EA274C99E3E1E9E13B65FC4BEE53DCC7BBFB4679F87ABA79CE97CD9739BBCEF77475756E75CE49961B0C8686068BC568B4189D8AD11F7438599C2CC5D90E0D0E0EC54EC5D9EFBDB935F595031FCC1E1AFAEACD03AF87BFF98F8B43A9D13D993D33A2AF5C99B1D4A7273AF0127DD458CCD70DE50DF1B541C6212188FD3E30B7DAF8035F7DE575C00B56F515D901EFAAAD5BAB2A56AF5EFFF71D9AC44CA40E217306809D64AE957805E5B059EE606C3499C3271F2DABDA41C7FED5DD1FCCDECD7E88F403DADA7D9131F1C17AEC5ABBFEC0FAB5F483D0B377FF3D2E905B50E0B0ED8E1356383804D5060D05D56A6AA33B044DB42!
6FA9293311089D84983D20E7FFF4ADCDF67C7A5E21B0377075EA4DF387D73C!
78E3753D
F7C27F5CD1DC454F49BD19A37DFD4BCC2164DEAE789EF80C1D4CFDF498572A09E773E59181D9D8AAFCD1C8A5E9A452C11109FC4D0A0DDE5F0DBF0EB79E1DEDE8E299EF0DC9CEA1327F2735A9D5B5BF3F38B0A0C38FE796668FF6A716DF1554B7931FDFF04993D3D3D3E3E577CAE5CB9423FA94EBF19BF71C646FAB5F5190B978476F824666A348989C2D2C33E89784BF498D0A599993E1B7D1267CC1833E6936933C00B7BEFC62B4B375EC1C712372E1D9308DB98483F779CD911DAD151DC413F694CBFEEDE31D43114D4119F171F9F9EEE80F5577979E1A9899AE86863F48C8F1067A66D440C4B4D4CBD78B1D65C9E1D7EF9FAECF5293FCD99F3D3F89F48DACB17EF67C67EB8723976B8FF044FA357E877CF3D3C53648ECE65B0BA0AB9D96CCE8355E56D95D7D5D555799183141BE123F1C5D970B7F8F878733973987876B7D45EAEAAA82B732E7374A6AFA0ADB28AAA8AB28A0A3CD95E5637B72C4726DBE2E939C53DCAD3B98E7ED8D6D179FBEA835FAD5DBB7AEEF6B9DB478FDE8EFBFAD457A233E312B3889169DF260AA9A99AD4B88BC5E6ECCB7F3F6A5A3FE1FDF75398BDFFBEC74F84897E14963660EFD38A7E4276C21BB8EF7A63F4E823AB0FAEFEEAA097B7F781702C64F0686FEF8370E48393B1AC263B7D7AF4F6D1A7576F66CF0E1ED97CE4C8C18347BCBD276FDE4C3F!
5A3F7AF3E8D11B36B31FAFF7DEECBD9E1EBC8FD2EF9B7B796FDD1ABE792B44C18ED65CEFB56B3F988DD78F1CF15AEF7D64F211EFF5B3D1A56B529101100BB25285CFA3113F2ED69AB22F41E9EBE98B77ED4A49D935FAB55DBB264C002A8F39EF4F78FF356CBEF67ECAFBAF01E284F7771198B9BBE68E5EBD79C3666F6F04C5F0F0C6D9B3C369095FEF7514AB706F4245BFBDEE7DE48837FDB4F1118C1EE3F3A6F7F38DC96CF13E4ABB26D30A3B271FC1EAA897F7EA835BAB266FF6DA5AB5A162C3862AAFF5FF8FAC2B0A6DDB8AA20922C66B22B90CC7AAFD35E61A020D8162236A08D82F0C0CA52E7171C94C4B1CDA115308A460F9A30AD548C158A56E044A14089506EE0CA68A4A31C561032F5D9B417FF2D3FC3664E0E4AF9F05F7CFEC5C397FBB929EA3A727BD7B9FEE3DE79A90DCA85BC52454CABD9AB011BB36203385770043F2C740B62FB9915C21998C7FAA09EBB1BEBA07804D9D014DE343583C4BD1968A4DD9FDA321040F833915B33D5CC6D5B3B3543C99017826291CE1A749AA1B1DF75A0F5F539BB19487E14700914D3C05A87EE695E2CD0D8BEF424E726D2F9A73B9420E3CDB06BEC5BD6BC94C66F8703AA312BF675E41DEB3782C3E129BFA3D11CF65DEE577F3576EE67323ED7C26F32255136EF5AB7C335006EC0270290822F49B92C8E54864023F830783C1A0!
DFFF3A12DCF083BFE8BF1428379E08219061295D5C1F2BDE3A2D3E2A8E158B!
A7A7A7EB
EBC084878F86185A4CA78BE95F1125A3E962314D238A0F713A5A5ABEFEF2FACB1BAB82B0BAA4284F4CE589A65C174CC1F471DBF7EF7FDBBBAF9882AA2A9AAE547C3E2AC25D998383719AA169F0C9A80AD792529BB91C38E5F8E3CD02BD91426EF3452D1493760FB114E7786A1F1DF58F6247FDBE07B3F0847EA22A7A45A2A96274B46A2724C9712469CA96627D60AF3DB5F9D59E92B04DD953537DF858AD1672FAD29EE70E4E027B4894E813F84DB8DE2707A94A50A72FD98D06E12F1098203845EA8119DB8576BEFD7F3924F46D1F927C3C3C2CDC59CCEF1E5F5924F8452E83BB6D47AEAD3F4A97FE1D1DFD676565E5C18365700100F76734BF41C6C64E6F9D22DF02184E4F4FBFA112F1178715D3215F16DF2FCE3C2D10003F2D14B0CF5053289C0C0FEAA02B4F4F66323384D58BDE5D3320850C952A471F9AF754B0FDE2C91BFAC396E969AA307FE70EC0F8128E0CFA32977E997E334D9D973C7C1E89C3D3BE7E75DEBDC31B592CC09036DE48EA05A5575D42DE09402F30963097E4EEF8DDF157E3F3F39354892872EDDA0415F2B9100C5EB8B0E1F72D9942AF04EE7D984E87E03CA5DE72495816209F4D6A01C5374C73D55C0224EB8A690A04D1680445C57D00EB5208DE535285510CA5F1CF9E3D5B59FD4110BC41A552AFA4974AA6F9C147C9D84F482A7C3EF383A9AB6AEFF!
3E710A675DC9ED3E91C7FC4D7F68B6448266737AE369BAD66B3B9333B784B683B18FC786F6D6D616D6161616DED2D6480E31E7A0783E7B83A3BBBB3B3D30CB75A56D8B200F0862C8B3D002B10F6C0E0382A6C6EE0685916D558B77803E318CF33AAE82E76A8B43B557797F93A76F86AE77147AE1CE8598EDBC806FD5C8533741983EB0C21A1C91CE3C2812C3D95D33111D30D5C96AB55C7E9E9724FEC54DB37AF2C6692239BEDE46EE3AF16D901BD604C77C7638DC1B9DC1B74BD1374ED0C884BBAE59D70B31C0622839CE6383407BADBAB814210021DBEC5C0323CB35A56D3DA024940234645D9CFAD623C8C826DD0B4D341571DF00CC475650351AC693AD425DEE00CC3A8330ED18D0964DD601AABF882B4426C4E9BC3A7256FB98E4B0178B591877BE13B7B2699FBF3FB666BB8BC98043336BBA47017D4D11C0ACEBBCFC98A9D6E970AA887B3612B4BFAF2862B3A554AEB9C2171B8D0E94016C17DE0382C765D76EBDE0B60BC864E32857926E1C7BABC5577C956F98091BA9AA2AABACA285720F2AC6B4C65ACC28B6EDD8D46798E31ADA79AC65C85E30C19D021EA2EC0C779FCF82A90373712CF251BD52D9EB932ACCF66B92C6E60A0BB70B7BC7139E0299DC5DE85EEDDB027D970132BC271D63E543B90E1B3A20A4B7AD84451930DC66322D5AD47C1FBB46110A3E1783066F!
0EACB37C3650E232D0D7E02C378805B341152A37A28B1872421011C2376AD4!
921902D6
02E010BB79962F8E6B88AA11FE8A25EAAA9BA1272444712EDC6A7E34C0AB95652EA749045C82C18D94086E3077B07B27839DDC9DBB7EF22DAE727C7C75FCD47B2012294C8C42CAE4702601C7F30E0E70C4D010DA8885FF5B3622A8AC9E0D3DBDBFBDB5A85F397B90DCFB7296E5A68CB65D861212760589A72201B8020910241BD0EBEF66FF87CDFC98AE95B12BCAF536665CE5C9A5B3291A350AAC505C06691D989498E0570EFE5F26C60831958765516371B30C47653EDBFFF201447EE0E66A7DC3D21C51A12DCAF53DFE2B7F8D650AC568B0297B7109F708716798756AF56F7F6A2247B893AE3BF69FBFBFBA428DCE01BBF0F77F262FC3C442C8B72ABBA0700AD308145989ECA0866BAE530F9016F3159D70DD755F7DCA8AC8909646CC870C0618E53953C16B2919FD80DBC33904F7217F93ED284FCEEA7FF041800DC233D536C32B8830000000049454E44AE426082');
-
-insert into auctionImage (imageId, auction_id, data) values (2, 62748261, '89504E470D0A1A0A0000000D4948445200000082000000DF08030000000DCDFBE60000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445925131A9B3AEFFFCD8EFC872C4E5FFB6DBFED1CCB45E7788928B6DFFFFF5423A2F72694FA9CAE7BCE3FF474336D3D7CC859BA6C9B88FFFFFFE98A9A98A744D2B2823FFFFED3147547A98A5AAC5D9DCB055FFFBCA393632D7C591506879A9956CE7BB69312C2898B9D6B9D5ECA4BBCD585444BBDCF56C5033E4B756302A24DCB767758C9688A9C586979BF9DA99C3DFFE74858A33302B675B45AE8D53FEE7A8A8704B79949C38332BB4A571FCEAB899B5CC8BA3AAFEEAC8FBD888FFF6B9DBBA76F1DCC76A8089FFFFE4E8C98387A4BA67777A799AB697ABB4F8DDA595A39CB4D6F5998355534A37C4DEF5302A19474743E9D8A6FFE4986B8795A6A79DDFC376C3DAE9B3CEE6FBEED4FEDBBB7975646A8AA4877D65989784B3C9DAEDD599BCC8C758533A3B382BEAE7D6A9A58A425B6D7D8379B5DBF5B8AA85B9AC97263946C5BEA5CDB676CCE6FEBAC2BAE4CD96E4DBBAEBE5CA727B7AC8936A878B8345412D565A51BBB59B33302393AEC!
4C7AB77FFF4A9D9E2DA949B97BBD7F5504C40F6CF8089958AC8A764AED4F538332245545855452AA49B877B6438DAAD64DBEAE7EDD38CADC4CE718FA7B6E3FF646A657EA0ABC5E4F6CA9954E2B78CCDECFF875841B5D7FDAFD2ECF4C9A8393F39D4E9FC2B3334A0C2DB4A4F49C5EBFF9EB3BABCB689E9EDE46A736AECF3E7B68839CFB566BCD7FD2A3029F5CC93CFE1E5EFE4B75C615CA1C4E5E0CCA651421AE9FEFDF6F5E1172E3A8FB3CA66441DBDD2DC3E3822FAD1B1C5D5F47DA2C291B3D3ADCEF0C8DFFEEEE2AA7F8E93BA9F59F4F6EE392C2BE1D0B7DAF4FFCDE5F4C67956434D53FEF6DFBBE3F6FBEFE36080935B4F28B4CFF1C9DEF6939082F6FEF6FCF6ECDDB0747C908D3A2C1E6F9199CE9F7E5E6F769CBCDF32382EF2FFFE2C2422A0B8A9342C2C8DAECE4B4E372A2C2DACB18AA2603EC3D7FCA3BEDF736E60AFB29A34392333242B423D3BBADFFFBEDFFFBADBFFBADBFBB9DFFBBEDFF9BEDBFFBEDBF9F9FBEE7093AD1C1C1822201AB07D5DD0ECF8E79675F3FBE57290AFC2D3ECA2A07B844427C4D1C9F7F7F3E8C16182A0BFBADEFF31F2450A000051D74944415478DA8CBC095C5367DA361EE0B00512911D0960580D1043221201850104641305C4028AA4222AE2C2188C1B68C5AD6ED8566806D48E53A415EA542B53C1D2C16F3EB55AFD8D4B91D722B695DA1!
036C7DFD7F7F759DBBFE67FDDCF09D699B7F37EEF012190E43CD7B997EBBEE!
EFB39284
88E484876F2AA56984C83D623EC308D0CBFFCB0663FF34F988C46936998FD968E21F3617E60CDBFDE7AC8C4FFD2DA441F26EBF1C3FCE3F82F8687D83946AA53530595959509070061D024B21E19A4837DB51EB12EC3078130B1AFD62338B96968787818BFE68F21F6513F544FDFACD9EBCBEA8719A4FAF175FFE978E54786C0BA7E386063AA20A23239210A108C83227C0C9AC68F7F7D3BBB3C53FD4B238C1FF5FFE5C3FA9FAFFCE5895E7D0C9CBC31468FA70A96552624472DAE360E0D0DF200E865F5D6D6BF8101C7303308FFDCBF3C6F5EBDFEBF0030FDFAD8F412060F617024783F592121D9D3ABFA717DFDBFAE6BFA1718CCCBC3080A3A152287DCF5AFC7E02BDF5F85C0AFFFAB81E1537C1DB42E7B0C089511C911A95E0163F5E9F565D683E617F0AFB436BD02DB0CC1641AE18D35C8DCF64FEB32C3102EC0FB97AB1E5FFDA5A38D7884338C6479C5221C93E58BBD02468787F8357FB5192DF34F20281EC7CFC2103008A6C1718C83F4038B657AE695EBFEF5D1E078B4310883229122508E58A83C7E2EB0FAF1307E37F2D26CFFFC7AD32BBF0404D1D0A06808E12BB2B61699AC45FC650F8A8CF578CC632014A6DF3CFE058231787F84605972D72FFB8F673DAE3621274DFFCD61FDEA893893694824E28D0E2883CC120066CD1E1F1CFC6FCFF42B84C1C1C7FBC304553D2E!
1F9EDB5F1D0C0826D1BF41FECF57C0D573E938070B48138745E97D22CEBA1EB8387666EBFF29046BD1E8FE58C1CE65BF7C78FC787EF0A8F1DFBE7CDC21E327AEE70639A371983C912E028571654062322A8CE90063BEBAC1FF010490A1312B30565095F6A645586C7EB0021086FE5F10F8EF22307519671A4E1FE1B8618EE38C2346A368B85AA138369CCE0DBE0AF6FF610511F14297A0D562823CEC78C0E151E3F0FFEB7DE3DC65B4361AD3878D266EB861B8AC33DD18CC81B10214C1F9D58AB1612A24FF530883A291E0C50982CA5F9624271C0FC81A1DFC77A1F02A043AB71187634AE9D34E2EBDD0F77CF88170AE3AF85883ADED8B9442FF0A56CBFE07078360A258E8020497E45BC7173F1E53C0B5BFAE33F80A8DBC8280F9C17AD068ECB0F5E7AADF395FEA18FCA2941B3556734F6D031E5F2DCC5700C2E0AB91FCEB0F2FB10D1AD94F944F1CF1C2D6D595B7D2BE5E30A65098460E8E8C67B509C55B645ED2C8DECC175023AD20B21EE2027D632E7015B37DF3AF6F2CAD0EE646B80309E7FEE679F54B05576F045F588BC64F653E98F17817B173100C9CE8A03130426071FCC4F6AF97FCE1C249A3F54191C8387870F0E0C17A13074B59BF8440843EC24A39DE8E4C1A345E08EC89A9503C9EED3BDB2B6776D668F0E0B103B6C737166E1CAD1EA69CE4AC4D83BF0161908F!
123C2024838307AD0F8E6E4C10AC76AA4CFB7A7FD6D8498E2355426FB51619!
115546D1
3FA7D608DEC1DE0D08438AC09EC00B8A8AF0D214DF030187B974EED8015FCF52A72C147DCE8482C712E39F11987EB5027B8679E2E0480CAC10E19456773CBF4281C01E5510545CEAB0821BC6B95ED68397FE1934B2EFD617027D038F550342D66C5F2F2E9813890E24FC74C0373F98339A882E4D83AFC42F8B09A3D901E398E8A7836068C4426A446A58C2712F912220EB9D2C050EA34231CA2982DF79ECB8C3F86B411A277E066150C4C5F8068E95BDF3C2D731CBF7AA6238DDFA9D42DBFC73BEE78DD63B0000E2E75F13805634BE7239E3804460479788D9C939671DB9D13A4FAFC759C1C159F8A8CE1AADCE4F4919364318E48B07E35D3CC2551A2B626CFDCFDF2F2B2CDD181053BAB12DC5BFDED6372638C5B7E36E61A7E8D56C329AC6F888E63118C7411099D2458D7AA50AE4114EB651810DDC615B8F525B5F5F5B5F5B1CF85E7AD54B61E46360648477A6B5359FAEC6C151CE3FA7D3BF6D474C7853707078CC97F7DB76DCAFF30F0E08F7773CBFC364E4CAC606CD0B8F99E873C8384691C0C703E29D4281A52F8A75AA606B44976D945770D995AB674A0B9F1616DAAE5CE97BE0C993A7577D631E2B8CF5A24144A9482462D7806CA3B388AA535EC4740C1E148D8860B5C320562337C465057365CC4943C3C1C10A11119D5131AA500C716326C59851C191251ED3C55B1FD!
C71CC5AA1A836E2B4A38060915C59199B5F7D25D8B734E6BB2FB3B28EAF5C19B5202B78B4C9F745D64905C7A597898E612D059DA31EC9C6718AC7DCC694A6614E74B06C3438AB024184304E7FCCD1C2D6833B449C312BEBB011FCC5052B82B38062746CF8247712F08D8A8A8A6A0587627EB09E43C40D0D9B148B5305B9035B2DCE9D1B3ED6501AF5E98551EE9DC0952B9DFE90257AA7DE76F6619085911B690B0F6F72745470D5C3102B3B1CD30302F21D1B4824588BB8F4FCFCFCACEA86C70AFC36207898E542673E1EA78B50C9F07D4156757EF568FA9701431CB723BD7A71FE75C5F041280BD19701DCE374CEF838F0B82077BDCD1FB79CAB56A417FA8F9E348E64C578AC74AA184525BEEF780119E2186E6BFBA4D0B6D4F6457E16656AC7D5D2525FDFABFEC322785454B6B1D0173F16E6371596228C3AD22118EE239C7C7D7DDB06D3AB0B7DF12C1F5B5787ACFDAFE2D7BEFB7F0A06070E3A1652C03DEDACD8EF22D85D54BE6ECB922F8D571A821548EFC3810481C3159A0E672916DCF5B5F5DFB1C37AC7DD420FDF8D28E8C7D21D0B577AA4E6577307EB712D23014D292B3D66C3106DBEA5E16D659C6807677DB71086DCB10341B938A6F44CE9C626C7B6B6ABA523F5A21DE74BCF34FAEEAF28131DB4367E195E5ADAB1E3F163AFE3821B2A3F1F9BD59F2AAC8F959521A!
3157084FC3AB94BF4B87A8197AF6F2767CD71A35901511EA51B0F8F5607BF1!
3EE51FA5
3D6A8F1202E65709803640FAFC30BB266DB8673C40F9C49A188F1D8B91F6950CD1D5E1075C637A0A2E2E498FFD59365D6239CA787FE4C44FE3198705811E06BDBC9E1FD6865F6CC98586EF1E998F5C12B22060156386C146181D1C38B4B4BFD2BAAB993F5A359150109674A9B5013B366AF2C3DF76985F58E8307AD45C3A3594D2B3D1667656DB4DD9895053F89EA4DC315811E97022B068DC35C5680E719DB4FB31E8F5DC84FE9E4C026B377B67A34E6941D4C1F341E56D8DA3E568C5D471F61E73A63E2C4D59F0E8948791E04EDC18A1760A983A6AC050756DA5E783C8AD4E182AB2B62769EC9091E15711B3D769E7B5C2D121D24675567ED5FB9D3EB5C604F78C568B5C8388440AF3E8C570472F52285E2F14F9E67AE5EBFF09DA27AF43027AA575438F51CEF59B932767404A70CB0B51D321AB300C1D5753A205423EF407D074760D846A7C388B583A6EB8B4B3D9CFE305A06A50CEB28AA6D1FECF482F04F05842C23D8E52031F6E1FDB0C2C69ED805081F64DD308AFE851882007EF84EF1E9D33309D72B2A2ECC760C06378C5D78D1F3D3625FC4D208573DFAA5EDD5619191A84935DD75D37BABABE99CC45B5CA07EA5D3753CB01ECC3AEEE111F307144C585C641ABBE0F4C063A36884ACF05316E2805E8217ED5F79C9E952E9F5EBC1AC9301FB8C5E8FF1F008E40E8E0C8D!
8D7DDAB5D2F6A1D7C3D9A54D57468C63272FA0A6FD21B0B4B1D4ABCC388A5840491E85155419D3FD608541B3152E2016E4152672F4774E2B71352440000FC53355BF32E59835475608E62B17AE3B1856283DE3E1F4370EB5034A6508F44C56B85276D07A48B120ECCC4EDBABB6A52BCF5E1119C71415293D8BFF706163E94A5F140485ADAF4264A49ED2F5AB8CB7C90A23ACBA0C561CF790385D807C39287A9CB2F292FFE151489B835058C38AD9FA95B30181AC306A1C34F185332B70A54744C4198F988A91F4418A276B2332A23450340208C10BEE34FAA66E8C7951EA7F45641A527075507717BE9BBD72656140D64FB6B6F51CB3C2DAD7A66D7A6F0920302163BC709C7801340E2BBC38E3B1B14244740A695B7621F6CC257FD1E0773C0423D33F43C62B812B2F7DFAA5EF99D2402ED8C8D00E2A3A90111C19E40A9232E19D778E5DB9EA4F2F567029B68E1CF8F689C7CAA8BF9DF3B58528500082BBF7D44D1BC81104C1A4B8BE9132620CFEB7362239EE1CE6C8E324F883C31A6D3B4DA2C70C02699B51B4B964854B3F5D7F587AC636FF3007E3211E60058270D07ACC187CE74C427585A2BA6D078C00B2AFB3F51AC1AB46406FB17FB3F57DAC18CD4238CEB4F49EB3813262900A2A201800C1C82E3CBFF48C6F3EAA13CD884012BE2B9D3811F75DAA4769C028099B60C2B1!
00103EFCF4FA6C8F339E0BAA47AD07EB19849D8117AC4DF5278D016167AEFE!
A4387952
313C3A3434167CB8CEB78943E51E6EE84110F7D8068F0E13049F7DDEDEE5ABEB210B5087D30F5F4F85152A1423F5D0B2C1B11E2BEBAA396385F5494570C5EC95B6018A412E6BB6C7CE0094C0B1ACC3FE0F4DE9140BD77FBABEA00ED71570389DDB3198CE6D44185F38593F76F224C231E1D393DF5D38F9A5A2E3CB93595975A58157686005DA5DE9B1F2EAA7A38A2CD4885579F3E32E069AAD40948A620D1E01538E049FB35DE9115EA1F8F28222F86F1B4B7D17678DA49BFE90EA71C9EB0A579D55916FFBC2F8CEE1540F8F05D7B30E07F4347A04A2D8A1CFBB809C09BC3E765271726C41C4195B50D37759150F6D1F5607FF67AC6F130C38347478C1FED233676C2176C90AAB9A27ED5B6B7192C2D168AC76DC6F7BE68CAF577EBA0815E3D88273611EA52FF21F5FA8CE0FF7B55D7C78C1E0B1FAC59E1E1E4F9A1A1A0216D795DE578CE4D79DD9E915501D7C18E72C8DC9876E500478AEF470F929B8FAE4C980C09E33BEA9F95FFE14E095E3DB79E1D305393B37D2544B311A9015B8F3CC55945E0AC7F8497BF37EC7626170C878DEB7D46367A947A96F0A7162D9E1AC800E5F0FDFAB8528C9B3AF046471D6D628D61E2B519FA1EC3C6CBFE4C2F1A3876FA163439DED4E0F8FD2ABFEC6EA8E03BE7845428CA2C2118FF0908A75A9C753C5D8591044E98136EA8547AF5F08F7B86!
A040458216FCAF3F88B4B4EB21192D1B1A9A9A9CDCBEB61479BC804CD96AEE0B2C61CC39F16A6DCC5BBAAAFA08A38DE0D5CDCD0D6D671F761608C23A7686BF2F76FF2BFFBE5705B53608CD7FD9836B49B1BFD9B02F7C738060F75FA07EEDFBF3F262626D03FE66CBAE264E7D9A6A6B3FE5F1AA1A820BDBE4B4921F188E63E74D294E6894BBE14914A2631076196C5A121A1E909711DA92D6AE04D83F42BEBFA0BD73F1D05391BAF43B28DD58B0E5E395C017D683D325ACD29A020A135451C24E5316EC8C48946CAF040C11D3E76E5583A442C8A1547094604565D31360682E508C21440D8FF29E3059A5C31CD6934D2F08BFA266B2375EE6C8664CD14B4E2BB8A6A545445D67759E801A15A4646205E59E330646D14D11819D847CA76D03CCA38324C67B40EBE52862EC8280A2E2BB316B17E6C5031C6918A1735C50A264D9914BA81089AEF7519E5F1CD2BFA5A6BE26C30F90888AF1EBF00E5A58FB1A66EE882A21A576F1A1229F00F5050A2D091A6A3AA89AC49498B44F5AC831619212745A2B263341B1BA4F9147D8110863FF0030D7A6085D089ABD32173152636007EB5931CE45B7163BA7114C46A0D6988158DC7E026721807810E558A8B3E468C046FE1138DA011327B6870C82482C2E1685DEBC1FF7298F8D99C28CBCB8920C4A34C01024DA17F6BD0059BDCEFF0C7477!
8C7DD8EB6326367877F67BAFFFDA6BBF77728868C6DF7119058834BF76FF3B!
F5B6D541
C1B726C7BD8E188B73535E5A73B36EDE044D6D6BF35FA63507808935E5AE1E06FCE67A085C23BFC9FBCF07F71B7A3D07F986B484909E89C5DD8D4F40235A7DEF1404A53F87D4EE4D871D7B1AD2325DD58D6E1DFE678F77C8731BDA9B0A921DC7F07F974F0B721A0A6F15608A562ADF82D2B98DBC2E14E6370CAEC63C1C1FE07F2DF091E0DC743FF9463C71CD387B874634AF895B34FB8E117F7E19AF4A7E1A3FE2FDA5040FC9F34553B167A353595A199120D99FE1D848A40DE0AEFADAE37220D4CFF0682C8385CD690127E0C2DD6939826C7A6BAB3C1C1319E4DE13082820B4E09F7AA0B7FC7FF29A39C8EC2CEF0172624F5704A4A7AD38198B30130EED090E9B72140117081512C16282346FFBD1528B91A5266071FE6FC9FDC0F8F894989C9E2CE16FAA7DC45BE72E907EA36D66DCC0A4F492F5304073B169E4D4941981A83C3672BBCAE163E0DE0402CF5FF068208FA66631841983C7149FA7F670513972E0A3870F68AA2A2232520B8AC3A3CFC70F0EC94C36D0DA0F474C593F0C381079A629E3A72A3C19C7FA1E38B17C661937114909B0E3C4C99CD8D0D7343C67F076150911A2188A758D85F4D1006C7C3D1DA9C0D88A321F4D4F5A26A51C393700E2D7D4A2788EBC57D0542921B19EEACE74E0E3FDD8862E0FFE581FB20FCE0176747CF163A72D5C6FC94A62CAF27F98E!
4FEF2B90A44611CE4327A3A19EB57982443939CC6D4C40999A12EFC35BE125048E4645221A44C237B804C588A92D253C7DF4E4FD1447E3B0634AF870C38B94CE1D1D77EBC7149D4FC31DFD5F382AFC53FC1BAAC367370437BC78D1A668E8B81F7C18C1FB78E35347F8B19EDF932062E2109BD62F2198B81806A1B97C49B568F85708A2FA74909A697C8383A39C68DAE8DF60DC71F77EDBF0D00E7F7F54A78EBB77EF772A4ED6DF0DBF7FF6617A8551E1E81F7EFF2EC8A93ABDED4578474330D7E03FFB61E7DD17F73BB9329016D8851B44600E2AD0FAFECA0B1762220479CFA7DC84235E85005A03D7C20883C46D349B1E32960D933D391A770F2145D211FE282446D0E318C73D369E1C52942940A1DCF0285E38A4009FD2CC0C0D15CDCD760CD6535A184578BE13A5C24CBB3439CA8A0913E46DB30A2D5F92FE4F10506A40E43850BC445426497A72C3E3F3549188B32E03BE6328A86043B4D070F42023E874C4AE62F8246ADD31C58851916E1AE38EA14541678CCCAEE776DC3D7FBED3C4FD0AC1381AD825C8B37A3E99204097FF6A85C1B2CEB636C711519963DB5D3CB01E32A5B73D847C36A1DA74A257C7B7918626C7F4363CE9D8E6D8202A6B6B4BEFC4330DB8CC61CE543F94DE995E0F51945E9FEED809F9D3D9892EDA646C7B71F56A271C621A7784280BD4848CC84338!
8A504BC7796150B4E32E083FFC7E4359C793F3FEF7C37718871C9F3EB99B8E!
A23DD2E1
EFD871FFACE8CADDF0B32F10A3770BC3CFA6341DDB71BEE36E4AC7C3279D5CE78BBB90D79DE1E71DA130BEBC9FE2DFD6D154066113DEC09938EBB6C2C24E6E70E4250463B0572C85639ECF2F014815233FF3C5EF87EE77EC308D383EF10FF67AE22F2ABBDB39C8959D0F179101F1CC88A829E56C43CAD9630F1D51AF9EDC2D6B6A18ECF477747CDA11EC3F3CDA56988228509C4F4947D537DD0569C24CE71BD2EFEEA04CEB0484116B74E507CDA55241043DE979F37B363F190F8A068DE641A7E2E1D34EC57059D9D9030DF92931016D3B464CA286F0F0E07A28BBA76DA3C1A301FE079A529EEC409428AA9FDE150D97216FC01C4D504BC31DE14F1DC1DBE1E1C348E6E1B694E161C7918603FE15303FC287AC40BBC207D954DD44491906473437FBAC5EA038281A21D8D43971E14FBF3BA9E0CAFC73F21DEFCC3E7BDE4B641A4E0704C4F28BC2CEE1E0E060D4C0A60385671B46AB035262200E480D3A3EF11AE5AA1BC21D53EE738F47EFBFF812526EB4E94047780C373ABB70761B72AC4CE15808E21A1939C8C6A9E40D0520BC1D1ADAFC9EC54F0AC235C426F4835CC753474540F015FFA701F99E671B9A1A8CC3C3E975B347CB868CE185289AD5A38E398E5C534ACEC62BC1014FFCF12E34FFA2FC278EC19CA2E9E9C3A7298F1515E12F02140AC5E187298E4D0F031E3F8E399!
0D2203AA6E01C0F5CCD3F46D33A73E619C70223046F4FB9E9333137FF2453746C3E3B22F27ABAF18262B42C7CF663AF2781C7AAD3878D8AEA17B3213C071D0B3B386869FF947CEE9D32CFF30DC1570A9B88C4A07B1B0E3C548CA6DF6F7B7C37050119FE220B2D006A7680E23124DEE1FC27E1C691EA635E8539F95C7099898D85A91210849B37E3D7D8B82C36D24481DF681D1929DBF834A6BAC1FF457AC5C3A71DA365C343264567DD8B00EBB6B6FAF3E79B3A879A663B36C4943550D12E7BE25F4FB2C8DAD4F0F421C22D65F8587DCA0B8E0B4F090868F07ADC71A0B322FD61873F1CE60F41CD791D28F40A367240C094AAC9F45D4C97E0A655FCC4F2AF178F890E8EF0D2111E1155C74027F9EF3859EFFFC2BFD39AE466DB8BF367FDC3FD0FEEE8B8DFD171B7333DFD7EF8D97047489727F71DAD493EEEF007153B76BCE8B4EE3C7F1E3990829777B4BD78EADF71FEEEC3171DE1E1B423DEF6A2B030FC21789536154670D1A6ACE37241BC55FC8C6FD2BC460F8E8CD084DE9A66486523C1D5C3F5F5A6B1A17AEBFA74B62F8C04A15B24505FEB77EC4847249775EEE04651DD4CD523F5A44F45F5A6FA41C50E641CDB701795A58F388E183B71824E937187E30E23CD3FD21DF3BFCCEFE4685B63144149633D8210FFDE86D52EF91746064F9A148A3113EDD6588F28468787E89!
606AC6E4DA335982C7874043E1CC1022814B01837A4407788CC41EF6D4227C!
4D1C2223
C43328DB6FF583F41D591ED6CD21EF7A0694C31A6500CD2D0C74823C67AE3E340B960D51B132FFE92BA382B58F1DD05C5850B0A23ED3D5FC90A868A42A73D4AE7C109868D87830F67E1181D350E0E0F8B907DE98A319CEEF149C700C786320EE982AC704C876E195170D4945D115D617586A3FAA0605ADF484C82674DB4F5820A861F2E04A2B98F9F686321DF7F7DC1E2C58BD1012E06E7B7397A79ED5FECE5886F5E8BBDD8D1B4D88BFAC3FD5E5EF9C0A108760C9FED0F9B5D780C5DB4B16EF659AF60341AC686F0D967B3B22A0E1FAE08080CC45B17E7E7E77B7939E6E73BE6E3A16327BC90FF654067E7F097D5013F9D3B17702EE0FA1FE41182668442EED6D5ABD396ADBFB17EFDB2CA889CAB09390911111109F4853FC222927B7A4E545676452427CB0317E7FFB47F764E8E674C7ED64F1B9D9CF2FFF37F05A47A860770E90181B3C33C6371EC3FE7D4E3DB43876F0FCE9280134424E48485E54439CD8E9D3D7B764A6AAA4B9A85C5F72E2E4B96249F103437CF7886E39B1933962F9FF1CCAEE0504F4F7272654225BE54AE5F5670021F950527AA6A6A82060A6EDCA83C7AA9B52739213921C13376F67100485DF0E7FFF8F39FFFB6D8D3D32B2060B14B54F2A54B3B77B6F654ED3CCA1F55872A2B2B4F9C38511911916C9B70AB2BA127A1CB33276DBBDD37DF7CF3DE37DF!
2CDD6EB75E10DA3C63E9333BBB673366CCD814BFEA5951C1A1CA885B8BD2162DDABA68FB86E58BEC701415151538B043152496481E48565E6A8D88B5D81F9B1CB1FFC337F71F8F8AD9BF2030C173F1820F8FCB4F541DEDCFCECE3EDA1FA4AA0A02EA81430E453716E163FBF6ADDBB76FAFAC3A21978745A5A5A595FBBCF7DE8C457603B94B0549CDCB6FDCB8F1CC2FC3D575DAB4691919454595CB16E50263F9F74B6197893E1B96DF702D707575CD70B876FA76AD50289118F4977656F5DC4A4BFBFA970FDF7CD3292139226AF1FED8E3A9695BE5CB4E54E91F894BFAC599252A1C007D4D55F06C834DF9D21BCFBE4FCBDDBEECC4B2ADDB6F6DDFBAA17CADCF723FBB8CA5DFE7DE40464C2BBA71C3EE999F5F46C6B4B7DEFADCAFC8A1C06EF93357BFF7DE5B3E71E28AEFBF5F54E45094E1A0B223085AA1C4D0D8D8A8C797EC9D27D2DEB4FFF387E7D2D222625D8E9FFB70BF53F2CE9D47FBF5865EAD38A824A8447BAD045F7154152C5AB16869F937EF7D54BEC1CEA1B5CAE190C38F9B7CE27D66642CB7B958BEFE8460D31B33FC9E2D6B1D78F66CF9C4774343F36E66EC5165BCF79EEB8CBC4D6B665E2E07EC13AD0E457B428A6EF8A94EB76BF48D127C36EAF52BF5872ABFFEF39F57BBB824B446A4A5BDE97C6E596BB65EDFABD41BF4E2201C25701B8EFEAA135DEB5B5545!
CF26CE8B8BFB66C0AE203324F3C8EF6FEECD7B2363D39A8B2B06825A05CD93!
566DB22B
285A3A6386CF449FA4C949F1AB5CF7383C2B9FF16C934FB1CF338781435537D6AB5499A755AECFFC1C4E0BC50F0C121C7A4963EFCEF54BDEFCF3925817B9938B8BCB8209FB2B7BF48DFA5E8944AAD48AC5FD2A872255504D49FFA3AAED370E05955C53F99547C7D9D9F9A9B42147F6DC9C14FAC6B4CFE357CDF0B17370403715BACAAEC86EF9AAE61933BE5A9594B7376F959FDD22BBED7619AB3E87F1EDEC06ECEC54BBDA4F9FBEE63A638643FBEDDAF67661FBED471A49F6A15BDB57BF79DCC5E5DC874BA2D2BE76B975A2B5B757AF94F46A34B58FFA4B0A8A8A82C406F1AED3250505AA9A921278F39B450E7B101B197BF6E4C537674CCFC878BF79DE8CA2226A6BF366B8FACDD8E7D39CE19731312F2F1469FA4D51819D5FB9CF47DFFB3D7BE6E0EAEA702444A8D5F63BF815855CCB98E6BAE7DAE976756376EBB2ED4E16B14EFB5DC29CD2A27A5A77665F821B7A35C2A0818112AD839F9D43A6C1A0BD864076509538383C5B6D53FE0C89E55AE470C4F58DCF711AD769CD793E7EAE3704CD53263DCFCBD8336DF3FC353E19457E3392429B43D7CC5BB17B45F9D22284B4DF8C196F644CFB51B54B28EE77282A72CDD8B42AB4F9F369AAF6ECECD6D69D272222E87EA0FDC713765ED25F3AAAD74B84FDCBD6DAEC1E7028F22B2AE9370877B96E7A7BD334BF4DCFEC1C16D96C7!
9DD66E9D26738EB11A49FEB9EF721963ECF705D0108A179B3A66EFA3C292E7ADE2A3BD73D7E6FACC95BF3DA5F262E1A106BB42A3F9F55CDF1D3BECA3892293E7A292848E5EAFAF9F3D02979CD7B8405EB971DAAF2684D88FDDBFFFACF73F2842A0FD0D08945EB0782767F3C6177914386DD9E7EBD587DDAF5EDF8F73F5FB56995DD9E5D0EBB374C78FD9715F07AC1B56B7B3EC95835F98DF75D7F5C5E2E88DF7B7392D5E6CD6FFF7E53E467C8936BD7327C10977EAE25BB548B325CFDA67DFEC6B4F76F4E3F72CD70F468768D4A75CD35D46ACAF37857D78FECFFB8AC45DF93107B7CFFE2E36109C93B8F5659FC7FCECE36254BD7953F5B047B9568FBFBC5A7F7DC9CFCFEF4F7A7C1FFB8F01287DD3636B94B7F2C08515D7BBF39B419CFBCBD66A2E0E694C993274D9E1A99B429CE7B0ED2E15A094210FEDF93F19177DC1A9F551F7CF0D6DEBDD3A75FD3F667D788C5AA3D7B56CDCA0BB50AFD7C4DA2FDB2C64395094EB1A9A9510909B70EE90B80C07EC3A2B56B7917F6C333E2F64FA6DFB49AF4C6A4E6E7CFF3C0040EAA56CA94906BA7F73437874E9E3CF96673BC0F20EC9D3265D2DEC9494973BCBD23E700C3AE1220C898E13375CEBE7D793E73366FDBFBD6FB7BF79CD68AFBF541AA6B7BDE9E65B5D76ADBE639DECE5BFB936FDDCA71F2ACCBE909733AD49F0B04F697132!
D2F4E7CE69059D2AFD71FD50B777D72E47D5C42E8E42993A63CCF2B9EF7ACC!
0AE0008A
EED697E9EB76DD6B6C993F2F6C509263F9F3469CAA4C9934267EDDBEC6D6919F7EEC4197B5C9F7DE3F3D99AA4F979CDA1F153A74E9EF2FEFB7B334E6BFBF5FD4141BB5CDFFE6072E8E4BC7DC5DECEABABAA22A292C3C2E006A7B0AA82D79D81C1DD3D6EED47CF54DAA01A83C12011AA3E09117C3B7DFA5B6F4D99126AB52F327161F9A2015C86EBAABCE6F9F3677D103A65FE666F9AB24C9A3265EFA4D06DFB22A32D131323A77E108FCE62B37764F19C6D7B93AC66C1F5EFBF35E5F34FDAB5FA7EB1F6F48CA991567B4393E2A313EDED17E90F45244445D9DA4638451CDA0000809078EAA389760EDA4CB141A216EE0A0939F2F3118140F0ED5B93676DF6F64EB477FEDD8A8C0CBF89D3DEDFB739FEE607F3376FDE6C090856CF9F5B854E7E9EB46F6A5CA2BBE59AC9569343F336E3F571C5DB70BDCFA710C6D09B19A76F6BB5EDED7B7C36CFDF161A5FFC5AA2BBBBF39F96B55646C5A686411324A7250281B3BBBBE567F3DEB373DD2514EE12B687B81E093942080482E9BFFF20DAD2DDDDDEFEEFE5BB977F35DDF57DABC94953B14652B1A5E066E8B659B3AC429392A646CE8F4B4CB48C8B9C3FEBF9E46DFBE65B7A2759594D22134D9A8458B9E9FAC9E9DBA7F72C9F3A3F69565E7CB177A2BBBDBBF3846561A90BCE2D088CB54D5E6D6F4F4600848F9E6514959CA6177F3EE3!
C8270CC2B7823D3FFEFEC7E56B6165CB8F36BD3DFD081C63B56D5B52A477D23C4BC1DB3727CF9A959734F5DD79AF454646132E2B1C7B6FEE8B8CDC6765F51C08A6BC4501153AE5735757BB4D6BD64C9DBA2D2F2F321110EC9D5FBFB5F5C3FFF8CFFF78333021D9063FDB0382F7BC3576AEC8888C3D196FE4ED253F7CCBCCE03ABD68BADF339F68CBE84D9F4F7FC36AD6249C7A6F52D29AB844C1AAA4B8B8C859C5DE9633A32DBD2DBDE3229B43F3426745E67D3075FEACC9932856C90AF8F23C34694E64F1BEA459B3929AE7E072E8AAFFB4CCE23F1084CEBF74B5A62D74774F744FB43C053F643884B836C7BF91B769CF9E234798198EB063BAABDF269F39796FD0554F993279EFCD2444E329C1AAE6A9C884E839C8266FEFE8C87D79F1F1DBF6ED9BBA2FAF392F29CF6ADB1433024ADCBCC8F949A1C825AB78B8951038AF5E6FB165C9845F7EB18838513011B0121327A212A8AE15ECD9F3F9AABC35D33E09095161E99F431812C29031E3F3CF6FC6C7CFB782733F88F38EDB5CEC2358D39CB72F320EB4B4E6B3C8C8B8F9FBB0C4663C133935292F69FEAC6DA166003826CF9A1FB92D3434749B555E1C2020FADC172DCBFDE5F58F6DAAAA4E9C70D8337166A2E5F2A56B9FED52153984EC796346C69ED3D7AE8520275447E82B1D217B323266CCC898366DD6ACE7CFB7C57947!
E635AF89167CB62F699B55E4E6B8B8B8CDFB8AE3E3F76D8EDBD61C8AD804C2!
B8A993B1
22B300FE3DB77A3E0BB98C1C0D4D2208F6EEF61F97FF896562AEF8685050C891E53397BB3EB3834E825EC0EAD7769DCE54658604310421AA904F006697835D46068AD41B08B3597392DE5EF59977A2A0386FDBB6BD93AD36CF8FCFDB367F7E7C52DCE65949F13793A237476EDE1C373F0F2CCACC30093C0E0643FE6E9B0408C870841E2519B2C0FE75554B55104C7EC3AE644055A26DD73ED264BADAA9DA8525104E99210EAA90924C952A042F5195F4EF2982429CF679DEF3D09B37D72006DD053ECD4956A1CD939EEFB36A6E4E9A9FB46F7E5ED2E6E839F16FAF593311393375D67CABC9C81F941104C3145865D2A4D0C9B0422248C89E1D1415DF6B6B33718D2A689B475A00D0B40885627C92822B29513994A8D00484B01F824A54AE45767ED3DEC8CB8B7F0D6495E82C28DEB76FD6075656CDFB662559ED9B5ABC26293E2F12E1F9597474F19C7920AFCDB342274DB64224902FA61097A3BA8340100989CC1BC40F0B5BE70A77E14277696FD7CE7DD4DBAB6E518B856A89243BBB2628A886AEBD5F4C8F2025FBFBB580EA9A91D19C3715E492E8EE2C98579C3415D78A24981A17171D1D3967AA0F9217CF8145E6F81447CE8F4491988485194F4D825FA07123F102770600EEA0AF8B6A6F0B3333B18246572B93BAC9D44AB5542371536B0C3535FDFDAA7E14EE6C40E83F5AD!
5DFFFA81F9AD235E3FD19442E086BC1A9CF8AE7CD29DEB7A6785E71B4A5A565A2F73C1F9F7933E939F744EF53F3E6440242A8D5DEC993B7814B9E5B81BE118E8491967636BBC23DB7465DAB11E22A33D532A954DAD7ADC1A1566B2412AD46ACCDECD7025D4D9058035DDBAF85C8871D5C337C88629D9D0596DE33677A47479F8A5B8810A308030ECBCBEE3CDD26267A7B6F9E1ABA77D6B649CFB7A1964C06991397C2118984E0E28444160B36ADC21675AF460F6BD7A865DDDD3F740B85428D10288490B042718DB63FA83FB3A65FA3D56BC580200EBA760DBE9848AE7C5DE0CE5F3099948A2D732EB18E335FF8405AC5DB4267594D7A3E6BD636B0C22CA409713B3361F9C0047BF6E2DD52BDA445D7AB7E64A809CA161286DA76AD902C2161711924D606F58BFB6BB49A471A2D0E8390EC6067F791BDFD171304CC167C6CB3655F3EE27F488C2E2E9E0A82A2B4D8367F56687CE4E67DFB928AE318E602AD0DBD66DD8A209944D2D222E9D52985D9E48BEEDBB2769841AD8131901704A1A6462BAE110BE9375A2D542EE80399B1EEE309B0C2AFEB99BF3BBF7AD85B4627C5CFCA43248211664526AD9A4F0C5A6C49D1E83E3077C06EF7223B95466630281FB829957D3AB5465C937DFB9E4E57DB8DE01076D7AA859935E2203823534360C8411ABD5AA34174AA0A8A9E5DB49920F!
8F592DD5F627805055C51BC6972DE145236A1F1F3A726CD89DB3C27691EEF8!
8A5998FD
0D9CCBD5D9B596350FE704FD6A756AB6B25E21ACD5C9D5229ED561B343AD95CB5161032854283E69150CB20A0D9E995186A5441D75425CF6C6C04EEEEE38B25FEF3F58F4348F42EDE07570001545C349513EF397004F3C484A52AEDAE4C1C12499FEC07595FB75A5AABD388B3356E6E5275B754AD51DFD6D5AAB5C2FE4C83C6A055AB79089A476AAD52928DB8016D2DCD15809ECC8B5DFE6D08C040696105869EBA39CEDB32D13271DEBC798C55EC5F5FEA505203432B918832373799B44FDD8D78A811CF8549944A9952098FE8C8231A3520E82414A3F0820E0129118AB5C2A0A0430502CB7108EEEB7E1302AB0590B553ADAC3E88DC3C7F4E34204417CF0314E4A25D89B01D277473EB55BA8190100C7DD26E9841AC96018F52A6D3E994B53A8A4AB51AFF946A3202E84223D4225B109862437695E094A579E5D76DFEE8FC9B18E8722DE72441F583179322E32C5163F7A14A24963B08B5EDB7E78292756E3A9D54760F18C81C5260E806069DCCAD056650338A521357E95E6290E05BAD305BAC111A0417BDCD106CBEB1F97756A080F84BFCCDBD7B9FEF9B85328E02BA0F145DAEBADDDE8E56BB76AE4E874FA152860B578299652024350049A52D80A1A30501432D11AA75B08304102464148A1AA4A9416013678E478BDDABFF2B02465C0423D1327A6AD2DEE7F3374FDD573C!
1F15658EA54FC96D6682B9EDAA1B05F8DA5DDB0D0412A55A296B516A109E80E0D6226B916245AC0A6C12FA821F241A0641ADD3696AB285D982799F512620112D727F0BC2C2999689BC2E4DF48E8C6FDE373F72FE07FB92F28A8B3F2AA25183AAC86ED1F2B5EEEB8AE66A11824845ACD2828B574AD4527628996180A01B4F1110209108CD6E91EAC4D91283E0D43C2CE1ECEEFC666EDAEABFFEE35F23D27D26952C568E80610EC4DC0753A74EFD20A9F8233B9860D7EE75544DF0EE757E1B768BE7CA74B082B245296D6911AAFB10152DD207141EB03E5B5F2D4105831D2464078D04F1A3CED62B05D1F3BC71928FFFF84BDA768B2D5BFE35101267CE3BC5A4AA3B2546DC6728AA73A2677AC7CD5B1E72FBF6FF7178DDD9FC0C52DB7DB7F0FFCC45D44B5B94A06AB54489C8708341A4585928D1C9280000907E94A859702034644282F0D9299861CB6A0BF9AD5C8BD5667E7E592FDC2D235FA392CAFBC23D6EDE9C357F21729A786DEEDCB9AA72774269EFCE17EECBB92A3505BDB257969DAD23A3CBDC1E48658C33B12CEF08B5B44FC9D627CA20B7F5E905A736477AA32DDAEA22BF9526DFC043B0B71F4702EB4793382057B8534C467F563C67CEBEA91910A2372EBA13ABDB134941C5B923707283E8DA646EE27EC49A5AE9E6A67C4001A153EBB251C4751418080F3E26943AA5!
8E0245223815173DD3DDDE469E1A2B7791E7DA9B8B84190483306F21AF5209!
027A8DB8
3579ABF27C4E9D5A372E9912CDCA895EBF9B54D35C9D58AC012DC10D445752D023D2545C0BA6C075231CA46A864049B90308F322A3A3DD1357BBC4C6CA53D3B6FF751C015FB349B458CEBCCC0370675C6D6939277ED5AA35DECCFA3C0ADE4B44F097D7439ED4648AB54416ED321982810C8E0C44FE893558564D18E8E2198348198435C5C4B9DFCBC3A2C2E4F2F57F1A570CF62C1E98F5CD52196B5E2C5F3EC327CEBB7855DEBE71154FE295B7C1E50D13CA77170D14150C142D2B72086A075BC9DC90113A99B45628AED58883AA32790F485FA26891227405F3F64D4587B85A7EE74E545757AE3D6F025E38D93B3B9B9B05FCF6F23A9BDDBBCB4FADFB6826BA4F9FE89989AC4EF10A966266E1EE2095C300C4715026C802404AE00B508414FC08A5A0A161606B8D584D7CA1EC7B690906A1B8B878A6BB8D4B6A6C6CAC0B9F11660CBC77DDF9076B97FAED2E7F1D8AF1F2EF12292A493D26F2A940AF285FB448A5D5D64215422DB5C3F10E8B76AB6A51A5503A74B5284750B7350505AD416210D2EDEEDBDD521D31A952DAA8EC15446F2EFE2032711D4170C97DFDA5267ED9A6B0878936AA81EFCB73772F2FF746F441D49E5A730AB53291D9E8B2BDFDDA82FE4CB1100BA21EAB6B215634990E8B960EB4D7B60BD5B25A35F422C850452E1AC8ACBD4D477BBB16B5ABFB41E3835E0!
1DAE9E262EF7516A9A9A91680F0F270B737071C7D2EDD35B0A1486567F391CF454B4244A9BAD0D2ACE42FAF5B5BA07D044A40055453F653DC6BDB331D8A54ED254135424DAD460B808FFA55550345F8DD6DE1AE10955D51914377B75AD9D8A81378C7CDF9604E9CF7D7B1A9A969B91FBF348039DC13897CDC6FEC0A7175B8E6BAC2671E328241A046879A797AD965BB01ED23A150A904EF2B5921862A8150697778E69089A6B2063A05A2514D5B042A075566A6CAF52B9F723BBB22D5EDDBEA078D2D02CBB862205867218FEA8AB0E013FCA50BD8E3753637D0257F12B2E7C71933FC8A2DF918A4AF7C3024BA5F76A86DD710D149D4BC3850D72A755443B51BCA559941AAA01AB14E53ABAE453B5302CD4AEDDCF2E51976AEAEAE9FDC56373636C211E8E4BCBDBF97CBBB6EFD62CFC7BF79FDC47530C1EBBB6FA84EC30A8269F19B36C5AFE1D99AEFE678AA70B754B5CFD5B8F15C03B1929D09218290B8DD5E5BB47611757955415A528CE871FB4BFA83608502BF0C34F976197B3EB92D018468D4BF39DEDEE5692E694E7FE423C06C0BE7B51B50046F0C386496ECC9D8F4FBB7A61F99B6E98D62DEF83C61F318166ADB35129E6B0C90E658B146580BF5DA7EBB64C30A87CC9AA02A87AA9A1AB1B8849ACACC9A5D8690A20C3FBFDD197E3F66EC39DD2D418D888CFCA078CEA9EFD!
35C5CE413C6C38F0751BED4DE7E375AA04C55886BC657493F1E9936E7834D3!
3CD8CE86
C2E91EE89CFE6C20F7D0F48B0D51080A04C5841D6DD276C6F2FB073D0C2FEC845343278AAA43F138189405DFED1EE1FA7F94DFFDCB55B5823888B2608F3566CB548DBBAC4FE25021C7FB75B6ABF811A0F6D66490842E1E611C1EF3F58C343308FD788C0BFB9565B2B25086E3209B173B698CC2EE9530B6B6F970CA8D04D0198584BCD4B498D18E4BD2BB3C4CEE6222C31FDFD6D5FDD16DA2123E2A0017CBEC9CD75495B6DF6334F073603362B4A6E6B6A1F6934DA5DD74242FC8E84FCECFA86A5D9FEEC2597ED2D97EE827613A28F00E141881858A30016E893486A6F67AA4AB0284D166A353A71504D0D847B3BAEE8FBB52B067E9CF6ED1B49BFFFF993DD0847EFE835F37C72D3725D722DFE4121E0CE87E3DF8B0A80A05D8DE2A2438F5A52722424E49323AEAFB1347819944B4FB797B8AA2007E00719A524556B54C6BE3E68B57674B0E8EF80405CABD6A1AD8460D6B6C311E513EC5C7FDC337DD6ACF8239F1C11A0953FF5D1A90D4B735D2C5C72574F701FAF11CEE5412A7409EDB5B5D48CA8DBDB3355AA4F8ECCC898C81098B9D97EA1AAD6E1E2EB7673354AA541ED4669413588F44A9FA4BB56A8BEAD866FFAE1884724D9334111E8ED4B0A6C2614FDF863C8CDA993270B3ED9836ECAB2DC66EDF76916162E5BB72FCBFD986768D4C122945CE27B1D983FA8E88656989929!
0CF9C867C6423E0A7912BB98D9FEDEBAC4A57375506C4C8DB8F5A12A400F402529A96511A26DEBEF0F42283CA28762F2447F91CD8A239F4F9FFEC1D449CFF74CDF040889DF97AFFE262DF0B84B44C47A973F998B94B34D26108BB56A4D7B7BD0D2D7FFBEAEA636287357884FE2475F30047C503A7F31A0DD55B06E614189161A8964222A316B27A0A06BD5DD1A03DAA51AA1B65FAB7EA4A1B814A3B36D170F94BBFA7DF5FEB6E859939FBFFFD62A34F7FF37376DFBF6D8D4E3A9B12E6916BFFC915568E7850570A45EA3D7CD6D772877B7FFC7172AA121B3BDC4EFD45F12C70B381B84FFCECEEE2248ECF2EBCB846C7119C2D20DC2883165B744689048C48F50A51EA150182818B48847955DC6EFDFB78A9C7A330FCDB20F3AEB8569DB6FDDAA8B42B14E75494B334FD497526A095B90592A36E05E4773A24C57BF8FA0E913172E64CD0533056F35E78F8BD044114149FB20549844454474774BBA2506214A08A41B595548DFB441769BA6BDBF79FEE4BD56CF2785C20ADEDECB97755D3D107BDCC525D5C5E5FB5F9015EE5FAC50815F346877DA3337B06BDE807308B521AE3EA8094B5BEDEC6EACF89D3DCFCF2C2ED72D13A279D548492ACAA4884BF45450EB4A52CFC8696A6B350603E36914AD1ABF4D6F59CD7ABE97363B4237092EC745976F757A1AE594E60408695B27B87F!
6C5F3E40842A44A1AF6DDFCD0C9F588453A0C8EEF1B174BF58D53FA06A6F2F!
72679D3F
6170FE7860AE0CD59029226A6CA11AFBA861A0AE41438A49080DAF113208064028CA609B5593270182ABC072E6BCF2ADF2036151B7E4B12EB1A988868F2754E9D4628DDA8008D2A82EDA53ECADCD440BDC7DDAD5D5CFD2FD86F651FF40C82ED58A75EBF8EC00958BA90C0949151204C240B3064090299968A384C1570A6FA156B2CB75531E8D949F873E7FDEBC078E9867B348EE541776EB56EC46A7AD100D5B726BA1C21149B0427BC1EBCCDEBB719A5A61889DDFE796A082DAB92AD7CCF61095EB8A85041046500BD93232B202F5B3040144459429AC51EBE839E8686D36284A2336685DF326B1C1515E6852BC9F20D172DE5A8BAEBAD4885B72CF54272744834581462F51EAB5BD1A6DEDAEA5346C765FA86A570BE78AFD36F9F95C5E219EDB5E9BE9EABAAB7D57896A030B5E9B5D42840E542113A5589F4584949F36A0D1D76998A412821F6B75C21A71BB6BB395D594E6E6BCA4A4E2C8CB82CBDE176DCAE5B1B151F2BAD8D42824C5D7EBFBF53497D128C14B0533ED898C51ADD492DA5DEFADF53BB570A05B785B7B4DE5F0A34AB8ABC4F562E2C28BBB0B32C5990634EBB8F23EE26A29DF2DF09DB55A4C7396710820C99A9A76D7BCF9F3ADF27C22E3488509DC2DCB9FA142DDAA9347A5CE0EEB4ACD4D3B841462432184DC45BE6C1581F595B5ED7EF33EB2FC5D6637B24A1!
502F1539259B2ABA0A8C02108B2448C159432487489C100BFD732B224083235646D2D13741A614D26345D667F7BC62AABA4A4397134B772B717AC4B5CB76CBB4B5A9DBCAECEC9891CB1BD9FB4288237535CB4D69E0FC620A14EEDA62BB15B3A33D1AEBBBB5BAB7208A1BD0EBA4F24B3A4065A04B4A791D4D292A001363C5053DD62EE208650B23113AC80A7B4B042311B9CB1847216AC9E30C16E7B9A4BACDC332A2C4CEE62915609790116D58A07962E64AD8CBDF3066DAD4E22ABDDE5F09EFB5A9550DD2DA4FD0D7E7321C87CD06095DA142827315DAF5AC903A0A138AFAC919010B034960ED2FAB10EC09EA75841EED71BD20021B5EE4E4E424257ACCBD6AA472054A136B368ADBBB3599ED9A15482F3B525E5F6364150FFED244A697BA1BF0462906D3250566A7808D934E6D5A08B92B1FC942AF9490F20D440D281A96B3297F2AA87EF1E055B211AE530022044852574A56D6D6D45816A5721DFC6CBF6C72A8434E2CA61D106FB09556A89EEB63693BFF62A9AF1F78B69B24DC36564257800C204393A1E8F8441C2A2110537285383AEA2266829DF24B2ED14670192E1CE2D97AE9CBAA83B51F28408F9D62ADA3118B0F9C7CBDED27E42899A20740F2C5DF1F15283BA4F36B77D57D0CB03178D3E8E8D97256A5C39FA0561AD46681E36B1EE91461BE400D20DED24A5778F9!
B8074B0C029B62E21C22922C1B30E8E48E88975395175A875A0DCFDEFE0DF8!
51318867
2108A5022EDCE76D8BD6540D622D3CDADD59218EB17334D46EB8BB528CB0844E225438D160424E4F392FF025EA2A6B22A484C93586DD022B3320282BF7F2188AD9BED19152B2F74AABB1391909323971F3AB16CD9F7BF94DBE015ABCB5F87319CD7539D1322BB84058B827A116773E73ED25655D564A276D6504C640AD9905FC88A84140511D6D68CA725C38076B3167DA683967A5C4DCD8DF1299EBDFD177F143845793A39C9A3C2A270C8A33C6F2524A741444EB0489BF08F2DDB17FD027B4D08C2DB0C1A19CA6E8DB85789767DEE5C9D249BC563093801254DCB3661241AA54CA704FDD5A01468D4FC24D68C4146F56A6040087D85B45CF67FEDC707237FFFAB401ED19390D3639BE09B9C13E61425F74C96BBB8A4B958C8E5B1812E5DEBD3B6383BE792E8D48A3532A910FA504667D6B92959D70203682912B4B4F5426440EDBC10E2A89D869D3AF3E0D16C88DA1A079550869653AF5FF6E69B5BFEF4477CBCBE65CB1F052EF284B030FA8C08937B86C5C6CA91215DEB23222A7B2A13BA2292B72FF98F459A76D4B820B14EC7271A4BB63E3594201A032D3B687D213FE857B3C60D3D2420E095BA710C4A5977B62AA81DC92969A9B2D8B265C204FCDB4287401ED605528AEA0A0BEB720A4B708A8D75494D93A7C9B7CABB706CBD752BED8F5BC1EBB711CE383FCD8ADC640C07!
229FB61D6104F649237E21429245289A486244546A9D6E7C9AA294D68A6B322127C512C9B2D5BF6CF9700B7D4E98F0E11641443212C1966EA2CCF1CC2108D00CB116E8F453A1A1E092D57FDDAABCADAE556752974EA30335ABC932994E9389EE9101A08C240C7418C42C42A9D546D9D2295F1ED26E8AD3B91A7D6F95CB6A0B60F8F0975F565B58AC5E22E8C2EAB6097484D585E538C53AC9A19DB0F856A734F6EDEB3F598865B5100B482974E932947D35EF8E5A31CFCB42E609C68E140C90053564328A059D52FAD20CE069F415528D5ABF3ED7C2C562C992255F1F4FA3B0832370FD8420E74E9D67D89D584F50652C5DBF3C1618B6CA2D9C5FAF92D60A596B88BCC62280A0A3699A8C08979A45A179CF896D33A8898AD95E1CB5FB40C020B4E0915A795BA796889586CA4AF9F1AF8F7FBD1F9768E1E2922BD88A4CF48CAAF38C8A72024186C53A39C5DE921384AD7801502E71FEF32125CDCCA8CAD092B026D51DE95C197810FD2A5D3E6DB25099A24D0709DB6DC9D64AC8097C52D09CAF458A948543C5BDBD427DE56A9784885492CB3804B13D4E4E9EB17572274F4FE048880DBB8314614F5AD0F372F8ED28BB32CA7C145B6115E81012144D930CCD720D7E5D5B4B9A94AA948C1FFCD3CBB3C51A26639524EE2993293894C848A5B4575F59B953EF1B9B8A703B9EEB22E83A!
14961376071F6151757561BE77A2A866A7BAC4A6B9B0904067B1EC281891F4!
3FDB4E42
A72C260C14946A6810AD986FA5D91618258A44C2AC040C12998C2812ACD4472FA64E4B03FA52F682191A5726B81C47F6C522162A7D290E7240CE514E9E39BE60C91C22CA5B4EB002EC90762BA2F228AE4D27AE41F181470C428301C9C797212C44FD3AA52B49740956E1773C9093A0525A18A58B44A49B140FD069F2E398C6C6C69DF2D83AA73A27B95C2EE8E94142801D936DC37212927B22C2C26015A447541ACB4917F9F6B4437AA544A94139D6D4EA58FFAEA155D80895769700619C1734126A68F1454618B20D3A14168992C96A4040D556F363DF16A5BE15512727089582E4E488B03B0909B72222A2802121CA33D609E688728A65B1F23579A432FB01A91EAC065E2049A06425A88FCE4DBF2542023AB6ED24615B0D444AD25A43B6504A66C0CBBA65D26EB290D23C846E696C4D937BC20A51B111824A3033AE1B11D01515063C514E613907502E9CF8708521BEDE7AC8401B3B08BE6C9D1BEB9BBB89A2995E576AC80C94252451B13C1BB7803674B0041C26E3A5BCB4BB4FD9CD7757F473AD54D2EA14EBE974272759BE15D48448C80100206104058E3C7035ACCE89B103D81AE5E250B684824922CE1622C2686B852050CB26653B8F100BAC489101FAA46E32733B25534247F26E9041F4327B00789F4C3657ADAFAABCE5147B75A747B29CFEA722E4A39353545844584!
232E83A2AECEA9D9C3B4EF81563A81EBD5ECFBB5102F71A345272B5922F55EC21C2035460A0BC603B3E4CB4BAA1B5250585E65E2D35CF80D42C2A08244C23BEB4333921C777E5CEE42E4157581DA8C933CA36D996958B88A89C3B51774012759EC010BBF5A894C6F96C2F85325CAD247DA6D43149283107A5542A21FA34A0DF61A25126E3AD000685A8072A37B639368E80BC810B4B4ED8B9D323011911D1E5999372E74E14B2212C220105232CE10E2051A878A274276723BB69EB596A3E2D7A15C80635B54DDD92BE3E255BD14DD647F12A26254FC947A58CB6D1F1454D630EDAA4E32D673EF4BD8DFACAAED69DAD5DC8884A27CFAB75108EB040046148084344C20D708493A7BCC720314F96953F10D7E17A642CF369C7B1AF4F66DEA57663CB69A09F8452A2D2EC1A9E1CF95004218959E7FFABAA962825FA9EAE849E1E79579520411E76352AC5C916FC4025B3A78795CD1C8A5104696BE303759F4E59CBF6E4798EA1948025FAA47D2FAF895DF15C580B0C6EA03A6130D400043C564BD21986CF3648CC829EBD0BEECCD667F79CE8A9949FD00B22C2E07CCF3B61093DBEC9949709949F38E09B2879585523025847CA833280E24A26ED7333D31C795746974F5FF0CC5C371D0DB7240652FC445544E4624A5890162F23192B5070025363F6D1435DCB2E35522C508192531!
878B2DCE08F3A1CB1CBF48D0F7036BA2D44D90D0CF7DC18927B34BE508F437!
01B87206
3BBF67D6405B184FA6C1DD54F78A05668660496B7640D90A644D278E94465D5831641421755484F79986D7282BC2EAA2E16CC48694A87BCE7C103B00A8946F23C3BA46EF77EE893FE700F7EE97B19FC44052421E08F7BCCDC6C317A1F6D88A240B259A494ED13D39BA803D72B1F541D3A2A7920112002C30EE42484DD62D5EA0E3E0F841D883A9073079EA8DCD9F240AAEEA6F33308CA3E373732E8031AAAB144E003D1BCE746FA44C62708E2020D3EFA17B4763AB58632494D31C15E87BAD9CDAA95E1A884F629E94F79727250322212921184576D6D73AE26E023073FB4EA1FB0B7F264D8DD875EEE07B71FD84F6E6EF7DCF8EE9DDD0E409BF1FC7D092FBB7A663B360B0612A98E924249C30704A3941983368BCD10404611E86200018A21EA0E5C0103809AA212F42D0F9474838C198392468AE6040002BA23837DA07A53092786646C353EF03233949AC918760785448C4E448A7051B319AD1B4D6901219917AFA4A3513A796204617AC6DEDAD9D8027AED96F293025801EBE2EC08C07BF7A4D003D98878A2082A9054BE195F305F9B075E8C32644C371139521E49943237D0989A1F8811594A205F7908C9C9093D7227F4D9E8F0EEDC41214FEBE96D5152AF4C65B1454610F8F067E795D4D0660FE898A71F65378DA0D5CA973326999B190320C8DCD894816F72A9118141CC!
2C830F8340DEC59BA012FFBA927B92E5B1B3A19BEA62E5113BDD5A948845B2024242DADD6D9E6A2211647D861A7EAEA2948D0721C5C6CB2E929115F39A9B94A713A623098244CA4B17B2810C7E16A34C45D8DA1229C00A091E068FD2649469CF9E56DFA38D0F5A688EDBDDCDC24BD9DDCD4FD2A8E6CA74ECBE086AD95E5E2CAB2070911B6F03F2978CA70D7E30CFBF914F1E56B170027AAB41D015911391437F34970C23A022E8F5AD951148051CCAF1D8C23BA138945410D9BD414A19BB4A5CDB3D3E4B411632DE0E3C4730D3332CF7DC90474ABA9F082C25BB778FE50AB538E43B46947A01F423B110AAE3F6AE9D1209881399C38B4C0A9E3EF3781FE980AA4835926E44315F3C33351F80FC27C5A9D9E08CA1F046944AF89B4190C8EEDDEEEEBEAD54F7221CBB75DDEA6E0AD16CC4C2018ABF3B517279B284DDD6A0E669D45CE2D935CA9850949205E83625F57887C0DF1B43955B030AC66B98979992E9E361F0A55228E926B9D4F743F70F3FF4F535B28C900203BA3D40A0FA7CD5F62A14ECB243BD349011666B692A43E37B89B90EB999B52AC961D2E5ACF881A7700221E35C260A088FB846C2CB232A207D323E308912FAFA1EF43D780086FD015FD89D46083235133E02F2431D941AA2A155A243D3E6303010D44FB78BB2418939B2E1075C2AD6A31E91CCC06A14D34DE6!
00A1FD08D08298952F3ED8C6139410D0AA0FA48DCA075225BEE06C90C0DD78!
4D37F102
15A53ACF5B69F265977AD10CD6B41614140CD468D0A6E14CAC02102F91EE64DD03A966D626AB79D6932140D88D733462670D869A111533C3CB310F8520F45F8BAE856509E525720DC100530862595D8E8A75429BA7176A589F4E1B22E80CD44AA9DBAF628B06DC140974CB14937FECDE24084B8D81CD16587B2D8615E88506491F751B52B32F64DDB76FD3AD13B57474DFEE66304985022BA829025D7D9D535AE551FA133C9C8EBF01404B9364DA4FE02F05CEA0C82356A0B89232D2277AD1E9DCD46C2047B347D227241A292A49E2F7F15A55CA06D042FAE33BD6756766626121DD730945936D10F4F8DAFA5E8D754241D0EB79CBCACC335B89C45CF4E8963DE4372118573E94ECBC06D1E9507A34D4CCB07D1F5E3DDC23E1405CD127E5334923136ABAD99DD1A0F4EE1FEEDD96CD9D4B37844A714E4165EC9DABBE51F21EB2019D9BE97CD278ECF22916C07714947DE61641AAE407CB6C8C05C46EA48C0C6CDC452337A95943F0E5A48FF941AAEEA5DBAF33B5FDDA47623DCC20DCB54BBC4B9CA9D521AE1E089CEAEEF8E6C4765D6A649D16AB5E7DF4563E9418CBD109E98E4EB28F1BCF137D2C126894279349C80F6A351B71C8CCA55C66AE10EC2C7DCA47FAA53636177DCA6DCA6D56AF9D6073F1E247172F5EB4B129429BDCAB14D000BCAE2E819A67590BCF827D0C411F2D7!
E4F66A67A37265B6901A579ACAC265F130C21DA2C1A28A86542A1F29E6CBC8190F2D7C1EF48942CFCC7CC99AF2D9C39D3DB7BE6CCCB0B17FE0E0FBF705EA151B7281B057234119EB1AD8D38E73D1D085D6936C003E93DE64EC0209146B5C08D0F853E257FA31CDF1D81A1353C26999BA14638EE01192F72CCA5F3F6B5E8D7A64FFFF65B7CBA4E9F7E04DFA7BB7EEB97B842582B9336C211754FEAEA5A1F48BAD573998AE8E379C01C896EAC46491945CAF882C57A6A751F1FEE4AE53D248959DB1B6A0CFC2BA54ADE924A56DCF0AE5DD17FF9592010FC2C98FED5BBEF7E35FD67FCF0B3EB171385B7BBC18EC44B7572DF0706752DEBDC799561164A7CD565FE95F2EEE06381B1255FFDD5F7CCB7FD92AB24867B3CF1B0169B816542656EE6CCD7D85F4FFD3E9AB6425EFBDFF4774CD3BFF8EAF66DB5442F003301C4A1C65EA9A41B390E832BA5F7EE29D56EF794F76875D43E73F195F1A121E50B8694DD310887B070919AA5589F1BF52960C83E255F31DD786954728A201CF9FDC7FCFD48AFFDF8F3B782E95FAC68977437C20A726AA213F4FA6C3556C3250105E2FD9E4489EF4C2AB322ECC60F8C5846F491186757A9A4BB37DC28B9653C7F48F96D42AA53D216BAE552FDC00D813E3733FA2FF41764BF73764FB44CB477FEC7DB4704821F17AED0491FF4322B00C29D9D8D781!
B3E5BA4EC3E4DE93D56EA292EFADCB00EF102EF5537F2300F015C6930D04BC!
506250B4
26615225F44EA03A5DE20D1672B29B0A5CACC998070E46DDA6E5B68E9EEEE9CF87B84C517365A491F392296ACE01971E9C1837BD20712370242A7C215D0A63356768350813F988FF93B0398872979A06EE0369A7A30FBA8D5E6FB6A5998641FCDCEAE3A8A33F64A752504E1DBD7E8CFFCD8ED07FF781710165E6CAD426B491008833C99FE885CE9A657EA25D46150482859B551539650E3C2525DC65307CB053E7F78F1C400329DC5DFC5A06C51EAB3254A40A49B0A0D0E0BDF452C2E9CB9CE3B7A62F4CC85A716CEA45828EF6FADCACE167439911152535DE4115DFA653796B5B62E5B565950596090B21922D351E64D4FEA00C6F759489052B6DCE30344CD14B979F46ABEA113170067B83D10571DD5AA16C20A5FB95B5ACE8CF389F3B6B45C78F9C79FA75F5E21AC397AB44AE01B010C51C73FFCF09709132A57FF71C98D1B4B262C593D61429554C22426D5BC5FE95A2D79A94394AFF4943C57C9A4AF8CFEF1580F31CCDA36A5AC1F8EF8F6DDBFBB9F8AB62CF6B69C87BCF8EAE71F2F6F7824397A74A740BF3321AACEC9E5DC12170B8BAD95B969870AB6EFDEBA2837B78A49C13EDE29E658A7019784DF9B7793F265009DB4394F792EE1EF3336637163914B02B70456F8F62FF6896BE32CD7785B7EE46EEFFE2E5941238119048D2B3D7C23E4728BDCA324DA1BA5BD06A5A4!
46DC9ADD2D9549D80DD41229F5EB549F996750E995AC4960F5540D4EBCC7C700A90824355F48E9DEDE5EF20DBE487A95B29285AFB168B4F48E8E8723C6213C524B100BD9BD8D2B77B6F6F46C3FEAA67CD0DB7BF4A89B5BD0FAAA1A9A1C4BA8FDA4722CE5ED4100F01E491FDFA64889C6988A521BD801BCA022FA2D72B4850D5A7B593BD0A22B59F8EE11400086793ED1DEF427B6EFFEFCE3C20DED2047BDE084C7CAC69567F4D955D93A69F6FA25ABABE63E5A3D61A09FCFAF3EF344800904838145859AA60CF4D70FF7180420A33F1542F6D4644BC0062D640129632682A0812A6F51EA4A2CFF22980E2B789F8223C80AF6B002412082DE1AD1EA0114BD477BA59A435B3E5EDFA2DFE06C135403F58CE4C499954C3428E98FA60D2063CA018A827BCC085809E121532322F8698194D91E8CD842377AC30868FA5A744A5DE665160B0BD77927AE894B9C7939F1EF6FC31113851A7244579A534E4FEB4E7DAB5ED952F0D75F7455139C9D17098384EA5A1AF8533413F3C0049271E1E6666E14912A64F33EF8EB5E1FAF2CC142D2164A46B716E60AC83476EBB91A56F8F9DB77ED2D2DED2DD75CB64F04417E05081BA025B38F0A12E46863A36E551EEA6D3158FC75D13220F8B8B53D48580B298473110B19B2599BC2F656400DA4E4DCA42C3FA9AFA1F8BB87571A8E1A10D02D8806!
3D3584B8789D92A29139427519E1F836BBCFFF236FDAB0FE02BC3073457B77!
3762A135
CCD33356EEB47EA7A6B7A660FDB20DCECECE1BDAB5AA4724C90D12D6FBF2DBEF4A767F8E928D7858E3D84731AA6675445A7354EA8640A50CA6CD0F98D7A0E91DBFDF1B684AA858FBFDDDD91D103EA2BDF8D78E087EBCBCA2BD56A6EC155CEA714A8872921FAA123FB2D962B3DDC6D9F97587B9FD4174A394AC1B10BA41D2FCB8B18FD74D6E6EE6BB026434E167F0B06AB644FACA78019D9D41924DF149031E442C78E108CB4A7BFB8B7497FF3FDE1650466835346BD2B746258475F518760AF51F3B3BAFFBABB37BC1DC16FA9BBF5EB546D6DD0708C26EF3AD52BC2234EB9A3EE90F325E38F551ABA694F4BDEC7AD83D6EEC5E5C6A34D91FE96412410BDEA65B972DD95F7EFCF8338A7579A658AF96082EED4CC809EBF2D51F128BD7D21FC77CECBE5B23CB6CADD1E8F824246FBB99472866253B3EF595F2429F91D103126E7D66C5C70F57FA0CD96406622D5DC9655841307D66E2CC85EE745FE9DB506ED317AE108A41E282433DB6095DF2D6C6D6D645AFFF83FD85CC961B41D935B92A098A045DB4942F06E3C32B37B7F1893ADAB43E7E355635CD0D241F308483353FACFB073B5E262BFCFC7B4B4BF6E7D17FF996007DB1A296B6B20495B4639C7CA9B76AD90971C16AE7D727D8BB4FC82D5A961B04B6A512CD0FD9C78DECE6E6368E41F6EB10BC8F9F27984198C50D939C527!
EB628E3AD7044F0D54C526E7FF916BAEDE71F01819E16D07F8694D0DAD85BD5AB9434D658A0424DB041BD1676F3332225AF665BCC837CBE4D79657D73E926352BE5EFB67C8976FCCFA650C865AC580BBE855A7BFBB5BFBC7DE467FAAF00C80A3AB0AA20223922E1D04E7DAFBE57D9D8A8ACC9CD9DB0E5869B906D3848694F93FECF9B16FA90B2BF8172336FF93C18F7C62B702826FACCAE20D569FEE31C824110BE65FF050182E0936F050CC2C2F7401DB042576504FAC943555586DEC6C6ECECD643AB6F64BB65575555E9599C4B008376BD1B952D04E4FFA7E28A41DC86A1A8D3AD1E3214B469F170940C1D54085E3AB4851B8E1EF5A0E112E892426829189AFACC2D221C24B77AEA208CA078F1A0BDB307F7B62C598C13088136F55EC32D99FABFECA4A98864CB0424BEFF97DE7B92CCD00C645DA62435640F11666BF2237B3361E298D544F7707AEC39CC11DB1CBF89B1CD81C7F4AD3C47779CCD803C5BE3577A9E16677A1C29F563AEE680A4948AA248919AA435645242DB046A242DA15E967549EA3AFD434CDBE581439C08118E73043946AF77DD258C0BFB6D8E69FBF025CF1FB6F0EBDF7F9BDDD8CCB6A250C6A95443AE27131D9EDF9E4FCE237D2B42E5259E548A324FD2BA5093248934D82A54999E32B8ABC2D0C3F060C7D7D13B367F28DA29160C0208FAEBD6240B8!
B3EBE95FEA38FBB999D518BC22C99166A18768578D6E9AC2EF8EA220A83442!
5BEE05C5
C70B110820780A3E036107C31E53F2BEE0751C71F570EF9DF2D0DD26227BB890CB1828E80159EEEF77BCC165CCCFD9BD71F76CB51665B058D8142D8FAAC9A08DC8DCD579D40A5A1AEB42F3A0BEE77DE2D38F7C5220804B41B70A1F938E43E1F737F4C013191F5411B6DFBD090B9936041035DDE3F1E0C5E18720DD7C1E00A8AAB27BF66AE6B772DC0EC1B401DF659186A70011D0D93444D55B774A730BA2118929E9CC2BC0349165887316F0AE09B7A4060CA6601B3592F69FB901D14DBD63DD0512E3FBDC4F419F277C8EF9B5A30CBB2CCB3289E1D8208B4DD54A631855CD091749DCA29111DB14D4D585D6E7A25851E806F823FAE7B318B252154228361260EB38307AE9B46FF217F23D3B26BFBFA0EF5285CB5B8EBB6428BCDA00B9555E1F045B3D10D1DC545B1319F9D424195A23CDBCEB7B19183A5F2A47902B15A4805E6AB60F85D9BF39AF8E7460764ED09B5067FB7E21C737BCBB7CB9B74B7CB32B327DA41D9AD877BF77F577F05180070305F1E2202685D0000000049454E44AE426082');
-
-insert into auctionImage (imageId, auction_id, data) values (3, 71234567, 'FFD8FFE000104A46494600010200006400640000FFEC00114475636B7900010004000000320000FFEE000E41646F62650064C000000001FFDB008400080606060606080606080C0807080C0E0A08080A0E100D0D0E0D0D10110C0E0D0D0E0C110F12131413120F18181A1A181823222222232727272727272727272701090808090A090B09090B0E0B0D0B0E110E0E0E0E11130D0D0E0D0D1318110F0F0F0F1118161714141417161A1A18181A1A212120212127272727272727272727FFC000110800BE00BE03012200021101031101FFC400A300000104030100000000000000000000000003040506020708010101010101010100000000000000000000000102030405100002010302030406060608030509000001020300110412052131064151221361718132140791A1B1425223C1627282B233D1E192A2C2532415F04334D26373A3168393B37484942527081101010002010302060301000000000000000111023121410361045171B1123213E1224223FFDA000C03010002110311003F00DFF4514501451450145145014514501451450145145014964E4E3E1C2F93952AC30C62EF24842A81E926AB5D55D77B374D6248FE7C7979A874FC140EB24CB7E1ADE256D5A54!
F3E55A23ABBAFB76DDF27C134B2A000AB491F96109E6B1C00B2ADBF19249AB225AE8EDB3A8765DE64961DB331326584069635B8650C4852CAC01E36A93AE5BD9FE63F55F4EE3A60EDD938FE55C12A71D1CB13CCC8E815DDBBC9635B4BA6FE6BEEBBCC6D24DB07E445E1972E19FC25D45DAD1326B03B7D1DF4C196D2A2B4E6F5F31333224231672ACBC55216291A7EDBF36ABB7CBCEA36EA2D8964C9CA8B2736076498C6EACC50B1F2DDD5492B71C38F3B52CC12E56DA28A2A28A28A280A28A280A28A280A28A81DF3AD3A57A6C94DEB75C7C597FC82DAA5FF00DD47A9FEAA09EA2B5B657CF2E8483F91265E5FA61C6703FF003BCBA6D1FCFAE8E720362EE280F69810FF000CA68369515AAF73F9EBD3B876183B766E6330B82EAB8E9EABC8DABFBB50C7E7FE41375E9B1A3D39A2FF00FC0A60CB76D15AA76CF9DF8392BE66E5B0E76240085391094C88C16171FE5B721D82A4FA9FE6F74D6D1B3459BB3E447BB67E629387891B5B4DB9BE57DE8957B88D4790EF04CC5ABA93AA764E93C03B8EF792208CDC4310F14B2B817D10C638B1FA876DAB9FFAAFE6C750F567998FB7BB6D1B3B12A208188C8900F09F3E65B117FC2961DE4D54776DDB75EA4DC9F75DEB25B2B2E4E1A8F048D2F711C29C910770F6F1A4042A1FCC43A18FBF6E4D6FC43F4D590B5E431884EA886827995E078!
F7D28C0B1D4D727BCD16717F1281EA3FD358B391F7AFECFEBAA80803D14A62!
6EF91B46
5264EDF2BA6546750086E0FEDA9E16F5D36725C589B03DDC0FD3483B244342003BC7F4D07999919D931159B234A7F94BEE9FDAB5AF5B23FFE7FDD22DBBA9770DBB2E68E21B8632F91A982892589F822DED76D2E7856AD7624DCD25A8A9041208E208E0411C88A2BBA68AE70E95F9F1BC6D18D0606FD88375C78404F8A57D195A7B0BEABA4840F513DA6B7D74EF50ED9D53B441BD6D3217C59C1E0C34BA329B34722F1B329ACAA568A28A028A28A02986F3BCEDDD3FB6CFBB6EB3AE3E263AEA776E64F6220FBCCDC801CE9EC8E91234B23048D0167763600017249F45735754F50E77CCEDFA6876FF30EDB8775DB6153A5145CA1CB9458DE47FBA2DC17877D04AF537CE8DFB7AC56C7E9CC1976AC63A84D98E43CE47604D234C7E9E24D6B04C1CCDC1E6CB5864CC78AD264E490D2E8D6748795ED65D478788D5E13E5D67A2049E7982B5B4C4A596307B2CA0F1AAF4B9F9B89B7E5EC3F10B1E0E166CA9262405109981D1E7D8FF38022DE23E1AD3286304C3DE5361DDFD54629C7F89920CB3E5A18C490C9D9AA3BB37AC9E02D565DBB71DDA1D9E464D8F0B70C04631AEE2F1E96591CDD7CC7F30316E36B30E1DF503B8E124980AF9457E2148D4C82CACEC7DD5F4D0CCF8AEB16FF00D3187852C7BAEDB90B2C7043E764E24D1CFA4C97F0C7165A8D1C54DD751A4F23A97A0F132A4276!
F9C478615668CE263B5CB02BC4F9DC4926FCF81AA218321E026F2B248DADD8BC6EACC2E2E75D9BB7BE99E4E0E74BE74D279ACB29F3257214036B9BDC31E1C682F39BD65B3489E4ED1879AD3411B471CF3C90E3C68641E12F1E323B48539AFE60AA9A46071ED3CCF69F5D4E6DBB2E3626D58D3E540F264650F38330B8D04D97C2A4F136BF2AC644C4BD952207BAC07DB4C2749C4450B0ACB59A732C517646A3D2B71F61A6AEAA395C7D7FD1555E137AF2BC8C79B2794846BEE26DF6D2B247E502A38B7227FA281BC8FA780E7DA69A352D25C70A41AA2927E548B1A55CDE9BB3807BFD028053C6DE822B71FC81EADF81DDF23A572E4B63EE43CEC30790C98C78D47FE2463E95AD316919B87D03D34F7026CEDAF331B73C162995872A4F111CF54643034A3B9A8A8FD8B76C7DFB66C1DE714FE4E74293A8EED42E54FA54F0A90ACA8A28A2835A7CECEA37D9FA5576AC672997BDC871B5036231D46BC83ED164FDEAD25D21BCEEFD2396FBCEDC60B245E4E563E490639632DE65B4DC3020F152BF655E7E770C9CAEB0DBF1E4BFC2C1801E207DDD52CCE246FA23515ADB7CDA63DACE3CA26975E44624D31101403702F70D7AD49D12AD9BBFCEADFB75832B140C0C28E54F2965C68E433C7ABDE7865672755B85C2F0ECE3540974CDE5C30466281486676E0EF637B05E6013CC9E269B43!
2438C2D047A6FCD98DDBF457AD9A40366B5FF0F0FB2825866AE26385202B5D!
999A43C2
E493C1071350B9BBC34AC7CA25DF9099F869FD841C1699E54E5C902FC799A683B4136BD2986C1E82E988FA8F033A7C9CD971E0DB93CFC891046238A366203BB49A99D9F43E9555ECE278D36CEDB1303758B6E973A3976BCA78AF9E9658DA266172EAA5BCB75E2B22DF8536E89EA2CCE9CC962029C69884C98278FCD8A48CFE38CD8929EF211C8F7DEA6F76DCE3DD53142C28B0431B2C6C57F32457919F5CC493A9BC46DE8A764BCAFDB0CF8437D6DEDD91F6ED9A093314232905615F2608D08278B16BD38EA6C0C1DBB33718E2C78A78362DBE7C861240AE24DC379C86F868A4E57F2C38D1DD5A68E1AFC4EA5458E2009F3233A1B570FC2453819BBB61FF00D26EB9318F3239B43B97532424344EC1B9B211E1BF2A0D83D41D010C599B7EDFB7CD0634E71944EAFA990AE247AB3F70CA983111E991B40402E6DD955B9FA177DF8E970B05E1CB54C38B728F29253145263E412B132F9FA74B330B6935190F5DF58E14F14CF9706E0B0AE4C7E565C48E92266B0972525161AD64717373EAA17E65EF4B3CF36E3818F9432F271323256CD1A98B038E3E246233A5215201B01CF99A08EDC3073B66DDE6DBF3BF2B2F124F2A78D595C060037065B83C0D483462DACDE457173A8F107D07B2AB99FBFB6E5B864EE59487CFCC9E4C99AC786A95CB902FD82F615350F53F4EAC0914D899ACE!
A2CD22CB1007F7741B7D34C9837C982C0BC675A8E63932FED0FD351D2BA20BB1B7701CEA465DDBA7B264508B990A936676F2DAC0F3365D37A75B547B3ED9BBEBDC9E0CBDB322190E267B248C8AE002AE513C5AD48D24106C7E9A2ABE46A1AAFC08B803BBD7590C6636E1607881DE0D3BDD25C2CADCF2E6DB11930A595A4C7575D074B73B2EA6B0D5CB8D2A64F2F0F195C6A50192FDA2C6FCFDB40D5200BC7B69655038F60AC93437B8D73DDC8D1243E6A34478123977F6D04EEC5D6BD4FD38AA366DD24871D6E463330960E3C4FE5497517F45AB717447CE9C4DDE78B69EA88936FCE908487312E31E463C02B87E3131ECE247A4569DDC7130BA736DDBA195E2C8CCCFC54CD974D99214909F2E21DEFC3C5DDCAA2B76C59E1C3DBE5C82867CD864CA6547570B1960220D637562035D4F1A83B468AE7FF0096BF3A8624583D37D50ACF1061041BB6AB945274C6B90A45C85F77583CB98EDAE80A8AD17F37B2C3F5A62624A584306DF1B89109568A496697C608BF30801AD7DBBEC53661494CAAC54594B4416EBDFAA1F09FECD5DFE61B09BE6367A37111E2E2C76FDC793FC75599A59F0243F08EAD09E2D8D28D519FD922C50FAAB3B6BBF3E3DB17BCBC57ABDBF9BDBE3F5FBAF17DD27E3BEB99BEBE971F94FA2AEBD2D9321D31BA5FB000DFF669A6E1D3FF00EDCA1F3B2442BD800!
E27D43813560CFDF3708D4B40B163771505DBE97E1F5552775C89F26633644!
AD2CA49D
4EE4B13F4F2A9ACF2FF00ADB1F2917CBB7B297FE3A5DFD6DDA4FAE4CE768359106A651C9A4E67D82B38CF951875FE639B06FC2391B536A908317CD1196242817D2BC58DFD57B0AE91E4DAE6E7127C8F36E8834B6278801549E3E3979B7B16A7A6961F308D6156F65B71B01651F50A8C8E3754F2D621123789BC5A6FE963727B294455001D2835701DFF005D564BB48AFEE191AC09711A8240ECFC74D32F1E4867F2A49D9C0557678665916CEBA829310E045FC4BD87853C8A4C8818B63C8D130209F2C95371C45F49ECA4242D2316909673CD98DCFD26985CA365C6325DA299DADCC17D4413DE08A61262E42936BB05EFE753830FE2658E252AAD23045776D2A093CD9FEE8A4F2B133701D5332162928D71483EFADEDAE36E522DEA60CABA6E0F1E06BCA979E1C778C3960437BA4733E8B73A6498524CF64B2802E7511C07A871FAA98536B8D36B7A6FDB4F30646659316E6CE35C63B9D471B7AD6F4DE481E3731B8B3AF31DE3BC5630C86195251CD1835BD541669A4DBDF6BC248420CB842F9BE55C5D5C36A12A9E4E8C398F794FA293C85276DD43FE54BFC429028AACCA0F82FE027F09E2BF51A76AAD2EDD9F18F7A38D66007721B31FAEAA23E26BFB2A4F19FCD0219399E11BF71EE3E8A6381B66E39302CF0A44C8D7B069F1D1F877C724AAE3E8A95C7D937B747923C279444A!
5E4F24C7332A8E6DA2191DAC3B4DA886992CD2E977E33E3AF971B3712A973C16FCB49351933B9F05F9713C6E4FACD4BEE31B8F87CA0418F263D60AF6904A37D9508CA16503BEE3E9E1453766209B7672F65769FF00BB0FFD09FEF9AB87FB4FC5EAF4FC3F995C5D23799202AA07002DEAE17ADD1B3754EEB9FF00253A976D9A7FCEDA0E2E24130001F84C99624F29BBFC1AD2FDD52871D767FF00D91BC1EE5C503FFB74FE9AADE6CACA64B0F7869B8E24036E3C2AC5D7DE1F98DBCFA5314DFF00FA741FA2AB196DC4F6FA3D35A9C337957B2CBAC0DAAFA59CE807BAC2FF005D56B36E640A05C9E42AD39E8D31080F0ED63D9C6BDC6DA7216D2C51F924F0F3E4035907F086BE91EA5F6D4540E0EC92CBA24C90555B8AC63991DEC4F05152E9008D34C68A80B5B48600D87E2BF1A903B6C03F9BAA43DA599D87D1A94560F8F8518B79641EF52C3EDD74C19346571E631040FBCDEF0F628F7BD66B12C411A8942C3803E295BFA053A5C7C3907872D2092FC17255910FAA784385FDF503D3586562E660BA7C54463F387E4CA4ABC720FF00B9C888B46FEC6340DCD9542B0F2C1E5127163FB46863DB25947DD51C58D0AA782422CE78B16E2DECEFAF06924F9635B1E6E68002DC6D74EDB8FB694F87132D938DB921248F65F95266C0DCF89FBBB2958DDA33AB80B5B52DFEBA08CCB87CA1!
ACC292A837915810FC3D208FAE968FFD4188E38690B831C28A2E7C475140A0!
5EF7EEAB
2614E89219D50491CAA22CA8C2866786E1995351166E1DFC6AAD91E561E53E461078B0DA40C149BC91E9374901E3E2068161B51DD70669B1640F978C430C75167F2AC4B49AB9691DBDDF6D79D75297B5997848BE9FC5EDAB3E6678CC396B32FC0C732F018C9E689A4D5E643F14D248AC4160DF9838F1E56A63B6E141BA66C8999998FB608A0999A69C111C8D1A16487C1F7DED607F4F3553CD8F728F6FF23709618F2156192178A6019091C05C107B34D39DA63F3F731005B266C534010DEC04A8CC9F4102D515B33C1108C6646F2E3E3E5413CD14640778588675427EF32A70AB01CF824DFE3CFC7F063AE4234234B4768C3F01A646765F0F31ABD5C2818E149B03ED7045BB0D590259926F878819E38CE9D2753695621C31009E54B8936C89E0C8DA648B172E3895FCD00C2F1CDA1445E5BF8ACC928D4E6FCAAB9BEC1F07BEE7C086CA991205B1E0416245658A49B5CF77D34173EAA9B6ECE497376950B82372CC4C6B2E90639024A0AAF62B36A603B01AA5CA2CE0F2E3FA6ACA9E3E9A9C73F273A17F6490C89FE1AAE640F6F6D0618D0B4B2CF1C6A59CAF840ED3AD455E3A61E51D11D758A14D9A3DB18FA1C66AA5BEBAA463BBC5933BC6C55BCB7B11CC71156CD932A4C7E97EA6C4D47466E1E3CA47EBC1B863056FA246A0BD7CC65D1F31B713F8F1F11AFF00FB32BFE1AAB4E!
924D3886152F2C86C91F227D7E8EF356FF9AC9E57CC067E425C0C77BFECBCC9FA2A0E29136EC6932FF2D7265505E69BF9704646A50C058B337BC11789EDE1567097932931F6FD8D03E537C4E7B0D41540E17FC01B820FD66E26A1B2773DC72C9F2408D4F644A656F6B9069093738A595A4C388E4BB125B3F33C4CE4F364887814562D919925F5E4372E005940F60A06B90B9F62D2CB94BE9D2C05FE8A6666C9D568B3C920FB93007B7B6AED0B745CF04693646760E5363812CABAA655C90A97741A8DE366D570470FA2A337DDAF6E85227C2DCA3DDA395995D1E3D0F1D8075FCCE1AB9DB5055E3432AC3E7E545C72A10CBC3F362F4FD5D94F307779B1D1D31241262CA41C8C3906B864B7F9B0B70BF730F10EC34DDF1A44623158863CF1E437BF0B781BB787B7D34CCC0B331931AF0E429E31F2E3DDD96B0E77A8AB4418906E71993680C66894BCFB63317994282CD2623F395140B943F98BFAC38D350BE72A287015B8AB8E4D7E5723B6A130F3668E6492366832E160E8C84AB065370C84710473AB5CF9789BC629DCD42C3B9060BB9632AD9272C0FF00AC8828B2BF0FCD5E00FBEBF7851114A6FE1896C396B3CFFAA8E00D97C6E7FE3852D28F390967B18949371EFADF9DFBC522A4B02221A40F79C9FB68178A67C77125AD13358806E14F3B561B9C297F88400C5370917B357!
F5D60045AB410CE18789870B1B731EA34BE1FFA88E4C29BDE3E1F511EE9AA2!
1A1495EF
8719FCC881747B78DA01E3B03FAA45FECA4BCC4D1A23168C8E24F16614F61963C4C869F220F39E28E787CBBD806951A20C7D08C6F51AA34D81E361C6A29CE1DD629C5EE5102DBF6645753FD9661ECAF336738A4C4FC64EC00DC5BB0DEB1C79C45E7B15BFE5116ED2C1B40FE214D2139AA8D343E388717516702FD8CA79502D14F3E44DE64F12C80D831616361E9A934DBE392369B0B8941AA484FBC00E6C3BE9B99124C44CB8134293E5CA8392BDAE3D8D4E766C87833B1F207882BADC7E25274B29F58341258773B06E8BCF4CB8725FF007A44FD355DC91CED56C971D70D3A8F0E2E31C3242A9EA139B7DB554C9E47EAA04A1FFA89BFF0DFEC156CD8E113F4D753E4123FD1E0E322AF6DE7DC31F8FD11D552117C89872FCB7E27D9574E99889E88EB99FB160DB23BFED66AB7E8A0D8DF37B18B75AEDD213A227DB899653EEAA4133B3B1F507F6D6A4DEB749378CDF868EE98501368EFDA78F8BBD8F363ECE42B6BFCFBDDA1C7CBC4C5880F8818EDE73F6F965C388FD45D54D69280F918BADB8BBDC9EF24F3FA4D2702423D523F918EB723DE6EC029C9C350006BC8DDA5AFA7D8A2DF5D3EDBB0BE1B0D4BF19651ADCFAEB0CA2224200F19ED3F656B1D1E6F279AE6EBAF493BA2E6C7C241F99A40FD58D0FF001014D81C243FE9B2DA07EE652A87D762E9FDD15ECB1BCD2E917676F6!
9F6D2F89B54790EE919D663FE6CA6C114FE1D4785EB17A2F8F7DAFF24DA61611672A856FE5E4C67F2C9ECE22FA4FB6D5E4D8C677F2D8E9CB1FC89B979B6FB8FDCDDC695936F748DDB1D9254E22489486E5DA54535C77560312427CB63681CFBC8E3888C9FE13ECA4B97794D2689B257CC50572A3E6391B8E63D0072F5FAE9C6DB9ACACB3A1B32F86551FF1ED14A65066033748F35088B2D7B18FDD73E86EDA62E462E62CC0FE54DC24BF3E3F788E16EFAAA9D94F96CB2456D37BA70F0F2E2BEA20FD158CE9E2598D931E5BB46A87EEF6ADBB08ACF1D5A681E0E6CA4691F4E8FAEEBEDAC1151F1A4D68CF242434416E4056367D407603C6AA305D4EA51088E2E275376D877FA6948E4D3950CFE66B325D5EFEF02A6C357AC5607924B3B6AB70F2BB6CB6B03E822B290388598C3A3CA915F571BAA9F0E93E837A832DFB18459EC40F065C4265F59163FDE5A80B5CDEAE1D4281B0B64CCEFF003616F63238FE23552B69623B891F41A0418E99651FA84FD256B3D95A3F8F09331582447599BB9749607D840A560556C99CB0054461483E9E3FA2B38704487C8490A2486CC02A8245F916BF2A294DADE2381BBAB0F04A22F201EC904A185BF775539C068E0956561758C863E9B710BED3484FE5E1BAE342A1D53BEE45FBFD26BC123CAC0B72EE1C00F50A09CC795E7DB77A9E537925F2!
1D8FA5A6D46ABB93C6E6A7F1386CBB99EF38C3FBEC7F4557F22F7B50248409!
A6D46DE0
603DA456E0D9BA5372C0F92DD49B84B8B27C4EEEF8B3C38E14F99F0B8D3C4DE615E76B6B7FD9E35A7553CCCC48EDC5E554FA580AEE9F2C7C3F956E1A34DBD16B54A398BE74CFF17D6B99149ABCB8FE1E0B2F16D3652DA477F1AA66E3851E267C185148F225E124C89A1AEEBE615B71E5DF571F9D50B63F58EE2E2FE2F879D78DB9AA76F67106AABBD3E9DC31F2480B718F215120942F0F2CAEA1DD6AA2CD3A853A4725F081E81C2A1F3389B9F4FD75313B02DAAFC0F1FA78D4365F6FA2E2BAECF9D223D51CA49E5FF32421030E617B4D4AC9819102E26DF8EDA0C807E61008506DA9ADC89E35E74F498072333173DB479D8EE31A4EC128E201F5D259FB9CD9D8F143190B2C17B30E0483E13CAB8DCFDD3E1DDEEF6F3C7FAF6BB5C6D8FEBF3EF2B0CDC59A193831F28314138035AB0E4D7502FC7DE1DD5079035F97311E5F9C0A49A7EEBAB5B50FD96B1A9C8B2258D089889E420E88549625BBDDADA5477F6D41EE80E3C51E331BBC6A59CF6966E24FD34DF6977B759359DA4E8B259C9EE332E498CCC005CA071B20760727483EC6A8E9E076C7971E41F9B0B30B71F7949BFB787D752BB36D93EEEDB962C32C70BC18EDB806975043E5A8D6BA941D2C59469E1C4F0ACB738C1CE192A2D1E763C1976E36BCD1F8FDDFD74AAD30D85CE49C75BF8A7538E4FEBDBC07FB616A412364DCB!
CB864117C402A9211C144E97048EE17E3509B1BB6317039E364AB8FDD607FC3567DDA358777C7503DD6084778599D07F76912A091748758D448EA46A9BEEA8E2BC2FD87BEBD7F2FC9C8FCE666D0A4920D99AEBE1FDDEF34A4C024932321C650E4261AF3E0DEEB7ECD6190645C79752A0044519516BADC823DA40E35448EF3287D8F678CFBDF1129F669415556605D8F7927EBA95DDB2BF2B060BF08237948F4B1E1FC350909D72017E1CCD45384BA2B13EF4AC5ADE81C07D94F713C0AF90FC028B0F5D618F8AD396773A631EFB9E40770AF32A6125A18B8429C17D27BCD03566323B4879937A5A3E7EBA480B52D18B9A099C736D8F3CF7CB8E2FEAD66ABF3F16F6D4FAF8762C8B1B6BC98B87ECA39AAFCA497EFE200A053688BE237CDBE21FF00332E15FED4AA2BB96B8C3A1B03FDC7ADB61C68EF66CD819CDAF6D0DE6B7D4B5D9F52F2AD0BF3FF00672B9BB7EEEABF97970BE2CAC3B1E33A96FEB57FAAB4F48B1E46CF0C8AB1C52C5FE9E650E5A42070491C1E5E25B57597CC3E9AFF00D55D2D99B744A0E6460646113FE747C42FEF8BAFB6B9331C08F38E1E4C871F1B2C94C8B8008900F0AB92090350E356254FEDF9C3336E8A427F31079720EE65E148E51B8BF7F03E83D950D04B3ECD9D2E2E48B293A651C08BF638B5C71A909661CC1BA9FA08AE92E67AC79B7D31B667151!
D33B236A1C181A45B2622DE65DA197B597883ECA73347E60F05DBD5EF0F67D!
E151B243
25C85B311D80D8FF65AC6B1B1ACB0E9F779954A8C86248B12A2C7E9E3516CF265CEB1AF391801DE4936E359B62CE4710101ED623EC1763F4539860F86000FFAA97C1129E05750E3237E1B0E55CDDF58B1F4A4D0C5BCCB992A66490C3039276E04CAA1CC881DADF734B71F65259C41C5D94837FF0042D1FA4AC7952AA5EDFAB521D23911ECFE76E93413BC12AAC71CF085D3114D2F8ED3860DC18C40F2EDA85CDC8E38A8E6E71B114C9CBDE919F21B9FA6415BECBDCDF6C177CCB0F7A6D23D773FD3564DDF2125DE636D5650E4B37E1024663501B327970C72C9FF003243337A81FEAA70990EF912E4DC068D4952DC46A6E1CBB4F13483D2C59A46562E2573F9ADC657E24DC0ECBDE9B65B20686254D06E65604DFC3C93F4D2DE18D4BCBA82A8F1B8E7CFBFB3D0291DA767DE3AA3735DBB67C67C9CB9FEE2F28E21C2EEE7C28A395CD15179B399646606FE610A96FC0BC07D269FE0E0A431879AEEEDC4A2F1F65EBA3FA13E4D6C7D3719CDDF638B76DDA54D0C2440F8D0A91C5228E40751FD7617EEB558733E57F40E69264D8B1A363F7B1C3407FF002192A6472ACED24A0269288392AF65346465E7CBBEBA6B27E487464B738EF9B8A7B04791AC0F64CB2542657C83C737387BE48BDCB3E3A3FD68D1FD95730C39FE948F9D6E4C8F90FBFA5CE3EE18338EC0EB2C44FD024151727C!
96EB38CD93170E41F89726DFC6829914490E9D8D7F5F289F5E98C7FDAA8DC2DAB3B74CE870B031DF232A636871E21A9D8FABB07793CAB6F6D7F243A972DD23DDF2F1B6EC356D44404E44C6FCF4F0441F4D6DEE96E89E9FE90C7316D18D699C5A7CC94EB9E4FDA73D9E81615326156F963F2B60E8F8C6EDBAE89F7C954A80BC63C656F79233F798FDE6F60E1CF6551454515CF3F3AFE5F360E54BD55B6437DBB31BFF00C94683F933B7FCEF4239E7DCDEBAE86A4F231E0CA824C6C98D658265292C4E032B2B0B1560798341C5EB2E3EED847133DC47B96329F2324803CE516558ADABC44F6F0E14C4FC560C870F363789D403A1C10C011707D208EDAD9BF327E5065EC0F2EEDB046F97B2DCC8D125DA6C4EDF4978C7637676F7D51A1DDA2CD7D1D469F121C24699A01BA2EABB35D4DD48BDF8037E55B959B3B544BCACBE21C47630E55E7FB9B28B31D407E2B1FB6F4E8C788D2C8715D8C3ADBCA2DEF14B9D3A8AF6DAB35C78CF320FA74A93F652F5666B8E0C06E3953DD31A32C7F101603D7D82A4368D967CD96DC6432DC48F7D21C0F118E326DE1FC6FDD4B22C09CD7CC23906F77E8152FB46E93451E746618658A64119C99515840476202ADAF503FCAFBDDBC2F5246927BF4C9B56D2BB1E34EC51F8E69471E5B9215F5268B7874586961753606FC2A86E25CE9CC2BC24CA6D4F!
FA912FF50B54A6E595267E418E2064762491704DC9D44B30E172C6EC7E8E00!
52F8F8F1
6D90B49211264C9C5CF2E5C947728A53835CA2B8C8228C58800003B07203DB58C51E845436B93A98DF8EA3D9ECABCF45FCAFDEFAC265DCB34B6DFB493ABE2DD3F325FF00E5E37ECEE73E1EEBD6F6D83A03A4FA6CACBB66DC9F12B6FF00573DE69AE3B43C97D3FBB6A995C342F4CFCA8EA4EAC923932236DA768E0CF9592A44920E7F910B589F416B0F5D741F4BF49EC9D21B78DBB65C7F295ACD3CEDE2966702DAE57ED3DDD83B054E5151451451405145140514514051451405145140514514056BBEAAF93DD35D42F2666003B46E0FC5A4C7506176EF920E02FE9522B625141CD3BA7C93EADC07271F1A1DCA3EC970E511BDBD31CDA38FA89A853F2F3AA62243ECBBA0B73D312BFD62F5D61455CD4C390DF62CCC47D12EC9B84928FBB930CC17FB11A2DFE9A798FD29D5DBC1448367CC310E11A240608941EC06411AA8AEB0A299A61CF7B57C98EAD9BCB191F09B642FFCD2EE669547EC4434B1FDFAD83D39F283A6F6678F2F742DBCE7A1D424C816841ECD30025787EB5EB61D14EA74780000002C0700057B451514514514051451405145140514514051451405145141FFD9');
-
-insert into auctionImage (imageId, auction_id, data) values (4, 73219532, 'FFD8FFE000104A46494600010201004800480000FFE1122B4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001B0000007201320002000000140000008D8769000400000001000000A4000000D00000004800000001000000480000000141646F62652050686F746F73686F702043532057696E646F777300323030373A30383A32312031343A32373A3533000000000003A001000300000001FFFF0000A0020004000000010000019BA003000400000001000000D30000000000000006010300030000000100060000011A0005000000010000011E011B0005000000010000012601280003000000010002000002010004000000010000012E0202000400000001000010F50000000000000048000000010000004800000001FFD8FFE000104A46494600010201004800480000FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0!
E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A4925A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127!
D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEA!
FDADAEB7
BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A5249249294924924A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DDBAC735ABD1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEF!
A2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438!
977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F5!
07E15C7F
3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B2CF4FF00495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B!
9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB!
4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD14!
3FFD2F2A
486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC234515E465616563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC!
4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAAC!
D5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577!
ABBBA575
3A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24CF1F48EE57F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35D!
FE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9FFED16CA50686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000001E3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D040A00000000000100003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E80000000!
0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D0!
40800000
0000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033D000000060000000000000000000000D30000019B00000004006B00690074007400000001000000000000000000000000000000000000000100000000000000000000019B000000D300000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B00000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E6700000000!
0000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B0000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000013FF00000000000003842494D041100000000000101003842494D0414000000000004000000013842494D040C00000000111100000001000000A000000052000001E0000099C0000010F500180001FFD8FFE000104A46494600010201004800!
480000FFED000C41646F62655F434D0002FFEE000E41646F62650064800000!
0001FFDB
0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A49!
25A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEAFDADAEB7BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A52492492949249!
24A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DD!
BAC735AB
D1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEFA2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9!
D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F507E15C7F3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F!
7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B!
2CF4FF00
495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9!
DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD143FFD2F2A486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3!
713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC2345!
15E46561
6563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC!
2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAACD5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577ABBBA5753A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510!
D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24C!
F1F48EE5
7F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35DFE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9003842494D042100000000005300000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001200410064006F00620065002000500068006F0074006F00730068006F007000200043005300000001003842494D04060000000000070003000000010100FFE11803687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D27EFBBBF272069643D2757354D304D7043656869487A7265537A4E54637A6B633964273F3E0A3C783A786D706D65746120786D6C6E733A783D2761646F62653A6E733A6D6574612F2720783A786D70746B3D27584D5020746F6F6C6B697420332E302D32382C206672616D65776F726B20312E36273E0A3C7264663A52444620786D6C6E733!
A7264663D27687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E73232720786D6C6E733A69583D27687474703A2F2F6E732E61646F62652E636F6D2F69582F312E302F273E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A657869663D27687474703A2F2F6E732E61646F62652E636F6D2F657869662F312E302F273E0A20203C657869663A436F6C6F7253706163653E343239343936373239353C2F657869663A436F6C6F7253706163653E0A20203C657869663A506978656C5844696D656E73696F6E3E3431313C2F657869663A506978656C5844696D656E73696F6E3E0A20203C657869663A506978656C5944696D656E73696F6E3E3231313C2F657869663A506978656C5944696D656E73696F6E3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7064663D27687474703A2F2F6E732E61646F62652E636F6D2F7064662F312E332F2!
73E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A446!
57363726
97074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A70686F746F73686F703D27687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F273E0A20203C70686F746F73686F703A486973746F72793E3C2F70686F746F73686F703A486973746F72793E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A746966663D27687474703A2F2F6E732E61646F62652E636F6D2F746966662F312E302F273E0A20203C746966663A4F7269656E746174696F6E3E313C2F746966663A4F7269656E746174696F6E3E0A20203C746966663A585265736F6C7574696F6E3E37322F313C2F746966663A585265736F6C7574696F6E3E0A20203C746966663A595265736F6C7574696F6E3E37322F313C2F746966663A595265736F6C7574696F6E3E0A20203C746966663A5265736F6C7574696F6E556E69743E323C2F746966663A5265736F6C7574696F6E556E69743E0A203C2F7264663A4465736372697074696F6E3E0A0A!
203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861703D27687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F273E0A20203C7861703A437265617465446174653E323030372D30382D32315431343A32353A32312B31303A30303C2F7861703A437265617465446174653E0A20203C7861703A4D6F64696679446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D6F64696679446174653E0A20203C7861703A4D65746164617461446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D65746164617461446174653E0A20203C7861703A43726561746F72546F6F6C3E41646F62652050686F746F73686F702043532057696E646F77733C2F7861703A43726561746F72546F6F6C3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861704D4D3D27687474703A2F2F6E732E61646F62652E636F6D!
2F7861702F312E302F6D6D2F273E0A20203C7861704D4D3A446F63756D656E!
7449443E
61646F62653A646F6369643A70686F746F73686F703A63393464383463362D346639652D313164632D623434612D6462616432653537656630373C2F7861704D4D3A446F63756D656E7449443E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A64633D27687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F273E0A20203C64633A666F726D61743E696D6167652F6A7065673C2F64633A666F726D61743E0A203C2F7264663A4465736372697074696F6E3E0A0A3C2F7264663A5244463E0A3C2F783A786D706D6574613E0A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
0202020202020202020202020202020200A202020202020202020202020202!
02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020!
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020!
2020200A202020202020202020202020202020202020202020202020202020!
20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202!
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202!
02020202020202020202020202020202020202020202020202020202020202!
02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020!
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202020202020202020202020202020!
20202020202020202020202020202020202020202020202020202020202020!
20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A3C3F787061636B657420656E643D2777273F3EFFEE000E41646F626500640000000001FFDB0084000A07070708070A08080A0F0A080A0F120D0A0A0D1214101012101014110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010B0C0C15131522181822140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110800D3019B03011100021101031101FFDD0004003!
4FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00E338ABB15762AEC55D8ABB15762AEC55D4C55D4C55D4C55D4C55D4C55D8ABA98ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AE!
C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5!
5D8ABB15
762AEC55D8ABB157FFFD0E338ABB15762AEC55D8ABB155F1C324868AA4F6AE0269205B30F2BE8CEBA95BDA49A643737329A96B9E4CAAAC3F6A1FB1FF079599B6703DCB47F26797EDE10F269907AAF42C1A34201F051C7ECE4A365814D3FC37E5EFF00AB5DA7857D08FF00E69C931B483CE16FA069BA7B3AE9F6A25A1A7EE631DBE1FD9E593885B78C5D79B658E7744D3AC99396DFBA02A3232098943BF99ED9EA24D134F2C7AF18A877F1FDAC8D32523ACE90451F43B7DFF90B2E2B4D1BDF2AC8E1A5D1E5407ED08A634FF600E2B4B5FF00C16E4520D4231D36789B7FA571B2B4B1348D0AEE5E169753C658D156745DABFCCC8D920189653FF2A535C96D56E2D2FEDA6E42BC183A1DFA745930134A0245ABFE5B7997498CCB70B0C918EF149CBF80C41B5A48E0D0757B8DA0B492523F9057F564A90D4DA16B5054CDA7DCA05EA4C4F414FF002B8D302A04A95342083E076C55AC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD1E338ABB15762AEC55D8AA77E5BF2DCFACCAF2BB7A1A75B82F7574DB2A81FB20FF3B64652A6518DA75777FA6A294B08C4505B8020000AB536F51DBF99FED653B92DE299E7E50E8725D4B73AF5E3191C90B106DF7A7DBC9016C245EB4065AD2E3B0C!
2AF25FCC49B53B9B8748EDE564A9DC027AF4E83F6572C082F29B9D3EF44ACCD6F28249FB4A47F0DB224241421B79947C51B76EC47CBB60A4DB4508EA30526D6F163B5294F1FA322432B70046F4C56D1760E639C1F7FD472712D65EFDE43D48DDE9F1C25B93014F889EC3BFD1864141641ABE8D6D7D6B22BC6A5F89E2C7AF8F7F87005615E554B2B1D567B5994092324AF2DB6F1FF886495E851A44CA085AAD29423BF7FB59029416A1E59F2F6A8A45FE9D6F715EACD1AF2DBFCB03960430FD6FF25BCA97EA5AC049A74DDBD36E49FF0001272FF89629797F993F2A3CCFA187992317D68A4D2582A5A9FCCD1F518DAD30A646462AE0AB29A3291420E14358ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AFFFD2E338ABB15762AEC551DA369373AB6A3058DB29692660BB7604EEDFEC7232953288B7A84F656D39B4F24E9429046C0DE4A06EEEBFDE3D476E59546C96D3B04179E34ED374C82D74CB48B835033B53E23D157FE1B2F9000358365EC3E53D323D2F40B3B4414E3186623BB37C4DFAF2B80599DD39CB1834FBA91E3D7BE02A8196D165724D46F4DB635EBFF11C2249212F9F4547154501BB0DBC695FB3FF0060F2568A427F86E1706A919A9A54A0A787BE1B0A8697C9FA5B805ECA26A8D8!
95506BF2FA31B5415C7E5DF9725A9364AA294251B8D083F16DFEC7FCFEDE05!
4BEE3F29
FCBEF411ACD19E838BD7E2AB03D7F6A98D252B9FF296D91C7D5AEA443B7DA0A46FB76A74638400825927943CB77FA3DC2FEFD668CD08AA9141F6149E5FCDCB12A033FD99771B1ED90579779E2C8E93AB457D01A2B6FB6D4FC4FECFC39645059B79775AB6D4EC90C720760A050EC41A7BEFFEB64484A76BD37C82B476C055A342B461F4604B01F3BFE58699AF4525DD9C62DB5203E164002B91D9C61052F05D6344D4747BA7B5BE85A37534048D8FCB2484BF143B15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFFD3E338ABB156C2D4D05493D862AE5525801D4ED8A43D0FC8C89A4417377222C7792A18EDE690D046187C4E72B9449671349FF906E34CB4F344AD777D1DCDDDD2B242D1F2216BF130FE5F897964626994907A8BAEB3E72782302482194CB31FF253655DBE15DF2C9498443DBAD5425BC680710140A7D18C58956C28689F6AE02556725A604B9C023E2E9892AE50BD7A9EB5F7E871B55A557B1A0EF4A78636AE31AD3E5523BF6A7BE1E25532869B0ED5EBF8FF00C2E0E24A9B42A6A8CBB375EA7AD77F8B0F12D3422457241DC9A915AD4D001D7ED6DFF35E1E2B452363FB3BFF0098ED8841623F989A7C979A621450CC84915F61BD3271D90F3BF2F6A3716172B1C9511921452B4AF4ED922!
87B3695769716884302E051857BF86FFE4F1C81648E39155A77141F4644A5A00508ED885487CCDE51D2B5E857EB56C92C919AA96A827FC9665F8B0ABE7CF39F95FF00436A92C76E8C90B125617AD50782B1FEF13F970AD318C28762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD4E338ABB154FF0040B7D164B3B86BA9261AA160B671A01E9D29F1F3277E4D842A69059FE879A39AFF0049924B4660E250A4301E2BB7FB2C4A433BD5DFCBFE63D3E19B48BD88DCC518596D1E91CAC07829A2B32E444BA24C5845816B2F3344A89E9BC61B973DA950D534C810CC72657E49B76B391F5865E51DECDC149A1A80DCD8AF2FF2B0016AF625B880202644E951F10FEB9214D641529F54B0881E5750A11B90CEBFD701924040CDE65D11369353B651DFF789FD71E24F0A1AE7CD3E5E28D4D5605F75753BF5EC701290109179E3CB70C7E9CBAB41211B862E2B4F0395D967C2170FCC2F28AD6BA9C3B74A303F778E4ACB1315ABF98DE51A1E5A8463DAB5A636BC2BD3F307CA2C69FA4E214EBC8918D95E1565F3D7945AA3F4B5B8FF00663240B13142EAFE67D2AF2C1EDF49D62DA3BA620095A40283BF1FF2B083BA692AD3E2861A037304EDDDC4C189FF0086CB048312197E9B7D0143575AF5FB61BB7FC0FECFECE02!
57856EA77D66D1947F8D54FC63B74C3128A2C3F504D1B831F4C46CB5A501EF!
5FB59340
50B0F3C436158A2B39AE20068CD0AF24A8FF2BFC9FE5C3CD168A97F3674C818896C6EC28EADC09EE7B655205902D47F9D1E543F6D2E233DEA953FAF2165970A616FF9AFE4C94D0DE18DAA07C68C3AFD1B60E25E14D6D7CF5E53B91FBBD56DEA7F659C29FB9B25C48E12A1E63D1BCBDE6AB0685A685E602B0CF1BAB329EA3EC9C6D68BC1BCD9E4CD4746BC78A58EBD59644DD587D1D0EF920A4314208343B11D46162EC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD5E338ABB1546E9AD24570B2C6A5829A9DABF3D86297D15E59F36796757B086CEE1E249D1557D29E82A69FB3EA64884301FCD5D1BCBF6F22DD694C914E77758C8A57724FC3838536F3CB4BDB857E44866E25096A9241F13D722CB9239FCCBAA2ADBA4337A705B0FDDC2BB26FD792E3C979A7369E62F2D6A748B5A827B476EB756D2311BFED321DB06CBB856BBF22DB5EC267D03584BF04545BCD20590FB76DFF0067ECE3C34A0B17BAF2C6BD6B37A5358CFCAB4AAA16077FF23960B0947C1E4AF3B2209A0D26EC2B0142226DC1E878D315B4CAD3CAFE7A5DA4D05EE17B89E1DFC695F870AA60BE50BD714BCF295CC7E2F6A48FF846AE0428C9E48D22426AD7DA6B5765BCB73407DCA8F8714DA1A7FCBABF281F4FBAB6BD5EA151C2B7FC036349!
B63F7BE5DD66C9CA5CD84D1B0EFC1B8FD0CB5C56D0234FBC6345B795BE48DFD315555D2B53A82B6D38FF0060E3EEDB1B545DB695E656DEDA0BC045775120FC462845187CF16BFF002DEA3D8498ECA86B9BDF35B232CF2DD94E8DCC3D29DD4E112410B74BD77CC1A4BD6CE69156B568981287FD65C3C48E166BA5FE68B10B16B3A52C8BB03340A4377FD93F0E3C416991C50FE5E799A30DC561B83BD194C2F5F6FE6E8B902C91B6FF00953E4E256AB34B53B7EF36DFFD55C484DA716FF95FE49550469E1BDD99ABFAF080C4C9737E58F9441E505BC96EDD8C5232FF005C7851C450D71F96B6AC0882FEE545085591F9A8069E2B9245B09F307E4F5E8E52DB37AE402792ECDDBED0DF0ABCD356D0AF34B99A39D190AF40C38D4614259815D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD6E338AB22D03C95ABEB9A55FEAD6C512CEC01F519CEECE007F4D147F92705ABD4BF293C97A7CBA1AEA9A8DB892595996347150029A72A1FE6C92B21F317E5AE95A842EFA728B3BB00B46C9F08E5D474C41578B79A743D6F48B9306A45DC0DD589AD7B8C2770A18E8620785695C83353663F8F4C0AB4B1FBB0D22D1961A8B5B38E5531D7E250687E60FF003610696ADE95E58F385F69912DD076D47495A7AC0FC53423FCBAF55C06!
36A090F63D2758D3F57B44BAB1996589C576EA3FD65C508EC50EC2AD322B02!
AC0153D4
1DC6054B6E3CB7A1DC37392CA30FD990703FF09C71A4DA0E7F2A45C58DA5DCD0B7EC873EAA0FF60DBF1FF658D2DA413DAF9B34E6669AC2DEFA104D25B7015E9E250E46AD97121A1F37D9C5384BB8DED1C6CCB347C4547F95BFFC364F802389935979974F923E71857DBFDD6411DBF0C7851699C5A969F31550C013D030A63C2AAE6DECE51BC71C83FD556F960A5B526D23496FB5636E7FE7927FCD38D2DBBF43E93FF2C307FC8A4FF9A70505B2B1F43D1A4003D8C040DC7EED47EA18696D5A3D3ECE2004518403600569BFB634B6AE1157A75A52BDE98D212AD535A1A74D1C6ED19E6090AE78B1F97ECE4C0B555B7D7F4D95C46F20864207C321001AF83569829531D987883F48A605631E70F2758EB96329F4C2DDA8255C0DCD3B6D84157CE3AFE817DA25F3DB5DC65373C188D8807122952CE35FEB8134D889E9502BEDDF05AD35C1BA50D7E5850B68475C55D4C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55FFFD7E338AB2AF2879BAEB45B1D4F4E047D52F63E4C09350E9B2F0FF5EBC5B01487AEFE5E7E60E897BA65B6992B0B5B981029E7B2B31279529F671521E86AE8E39230653D0835185093F99BCB765E61D365B3B850242A7D294804AB50F1DFED71DF1055F3D6B5E49D734A9E48A6B4731AC8104C07C2D5FB254E12120B1FBFB55B5!
98C2B2895D7EDF1E80F75FA32292878636964545FB4E4015F12683150CC20FCBFD49F48BBB978D96EED08631D2B543D48382D29069FA85F68B7A258495653C648987C2CB5F895D0F55A6157A3683A890875CF2DB142BBEA1A583D0FED3443A64A9897A9F967CCF69AEDA2C8A42CE3ED2F4A9EF4C084F315762AEC55D8AA1A7D4AC206E135C468DFCA58576C55037B3F96EEA16FAD35BCE846EA4AB350F80FB7855E33E61B5B0B29E4B8D2A76B57EBFBA63C09A0FD9AE4A9095D87E636A76F586FD45D20F84C8A78B506DFEAE478995322B2F37E9B7C01B4D424B2BBEC9292072DBBD7085298CDE69F3669EA65F5CCF101B303CD48192A0C504FF9D3AADAB159A0576A529C40A6020282E3F9EF774A7D49397F36FF00860D9560FCF1D45B6FABA83E3F0D3F563B2AFB7FCF3BA5FEF6D43EFB5475FF0027E1C1B258BF9C3F31EF7CC5441188501A823AA8DF65A7F2E1B5A49AC3CDFACDA0F4DE5FACC03FDD736FB7806EAB91B4B2EF2FFE664F692288266850905AD663CE2249FD96FD9AE485143D4341FCC3D23520B1DD11693B7424D626F949DBFD96242A2BCCDE53D1BCD161C1C27320B453250D6A3F981FE6FDAC0AF9E7CD7E55BDF2D6A06DA7AB46DBC6F4EA3B602120A4D127360A3666341F4E0A656DB1922728E0AB2EC57C0D30B16C4B5DFF000EBE1DB0DA1504D11004918!
3BEFB0AD053BF5C55CD1D9C83E1AA3788A907BF4F8B1553FA9291F0CA3E904!
7EAE58D2
A83C1221A11F76F81565315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD0E338AAE8C8E6BCBA577C551B2C7240C248DFE1FD8950EDD7D8E0A656CAFCA7F98FAD681208CC9EBD9B30E68FBEC3C0F6C569EF3E5EF34693E61B513D84A19E80C911FB4B5EDFE562C6921FCC5D5B4FFD1CFA4ADD88B529C0E0AA03305DF7FF00230713201E2573E46D712CA4D46085AE2CD0D1DC0DC78F25DF0AA47676F34D771C5102652C29E35AE297D55E5E0F2E8D672DCC7C6778544AA69B9038EF82904B11F3CFE59E9FAA412DE69F1FA576AB5F4D07DAA7864916F1AB7B8D5BCA7ABAB85292467E346FB322D7ECFF00B25C79279BD4F4CD7B4F36516B160A12DE57FF004A2868D149FCCC3F97964D872661279EB43B2B6497519BD1A8DDC02CA7A7C4A57E791A4A4F77F9C9E4D8437A52C9311D288547FC36FF00F0B8D2B11D4FF3CEECB95D3AD51129B336E7FE1B1D9522B8FCE6F364A8C8B22206AEEAA0115F0A2E0B4B14BDF336AF7B299A6B862EC6BD70DAA0DB52BF7AD677F8B63434FD582D548DCCCC38B3B30F024E2AB2BBFBE04DB7534C529869FAF6A7A791F579D820FD8624A9FF00626BFEAE4AD8D268DAC68DAB8E3A95BFD5A720FEFE2E95EBBA530DB14BAF7CBD3C4BEADA38BA80F464A134FF00571A54A0A952430208EA0E04B60E0576296B1577EBC508BB4D46!
EACCD61734E9C4F4A61056999797BCFCF6D2AF3964B2714F8E33CA33DBE38C8C24AA6FE6DF317E99453EAC3323A541E038D695F81FAFC5CBF6B2403125E62E642E5A94604D29E3ED4CADB39A6B3CB6FAA5AA30023D4A15E2E2BB48BD981FE7E3F6B25CD8F2497A1AD771914B61A9FE7E18AAE24D295DBA62AD7A8C3BFD18DAB6253DFEFC55CD213D77F9FF006D7157108FDB89F6C5569888E8790F6C50B315762AEC55D8ABB15762AEC55D8ABB15762AFF00FFD1E338AAADB40D712F05EA1598FC9472C52113617E2D27FDEC627B63B490B7423A62A9A5F68F6D25AFE91D1E4F5ED284CD09FEF623DD641FB4BFE5E349B4268FAD6B1A35DACFA5DCBC339F868BB86AFEC943D6B815BD7759BCD4AEFD4BA62D702A6573D4BF7FF81C1492699B7E5FFE62C1A34634DD494C967310198D4F1A9FB584297A0E97F96BA147A936AF1FEF1243EAC201A81507A7DF86D8B0DFCD0F37F98F44F310D374BBC7B4B486142A894DEBBEED4C8D26D0DE53FCE6D5EDAE520D79BEB768EC019800244A9A576A72C559F79CBCA3A579B345FAF5804698A19A0993F6B6AE482393C5B42D565D03549ECAF949B09898AF213E07E1F500FF00270834A45A69797B1C2CDA2EA2DEAE9F2D1EC2E7C14D08E9F3C921865F594B6570F049BD3EC378AF62320943D7B62AD549EB8A1D8A5C37F9E2ADE056FF00!
577C55C7A62968FF0099C50EAD70AABDB5E5CDAB73824287BD3A7DD8DA2934!
1A8699A8
294D462F46E2945B98C6D53FCEB92B08A405EE9B25B51D1965818556543514276AE02136833D7FCFA604B58A1D8ABB15762AA89712A2940E781EAB5DB0DAD384C46DD8F6F95302569735A8EB8AAD249EBDFBE28762AE0698A5DD715762877BE2976055C1C8141EFF008E156CB2B9F8877EA3C3155A508F96285B8ABB15762AEC55D8ABB15762AEC55FFFD2E338AA73E5778535098CB2A435B69951E4FB3C8A5157014849B0A111677B73672FA96EE50F461D88FE5618AA77A29D3A6BE5BC91D22F4B93C90374242FEC7D3894848A790CB34929EAECCDF79AE052B01C52F41D07F347CC3A168D1430AA5D428C54FAE492BE014FF2E049633E6EF33CDE66D5DB5396210B322A18C1A814EE30B148C1C55E9BF951F982748BA5D17527FF0071D72E043231DA273F0FFC8B380A79B21FCD3F20C57103EBDA5A80F4E5322F420FED2F11879A06CF2A8EE1AF2C7EA13926E20A9B527AFF00951E486FB29EF5289D2FA2FA9DD3F0B88FFDE691813FF3C9B0284034091B9477A329A1DBFAE04D3825B8EAC4FCBC31577FA2F5F8BE5B6286AB057EC9A7CF14B7CA0EE877F7C55DCE0EF1FE27156FD4B5A6F19AFB1C50BE686D4A46D6AECEE56B3230A7135E8BFCD8AA17BD3BE156F1571AE2AAB05D4D0D551AA87AA1DD4FFB1C6D0D49E9BD5D071F15FE9812A5850EC55D8AB58AB7DB156B156!
F156B156F15762AEEF8AB8604BB1576142ADBAC2D2A89DCA46DB33015A62956B9B392DC86FEF213BA4ABF648FA30250E1856806D850D1094F87AF8628598ABB15762AEC55D8ABB15762AFFFD3E338AB6868714868E28762AA901FDE0A8AEC462521B8E29659561894B48C68AA3A9381534D4342B8D2D62375C59E4152886A57D9FC1B224B30146D104914F00AB7A82A83FCA5AFF0C54840B432AEFC4D3E59360A7B8C55B048208342370462AF75FCB4F3F586ABA3FE81D6A709751A18D1E46E3EA47D29C9BF6D723C95E77E7CF2F4BA06B6D3414FABC8DEAC0EBBAEE796DF4E4AD3497EB1A77D6AC21F3058AFEE9CF0BB8D3731CA3F68FF0092F8AA512A5C5DACB74685A3A7A8075A7F3D302109850EC55AC55BC55D8A5D8A1B562AC194D08EF8A51AF025D406E20DA54FEF611D69FCC98AA08EDF218AB47143B15762AEC52EC50EC55D8ABB156B156F156B156F15762AEC55BE98A5C715762AD6284559DFCB6A4A802485BEDC2FBA9FA314AEBA8ADA40D7168782F56858EEB5FE5FF271541D714358ABB15762AEC55D8ABB15762AFF00FFD4E338AA32C74E9AEE1BB9E300ADA46259077A1609FC71484253156B1436AC54861B118AB24F295B88C5E6AEEA48B38C88BFE323EDFF000AB912C8285E6B22E0B015657079B11B93D4D321C2D9612F867782649E2A06435A7CBC72682!
CD34AFCC0D0E04105E689134727F7CE054D4FED2A9C935B5AD794B48D5EDDF!
55F2A482
48F7696CBA3AEDFB2AD84845B03961921629229561D4114351812B031520A9A30EE36C559CF963558B5FB06F2D6AF255C293A75C39DD48DDA3A9C0136A5E5CB91A45E5DE95A901E8BD62BB81BA32578F35FF2F15426AFE5DBBD07525953F7BA5DC54C13FECBC4DFB24FF371C52916A7642D67F8378241CE26ED43DBFD8E1625038A1BC55D8ABB1576F8A5D8A15219648241246DC597A1C528DB9B78EEA037B6A2857FDE8847EC9FE75FF25B0252F20F8628A750F4C2B4EE0FD2876EB8AD3B8375A74C55BE0FFCA7EEC556D0E285E20958542123B1A1C064198812BBEAD31FD9391E20D83048F42B859CFF00CA71E30CBF2D3EE77D4E7FE438F1851A69F72E5B0B83FB269F2C1E206434933D177E8DB9077423E783C40CBF2735DFA2EE6952BB78E0F14321A29AF4D16EDC121761B93F2C4E6013F9193869339341B93D863E2865F9092F3A3CAA68C68723E30643B3E47F1FF1D54FD052802AD4E5D3078E127407BFF1FE955B4EF2B6A1A8C770F68BCCDB02CEB5DC81D78E5D1982E065C662527654524106A3623A11F3C9B52C34A6D507155B4C50D62ADE2AD62AEC55D8ABB15762AFFFD5E338AA67A4DCCD6F6BA918DA8B25BFA722F8867518AA5A7156B1570C55398F5492D745FA8C7B199FD4761E1DB0331C9BD0F451A8B34B7330B6B28CD1E6A57AF655C84A54CA31B6417BE4!
8B6974F7BCD02F96F922AFAD6E4709471FB452BF6FF9B0092486112290E54EC41A119606A28BD2F57BFD26E96E6CA568E41D403B30FE565EF92050CC5BF44F9D612D185B3D7D17E24A7C131F15FD9E75C3CD584DED8DC594ED6F708525434653DA9914A823BC6C1D18AB8355606841C509C5C4B2EA9A7FD719B95E5AD04E7BB21FB2E7FD5C4A4320F2DEB0758D125F2B5F4844B532E9D31DC875F8BD1DFF00D5C8948492492CE312D8EA6B298A27F82440032B8F85978B7ECE1494233E803ECC770DFEC94628D94CDC69409A5ABB8FF2A423FE238AECB5EEB4FAFC1674F9C8C71A45AC1756C3A5AA56B5DC938ADAD6BA56624431A8ECA06D856D699F6FB0A2BD36EC702DAD33313BD3DF6C56D19A2FD59B508A3BB99A0B590F195D372478531484D3CD9A55BE9B7AB2E9AE65D3A6158A5AD4D47DA0D8D258F191EB5AEFE38D31B6BD593AF23855C2593F98F86287737229C8D3C31A4DB553D71547DAEA72C68B139AC6BD06D954E16E5E9F3889DD3A8EEF4E6B42776989A03DB314C656EE2192077D9D6B77688C7D652C08D80EB8C816D94E2792C82F2059C3B2D6304EC7C3E9C4C4D2F1C48A6AE2F217999914AA1ED8889A5196202A5D6A503A22C69C4A8F888EF82302C4668858754436DE97015FE6EF87C336BE3C2EDB835730C4F1A81F1F8D09C4E224B13A8815186FD5240E!
00D8F439238CA7F3515F3EA6B3CBEA3F53E0300C6580D5443573AB195154B5!
78EC0D3F
CEB86389AE7AB88E48ED07566B03EADADD05724728DB6A13D59724410E1E49C6480F3469C8253A85B00A929FF488C7ECB9FDB1FE449993136EBE428B1D2724C5AC50D62AEC55D8AAE11B9D8035C534D3295346143E18A1AC55D8ABFFD6E338AB61980201201D88F1C55AC55D8AB856B8AA20A996548D77AD117F56064CC34CD126D5661A4DA49C12DA22F393D0BA8E5C731EDBC8A0A76BA8DBD8CB15F584AF1CB6CE4CB6D27DA634E1B3775CB406B281F37D8C6CD6BAD5B270B7D4939B2765906CEBFECB26181635858AF8669609165898A3A905586C411BE2ACF74EBCD2FCE968BA6EA6CB6BAE46BC6D6E8FD9948E88FD32576AC3F59D12FF0047BD7B4BC8CA3A9F849E8C3B329C8A557CB7232EB16D1F2558E77114A24FB051CF16E58DA808EF35D82E81E66923B13C52064960706BBFDAE4ADF31812F43D37CB7A2F9F34D4D52290457ACA22BE8B6F865514136D9032A6556F33F33F966F3CBB7ED69742BB9F4DE840650763930589092E1438E28762AEC55BA1F9629A750834C569B181535B3D4C359C96175F14120F81BBAB766C369A4A585188AD69DF145358A1D438A5B0AC7A02715A5C2294F4463F20702D2E5B4BA6DC42E4788538555E2B4D4148020929E054E4486C8C88EA89B8B6BE8006688AA91DC7F6E478436F8D2EF4219E4F1E95DB0F08478D2EF5A6E24EA5B1E!
10C4E6977B46663D5B0D20E43DED19D8FED63C28F10B4677FE6C691C656FACE3B9FBF0D2F1977AADD6A71A471968B31DC9C69165BE55EFE3BE34BC4883A8DD1B716ECD58E9420F5A78634B686A2F7E9E38A1C4C7BD01C2AEE49D97F1C0B6D161FCA0615B5CB2B28A2D062B6D7AB27F37DF8A16924F535C55AC55D8ABFFFD7E338ABB15762AEC55B1D715098E8AAD26A71B01C8A55C0F1E3F16573E4D90E6F40F21DCA47E628E365005D16576269F1302331ADC923663FAB7972E74E83509E68CF2B7BAE00914AA9272EE2DDAA92EFAC35EE917B6E187A50159A046FB400FB5C6BFB3973531FC2C1D8AB6A5948652430DC11B10714B294F33C3AC698BA56BBFDEC43FD135003E2423F665FE65C0A527FD03A9BC8CB6D09B80A2A1E2F8811E238E369E156B633DFA1D2EE2BF5A1FEF33C868411FEEA35FE6C28A28DF29F982F7CA7AFACB2AB0881F4AF2DCF74AFC5B7B7ECE448640BD5BCD5A4E9DE76D3126B2915AE0A096D5AA396E3ECB2E423B3221E74BF953E6BAA86B47A10492ABCA94C9DB05927E5D6AB1920DADD965EA040C7F1031B4D282F93A48686E2CEF78F7222236FF6430A16345E51B462B75697DCC7ECB155E9ED8AAC9351F2505022D32E4B52956947DFFB58ADA02E350D11FF00B9D3D90EDBB48715B413CF6BFB36F4F9B138A1BFAE463A5BC74F03538A5B4D415!
2BFE8B0B127A9535FD78A2DC352707E182102BB7C15C696D736B17447D88D7!
E4831A5B
5A357BF1F664E3F251FD31A5B68EADA89EB3B7DC07F0C696D69D4AFC8A7AEF4F634C348586F6F0F59DCFF00B238A6DA4BCB9470E246246E2A491F8E34B69CC10E99ADAF1F512C354A7C3C8F186520789FEEDF0252CD434CBFD3A6F46F21689BB123E123C55BA3614213143B1570C55D8ABBB62AEC52DFB7EBC55DEF8A1AC52E2298A1D8AB58ABB15762ADD2B8AB650D0B5361D7DB155B8ABFFFD0E338ABB15762AEC55D8AA79E5789E4BAB96404BC76EEFB7CC6573E4DB0E69AB5EDCE9620BD836904AAC29D6A32902DB897A5EA5AD797BCC5A1AC8248D1EE47EF626F84F203E22DF77C3913B200796DCE911E9DAEC708902D95C7250F52400C29C4FD397E3958DDAF24698DDCC5E8DC4B175F4DD96BF234CB5A94CF6C5596687A4E9DA9693475513A13CA4A856DCFBE61E5C9289D9CEC38E321BA55A9797EE2D034B19F5211DC751BF719663CE24C726988DC25F697D7B672092D67785C774623F565F4E1D946BEB26F24125F2D6E06EB751FC32023ECB1FE6DF0532BB52D4EFA7BD6479D848EA3889A94765EDEA789C284DFCBDE6CBDD2A38E20D58A36E50BD48642372B5FE56C052FA0FCB3E71D1F5FD3E2B88275498802585C8043F703C7FC9C431213FDB0A164D043327A72A0743D8E2AC1FCD1E49F2ACB2196655499D764EA7E630A6DE1FE62D2ACF4FBE920B76E48A76AEF!
B0DBB625212371434FBB1415B8ABB143B156B156F156B156F156B15762AEC55B04D7DF1566BE58F33DA4F08D23CC708BCB23F0C12B00658C9FE573D5710C89641FF2A7A3D5D5AEF41D423FAA9AF159ABC837F29E01B094241AAFE5379C34F72A2D45D46057D580F25A7DD5C0A90BF94F5F4AF3D3E71C763FBB6A0A7D18152D9ED67B7204D1B464F40C08FD78554A9F462AEA6F8157B46D4069B1EF8554F143B156FAE2968ED8A1AC55B552C683A9E98AA2ACF4DBBBD97D1B689E690F458D4B1FC305B2A66369F97CB650ADDF996FA1D2A0D8984B07B86FF5231809480EF31DFF009363F2AFD4B43B3717124E805ECC07A8EB1D5A4237F8579620959304C9307FFFD1E338ABB15762AEC55C31564DE4AB79A7BDBC8E204B9B57341EC572126C8A69ADBBD97D62DC44AF14B1A08CC8BDE9F13A7F94AD950E6DBCC30CFAC4A360E40F9E5DC21AB888578EF672D1F27E7C18150E7606BEF8294CAD46F64325D48E400C4D485E95C9060543A1C50AF6B7973692092091908F03407E6304A20B642663C93F5F334135A4B15CC656564215977049CC5FCBD4AC39875571A6344E663816D0C55D538AB81C56D36D335BBCB4B736B0CCB123372A95DBDF937DAED81369AA79F7CE81825BEAB3708871501CD29F22710AB87E6279D092B2EAB73E14572A41F98C5692BBAD6B55BB93D4B9D427!
2D5A82ECC7E5F1570A10724734BF1B5CA4B2375AB54FFC3604A91B2B824900!
311D6846
1435F50BBFF7D31F90AF4F962868D9DD8EB0BFFC09EF8AAC30CABB3230F9823155B423B62AD5315762B4EA62AEC55D8ABA98ABA98AB6A581041A11D0E2967BE42F36DCC17F0D8BDCB5B3CADC526AFC0C49D9645F7C0AF6EB2F335BA916FAA3A5B4DFB13310B1BFFB23F0AB7F9388521172798F438D589BC8DB88A90A791FC30A1E37E7CD4752F353AC56BA6451450B12930203B0247DA3B1ED925610DE52D7475B63DFA32FF0391A64A12797756854B4B07003AD48C690ABA6E9171732189A48E343DE460A2B86916BEFFCB72DAC8144B1C808EA86BF88C69508DA484DE49957C4753912590088B0D21AE2654B5B79AEDC900041B75FBB23C41908944DFF009435A8F5192DBF47CEB312088550B50353F6F11253144C5F975AF2A09AFD23D3ADF6265B960A69FEA7DAC36C69111DAF9074750D75732EB176BD6180048ABEEEDD7136952BCFCC2BE585AD744B58748B53B7EE14190FFAD31DF1016D8CC93DE5FDC069A492E2773B3312EC49F9D70A115AF29B7BA4B006A2CE35434E9CD87A927FC3362104A575C287FFD2E338ABB15762AEC55D8AB2FF00CBE24F981E152795C412A285AD49FB54FF0085C849B228FF0039AFA69609C8F2F4C8E27B50FC59586CB61D7D716D32C29140B149182B2C8A4FC67B315CB834C9062B5F9E1404EBCC5A1B696B632D2897902CA056B43FB43!
6C012424B8A1C70A1DED8ABB157018ABB15762AE15C55BE4474DB14B83B78E2B68A8353BB876560C3BABA86C555BF4BB56AD6B0904D4D1698AB6751B17147B155F74760715B515BB8D1C95122A7F287FBB15B4645A94206D75711D3A29F8BF8E2B6B5EFD5BA5D48DFEB01DFDC8C5567E90626866DBC4A7F41884B7F5C1CC51D0AF72CA3DB142A99E061B3C42BE232485093D3626861A76E8B914A994A529E91F9506295EC24E247A70F80206F8AAC5AD29E9C7F11D8D715733DB4647AB02B1F056F1C505AFAE5A2FD8B6FBD8E14350DF243711DC4702F28D83053D2A0F21D302593DD79E2E2FEC120BD025442C52D4034E44539F3FF002460654C69AE7507A942EA95F85456806F80C82F01EE53FF004F3FEFC3DFAB7F9F6C1C63BD3C07B9717BF514E52AFCC9C3C41784A935D5C9146918D7B924E4AD8D2C2EEDB6368A7A87933F2BE7D5B4C86FAF6E648619B75886C695F85B7F1CA0C89E4DC000CEB4EFCA7F2E5A3ABBA199850D5C93EFD0E3C25066986BB71E5FF26E9125F3C61154718615A2B3B6C02AEDFEAE3C081325E3FACFE6F799AFD985994B085BA08C55FF00E46B648414C9865EEA7A85FC865BCB992773D5A462DFAF2CA616A30DB4F3B058919D8F6504E032014449667E58FCB2D57596592E644B4B6A8E4588673FEAA03903907467C0F466D13F2EFC8962D3DE4!
8936A010F02FF00BC90B11F0F0857ECF5C90DD897835E5C35CDDCD70DB995D!
9F7EBF11
AE4D828E2AFFFD3E338ABB15762AEC55D8AA7FE50BD167E62D3EE18FC1EA04623B72FDDFEAC89661927E60431D16290F09ED5DC293BF3590F25CAE3CD99E4F3F78D929C87DA151BD72D6A2168DCEDD70AB20D76D1AD74DB28E572F2B00E4313C96A3EC6F910C8B1FED9260EC55D8AA26C6D24BA94A44A5DC296006FD3C71A4AA5E08185445F57B85FB71F63EEB8AA0B143B15762AE38AAE8FD3E69CEBC2BF153AD3DB0253D934FD16396D26996EA0D3E65AB3B254920FFBACFED7C38195278D63F95CF6AA1750BA49D8EEEC84D3FD8D306E9D9896AB67696D7456CAE3EB56A45526E257FD890DDF24C690721424715E3B6E3AD4F8E142E81A24995A65E718FB495A5702A3EEAE74A59A19ECA034E03D686424A892BBF13E18D26D33B7D7BCB323402FB44555423D4781D94914FE5AE0A4D854F35C5E4A36B0DD79724904933524B592B58E9FEB622D058AD724C5D8A5DBE284E3CBD0E812CF2B6B73BC3022D5163524BB787C39136CC25B77F57FACCBF55AFD5F911172EBC7F679610C4A8D4E143B157034C555E0BB9E260508047B0C043389DD9BA44AD1C4CCA3914566A78F5CD64C9B76B8C0E16D220C76A2F86024B2118AA1D22D661C6715EF41B7E38633218CE00B8795F4EFB621A8F1249DFC7F0CB0E493488455F44F24D8C9AAFD76E9D63D36DFF7B372D9405F8A9960C848!
A6A942215FCC7F9BD7A8FF00A3FCB6AB6D6508E097054176A0A1E21BECAE5F1877B8E4A49A47E6A79BB4EB9469EF5AEADC35658A40AD55AFC40353E1C970A109E79F3ADE79AF50599818ACA0A8B7B73BD3F99DBFCAC2C58DC56B248788049F000938929E1643A6F956E5C09EE63582DC6FEADC3841FF0003F6B2A948F46D8C40E69BAEADE59D1A3E0B39BD94758EDD78A57DE56C87864B33900E481D47F323579A236DA6A2E9D6C76223F89C8FF8CAE32D8E301A4CD8A4B35C5D4A6495DE695CD4B1259893965303BA8B295255B6606847B8C2C5AC55FFD4E338ABB15762AEC55D8AA26D64646575EB1B0714EBB11912CE2F4EF3AE976DAB5AE97AA5B49437F002D535F8D5072A8FF85CAB8A9B00795C808620F6CB83515F6B049717314110AC9230551EE71280C8FCEB14F05D4714CFEA7C2BC18F5A2A852323167262E726C1D8A156D638659552593D356DB9F61F3C5592689E57D4A46BD9616A1B581A68E64DC350576A78D327548B4326ABA76A30341AA4423BAA522BC4DB7EDEA0C814A497307A12B47C83807661D08F1C52A5B628762AD62AD83435F0ED8AA75AB799EF753D2EC74C991560B1148D86EC7B7C55C00322525C2C51D65AACD6904B0055912452143EFC49FDA18A6D038A1D8A5D438AD3A8715710476C50EC55AC55BA62AEC55D8ABB14BB143B156D4F121A9D!
37F6C0905336D7F502080C00200D87400532BF083778C54A3D6B5189832CA6!
A37C4E28
A3C69045A79A754570CEC18775A01913862CFF003124F6CFCF76E9195B8B76E5D82D08F7EB959C05B066096EBFE71BCD521FA9C0A6DECBAB463AB9A53E3A65D085344E76925B69D7F78DC6DA0794FF0092A4E4EC30A25385F28CF0289352B982CD0FECBB866FF805C8992447BD733F946C80A09F5097B9DA28FF00E6AC1522CAC0517F35DCC7198B4EB78AC90FED22867FF836192E063C6945CDEDDDD316B999E527BB31392A0C6C9510093B0C28568E28854CEFC40FD91BB1F60302694BD561F64951ED86916B3143B157FFD5E338ABB15762AEC55D8AAADB3012807A1FD780B289DDEADE416B6D6B42BCD0EE49FACD9D6E2C8ED5A1D9D14FDAFB5FC994486EDCF38D6F49BBD32ECC37402C8DF1D01AECDBE5D16A92BF95F4F375A9A4AC4AC56A0CEEC3C23DFAF6C4958854F37943AA1F4E5F55194480D79539EF4C42C92139262EC50EC5594793BCEF79E5CBCAB28B8B294709E16DFE03D69FF3461B5669E6DF2EF92B58D206B3E5D7586E187236E94AFF00B28FED2E1A5793CF118A568DBAA9A6452A74C50D9523AEDE18AB54C55D8ABB15753156D4027734C5211296F11A55ABE343B64496C1108FB7B0B46721892A07507FAE532996D100A9243A6C47E1899C8EF5DBC3E788322990885159E00DFDC7C3B6C0F6193DDAF65513695237EF2C9D8FB3D31DD765295AC03D62B26!
E3E0CE4E116834B3D4829F0D8AFD2C7C30B15394827E1B644E9DC9C2B487757353C500F6FD585042811BE2C5C17DC0C2ADF05AFDA0305A69516288F59540EFD71B5A718E21FEEC18AD0770B7FF7E7E18AD06B8DB8FDA24E2BB2C6E1FB35A7BE14394A721CC7C35DFE58AA7C9AD6876683EA5A5ACB2D07EF2E9B9FC43FC85A6468B2B086BAF34EB33A98D66F4223B7A700E0B4FA3E2C78429914A9E492462D231763D598D4FDE70B1B5B850EA62AD8A77FC314BB9B0FB3B62B6B6A49A9C50EC55D8ABB157FFFD6E338ABB15762AEC55D8AB8120D47518AB23D0B55BBD3EF20BEB37E13A1DB7D88FDA8DBFC96CAA41BE2F47D5ECFCB7E69812EE778ECEE9C0F55643C0EDD7D27FDA1918C96410D369DA2683E5FB916F203EAA15129DFD43523E03FC8B88B43C9266E4E77A81D32D0C0A99DBAE162D6143B156B154CF47D5A6B096AADF07F29E87DB0DAA6973A75BEB3135DD8B05B9AFEF2DCEC6B848B5482E6DA6B63C268D91C13D452B91A4DBA5BB9258D2370BC5294A000EC3155F15F7A69C1A08A4F765A9DB15B735EA9047D5A200F829FEB8AA9099791631A9AF6ED8AAA9BA848A7D5D3E78A149A588D3F7607CABFD714B5EA2F65FA2B82936DFD61C1D89FBF070A788AE178FF00CA3E9AFF005C7853C6C9346F26F9BB59884D61A7892261C96462A8B43FE5332E1A4712327FC!
B7F3F5B935D2B9D3FDF6CAFB7FB16F8B1A419316BFB7D474FB936F7D0BDBDC!
2F589C50
EFED8D2F121FEB53766FC31A5E2537919CF226A70A2D6E286B156F15762AEC55AC55BC55D8AB58ABB156F156B155C013D074C52D1C50D571575715762AEC55D8ABB15762AFF00FFD7E338ABB15762AEC55D8ABB15445B5CB42C37A0AD41F039122D9C64F52F23DF585EC4DF5D457E042AC6C030A52B5CAAA8B61DD22F3FEB9697F24696EFCBEA8CF1040388E2771B6594C6D8281BE49834D8A16E143B157571575715558AE2589C346E558742A68714BD83C8571E5DF38E93268FADA45FA4A304432100391DA443B726FF00271560DE73F245D795AF95276F52C6727EAF70BEC7A32F50D82D698ABAAAB9556E401D9BC70A1512DA7701952A0F43518A57FE8FBCA06F4CD0F7A8FEB8A2945E378CD1C50E295CB04CC01552478F6C556FA5252BC4D315A68AB034228475C569DC1A95A6D8AD322D13CF1E6AD182476178E2251C4444065A0FF5B15A64C3F397CF063E2120E5FEFCF4C7EAC28A619AEEADAC6BF7C6FF005221EE080B50028A0F618094D2586271B152305AD2D2AC3A8A62B4DFA521FD93F71C2B4D1561D4118AB5435C50EA1C55D438ABB89C569D4F1C55D8AB58AB862ADE2AEA818AB8B1229DB156B15762AEC55D8ABB15762AEC55D8ABFFD0E338ABB15762AEC55D8ABB15762A8AB4D46EAD2A2191901F024603164254A6CED212E4D4B1FC714F35BD01ED5FD58A16!
13858B58ABB15762AEC55D8AAF8279ADE559A0731CA86A8EA684118AA79ADF9DBCC3AE59C567A8DC0960880A0E0B5247ED33D397FC0E29B483143AA7156C3B0E848F962AE2C49A9249C55B0EE0503103D8E2AD726EB535C55AE47156F9B789C56DBF524FE63F7E29B6FD697F9CFDE7143425907476FBCE2AEF564FE6351B83538A6DC6473D589FA715B6FD697F9CFDE7145AD2EEDD589F99C55AE4715754E2AEA9C55D5C55D5C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD1E338ABB15762AEC55D8ABB15762AE18AAE1F4FD1D31641AFBF14358A1D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD9');
-
-update auction set image_id = 1 where auctionId = 19264723;
-update auction set image_id = 2 where auctionId = 62748261;
-update auction set image_id = 3 where auctionId = 71234567;
-update auction set image_id = 4 where auctionId = 73219532;
-
-insert into feedback (feedbackId, for_account_id, from_account_id, feedbackDate, item_id, rating, comment, response) values (1, 1, 2, CURRENT_TIMESTAMP, 19264723, 0, 'Pleasure to deal with', 'Thanks!');
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/import.sql 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,108 @@
+insert into category (categoryId, name) values (1, 'Antiques');
+ insert into category (categoryId, name, parent_category_id) values (1001, 'Furniture', 1);
+ insert into category (categoryId, name, parent_category_id) values (1002, 'Silverware', 1);
+
+insert into category (categoryId, name) values (2, 'Art');
+ insert into category (categoryId, name, parent_category_id) values (2001, 'Paintings', 2);
+ insert into category (categoryId, name, parent_category_id) values (2002, 'Prints', 2);
+ insert into category (categoryId, name, parent_category_id) values (2003, 'Sculptures', 2);
+
+insert into category (categoryId, name) values (3, 'Books');
+ insert into category (categoryId, name, parent_category_id) values (3001, 'Fiction', 3);
+ insert into category (categoryId, name, parent_category_id) values (3002, 'Non Fiction', 3);
+ insert into category (categoryId, name, parent_category_id) values (3003, 'Comic Books', 3);
+ insert into category (categoryId, name, parent_category_id) values (3004, 'Children', 3);
+
+insert into category (categoryId, name) values (4, 'Cameras and Photography');
+ insert into category (categoryId, name, parent_category_id) values (4001, 'Digital Cameras', 4);
+ insert into category (categoryId, name, parent_category_id) values (4002, 'Memory Cards', 4);
+ insert into category (categoryId, name, parent_category_id) values (4003, 'Film Cameras', 4);
+ insert into category (categoryId, name, parent_category_id) values (4004, 'Video Cameras', 4);
+
+insert into category (categoryId, name) values (5, 'Cars and Boats');
+ insert into category (categoryId, name, parent_category_id) values (5001, 'Cars', 5);
+ insert into category (categoryId, name, parent_category_id) values (5002, 'Motorcycles', 5);
+ insert into category (categoryId, name, parent_category_id) values (5003, 'Car Parts', 5);
+
+insert into category (categoryId, name) values (6, 'Cell Phones');
+ insert into category (categoryId, name, parent_category_id) values (6001, 'Mobile Phones', 6);
+ insert into category (categoryId, name, parent_category_id) values (6002, 'Mobile Accessories', 6);
+ insert into category (categoryId, name, parent_category_id) values (6003, 'Prepaid cards', 6);
+
+insert into category (categoryId, name) values (7, 'Clothing and Shoes');
+ insert into category (categoryId, name, parent_category_id) values (7001, 'Women', 7);
+ insert into category (categoryId, name, parent_category_id) values (7002, 'Men', 7);
+ insert into category (categoryId, name, parent_category_id) values (7003, 'Girls', 7);
+ insert into category (categoryId, name, parent_category_id) values (7004, 'Boys', 7);
+ insert into category (categoryId, name, parent_category_id) values (7005, 'Babies', 7);
+
+insert into category (categoryId, name) values (8, 'Computers');
+ insert into category (categoryId, name, parent_category_id) values (8001, 'Notebooks', 8);
+ insert into category (categoryId, name, parent_category_id) values (8002, 'Desktop PCs', 8);
+ insert into category (categoryId, name, parent_category_id) values (8003, 'Servers', 8);
+ insert into category (categoryId, name, parent_category_id) values (8004, 'Hardware', 8);
+ insert into category (categoryId, name, parent_category_id) values (8005, 'Software', 8);
+
+insert into category (categoryId, name) values (9, 'Music');
+ insert into category (categoryId, name, parent_category_id) values (9001, 'CDs', 9);
+ insert into category (categoryId, name, parent_category_id) values (9002, 'Records', 9);
+
+insert into category (categoryId, name) values (10, 'Electronics');
+ insert into category (categoryId, name, parent_category_id) values (10001, 'Home Audio', 10);
+ insert into category (categoryId, name, parent_category_id) values (10002, 'MP3 Players', 10);
+ insert into category (categoryId, name, parent_category_id) values (10003, 'Television', 10);
+ insert into category (categoryId, name, parent_category_id) values (10004, 'Home theatre', 10);
+
+insert into category (categoryId, name) values (11, 'Home and Garden');
+ insert into category (categoryId, name, parent_category_id) values (11001, 'Kitchen', 11);
+ insert into category (categoryId, name, parent_category_id) values (11002, 'Real Estate', 11);
+ insert into category (categoryId, name, parent_category_id) values (11003, 'Furniture', 11);
+
+insert into category (categoryId, name) values (12, 'Musical Instruments');
+ insert into category (categoryId, name, parent_category_id) values (12001, 'Guitars', 12);
+ insert into category (categoryId, name, parent_category_id) values (12002, 'Pianos and Keyboards', 12);
+ insert into category (categoryId, name, parent_category_id) values (12003, 'Percussion', 12);
+ insert into category (categoryId, name, parent_category_id) values (12004, 'Orchestral', 12);
+
+insert into category (categoryId, name) values (13, 'Sporting goods');
+ insert into category (categoryId, name, parent_category_id) values (13001, 'Golf', 13);
+ insert into category (categoryId, name, parent_category_id) values (13002, 'Fishing', 13);
+ insert into category (categoryId, name, parent_category_id) values (13003, 'Tennis', 13);
+
+insert into category (categoryId, name) values (14, 'Toys');
+ insert into category (categoryId, name, parent_category_id) values (14001, 'Remote control', 14);
+ insert into category (categoryId, name, parent_category_id) values (14002, 'Cars and trucks', 14);
+ insert into category (categoryId, name, parent_category_id) values (14003, 'Dolls', 14);
+ insert into category (categoryId, name, parent_category_id) values (14004, 'Educational', 14);
+
+insert into category (categoryId, name) values (15, 'Video Games');
+ insert into category (categoryId, name, parent_category_id) values (15001, 'PC', 15);
+ insert into category (categoryId, name, parent_category_id) values (15002, 'Nintendo Wii', 15);
+ insert into category (categoryId, name, parent_category_id) values (15003, 'Sony Playstation 3', 15);
+ insert into category (categoryId, name, parent_category_id) values (15004, 'XBox 360', 15);
+
+insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (1, 'honestjoe', 0, 0, CURRENT_TIMESTAMP, 'Sydney, NSW, Australia');
+insert into user (userId, username, password, account_id) values (1, 'demo', 'demo', 1);
+
+insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (2, 'bob', 0, 0, CURRENT_TIMESTAMP, 'Brisbane, QLD, Australia');
+insert into user (userId, username, password, account_id) values (2, 'bob', 'bob', 2);
+
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (19264723, 1, 'Whistler''s Mother, original painting by James McNeill Whistler', '+Whistler''s Mother'+char(10)+'*Arrangement in Grey and Black*: The Artist''s Mother, famous under its colloquial name Whistler''s Mother, is an 1871 oil-on-canvas painting by American-born painter James McNeill Whistler. The painting is 56.81 x 63.94 inches (144.3 x 162.4 cm), displayed in a frame of Whistler''s own design, and is currently owned by the Musée d''Orsay in Paris.', 2, 5999999.00, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (62748261, 1, 'Lost Tales Volume 1 by J.R.R. Tolkien', 'THE BOOK OF LOST TALES, I, stands at the beginning of the entire conception of Middle-earth and Valinor. Here is the whole, glorious history of Middle-earth that J.R.R. Tolkien brought to mythic and dramatic life with his classic fantasy novels of the Ring Cycle.', 3, 4.50, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (71234567, 1, 'Nikon D80 Digital Camera', 'The D80 features a new 10.2 effective megapixel DX Format CCD image sensor, bringing a new level of high resolution and sharp detail to the class while also providing plenty of freedom to crop creatively and print impressive enlargements. Nikon''s DX Format sensor and Nikon F bayonet lens mount design assure unprecedented compatibility across the comprehensive assortment of AF Nikkor lenses and DX Nikkor lenses designed exclusively for Nikon digital SLR cameras.', 4001, 899, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (73219532, 1, 'Pontiac Firebird Trans Am T-top', 'In good condition, this car has had some custom work done on it.', 5001, 199000, 0, CURRENT_TIMESTAMP, 1, 0);
+
+insert into auctionImage (imageId, auction_id, data) values (1, 19264723, '89504E470D0A1A0A0000000D49484452000000C8000000B7080300000060F2E1B80000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445956836B5874746423BCAA6764A4541A67636CAA5695B5653D8AC75D5A967E5B877F8D699ECC589BA9877BB9457D9B687865419767267A39C8E3A3532DAB578E8C996A88557AB8764885922CAA884E5BB87030203716D63F9E8B6504B466D6962CDA45B615D54D9CEB0B48A67DBC78D956A44413B3899958E9B724634291469655C513211956527FCE7A9764817ABA49AB8B4A8867B69F4CB888B6335A47B574437229B755621180FE7C27B845933F7DAA7171211DAB99527221835302B8B6445AD8348C39D75BDA56D302B27DAB369514732FEF9CB7B542759544C2B2722BB8C5255514BC4945AD3AD856239128A8479F2CE957B55339E6F38FEFCD5694624ECD5A8726A5BEDD6B4AF833B764B2365615A8B6027EAD79A928B77684219AB7B40C59C63FCFBE7EACCA4BC8D5B93621B0F0909BB9248B48C51CC9C63C5964BFBE19E645448C493533A2F1AB2AEA6C59B5CA37B416D695D4A402BCFB287B4946CC49D6BF7D48FFDEEC255442!
7AC7C4BBC9361F3DCB61910099D8766B38C5CB38451CC9B5BA27340C59562656155E3D9C5A37D62ADA9A2A37B4BBC946C7C4F185D594FC49B51B58D71CFC0A5CCB477B493627B786FEFE6A5BD9C6E865C41A99476BD9B61CC9D6BE8D38CFDF1B5CBB7966A6354776346C49E81956D51B17D448B836DDECFC48A6A52C38D57A3744BCBAC9030260D634A36BCA2852B1F0DF2D0A69F8258785A40AD8F67C8B06AA9A4908F5C25CB9B53724931EFE4B1E8CDB2B2AC9CAB8C6EB2855E9B927E6753397B715D555144EDE6C4D5AD918D755AC4956C594219634C44754410BEA25BB59C6BC08D49544D4EB9B49D523A21C9965CD3A1665C534566604C673A20584E38140C0FCA9651453C3D896F489F6D44F9EED99D6F2D877F8F7C75896D6A53746C79B07D53332C2DB49B616C502AD19D58824E21BA8550655E61AB754BA88F5CA87540905F35412D1F69676EBB865E5E5A43E1AF643C383E6E400F2E2F2A6F70630808092B2B2D0C0C0C101010231D1B906F3FBEBAAE303131A07052BE8E6552403048414D4B22051E1F1E55564555594DE0C09D755C50EBF67C9B000059A54944415478DA947D0D405475BAFE611860401CD44140C481B9CA0888BA32201032A068CC0CA032192124709D1052888FC4829071600D1DBD6A1AD49AE24DB2D034AB5D35D9D25259C592D0E5DE56B6841!
233C9908F75D5ACF6FFBCBFDF9901DBFAEFDEF7CC9C3973E683DF739EF7793!
F7EE7E80
813B6CE733C24DBB2658BA727BB61D9E2E1E13145B4FF98F2F87F3C8A85DB7FC17E47F7DFFDE977AF4D7863DEE9835BBDC367CF0E0F0AAA0D9FBD7BC78EC0B8B8DDBBE376C7ED78737720B67607CE6E9C8D175E5DBF7EED57DEDE6BBDBCB71E3CBDC5D1D171DEF6795BB73BCEAD3AB861DEBCEDA7B756797D75B06AF576AF83AB0F1E38F8E21BA74FCF3B3D6FDEE9D378DF3CDCEB2ACA1C0F39CF8BF2F49C327E8A876F94E74B51535EC2B2E5A1C71F7F61E5F4C7C7BF347DFABBE385A7BD77874FBE535D5D9D5396EF2C93796E993265FCF8F118FEF277FFC8ECE13FFFF93F6921FBF37F8A1BB4FDC73FFF71D273FBC7CFF1F8C92305D0531CE7CE1D3DD97BF3E4F5DEDE9347CF1DBD7AF2C10D1B566F98BB61F4E6D1BBDE4F714C9930E1FDF7E7FCF4D34F53F0D6146CCC99F274CA1C0CCD23E5FD091352764DD8B56BF491CD4746C3C68D1EBD79F2E4A3F81E7CDDE60DB0C978EA15EE153EFBEF383CBBE3E2E202777F10B77B08C7E940ED8103B387BCBC85B9291ECE516BC2606B56329BFEC2CB640F3FFC08378CF991FF7CC0FEFC9F8FFCF9E13F3FFCF033CFBC3CFDF197A64C719F12E5EBE9BBC5D5B92EC739A7AEA2AE2CC7D9D959764876C8D939C0795ED9860D39756565CECE8E8E4F83E9C741B387C7168F2D5BE61D3A346FDE3CF802764F90793C3D65CAD3F31C7138!
B6E0131B1CE74E98B07AF5DC37DE7074F4240E1D1D274C709CE0F1BBA727BC9F3267CEEF5E7BEDB5378076F3E60D9B374C1EFDE2FAF5B385C98E390EE90E9B563CB962935BD4FCF9F3A3C85E82AD7C41B497B1D08DECDD77DF7DE171BC88D1E0BE65CAA153F3B71C0A381570EAED804D9B56380504ACC3E3A64DEB3605B8060404DC0808983FDFD575BE6B80AB9B9BE77CCFA8299E51519EF3E1249EF4A7B03FE05451C0A9530187E6630FEDF5747575057EE79CB29C32E7436587E6391FDA7268DEA19C9C535B9C9DCB9CCBE6CDFBABDCF9100C47E2AF7F5D0DA73CE075A0E2ABD96BBD850DAECE39F1D13EC67207A715019BBEC09F3F15303F80D921FCAD43046DFE162C87020E61C0A74E6D3A255F01C3B857E4C5C7A7A7A7177738393965A7A73B39A5673BE13936F0485B2BD81327DA745871E6C94DF4B1534FAE600B1D3A0787F4F46C07D8A653F4859B3615ACC8CB5B41AF19D2D3E3E3F3F21CD25714C8E50E799B0A1C563864171717E37BF2707770C057E5ADC8F3F28AF73A7020F5E2D0412FE1447D806B4EF9D22B3E637C9E78E289D0D0D04CDC43B189A787E99119F6D076E813879F18E33366CCC68D1BC7F8C0D84EDB8B993E63323333E94DB68F8D19F3C418FA26FAEEC3F451DB6B6C7538131F09A54F7774748476848676300BEDC8EE604F845001A3C93C8C77!
F9E0BBF137376223D1676362E298C4449FCC4C9FE84C8D3014B7E495BADABA!
3A21E75C
AB6B4E5DDCC2850BBFFDE8231AE0460C74CC4676C387C7D0B8690F8DE630DBA24DDB6B3EE2887DD84EFA3856ECEDEC755A6DE45FE673D8670CB0307800884F1E3E4CC782BE634CE6133E99EC8BF02413DF8681D30BECEEE37365E3C619DCB2B0907DFBED421AF0C285590B179E7DF3404090A94828CB5FF74551C5DCE8EFA72DFCF6DB6F3FC29B181C801E33E6CA18FBF83EE228C78CA187191B377E34E3233CCCD8C8863A63069E32FBF65BFE25788FF8FC23767C3E6207801D8D31FC2810BA19573672A4EC9B7DF821F3E107D276087CF813FA8BDC683B71C647DFE29695B570DAF7A9AF06CA83E4C982636B6B7E6B5D59F2C2EF812F2BEB231AC5952B893E3E87A30FC34271D80E1F1E730507E630BE1547F1CAD22B57AE2CDD88750FBD01073634B40747901E7C7A0E0B3D3D0239674F0FF6C239E83BC861C84F0E1FEE0915D897E22BC78CC17AE3C62B890C0C0DFA0A01FC881FFD2C76CCE9B09365D1116187896F7C84C3FD6D167899F6FDC28B414379B506B950DFDA9A5CEF5C96A3591A2704065EB27C79B9FCCB2F2F7F7999D9F53B77AE5F0E0F3F3A39FCEF97D75F3FBAFE32E239621E82FBF5C947995DBF7CB9BCFCCBABE5E59672B3B92BBBA101028E2F379797973798CB1D4C06F3E5CB86BDD8DFD5B5F772D7F5BDD7F79299BABACCF858797CF62532600F0C0C140!
27BE8CE569AB8E8D4779626A65E599AB5E4934F3E7967E9D2A55045B44FE261A3201885504D6666E2951957962C5C382DFAE2EC8BF2F8BC22A13EE0ED8273D5151B26C7ADBF73C2D95196E2E14B367EFCF2E5FB7FFFD873648F3DF6D8EF7FFFFBC77ECBB61EFBE3737F7CEEB7CFD1AEFFA0E4F6B4E3DCD35BCBB6575599CDB5E5E6CB00116FAE3099AA4C55E6A37293B9EE44C586B20D5B37383ACE2D4B9179F87AC852F8E258E638D771EE76CA767726E35671A7AAA2A2AA62C39DB9658E8EF5734FECBA33F9CEE4A3938F5E0EF73EFAF7F0F5978F5EA6E3E65D853F741447A7BCB111E544DC3B4BE2761F1892D7AEC811E6AE7B7BEFB99CA31B28EF8E7EEDE93953E6FCD7949FFECB5692E0FEDF5846189EE2F65FFFF537AA54FEF0DAEF7EF7C68437DE98BB1D839A3B61FB89B2131B566F9FBB1DE9CB71FB8409F3E66279C3F18DD513B09AE7B87D5E190A92D3DBB7CF7B63DEDC0D1B46AF3EB8FA08D2F77AEFF55EEBC367AF67367BF76CA4EEBFCF9E8D1CFEF7D9E1E18DA88066AFC706B3A3DEEB8F7A1F3D7A70F569DC46AFF60EF78E8B9B3D7B481EE4502438BA3EB937BFBE62AEC7A8C5CB1F7A77D2BBEF4E9AF44724F66790DA617F7EE4CF8F3C62CBF1A2E1E9338F3CFCCC1F9F7BF78547294F6FF18CF288F238E4CC12394B67CEF3E8D9A143C881F3B744454D41D21!
EFFD21456BF79501AF5406EF7402AF7F098830798E36B5B263CFDF46B4F638!
56A85F6C
CF99DC76B13525E9BC08D1EE980ED7AE38DD1BB4623A7BF38FAC5D3DB8FBC5A265B1F377BFD90BCBC2B59A8CF2F28C84FAE720490F10FF9E614B9F26478CA15B910D990F2E329B60F09F1D0A15387D8C321ECDEC48C92DB0A4A7C0EC55087036D8946CF9E94F3444746DFF136AB20363D89A7C8AC487EF1F1C5C574A3C761B314436CB5C5C54877F179555579E6BC3C39AA1C543E393975A88190E31DB79C3E307A97DC33FC2218D954DC5524B4B67EF169AB7CB26CCEFEC58B1F5AEC4101EF897F324A6094CD787E43A07FC29E42D82EFB9B587E23EBC066077BC67674883B11BF6837CF19A19962B21823260CE4B8CC4CEC159F903DC177B0ED508125EB50A123D4A943481D2A9B5B250BBF18543BB429FB4C91E0DAFAC5B92FAA37A4CC19B5D8FDA1F1A39C911737B258CDD3E218CA2657688DD51584C88F107C6760F9E80AA234A227E5129E405908F5197325F1CA18D1368A8F14B9C78899447CE50A520F7DD1158AA5B4CCA090FA114B49333ECAA2983BE3DB8F449BC1C2F218CA8B5452B02F98967AFAD4DC3B73670F0D1D085A91FD361871FD22799DBC2CC563FFE2F1FBDD178745EF68AC0D2FF70ABF1CEE653E7A94CACB3B2760F5BB5067A7EC826D184DEBD173B16334D68E8E5030EAD50A39621582D5F60A04968A9CBA737253757E757275757E7D7DD9DCB2B9DBB7!
6FDF505156B69D95E4938F561D3D1AEEE58DBF128E90B41EA246004675DEB3A367C78ED41DD1587A52A31397BEB3343A31118706C96BC6D219388000C773FA342F537EFD1DD9ECDAA003C5C9D99FCA85D62FBEF874DD9DB2145F0019E53E7EF1AE09E8163C9F7E3A8596D79EFEDDEFA03AD8D3AF91E4DE40D3F0C61B4C71A35763397264EDFAB5070E1C089F7D00C12508F75ABE34CE6EC40D71C6CBEBAB2AEFB507F146EF232FBEF8221EB178A3C93A72F008DD8F6C5EFDE2EAD1EC156CB22F3F3D7AF4E9D1DB776DA7CE64FBE87964380E6515751BCACACAB6DED970A7EACE86F01DEF58CC45F5775A0F00487641C3A7C9E45A9F9EABAE97CD798831B2FFB949A377EF7AEDB539BF9B83F8CAA3ED7FF3D583F65B2CFFFD1FC825BE7328F6A4A43C3D61CB842D147771A30D4799634ACAF89F589B3665CA9C9FE6A4A450FF043BB10BBDD6EACD47366FF6C682E8BB7EFD1104DEF5A0C69B0EC807AC757A15CB8EB81D3B76BC4ABB3E78F5D5573FD8FD2A42F3ABA06EC78694A0A0F873B23BCEDEC826F10ED905A4914FCF1454CC0590FD8B478D5FBCFCB949CFFDE76F7FFB47BA61356CFFF15B1A3D862FA695E553C64FE13D92275AA82D6408BA8E689610800FA1377576441CF6941D9ACF5AA72D4F4FA135822D026D4A0A85D80908B51328E292E18594F73D00577C32873593!
CBC7FFF4D3F847F73FF628D9BBEF221D3F3AFEA7F13FEDF2DEBED8AB31AF48!
66CEF72A
0EF232E7599EAC83463E2D483E512FF3786894FBFEF18BF74F9AF4D0335B3E9F9198B8143541260A652C8246ACAA0594CD8246A3C9BC92A8D144472746631BFE9C1A1DFDA6060FA9D1AF68A253133F4F4CC49E546CC1DBA377E01D1AACB0D60CC509713D71FC3BF0C9A54B53D9A7F1AEC0C09E2194297881DF87822C8220A05CC13E6168E8E2ECDA211C7A78B1D7575FCDDE3E21674D78505E80CC2BE7686DAD9721DEF8C55F05D98D4F3F2D28724C791F7964D4E2FDC4C8F4973F680A0EBE160CBB9670ED9A42DBA988E855A8150ADCAF29D8034CABD5E295CE04BD5EA173D125E95A94A2B5B424295B925AECA66B7111AD9B2D2E2AAB0A4F7449E775BA55A27DC86CD5C8A7AF63F9906F61F39BF75E7FFDBDF7DE7BFD9D1DAFBC79D1D931276C7D507C806B55595571B997BC5C80D85D5D9FFCB4A0DE51E6FBD0E2C570AEE593A63F377DFA81DEF6F6F67BEDF7A4520CC945A773E9F657A95419DD1918818ACCC52529A94529954A2512B55AEAE7F79D9F3FECEB909090EE10DAF88E9EFA63FD9D1F5E1C3B769B688B16CD5AB468D1B645DBB6CDFADF6D0FD8D86D63616C35F62F7E63BFC337FA616BEC587C81F8E5DDDD5FDF53CC9CBA6DED21591D80C0B5AA72AA2C8D5EA662235CCBD5F5ED270DADB214DF87D60008B916807CA09690B54B08098EB14EA5D20182CEEA8207B!
AE1F8B70086B45DDDABEE958694F89594E06F014746085949087B02F3FFDADFDFCF6F2C8D7378C8DC668DDD767C1B1BF977808A01D3988FD3B0D3E8CBFCFDB87DE757E247A008CEB696D23FCD9CFAE2264FB9FBE4C678B97355455590A536AFDC78264770BDF1E419871C990712E278E0580E8D4C5FC980B44BEE492452A512379DCA25E9479DCB8F56971F9392408632A919BBA512697BAF5AD12BC9F02F29E1E30EA9C90014C24448FCBBD978BEF663C7F9C1C38FF571A0602F310863C581FBD388F11852C21EFCFD4B68EF5FFCFCFFE2EFFF9716C95B33A7AE0DF094876D088A4F6E35D555D5D6D65E8E0F753008CE37DE3E73065AF77DE825F7518B173320D32FAA25EDEA76E9BD7670A294B628935C5CE0F9492D706C1082ADE624006C012924977615065DF2D9673B3F0BD95953B3B3E4B31262E8B39D256925696C6C6339101AFCAC6D8C04B6CD3DC96FA4F9DB6E7E3836FE251C09DFF117DA0290E7A71E0B70AB0B9B0B20AED773AA1AC36BCBCB8D2B920567682439DFD1171A715FBC78145CEB5D06440210ED0404060456064447D2C083AEB919AA3EDFACBC0B8D0008A850F6F6F62A98A9B5BD0AB6D9DBDB8E1B94460B7885934A43381046909D8C613A4A00807B1588F067DBB092AFFDBEF607B17E7F69290590B501BE150464AFCC54B735A83CDC7C55484F46D47!
AF2EDA27C99C74F2B171323147E5F5879917030634094248B9616523D1C0BA!
C2401C80
5E585E6F3D25209460E2025ED2EFFFB17D8D7B4FA5FB2FFF99FFF610F7C93DB22894A8461B7612A6C479F20B007711961635BD48C117779547D509E5C76A7A2AAB1DC2B7EC8188FA875A3E0C975D5AD1EEEDCB57ECFC47EB15D092814BAA40C880B0F53E45C49A476A54EA96CBEA05CA0949482110212D2BEEDA9B766CE9C396E1CEE33673E8FCD99CFC3663EFFD453B8FDE6374FFD86D6CA9A6D634778DAD891AEE52FBA561A16E656F0AE92120E8562C9D778D545F1D6F3E3D69E7297BB5507AD2892A1A7B4C47BD51A350E147E3FFDF4ED1C34B8702DC4ADE5CF3C474058604500A6B085C0054692A00DDCA0155D12D44E22B98037B513232E0022F9FAF971643347D8F3B4C09E22FBCD6FFE06202A1B906D0F309286C5C64A1AC64DF1C2AFC49FE32861B18405B216ADC8C88D9C460031E56CBD448C087972E10680ACAB96C9C8B516A34B7C66D2A4E92F5C6444DC9348296A2939102673889EBC8B5C0B7C2C90422304C43FA4044066721420E60F7F98F9070E854010231CC76F94D66D22215CE83620ECD0DBDC2B64581C25885D14CD2990877C1DE2E772731C18A98B92BB9EA8958391B2AA4BC55FD51A87D2F304B71B9F3EB9C994C2811023939E9B34FD15268D7BCCAD08084BC474835080A44589E8BB40BA0040DBD5C38CBC358E50906FBDF5D65B1CD6F3CFFFE9A93F!
3DF5D41F8003409E02101E6945ADFBD9C49E56220638F6C45F44C580004509638432928BF6D8CC99C79CA3AA02728AE5724F53595550A3B9D6223831209F6E3221214E5F339EC2EF9F01642507A264C106A9AF8534C20D30C8800E6C49188EDB6A1D80A88911722D4231F3AD716F89EEF50766BF2103315230E26753C90824240C9B54281FFA95D84330C321BA96BF2A61D9CC712FCE8B32B50248B2A7497E34A831BCBCD8A9410E20679ECC2F7294FD841265144A943F4F7F6ED20BAFB42BED8C50B9E4D28DAA44C73C8CC1A1C28AF23A03A2502465D484B47F3D932B64DCB23DB065CB961DC30D36F5D8A265536D4094C340B6B15C2EA6426804D2B025909212AE177F0E81FC8B548300ACD22F9B3AF5585D94C9B5AED854E07A34EF68A0A5F672B9537C3CA2D69933EBEAEB5310B516030A732D004962381823481C2E2C6CD19AF19144FB281E00079068936A5435BD702D781312EFF1597BF6CC9AB5873D1C3F7E7CD6F190EF66914608C902EBD8918CF871B5D3BD24CDDFAE8B10A28255582525ACD4610AFA9A18D1EF993A151AA908A82BAE90CB8EE6790941976B8DC50D0E00B2E2CC991C6284B4CE5DEB8557A42DA2DA6D8C70C75291D259BD98C40A1435AF835B6A426A1462D47AEBD8F1B49D213B8F97D4A876D6586BC6A67DBC13A518C8F8DBDF0006AE856C300285!
2D27A6A5A5F15C8E353EC034C2F9B0030161212E09CB1890B2FC9C5A79C17C!
AFA23B3D
81B5431AA7F83C62E4C9E46A99A7EF4351E347AD81D8DF9DC41951B2C825A5E49104D722182A5126903BF91655BE2C972B6B326A7ABB9944C68D3B96F699B526C4AF645B8D2AA3A6662C021A0E3917FB6FFE26D58DB5552C7EB61A8B1ED3A852C480D3A00ED43A3B1929252C5CED0CC9F0E7410D0FE45AFFB3B628AABAA82228AF607E5E8EB927A83628CEE8E020CCBFB1F74903C4EEBED29D89FD610099FEB1A445C4718F5C2BC925A3DB2E76CA25494C23A242149D2D00A2E87E1E1227209FEDFCB866E7D8123F545D288659D1E1477E05247F9310103F5BE41D2BA262A12A8D460B624276EE4C5BB46C5B491A6303E486705494F04354FA45E3A6AE2D0A3B915C468C1C9597075E6A1CD258107EE743235D47651EEEA3DC911017FFFEE1497F9CF4C29BC8EC528A5C121108274325424176A42ADE0E444A1AE97E7EDC4C11C84E84533FC8532CBF21ECA7B8487E23D16D63CFFDEC48388E340EC42FEDB392CF8EA71DDFB6ECD89EB11C081C8D6452C2D3BC0B340246DCF38BCA6AF30CAE7979B59782E05AC5C8ECF36F749DE99AEC28731F15361E40F63F3C09AEF51E80B44B2562D4D2B9A88810ABCB08A3F82B5533D7EABDAD54D5D4A8996B4D05903DCBF6CCDA767C166F3CA889422BC56B14680440ECE2E0C177ACBDDAFD2CE4E38F672D1B77ECD89E3DC7F71C5B96B6F3B!
31AC865A75D2640E6A21F3B75D9DABAB0FA1C06C49C178FA618564CB556838379B24CB678947BD8E2C5EEBF7F8480AC42F845F52121D7A21E5195319C47380E16B40807FA60ADB4BB46A51635F2D6B1597B58009E85080C088B8068D12C5E694123147EFDFC6C40781249E36DC7CE8F9B4BEF1E5FF6228E0508D9732C6DE7CE1A722CA0A107E218AEF5DDB1FFD9B329ACDED9B1D1C120F392E76900C3A2F182D803E20D5D771C53168F0A0B5B1C06207F244648EAC8128C111D4F232C8588FD37DC8DB587BC75D74A55191CC8D47153671E3B8EE03B6BDB67DFD99A414A1933FFF614D30867843361CBEA884E4448C8C7172222224A41C91BC70065CFB2B11F436B805153033C35C44948864AFFD9D4457BE46165BE1382E2F39CCD79759AA120A1311AD5AF6C5D3680C83CC78F725F1C66630440DA79A72B5552C9DB8DA8A52304ACE272E15A0723E2240418E1AE3575EAB899C7E0E47EC7D3FC43BE13DBC2458B962D630AB103B19529363AA8F508C95875174022561D3BF616BC0B40667DFCB14A458C30630D740803B2765398B36F4A509E83CC2C77061063ADA616AEB5A9A1C174C251062064BF7FE4B96700E49ED2D655C1B39254DD6CDE0319A425C92E1029698480DC062304844B64E6B859B3A815476C2275CC221C4C231C48F336B191E2524FE38CF8A761BCAB5EF95!
07DF7C30BB38E8D23EF8273A69DB7AAC8B918109A0CC8A82120CBE05A8E6E2!
9C5790EA
E5526D38EA1DA38CD50719130DFD5C1E1FA9D7AD9E235BEEE58F63FFCEE33D35F789D55F1E846949C918C6EABCE85267D684EC545A7B4455F42D2A9ED94A8541F2BBE1EF71670A038456902752C5B347519167084DBB8E7593A44ADC5808CF5B3E50FDB140980EC5C7531FC1F1FAE3AFF0D54B2ECAD1797CD5A36EBBCD50A4AE05100B21348325400326ED11EC64831C47EC760DE11D8B8432314A3430C70E83299EA65CB47B9B9FBBAF9FE1E40263D7E01EAA0FEF01E4D5661F02135D6241DEBD65B5809CC6AC6762E76AD08A49BE743EA40785F45C52F95F0F61A9E03B1CD8E8C1D9E6E28F1A3698BF75E39E07DFCEE85F7D296BD786C1C53898A5112C2BD8B114240A6AE3D1596E3FB7471DE8A1B274CA6389AF5D380115940B679EF9D13885A6EBEBE9EC4C81F5F7EFC7526F5F6760A4E54FC8658939A75E4582D62854253281211482780D4EC54A89863F17E64B81779CA06840CE137699BBD45B7052DCA984883AA55AF7F7E60D7F1BBEFAD9AB5ECD88B8CD7101B9010824140BA6301E4C54DEE65514F17CB0B5CAB4DA6C0B8C0B8DAA17483E0E15A1E6FAA208DF8FABA797AEC7F843142057ABB5AC2A22C58806735B3D9134041CF4EF308AC6624897426243020DDC3A5FBCC61287F607DD5534F711C7F9328B7F93D6869AC194102AF59F5FADDF7BC47BFFAE1F9B4637B!
5E3CF622C2F7CE6F542A3E51468E155293A1AA894D1B37F5D8A6B0324F596D72416B91C11C3414A7A935667B099EAD0DE6E43B48886BDC7CDD5A6570AD492F3FFE2C7996BA9775EC4A90510320E0A185DDF9ECA8C8080849E86C57D5402354FB3228CFFFC18663A6ADCFE5B5D69FFEB640B9CDEE51BCBFA546248D798F6EF63FEE5E5C3DFAD50BEF211D521FB0A7E6FCC72A71BE8C42162402D79A39F5D8DBD088ACDC24773D67300C5D8CDB6111E2AB0437D7F8AE8A0A47C7F1A33CDDDDEA65FB99469EE5F5070141B3DBACB3EA9218105A92D03052EDDBCEF20811A25513906EF22AAE1370F3A07F3DFF3C2BB5189034BF92EF462049437DC508517DB3F9831DBB0F8E3EF28F0BAB961D5BFBCDF165B354DFC0B54A868140F40032F3C50077675FCFC68282563980C4C569CA8DD955C2FC000703809046C6BBC9DE67510B40A0905EB55ACA674D9BAD560644C94951523A14631611A265AE657DEBAD1759AD05EE8F3138B03FFCE14FE80FC9BBFEF49B3FC1162C184B2595389945356F5A08852C98F595ED1FECF0AE0AF75EFF8FF7661DDBB3F3B3E37BB67DFC0D5CABC436114B2289FDEC4FCF9FDEE4EEE826B3C8935D0B0C154340922788404C398E1EE3117EDD64BEA491175E7A96A22F80B0A4A804105D339B034E5226B1A9767816698824024208488D5A1BA1A0CC5CAA!
2E9594962E582059B04079E1876FBE39FF8DF51BEB79EBF91FAC3F58BFF946!
21F98EF2
F858D6CAA689456F1AD5B83BCF7FB0352EEEA89797F79159AF22F4C2F64024351C4306EBDD3390D9177CF7D9F14D51CE6EB22FE59FBA269B4CB385B8A172E3D53CC11340AE9F90B98191C5EEADBE8F01C8F497EE92D87BD54AB59A015152E4E5270C68F65A2996BE3C66257492D8553AD4CB08751256694AD823DFA66E929AFCE6A46672529A4E15CB12AA7659EBB4330365D537AFBCB223307CBD97B7F76C02729C6A4FE476042BEA06A868A4B825C11F5C80841825BB6AD84440868676084663B99CF2C81900F108438912251B06020C0A5D3307D2E2A253B1D994A4165592B2459C79E09516F26182C4AAFA18CB37D61F7556172BB298954E3DD4A8AC743CFDC78AB3D2B6D6636C096BD259E3C4D940BADBA952ADBAF0CA8EF0F0F507D7BFFAC1DA638B66A5BDBEF31F1F53FEC8E0D3416C8D44BF33E3E2A628574F6864856BB5E14E5060DC905168900B9E5F38745D3FE1E1B9780D3A12DFF1DCB5EEB279464844CD7C8BE6801810658B1FCD69B3E02B329290A06F97E8307632DD0F569DF51B6C138C1A9603481268926C53D97EDFA5B186D08F4F2BECA435468B68615D657DF69DC0F070AF8BAF7EB0FED8A2E3C7577D58F20DE22F9AB60C3271B21F45E42B8C118BFCC9D6645345D0D00E8DB1078CB8053838984EA08C5F130520EE003269E54B67C1487BBB629B4ACD4F9!
120174A552ECCC9880FDEB02B6C40B4D21F388CF358AC0C938A0DA0863B379B16B10119CB4E79F8B1E69C81D9491E534314AE5AF0A666BDD7EC570ECC9A3575D1F145C7C7CEAAC111A2EF517120241374BE699BC25C3D658DC945ADF2EAEADA40CDD055A181C26F7A83215FE6418C84B9873DF6F0F449D3A7102338E2D22411088A2CA9BF4ACA4F96B0742811271E12605A29864E20E8649AD52AB20328EC6409861C5232A24E14B3B9BFBF38D90309D3591515F3AD8BAFEE7EE5D503B3F68CDBB367D1F159CB6A92446EBB6D9464C0118F3F090D00C8A6D6E46A53505C7460B660313320A6FC566AAC50FF2EDEFFC84308BF77DB2928C178F8A51CD8A253B269C7162A24956C6E8E475F3D32BB959B4EA75B65678446C0442A4E80FA8DECA5FCD814B51F9B5F60473C4465FDF19B0B1FBFF2DE7B00B26C192544142935497464F055DDEC909470A910103759A3BC8080046AA23516C1A916E1D7C99C5C2DF36540C2DC1F7DF88549107B293C4BAD001F4CEDAC4C645C28D9E48A72B8AB02219D3AE937183BEE2EF073AB0803CE9251C3E6D6D8C45B89BFDFC8592C3B9012727BE2AE46F5834E7761C185F756BDB2F6C565E31621008FFDCE8A38A7B3F2D3977CE234E4B39090E36FBBB97A3A7EB9178C5454D3E9614B68B9191DE29906430E0702D7FAFDC32F3CB3F2A5D2763A5!
BA02056105159164C6248A4366B6F17832F4C21D17142AC5616B458D422D72!
68D96703
A58DCB217276CD62A248401C9E0B011E3503E9CFFE6E38FFFB1E7C565533F0B51470E0E2648080973AD6EDBC9BD12FFE39B0044F6651E34B2B73A4E83D64A538C84F87657BCE10407829EFDD187E15A53CEB633CFA1AE9C4E912875492A9554F96392C8C6C82C92A04D5033203ABAE9AC3A1B2724602E921036F1365CF3FAF153067C721A54F0D0A0B222D39C3F8EE6126EB5C75AA31D1C1C8C552829F7108E10BBF91F2F726B85D80D9B5AF79A0024CE1298E85425786E6A70D82BBA165ADDFD8F80912967D50C891A40D45470A9FCFD5A5A7EFC91F220533AE5758A5A9D14B31290EF9840CEEBAC36E31A11D54E48FC1E38C346D1D7961F6A443D8191E6E60B48E7633F9BB5CD2FC3453F180B246A65334722B2411F416667400A5CE5A63B9AE8A12121BAD84B707D3BBBCBC6481831321D4022D44CECED6CA60409BADB452A6951FEC8F4D1A2646713A4A829D11D6A13F47AAD244947B1D78EC31E80336A441C3F03C24FDDECA4584A40288F008855A9BC609DF5F1CDD21ABF906E250819BCDF94C06A56AE113EBBD51D92F66994B34CF6A54381F35E0089130463345CCBB5E8AA83A1DE0EE4F79C113A15AA56485849C5FDA985A68279134FDDBA54AA504B140AA534419AA05723B8E8ACE7CF5BAD762C3AEEF8E2D41A5349892DEE8A40326AF8C2F98087599B9592B1D6C8FB!
CAE66D19FEED0424363656D29CC44379088FE4C4481131526E4E6E3524DF090CD468CA338B0D82AC20DBC17C429612C6813CF6F0CA97A74F890010A54421492217A200AC744902A0967BACF24249A5E635BC42AA1E946AF512028244C281E89850B8E7D7D866A0C532C576464DCCD219193C66A9080E2A6C494648E460677388BFCA5F31C890442A58E0A2BCC8CE5A1192E37551AEF33DCB0D72CAEC814371D1826041AD657070309B5A53C2E8A4EE1A778A5A103B97B352C2C256BB145A6F414A6CE194F06B2228B777EA13145089BA99015945BC503261BAE72AC9105D8B052E7F712A9A15E619ACF4A8A9E1314EC508D185E823D54ADD77AA906EFDE020C256EC60ACB4B93989123CABE5BF26D11F3FE51930DFE34B43DEBA64136A2D8DC628184D82B3A1CBC17087158D2B01E4B1871F2746F82C22CD2FB013BB2E192ED290B1CDEC24550B2B73A52D1250A3A5323E011E46A990542222B1B2E84F03B49F1360912BA4C496CF33481D901043A0B27956887E30C1EA1252A25225314206236323D5507B1267C49FE7F6B422CF0099DB975D862203AA5F34ED9668631E5C0B404C322A1A1F128140ECBC246C674530C69DC4B208BBAE434A9E2555B7E8D4CA24C4AD04BD0240887D74F5CDE7752E3AD1444678ACF163E36715169DB2E5F55506AB2B33C4372268E942D483B112!
A595204B8990C8FB83F707152C6E596B28707D1DD20D20C7EBE6E7CB7CBFCC!
33E49B92
4D41468D70553324171CE57B1BC0088A46CEC8330C08C55D88BD852512DE6228D965366C4AB89D9E21274AB4C8220ABD42D2CCC6DEACFB810111BD8B0E35AF90180FFC641A3BBFC926A928CF10673C54ABAC3F841CF31F8CBC2969AE811B86F446DEC742BE45710BBE65E5A984B956DD8D00003124E71B2A0C419734966C02526FB87AD594DC2A5B438C84898C5C53E3A02BD42CFAD2ACBC52D2425264D7755028A3FA1E40A84841F46D514B81E287F3CDE4CD76467832E11538EB3DD835007EACABA861F983BB15D308C58845631591916A14A07E7E192AE6570C8A9E620DE5F7EE8CAFFDFDE92AAAE339F35B01C454946F3A670A12E22C1661284F702E307E6992B7CA461123C340588D0227C22A091257F92749432010CAED2D52356121A4A56A855E9FD0AE55323E74C34058DCAAE149519C9AE29198C75D962A993F89E18DE2F536EBE0FD48A9B544E7E717D212C31889A1C0554AB30674CD58065C8BAE393A5EE7DAEAEADB283F579F9C9F2C040EA1642C0690BD168B596424CC06A4903C4A41133EC82549ED12153262BBCA45D2CE2A60A90A725192F741EBFA043D5C8F7C0BAEDCFC20210C4B8D588197F0333F7C3684CD1A7242AC7CC3AAF3D342150A3C858EA43183913131241294290404D90472E7674401C45936BED15094232F9243233D1DD9C55F09AE864BB51C8!
8EF4AF7C5EECF7146502F22E32975A8B7A4D874D12541167028EB6740D7BB284401D743424489A28ED007AB2549F84BE459493F03C21B3C9E94C52B664A78E45589D2E048ACD61FACD0F7FD48B555E5F275924A1D13138985A9248125AF662B87886F389E23739EFF53A33CF95CF23A431018E9281EAA129C93AF965F97B7BA829195EE61E319235B0AA96254F4AAD55ACA7CED126A462875F0C9857B2E4A2621B516158A42A1BFAF6F272034BD90D43C1209F31BB1B9E3E7CE9846E0559C10FE067603A10920245219A272B1B624915B45DE8F21DF8ABD59CA80501CECF667516BDE7C67D94FB579E78A8AF2E5E45A82D1F815C46E293799444658F89DBE061A81D720B86AE9020DD4556C825489FC685D40C8D494F5593F024EB0D2B7131BCDE400CD761CA2906DF91B7EC54E68B21E5DC57B5BDE4BB274A86B56C6C60CC60C365B95AA966E35E303CF4149EC4D85522A15816474237E1CCFF17496F9D6E615E58313E1529060B4801102626040DCC9B51E7BF9F1E7C0888235B22479AD82CFA420BD83147F2BBB1A3309C992C3401ED1AB29B537332C48CE3A22C6DEBA838E6ED6CA96883D49897F062FAE9830546274B3FED0A2A0BC11AB54E95C923262C9B3EEC73028B1098A05F8FBEC2BBBC165774DDAA9F965AE60A4A83E39B94830060A0DC5025CCBC1584E518B31820!
EF1E5F1D3574E492026E8DEACA50D127812055D66782E55ABDAF1CA6D94BEF!
AD804758
23A8949A45949C98B90F0BE849CA6BB5B95C16B767E655F892D99D7A87EFCF147AB08E4BC4EAD8FA148250DB12A93BA317EA287800CEAB50A56ED41252E2C9EABD24EB9E6388F0FCF43CC4A5E17680CB234141BBD049983803AB2DE936BC477FFCB8F4F5AB92558CD295148B45A0572075DC0284DD2216AA99949D5BAF64E85E2260A944E6DAC3E58C1A6DF940C08E0342B936CEE45FDB68A1589E20526FE34FB63E5A9E347AB5894597F50321C31284892925AD491DCB5C80613B4143E592E01926E7CE567A73CEB5DC707E59DAB4E96AF331A838C4ED99603428EC1586EDE9B2F5BB35804B2FCE5951EC1284FDAB5DC6ED3E9053A243AB85608C7C1A4AEE8D5EAA9418C8DD52B1802EAE99B955CF53A1B14FC6948A484E77756308A8C90EFFD28A6CD1FD4FA4136F058854A29EDA44D92089112C97C42C255E2A20229D69D459E9EAD3F21D6562717E40F7538598CF1C67868E44BB3C10446C21890475F5E8EEA574F575B43025A6A67A93EA47A970A483F0200BD5319D62955EB298DC0D40C01BF105B0C5FB6828BB5EE35AC022EE1A7FD436C45226FF009903A961FFFC8D8053F48B4781C20BF62F7FB9D08391C48920E40BA5D7ECC3835DF97C46E5A977C0E1A09321A1D3AE29147AE9A4D5D5CECE3C37C1F7BF9D197A76F49E0D78B6A09C86DA5BFA4191D2E3BA948AD2F80!
48D01D6A3BB552F4EC5A3DBA1F70A614F9E0A434DB2AC71A2A73C56B494A32F80571353B55E45DFC06DF6A56C40E324FC25A2DD18AA0C8A0F741AD9666414420743DBA0B807838BA075599107F8B842144AD74A772C139AF3CDE64AAF758B326ECA1307702F2CC74E411FAB882F3A2EC96B00E914FA3D2892C244317A5A2B393D5F0B1E45A0B943624E46476242A31198694F0061D50FC50FBF2591616D7A866C6D00763B82618A061208445CBC681F88FA8C8AF56D85934DF138C542517AD2BCA178420A325DD295EC8C9AB35EF35B4BA31D77247F87DE899955BB4ED0AF1A27EF2D0766A0AF98975099F5E51A8553A7527CDCFE915DA586D21F2FF0534DC0C0A4B28493AD6D7519D25CEAA85F0B9383AEF54A3E2D58BD505D9432949888D8C14D3464CE40320C8F41C08028E54C9280190BAF9BECEBE074CC945F9F9F942B470C9E8906D16EAF3AE96A343F4080B0B031088FDD167561E2220D0BB1438B4BDED52159DB8A2F97764907676264B51A3D46A3B69C61440904BA45C203C66914292C469A11AF142125E3266D08C678D9842AC3A9A90D1C60E521A17E51D33F82021F751A130206A76B5ABD20E8418290838D1DADAE3730940E2F38432438325BE2BDF978044B9FB3EF7F2E3CF4C3F44E1173A50334AD474F196A4DD652755904A52BACB0F6A255E437D8284481AA1!
E60730A4CDEC51C9A4CE53448DAD60E417608510901AD245420295A4D4D00E!
875A716B
2492483D07C2A64094747165B775A77CBE87CC3DDC50D45A9FDF8A7E5DB01023399B56A41B4C8E6E00F290BBBBE76393964F5A79484FE1973E2FA1AB7FA4AC3B6CA949AA41C9AB432A41215FCA80B09015AB8F555F48B22B44C9DB079AFB60B5480697093F1DC24A7895DFD845DF29B42AE98821DBA4F1A06BDD874412880F3E99AEE4224993CFF775FDC9CB941F509F9F6F34A2637748AF021087F4BDD5F5BE61885A51EE3C8F1CA23C42690F318458A5F92009F2618654AA430AA1634FE779B40C879EBA4406A0599C1D86E9B85FD99B763EE71E92B113DB35218B8E4D5D366BD1225D1B1BED405BCCAF5B2C01E9558840942E56628434E21E2E2F6ACD87D83BAE0A1D0DD9D4585D6D38B3B7DE77315CCBD706A409403A51FF3256253FB2EB02939AD12BB42C4253A268CFA0F9150684E6E7E80C892D912C504A16B024AC13E7E8C4E9449ABE55599B17007F82E2F8AC0FD2DE3CBFD34FCD70F011131A51EAFC61806DED2BBC799B53C25C2B892E7E0B39E5EA26F3F59217B4169DCBD708419A8E867402E2D470665D354A9430BAF6E12106E41AAFB4288F3046E87C08B0D448918F5AF0AD2D74F906B916D880DCF5B7A54AFB74BD44D408ABE45994A2F91130888CC3F41099B0F3D5B4B8B47FEC5934B6BB77206660C08663D8CB806200BB10CD620B6FB33188AE4522B1EE3C3!
5DFD31940025A7300A44308BDEA0046725638749D59774246E117401E9D8E5A0BAE059742C62320ED3479022F6BFF7ADB370B1001248AA4A476A91A799ECEF28010A95EDFD94E6448C107821B51636F49E82CA922413FC8448D862FA65331F8E107AFBEFAC1AC65CBB66D0BD1F77342DA606CA35254C90041C1479A0A6F924CD5FCEA7662A45BB5B3CED5CDD1CD4BFE452B1A924C8DA0716A70920B39671C1AF6B6B67A88401E9ABE7CFACA53C1D48524507CD52A7A7BD1AAF7227F246D2B61173649593BA2C471EA4CE05AD7774A201B96DDE15A5CEC7CE63449DD198BBE8F6A72169106DADAFFE272FCE37F7C30EB833DB3A6EED1B70D60C4FD0423B7ADADB2B2BF52743472ACB64A345A4D099C11FE8FA4D85556AA9D702D570FAFA2D6D6FCEA6A8D8FD0D3E1E094276C3873E64C57800CE11740A011911175CB2A04A7845EFAE72CD21F2512F423EDDD4AC2D74EF35BCA16E443899662AFBE534F40864F9DF08CC2E68714B1312CD751A981BB42E9123276D9FF94CC3AF6C1ACE3B396BD7573A072A0AD6DA0BFBF9F708085B6CA61183131FBF0E95814BFC3626FA194A8AA39E52C73F488AF43CCAAAE88D618351DE9D972E18EE98C43D70D37008902239ECBA7EF87460AAF69EF49A5DDD64EA9E2B6A257F223AAC65E690B886027E3D8DCB6B6532A49008EC14EB860025C6!
B810437A9941C8C750FA85212C8E3599263D587BE45E5FF976DDB3242B61D5!
BB46DD9B
2B742722B898B0132E6591C466525574C645353CCFDE04E5663A8C5ABF9D835E13BEB0264AE1E07922BF28BAA4DD11A21DAC901AE7527AFA1E18C9B2780F842EC6EFBA73F0AD72A542728FC69F6AAFD96B6F7B6F2473A512271A1E21D72699752360442052AF8D858123CD5F1ECCA271B2154A9E8D476F532286DB7B72529AD21DDDDFEFE8B76AEDAB66DAAAA327740C4418FC3D9A4520C5E2033F8B6626442D48191EE8FEB021C651EB572537272F59D68419389A2D124783B3434801124C4A8516E6E9E8F4E7F74D29A79D750114A3A6F75AA3B3B7B7BEF6528C426444DB3F04A29BE96CE8D50E17B132D09748C1A85CD4696121428FE02758ACAC898B6FBC32E8F91DD8A6CBBDD2BE9855FC60EEA23F552053BF49075DB805DEDCCA96C418BDA2A1E39D93F5BE3C5966AA7DCD5D1D5A3512E3719AAF7A66A041FC1A1C3245415671BBB6EDC700B73775BE31605200F4D5F332FE22E34DD79BB5D7BBBB757716F1BDADCDE76EAAF68D6974EF22869D637813C4B1F4B73827A74A3702C76E5868414DFFC43B34E3F22AC0ED887D88F3835D04FE38CE9A7683522F98D78425199182189B0CE8A74C9FA6817176BC6A65667C7945A7951B221DF909A89B231BBE3A870B0DC2274B9324616BB45B93D8A7E64CDBC0F91246EDF6EEFEDEC6D57F4B684B4487B2179CA053CCD53E5A84D!
E84C806B0DC6EAF570310521908897A028418AF20745E588AE6238573047B2016BEB7F10490C511343B2A7B720ED0C6AB5BCFA65618B4D38A2684C0E70764D6994D7559BF24DD18942748FB1C32CACBE1C78C92C232060C40D79E4D1E9A30EDD55D2DC82FAD63D974E756F2F54DEAB56B4E8C8C1927452059DADA213D39DA003AEA51F041689084302A5138E05D2C8814A1A53DB483E08473F43C209686B1B1881A48D499FF9187B4F53252A14ADCDB7182508852D2E1905F96587522EC98BAA0D15044473D8186A12B6160348ABAF5B58541480782E1FB59F5C0B72D6696F2BDA5D90187B291DF6F2EBD0DA754A691236B4EC9A07643AE520124542AC56B24022190603E50FE652D6E0428E612ECFC63A30C0731D7BEC6F6329C4469058783134CCB72A4923FA4EC24294B04495D462556D5A57E69A1264AA4B3618BA12333B841E63A641A8680C02104F59541463643C03A255B7BBB0939D8ADBBD5408B3AA5E4DD75F239FD009207043E7D7D9B47F67E4A01E40A4507A29FF37BEA024A18D8DDA1692F89116632D7B0431904B3FDB63A78CE5C536111C01894DA0CBA88814358B8868785B74AB8A02729C3D83AA92E5D7F30C00A2F131F6E4095B2D8197C2AB5B5B39236ECB1793D83BD5DAA41AE4A14E2844AAA06A04C55E8B0BFA0175A7CA452B25AE13F40968DC6F472AB4!
31E45A0B9846D4A27BA9635860A5A10E504C22E7CF65AE847D1C483F254206!
E401BD33
D7E2509051EE27204931EF12033025F755750175F91E41F17293D900204E9AC31D0052511BF8F72FEFD403086384BB5682C22584FE3D45AFE2B6144D263C74AC52D97D4FDD8294DE4E735DF8724AE814B43A891605D14167224A49EDD205372B19211CC800F717C2C6860F87220CFD1C53CCC8086D07435E09207A0A299472A976254E2EA08CFBB0AEA8ACC8E3527C95A1CBC19C98199AA9B11C8E17EE9407ED6EAC3ED7EACE80B8ED7F7CFFF4957F0D56B434AB15F7DA6F51DC65C136497AAFBDB7C5AF59AF6C467172FB169B65EC1C44E2A69301833729C794AA23C008C402A5D3C831DEDC36EE3C03CC6FFA6DBBFAF9ABF44A3F79D6FD81FB2C770C3095D864820D722D42A215733BBB30FCFCA6A29C228FA0F23CC3E5F8A38963044D687A4FB150512E040148BD6F94DBA8F970AD8716BFBC725E44E73D159AF2965B943FE05C6A8554A550DD73F1937462A888EDB76FDFEC44A53508A9EB11EF6F69812102C229E51AB9D94FC73517464ED26F1306C69F9BCB052E3A1869C59637C47B3FCF8FCCBD2AD90C60825694BB848944795EBEA98C8098F3C2CBC3AF4487FA843A01C89DDAC0A0C6BDE7EA49EC3237DFC50F8D7FF9A553EADE960B38F094C015BDAC75675574779A55721B406EB7DF56DC4A505052472E8C8C641991A4CE70944A4A590D4583CEA572D026065EE4E6F!
67341B347C6080FB73CE4E2B93D0AB70D54EE4BE8ECE401F8364DA74958E0BA209797257B06D5C6E7D5D6865F391CEAD3E194192F6C2D17021B4DC9ADEE6E0444B69F80CCFB1032C651EF55A342D1F2F96C17658D427D412AB9FD83420BE9286EA10905190829B109A80B491D12BAC0541DA1288D6563ED678C00098F4E4CEEB6DDFD04126B1BC40131BF90AA6CF54A1B732DF2AC4EDB9410BF5E61815C9E23F7182A2E8F6FAC6D4C3D9C7938B4C3C72C6C8D8F6BBCDC554D620FBBE1261BBFD21D40D85462EF3D3AA9D0CE7A2BB4BD687193A42E524948BBBA17D10AB98326A43AA965A7AE2FE1A6B6507B1347EF666C2C86DC8711F6F5F335595F9BDD72FBB02BD766FCE0F78B405808A05080EDCA81CADC413DBBB2AD93E74536F18CC3B5A220C7E01B585C1C1F54FBF72B3D9999A14688BDCA1C78E9B2A1DA31CCCD6D3131B2723CE511652789C3C5E5767BE72D84E15E6D3B9D6C835CD01BF6AADB93F0CD7A9A910227FA84E001EA39D8D82AD11CB1F161B07D7D7D1C0407D26F133BA3C186032D08C4C45CAC5F0C656C83B265CC406E650C3BB54BDE1BC9AF4D415514BC429E6FF0102CC58C119FC33E991D9966A12A1E40AAF6D653F845C945405E3A0520A8B47A5D92B49D9D68087AB56A6582324DD1F2177F6BB7E2767BBB343641ADBF0942622BF157B43191F8B37C6!
07DB63BD944209928E2217FE2412B9730E6B671DFAAE49589188DFB6D60781!
D53C934C
622D9400C3F5D420DB37E4541759767A0A5B8B6D1F2F72B00E24340B602084DC7934644206B4E6925A8E33BEF2111020F38ED54F52628D428E0DB95AADE16E83F56DF1EABA5A9CEC1CA844A54A903B96D76670190BE891C09812166FAFB6C112C57046973AC814A0A07237088C9075BD43DD24121B49523B2665BB0435E729E2CD0581BDF1814944AFF4B2269A4AAD878C96C36E5C3B5C2EC40EED2447C2738912021D2AC7C0BCD467403925E714FAFD6C1AF1262A175EAFF0A6FC6F6C7540EA3A0C14F9CD8F78001481B23C006D42E10B4E9B9B604C9DC8E7B1E4F9678A5AF5FD4913D5B56028883C92C0B3216C75B2C97A2E9BFE262AE552C18CB2F9B5C0988CC06A45441F30EBDDACEDEDBBDB73BD9B4BB1649110C49D1C8AB93683E0BBD089BDDD1D349CC7E8E61A2CDA71812EE551C4AEECF4CDC81A3CE1E996C449C141F581FDF963B40618147BC1145B27E85D9E0200B0A2A8EBFDA7809AE352634D4A71C1A112E992FDF9145B9DD0893CD972D1E3565FA9ABF5E43B8EA54DF6B57E851332628B49DD0089D18012F2DB7E161D2588516CAA31E36B232762072900FCDCEC430108CAA8F45AE5C3B21F44E11D9801D180F003CF5F040478ED52F9229C6631148535EBCC1E01C64292E2F26460E6FECF1F16914EA8A35C6F2F88AD628374F0ABFCBC148D85FAF25495BD4A80D!
6FDFBA759B0AE09B5A14EEFC5233ABB653A92D1D445315098D54122584878D6E629FCDB5208DFE61466C831CB6892221228AE14046AE2506ED36A634DA214E17715ADADA621D1ACC86FA4644ADAB163092E97338F170A350518C38664EAE8FBA21836BC91673208A7B5655676F67A71E486E533DA2602DE76DA9BA3942F1F105B091C05D6B106167203721762239FE443EF6894448BFE8546D2C1473246D0FC211473F9C6D44F28663B62D828B9C705E726357A49B1D721A6B117E2F05456F7C82FE43CF20A1AA566369309B5ADD64B2B0F93764EE2BDDA7879DBA865A13EAEEBC0520B76EB5DFBEC92E710021F7D01AAA3EBB4028F47441155102A547C6F4310933776238FA6CE3C031168150B9486808132B55F88456AE0D823D770E6FD95311159836B5F703C8E5F87CB8567C6D636D2AFF9FF88284C996388BD9905CEDE6EA491A0190952F9DBA4693499D0A54EA80428C24B0CA4D812E076EF6C30505499D65F6CAC1CAFB9131CC59B0D8F898389146698BBB6C347CF08C17961D28E672E988A9933BA1282BDBDAC6487F9B6D6AA28D187128CF2E021088A43C7523FB3F048DC2D120C162CE939F9BEF0A466432F751EE2BC34EE925F47F67118CDBFA5BBDB71537D50ABD96956FB78046A257532322298D1C4C40EA1DEC8B24FF1191101DE459B603DAC754C3D23A0B55FD!
7DB93CCAB22AA63F37B7EFE791FAC14DAEFB7EBB4018232BCCD9F941B5F45F!
3C7ABDF3
91CF18E82450F00AD204C65FCECB97B9CAD6C86EB8112351F39AB46A346648EAF76F91DC6FDE962AF5440A22F12DF4D0120985AC08A02085B0A9C489B913EDD6C76256BF98DCFBD96AD8E9FB8707DBFF0B08FAFB47EEE9B757397620FD0072C6904D512B3BDEA9EB9DA5D1D14B97FA084295313AD0CB9C973CDF15798469048C50530618E89D6EDDBA094BA0896A54A16CFAFD56884E19194B174E32AEFBF5B1EDB103187C2E836003239628C3F98457910F8C74E2AF50F1C01E9BFCB9D829C0C1B5F21A722CB5160031456725267E9EB53150C8137604D69AF3AA5DF3B96BADF15D19B63598F84840E7741F1AB979F33670101DD440A3999248B4D4850437F3B333039109912C87E43E48091FAA888AC1B06799BE5F3191321BA336926C0992B56603FDB1C8ECD0487150767C8361C7D2C4A5594B96C2B58468C17239EF5C6B8E6CB1E70D99EF62DF95517F6DA2F68FA6D96FD3B9B55B3769A56557F86A63F5B7D48A4814A1918334058722A86D60624C2405DF1138FE09081BD444F1B98D267BFEFC1918717FBFFD055BA6A73A676020D621DD60915B6A8D00628A5E9AB864C992CF838472BADCA931FE5C72BD6CB14C26732320A722F969CE41FDED9BB7D8E3FDFBBDDBE85C9B96B8A1996B3D21816FA16768CBA5C26FA238ECBE077C6BE4135BCAFF3921FF54993D006CA23D0!
2B3484751AF09409C8A026B2DE9D9E979D1331267A412905A8B60F932C82C3754CBC23CDD1810F7534DFC34E7E06D2D13C860ECFDFBB7BB5BE8E20060D01214D4BD5469E552B9C86EC3FAE81B81434C2CC3A39A38B20EFB674F9BF8209091159B2D95F6B7C5A6673BA4E70BC5B5E9E5D9A6E8199F672D5D923824840F192DE58D7906B349E6EED6DA2AF3F504234DFA603A87A3D5DEBFC94F40DFBA7F0B5985E6AC636FD24B0391F7D9199C4A0AA4AC62E2103831F6C03502905DCC3698131FC0F16084B0F9D6C4BE61BDE7B285925164BA437C76D150636DFCE56C7374D6D2A5001224845FEA70B258E2BBE24DF561BEAEE74EC8521623FCEAD98500C87B8309B10484E677911507091664423D15C18811AB3E1C2EEE552290BE61D7EA7BB00C7E4041C3B0EC1F9928B268D7BE18B40606EC9D726E537ABC21BBE852716DB9D978293A0B1259B2148C0842C7554BB9B9FC4E6B985B6B81C9D1714DD4BC48AE043020D112103A7710AB671739507112CBFC2AB2B2ADD256CE46E68E707F4E0ECB84F6616195FBB3433F0288E892E2C26089AFF68B1D594C656524FA685AC1B5D20DD9C9C6E2F2788B1098FA09625656A245B81C1ADA616C8C37979B1CDDDD5CD7994E94AD893AB54F41A70C22511992BAF7B14E3992C1D0DB36060763C476AA8F57BEB6C1D8814CE49AB0C3C81D0!
E5B233433FC01F1483CF83ABEBA8D00D0F9ABC8C8262AEE2A9BD2D3F702C85!
554F11A2
1FA131032A3C722D4863ED181A6D15C7EBDDADD13402AE6AEA1CC4E572F0DB21B45DAD8D8260682CEE0122574094924B5D4BC439AD8F7402614E5923B0C8925995C9BE38C18E80881D8DFD96767966EB9A020A632D26E0012ECE420CF3618B389110D772D1F8B501CDAD17135DBC1A1BCFC04C47ECE5CE5380AE1970D9CAC6930765F6CF03E460B4311CB11D2D509956D2223F664383200E7DA42942D9451401821765BB4B603E91BF1DE3EFB5BE88469652543203212D9D4905E0046B2B38B2D43424F5656D6921900522E84763434C43B947F79C7DDB3F55CF91D00791B518BC6CBD134C506C7068B209A188626767D710C4D3CF136A9EF014E8673C7C49F1560C372983852E83FFBE488103EB18F608884341110BA1A223D5D1E5F2D94038810A4C9CA3AB96429CAF8CB426828FDFFFBE6EB27DC65ADADE5C4480043D0D48471E31EDBB48F03625FD4241E1C263D4EC9C4E18C3DA2767C201FDA1F7F3EEC07D1FE3C13814642D1D4B42F383898EEC1FBF635355DCB4E4F6E48161AB2CB8D9AA1E8250032C32750A8ED093DDC6076C8EB3A7A878098AF236A9D8A6C62009AC40778177FD6D4241E95C1260E45ECD57F6934237CE601B1FC6CC4BFF4C989F6E03B113062830B0B2322AE15465CBB56782D785F61F035A77479B63C303BBBA158A3495D7892800842ADD0D3D35070!
CE10FFE5645FD7FCD6649363989B333B02DC0A61C3EBE0E0A67D3638FBF67DDF1419C325F28B4046942BC351E99F0FFD3FE3B157CB13FB2A239B180E661804065618E184A8552D646797170B9A44EE5A0424B3A721795D41F9E5EBBEF3D7B59EAB908545393735D1FBAF15165E8B8828C51A0B47C5181669099E56B8AF895AC35F3BAE2353C4AFEDB729FE810A87E626481AD8AE8CDD771338CE96128E0830024200242F3B592877022343EF64657D9295052041822634BBE05C41F6D1EB6EAE45AD7BAB1DC3A09160BC9D7D34A2B4948E0483C268B9161C1CCB5921206CAA77E2AF03F92715FFF2DE07F1F23964F407D83DD0145B68670403092ED41223068B018C64176B029700C692AC448D30A4C9ECB96AC82F28375F97B9AECBDF5B2F0B739BD7D454A8050682B1E0D9D2BBB415A1C50264D7E0AAD7D87F335D78F2644413CDB04DFC9728FA7E1D9FAD8CB4876A36A9C472601B7CAB3F12A288B02309A6634A40AE260B57C18810B86421124956A2205C1284D0AB79456F373498DC5CCFE59F436F353F805CEB5AE9DD5200797601EC2EF1426818410C4E61E1B49385D30AC148DFFF9F8F5F8C4B0FAAC896FCC4271C07820975FC91FB82454AE82FC3DBB58510BB035CEB6A71B64533B464217064656A8446A1A7C39897B3CEA161EF0D00494E718B723B8578078DD16717!
3C7B77C182D205A5B088528682D935FAF29311FB2A6D09F1FF4748DFAFB994!
5D28C3E1
DBE65814E26348ED2C68D9D5CEFF3034525E0046B22D42DC276004404285C69ECC50A339E09C4343B5DB1700229345B9054452D8028CBB60E5EE820B84A574040CF675F0AC93FB6886E7C166FD5705FF4B443CE8632304D2C6521544D237CC4804795521A1816BC51B048B25DD32A439BBF0247C2B3313623F7CD862CE2F307725DF58975CCF1809008EC208C6C182BB00423870BF7BF76E69A98808AA2B2D3D19C1268272FBFE8F2A9F389281BE8923C316C751C9EB91186224988DFE1A5B15924B17461811B50CA10444089C064296906B05099982A5217F6F43D7F51BEB0A5AABDDDC7CDD8A8299CC4107A4BEE0026CC1B0DD657898464E9E2C0C8E1C2E7CFF4F421F1EFCC8F7E48AC52E4D6236DD8FEC27460A29F0302A0A0913B956B643795EA8A5381E8C4C6362A71FB412320F1B0988990391819173C111A0E102605CB8504A383EBCB0E0C208249C92936408244D48F103957DFF3AC8FE4BF1D8F207E703455D5B5F5F25855FEE5B1C86A230A2A3A1EBAA994EBD1987A217669148342290F273050DE6BD37D69D031099FB8DA2E0521A317CE90218F9905122B2729745B0D2889B85FB5876DCB78FD73F9195FF9E7BF53D48D68350C8AF6278E741A52995D87D95FB380ED207DD99D8B3BBAEC60B43966CA390B8108DD58C2C1F1148F6DE82ECCBA61B01C9AD10BB9BDBB!
A6BB628F56C44040D9EEE04C4AE782A16F645B2539FE2299B89FF9E3D5034F6F53D5049F6B551EB012083D4011192D8C8BEFE265E20913C22B478D40603C865026244F59BB81048B2BE9DA11102358999C6AB7B0DD90DC4088B5A378ACE9632A99F7DF6D988D2BB8C0909A3A8D45EF31406130D91F65EF7976BA99FEDEAFB8570363C89447331BC5E1F8CE48577F0BEC8FE360212CC705C13FF3480345C35675ED238916B2D4466FF76A946B82824FA18AF1AC8B5E6B732206E3702A695B26C18F1EC02107281E3289500881ABBD580739301A1F2B7D276B6E617C7DCD7F7AF32BEBDC12275100034759191BC0D4243973B6063A490FB1555491DE90D4EE64C638FD32541438CCC58B814E157937838D4D855E0D0B5F7C617EB92CF1110E708AA4AC8B31694DAD4215D401118B291308D906BB1521EC7B15F3C09F52F4BAE5FAED76DF9BC92FA0ED654A34940EF100BFDC50EE4EEE338506A88780AAF1901E472E625C1221090854B961290B8CCC4C382D17CCEA1CB7463DDBAE46459BEEF8DFC695C22DCB32EF06CB8A0D496444A2314A514AD8209089BE160AC4CFC37AAC70743967DD685F7E634721C1E34A4687EF6015370A13E06AE652BBD0BED8C3434181B00C42808C234CE480F8A469F4CE16A5741BC39F946C1BA73D5B25637D7645653314E287CD165320484AB9D0A9!
752149085C1E45B1468DA2A45FF9A98FB8B19BDEF973A9111732D84043868F!
02C0EEAF
79101078044563615168EE88C3890EC0EA7F2C35F0A1D8251C37E6A6F2134122720BD5BE42B1A1C4CAE05E7F2ABDD646EAE056721F4081042E990270F866801772F80A1FFA5ED5AF03E7BD7881B9547B9BF2A869F37B923E7805847CBFB5950124B2058640FBE49F91640AE053308D74452B4A14E4663760FFD648C20D06F22662DDCA8115235993E82656F5176BC897EE426DF5326BB917F96C72CCAEB4C1E1246070F5D04451DC1A0D0B1822FEC139B4630F4EBAAEEFBE5025E9CA0041D3472186188DD67772600E19D69210F5E6C53E8301A8D3D702CDC177EF2C9C2255900F22680745C4D0E70B2185CCF19AAEB7D5D65F33F3DCB1C0830EE5E605904DEC50217B62E9452C1A5B6856172051B314DFB067F2D7FFF73DEEF1BEE80E19D237AEB7DBC15D5D35A1BDC3431F21AA383B7A7C137098E60EC300A3EC61E4130062E24DF3A4940E05AA1C5F99B9C2CA6D6737BF79EF075F5747DF22CE138F96C2979D6DDBBA267914E08CDDD91E9A490E3D8C7E6299A6273FF6F9523CF24B995FB86670886A70AD8D09B2245604CF2B4F3667044B153A81125A240BF8D48E1F7E4B74BA38537334520C6AED675C977AADD5CE7BB3E39EDD98867CF9E7DF62E558CA5AC2A612611F1702485D77862B413128964FF7FAAB6F8ABB9681AF8A400D7B21D113F4EC136B7B2BF5068CCCEEC10!
7C044D0FB91689FDE4C6682115403A8CF9014E46736B72F2DE3B6EAEB21B4FA2DB7F1669FD6C292B7C9FB50B9D3FDE1D51A814EE63920F6EA21923FCD5817FBFAD1227C2C8ADC44C115C384C091F321B3FADAFD91126A04471CAECC84C0410C42D56A2646DCC14A235A13EA1C6E480F44BA6D682BD7BAB65F900320D118BEA93BB17982D78D65EFA5EA0B28BAAFB5256594788AEC534DF44F1A6EFDFACB66CFA8884B20BED484602D9C76928B4259060FBC494D1097E95184A8CF47C42254AD612BAD4FFF018E491B7D3853BF97B0DC926D75659EB8AB31188BC28189FE552BFC0EB5E9E56D033DE2D0590B311D32222A67195EC639A67A570E4FF610E05457A243E5968CF115C0EFB827942B13DB141E2E01282AF851A0F77088902D46D146832286BE10C00C9CC3C8CCE6A53BA603A6730ECBD236B9505384C230C182CE9C3868409E56EA94D2F88070C46E134D101602CA555FEBB02A15CCA0A2A1B001B193CC107DB0F104B2FC3110D1AC9F4310A1B054D66A8934073D8590B3FA77F0FF3C418C1D85004D73AD7D5B5D7E4D92AFB624561E1D988B3627F4EF595D8E3F239946B6C0EA5900F7FDFB0058B9ACFFD9738FAC45630B2491F9C200A5CD44830FF22AA5178A21FE16EFB68663D3836F25AB64F223A114113DAE344B556D60CAE9131D08839B9E192E953872E838118!
7972DA3E7BA9C9ABCE6B62DD663B32DC6CD18ACF07F3397F24F8DC074E40FD!
8A4C0807
9B62267135F110CE73EBF0B990A61126FE112AEF821B7DAE040248A610DAC1802CF97649345CCBE7708F312F39DE72FD6D4383C9207395057C7196D7CCD3C40E33A2D036636A73021B10FC2D76EE829D176313F454DAFF7CC6A7CF3E156FABB0FAC4A92BDB598FE161DABE841BAF7E9A86DF421377C196A52812AFA0B4123A7A18230BB3C00FFD4CA7A52BD9E14BF3B9BD97CDD7EB5D65AE4527BF9F760D4BF0B4C2EFAF7D1FFC7DF0BEEF1F3836E2B7B3E9F8CA7FB67FDD2DE6DAE7E06C78446BE315E803663F50EC04226E4D4159593D3D898853A1C69E69C4C8C2193E426A74E618C1D2258F6F34271BCA2F9BEB5D5364F3E2ABF21CE21D1C1CD2B3E38B8BCBCB8BAF161B9D8CF4C3CB870F1F663F2D98983863E9D2A5ACF0249B06638F6C75F2EC34D49BAF3FBB04F7F75EC7265D9A80FBB34B4E621B9996D9C9B30BB34E662DF97CE9129ACF616FF8FCF32567CF7EF2FA92773EA1674B3FFFFC9DCFB16B69E2E79FA762214BFDFCF5251752772CF944D39388E81B2AF46451465C480931FAF0985027074303C05C2DBF5CE55CEF3977FD6B739E9EF2D314761BBF7CF9F8E5E3E97726D92F4D4E89E2BF8EEBE9B1658BA3B3734E7585499E97176F708807F03C835C5E5050E45C975DBBF5B4F357A7E76DDF3EEFAB83A70F1D9CB7FAF47CB71B376EB8067CD1FA7681C16C315!
778E5E5D41539E7B0DF803CE4EC5C5694F3D7D5A74FAFFEEAC0ECD55E8D97C36B8F7A7B1DADAAAAF2AAF2FAEAF4E90DAB2BB64E3E3AD9DB2B7C765C5CDC3FDE79FD59014034F44BD740F1EDC9931B8991C33EA116735EBCC5DC55FCE55193CC599647BFB418DDD313483F094D3F491AC756B0DD78BE9BDB0771BBE97730A371EFD1C4D14F37D2AD877EC0FA556357D0AAB3EBDFFCC781F56F7EF5CADA57E65D589BF6A69783F94CC199EC86E40EA70EA325283535957F7807FB39CD38FCC137DF79FD9D77DE01454BB350D17E026E4F8A64C3BEFF7EDAF7B4E2B42FF93C10E2EE89CE147C96B0DF360723D189570E0B41F179664B79D7E5C6EB4753EA274C99E3E1E9E13B65FC4BEE53DCC7BBFB4679F87ABA79CE97CD9739BBCEF77475756E75CE49961B0C8686068BC568B4189D8AD11F7438599C2CC5D90E0D0E0EC54EC5D9EFBDB935F595031FCC1E1AFAEACD03AF87BFF98F8B43A9D13D993D33A2AF5C99B1D4A7273AF0127DD458CCD70DE50DF1B541C6212188FD3E30B7DAF8035F7DE575C00B56F515D901EFAAAD5BAB2A56AF5EFFF71D9AC44CA40E217306809D64AE957805E5B059EE606C3499C3271F2DABDA41C7FED5DD1FCCDECD7E88F403DADA7D9131F1C17AEC5ABBFEC0FAB5F483D0B377FF3D2E905B50E0B0ED8E1356383804D5060D05D56A6AA33B044DB42!
6FA9293311089D84983D20E7FFF4ADCDF67C7A5E21B0377075EA4DF387D73C!
78E3753D
F7C27F5CD1DC454F49BD19A37DFD4BCC2164DEAE789EF80C1D4CFDF498572A09E773E59181D9D8AAFCD1C8A5E9A452C11109FC4D0A0DDE5F0DBF0EB79E1DEDE8E299EF0DC9CEA1327F2735A9D5B5BF3F38B0A0C38FE796668FF6A716DF1554B7931FDFF04993D3D3D3E3E577CAE5CB9423FA94EBF19BF71C646FAB5F5190B978476F824666A348989C2D2C33E89784BF498D0A599993E1B7D1267CC1833E6936933C00B7BEFC62B4B375EC1C712372E1D9308DB98483F779CD911DAD151DC413F694CBFEEDE31D43114D4119F171F9F9EEE80F5577979E1A9899AE86863F48C8F1067A66D440C4B4D4CBD78B1D65C9E1D7EF9FAECF5293FCD99F3D3F89F48DACB17EF67C67EB8723976B8FF044FA357E877CF3D3C53648ECE65B0BA0AB9D96CCE8355E56D95D7D5D555799183141BE123F1C5D970B7F8F878733973987876B7D45EAEAAA82B732E7374A6AFA0ADB28AAA8AB28A0A3CD95E5637B72C4726DBE2E939C53DCAD3B98E7ED8D6D179FBEA835FAD5DBB7AEEF6B9DB478FDE8EFBFAD457A233E312B3889169DF260AA9A99AD4B88BC5E6ECCB7F3F6A5A3FE1FDF75398BDFFBEC74F84897E14963660EFD38A7E4276C21BB8EF7A63F4E823AB0FAEFEEAA097B7F781702C64F0686FEF8370E48393B1AC263B7D7AF4F6D1A7576F66CF0E1ED97CE4C8C18347BCBD276FDE4C3F!
5A3F7AF3E8D11B36B31FAFF7DEECBD9E1EBC8FD2EF9B7B796FDD1ABE792B44C18ED65CEFB56B3F988DD78F1CF15AEF7D64F211EFF5B3D1A56B529101100BB25285CFA3113F2ED69AB22F41E9EBE98B77ED4A49D935FAB55DBB264C002A8F39EF4F78FF356CBEF67ECAFBAF01E284F7771198B9BBE68E5EBD79C3666F6F04C5F0F0C6D9B3C369095FEF7514AB706F4245BFBDEE7DE48837FDB4F1118C1EE3F3A6F7F38DC96CF13E4ABB26D30A3B271FC1EAA897F7EA835BAB266FF6DA5AB5A162C3862AAFF5FF8FAC2B0A6DDB8AA20922C66B22B90CC7AAFD35E61A020D8162236A08D82F0C0CA52E7171C94C4B1CDA115308A460F9A30AD548C158A56E044A14089506EE0CA68A4A31C561032F5D9B417FF2D3FC3664E0E4AF9F05F7CFEC5C397FBB929EA3A727BD7B9FEE3DE79A90DCA85BC52454CABD9AB011BB36203385770043F2C740B62FB9915C21998C7FAA09EBB1BEBA07804D9D014DE343583C4BD1968A4DD9FDA321040F833915B33D5CC6D5B3B3543C99017826291CE1A749AA1B1DF75A0F5F539BB19487E14700914D3C05A87EE695E2CD0D8BEF424E726D2F9A73B9420E3CDB06BEC5BD6BC94C66F8703AA312BF675E41DEB3782C3E129BFA3D11CF65DEE577F3576EE67323ED7C26F32255136EF5AB7C335006EC0270290822F49B92C8E54864023F830783C1A0!
DFFF3A12DCF083BFE8BF1428379E08219061295D5C1F2BDE3A2D3E2A8E158B!
A7A7A7EB
EBC084878F86185A4CA78BE95F1125A3E962314D238A0F713A5A5ABEFEF2FACB1BAB82B0BAA4284F4CE589A65C174CC1F471DBF7EF7FDBBBAF9882AA2A9AAE547C3E2AC25D998383719AA169F0C9A80AD792529BB91C38E5F8E3CD02BD91426EF3452D1493760FB114E7786A1F1DF58F6247FDBE07B3F0847EA22A7A45A2A96274B46A2724C9712469CA96627D60AF3DB5F9D59E92B04DD953537DF858AD1672FAD29EE70E4E027B4894E813F84DB8DE2707A94A50A72FD98D06E12F1098203845EA8119DB8576BEFD7F3924F46D1F927C3C3C2CDC59CCEF1E5F5924F8452E83BB6D47AEAD3F4A97FE1D1DFD676565E5C18365700100F76734BF41C6C64E6F9D22DF02184E4F4FBFA112F1178715D3215F16DF2FCE3C2D10003F2D14B0CF5053289C0C0FEAA02B4F4F66323384D58BDE5D3320850C952A471F9AF754B0FDE2C91BFAC396E969AA307FE70EC0F8128E0CFA32977E997E334D9D973C7C1E89C3D3BE7E75DEBDC31B592CC09036DE48EA05A5575D42DE09402F30963097E4EEF8DDF157E3F3F39354892872EDDA0415F2B9100C5EB8B0E1F72D9942AF04EE7D984E87E03CA5DE72495816209F4D6A01C5374C73D55C0224EB8A690A04D1680445C57D00EB5208DE535285510CA5F1CF9E3D5B59FD4110BC41A552AFA4974AA6F9C147C9D84F482A7C3EF383A9AB6AEFF!
3E710A675DC9ED3E91C7FC4D7F68B6448266737AE369BAD66B3B9333B784B683B18FC786F6D6D616D6161616DED2D6480E31E7A0783E7B83A3BBBB3B3D30CB75A56D8B200F0862C8B3D002B10F6C0E0382A6C6EE0685916D558B77803E318CF33AAE82E76A8B43B557797F93A76F86AE77147AE1CE8598EDBC806FD5C8533741983EB0C21A1C91CE3C2812C3D95D33111D30D5C96AB55C7E9E9724FEC54DB37AF2C6692239BEDE46EE3AF16D901BD604C77C7638DC1B9DC1B74BD1374ED0C884BBAE59D70B31C0622839CE6383407BADBAB814210021DBEC5C0323CB35A56D3DA024940234645D9CFAD623C8C826DD0B4D341571DF00CC475650351AC693AD425DEE00CC3A8330ED18D0964DD601AABF882B4426C4E9BC3A7256FB98E4B0178B591877BE13B7B2699FBF3FB666BB8BC98043336BBA47017D4D11C0ACEBBCFC98A9D6E970AA887B3612B4BFAF2862B3A554AEB9C2171B8D0E94016C17DE0382C765D76EBDE0B60BC864E32857926E1C7BABC5577C956F98091BA9AA2AABACA285720F2AC6B4C65ACC28B6EDD8D46798E31ADA79AC65C85E30C19D021EA2EC0C779FCF82A90373712CF251BD52D9EB932ACCF66B92C6E60A0BB70B7BC7139E0299DC5DE85EEDDB027D970132BC271D63E543B90E1B3A20A4B7AD84451930DC66322D5AD47C1FBB46110A3E1783066F!
0EACB37C3650E232D0D7E02C378805B341152A37A28B1872421011C2376AD4!
921902D6
02E010BB79962F8E6B88AA11FE8A25EAAA9BA1272444712EDC6A7E34C0AB95652EA749045C82C18D94086E3077B07B27839DDC9DBB7EF22DAE727C7C75FCD47B2012294C8C42CAE4702601C7F30E0E70C4D010DA8885FF5B3622A8AC9E0D3DBDBFBDB5A85F397B90DCFB7296E5A68CB65D861212760589A72201B8020910241BD0EBEF66FF87CDFC98AE95B12BCAF536665CE5C9A5B3291A350AAC505C06691D989498E0570EFE5F26C60831958765516371B30C47653EDBFFF201447EE0E66A7DC3D21C51A12DCAF53DFE2B7F8D650AC568B0297B7109F708716798756AF56F7F6A2247B893AE3BF69FBFBFBA428DCE01BBF0F77F262FC3C442C8B72ABBA0700AD308145989ECA0866BAE530F9016F3159D70DD755F7DCA8AC8909646CC870C0618E53953C16B2919FD80DBC33904F7217F93ED284FCEEA7FF041800DC233D536C32B8830000000049454E44AE426082');
+
+insert into auctionImage (imageId, auction_id, data) values (2, 62748261, '89504E470D0A1A0A0000000D4948445200000082000000DF08030000000DCDFBE60000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445925131A9B3AEFFFCD8EFC872C4E5FFB6DBFED1CCB45E7788928B6DFFFFF5423A2F72694FA9CAE7BCE3FF474336D3D7CC859BA6C9B88FFFFFFE98A9A98A744D2B2823FFFFED3147547A98A5AAC5D9DCB055FFFBCA393632D7C591506879A9956CE7BB69312C2898B9D6B9D5ECA4BBCD585444BBDCF56C5033E4B756302A24DCB767758C9688A9C586979BF9DA99C3DFFE74858A33302B675B45AE8D53FEE7A8A8704B79949C38332BB4A571FCEAB899B5CC8BA3AAFEEAC8FBD888FFF6B9DBBA76F1DCC76A8089FFFFE4E8C98387A4BA67777A799AB697ABB4F8DDA595A39CB4D6F5998355534A37C4DEF5302A19474743E9D8A6FFE4986B8795A6A79DDFC376C3DAE9B3CEE6FBEED4FEDBBB7975646A8AA4877D65989784B3C9DAEDD599BCC8C758533A3B382BEAE7D6A9A58A425B6D7D8379B5DBF5B8AA85B9AC97263946C5BEA5CDB676CCE6FEBAC2BAE4CD96E4DBBAEBE5CA727B7AC8936A878B8345412D565A51BBB59B33302393AEC!
4C7AB77FFF4A9D9E2DA949B97BBD7F5504C40F6CF8089958AC8A764AED4F538332245545855452AA49B877B6438DAAD64DBEAE7EDD38CADC4CE718FA7B6E3FF646A657EA0ABC5E4F6CA9954E2B78CCDECFF875841B5D7FDAFD2ECF4C9A8393F39D4E9FC2B3334A0C2DB4A4F49C5EBFF9EB3BABCB689E9EDE46A736AECF3E7B68839CFB566BCD7FD2A3029F5CC93CFE1E5EFE4B75C615CA1C4E5E0CCA651421AE9FEFDF6F5E1172E3A8FB3CA66441DBDD2DC3E3822FAD1B1C5D5F47DA2C291B3D3ADCEF0C8DFFEEEE2AA7F8E93BA9F59F4F6EE392C2BE1D0B7DAF4FFCDE5F4C67956434D53FEF6DFBBE3F6FBEFE36080935B4F28B4CFF1C9DEF6939082F6FEF6FCF6ECDDB0747C908D3A2C1E6F9199CE9F7E5E6F769CBCDF32382EF2FFFE2C2422A0B8A9342C2C8DAECE4B4E372A2C2DACB18AA2603EC3D7FCA3BEDF736E60AFB29A34392333242B423D3BBADFFFBEDFFFBADBFFBADBFBB9DFFBBEDFF9BEDBFFBEDBF9F9FBEE7093AD1C1C1822201AB07D5DD0ECF8E79675F3FBE57290AFC2D3ECA2A07B844427C4D1C9F7F7F3E8C16182A0BFBADEFF31F2450A000051D74944415478DA8CBC095C5367DA361EE0B00512911D0960580D1043221201850104641305C4028AA4222AE2C2188C1B68C5AD6ED8566806D48E53A415EA542B53C1D2C16F3EB55AFD8D4B91D722B695DA1!
036C7DFD7F7F759DBBFE67FDDCF09D699B7F37EEF012190E43CD7B997EBBEE!
EFB39284
88E484876F2AA56984C83D623EC308D0CBFFCB0663FF34F988C46936998FD968E21F3617E60CDBFDE7AC8C4FFD2DA441F26EBF1C3FCE3F82F8687D83946AA53530595959509070061D024B21E19A4837DB51EB12EC3078130B1AFD62338B96968787818BFE68F21F6513F544FDFACD9EBCBEA8719A4FAF175FFE978E54786C0BA7E386063AA20A23239210A108C83227C0C9AC68F7F7D3BBB3C53FD4B238C1FF5FFE5C3FA9FAFFCE5895E7D0C9CBC31468FA70A96552624472DAE360E0D0DF200E865F5D6D6BF8101C7303308FFDCBF3C6F5EBDFEBF0030FDFAD8F412060F617024783F592121D9D3ABFA717DFDBFAE6BFA1718CCCBC3080A3A152287DCF5AFC7E02BDF5F85C0AFFFAB81E1537C1DB42E7B0C089511C911A95E0163F5E9F565D683E617F0AFB436BD02DB0CC1641AE18D35C8DCF64FEB32C3102EC0FB97AB1E5FFDA5A38D7884338C6479C5221C93E58BBD02468787F8357FB5192DF34F20281EC7CFC2103008A6C1718C83F4038B657AE695EBFEF5D1E078B4310883229122508E58A83C7E2EB0FAF1307E37F2D26CFFFC7AD32BBF0404D1D0A06808E12BB2B61699AC45FC650F8A8CF578CC632014A6DF3CFE058231787F84605972D72FFB8F673DAE3621274DFFCD61FDEA893893694824E28D0E2883CC120066CD1E1F1CFC6FCFF42B84C1C1C7FBC304553D2E!
1F9EDB5F1D0C0826D1BF41FECF57C0D573E938070B48138745E97D22CEBA1EB8387666EBFF29046BD1E8FE58C1CE65BF7C78FC787EF0A8F1DFBE7CDC21E327AEE70639A371983C912E028571654062322A8CE90063BEBAC1FF010490A1312B30565095F6A645586C7EB0021086FE5F10F8EF22307519671A4E1FE1B8618EE38C2346A368B85AA138369CCE0DBE0AF6FF610511F14297A0D562823CEC78C0E151E3F0FFEB7DE3DC65B4361AD3878D266EB861B8AC33DD18CC81B10214C1F9D58AB1612A24FF530883A291E0C50982CA5F9624271C0FC81A1DFC77A1F02A043AB71187634AE9D34E2EBDD0F77CF88170AE3AF85883ADED8B9442FF0A56CBFE07078360A258E8020497E45BC7173F1E53C0B5BFAE33F80A8DBC8280F9C17AD068ECB0F5E7AADF395FEA18FCA2941B3556734F6D031E5F2DCC5700C2E0AB91FCEB0F2FB10D1AD94F944F1CF1C2D6D595B7D2BE5E30A65098460E8E8C67B509C55B645ED2C8DECC175023AD20B21EE2027D632E7015B37DF3AF6F2CAD0EE646B80309E7FEE679F54B05576F045F588BC64F653E98F17817B173100C9CE8A03130426071FCC4F6AF97FCE1C249A3F54191C8387870F0E0C17A13074B59BF8440843EC24A39DE8E4C1A345E08EC89A9503C9EED3BDB2B6776D668F0E0B103B6C737166E1CAD1EA69CE4AC4D83BF0161908F!
123C2024838307AD0F8E6E4C10AC76AA4CFB7A7FD6D8498E2355426FB51619!
115546D1
3FA7D608DEC1DE0D08438AC09EC00B8A8AF0D214DF030187B974EED8015FCF52A72C147DCE8482C712E39F11987EB5027B8679E2E0480CAC10E19456773CBF4281C01E5510545CEAB0821BC6B95ED68397FE1934B2EFD617027D038F550342D66C5F2F2E9813890E24FC74C0373F98339A882E4D83AFC42F8B09A3D901E398E8A7836068C4426A446A58C2712F912220EB9D2C050EA34231CA2982DF79ECB8C3F86B411A277E066150C4C5F8068E95BDF3C2D731CBF7AA6238DDFA9D42DBFC73BEE78DD63B0000E2E75F13805634BE7239E3804460479788D9C939671DB9D13A4FAFC759C1C159F8A8CE1AADCE4F4919364318E48B07E35D3CC2551A2B626CFDCFDF2F2B2CDD181053BAB12DC5BFDED6372638C5B7E36E61A7E8D56C329AC6F888E63118C7411099D2458D7AA50AE4114EB651810DDC615B8F525B5F5F5B5F5B1CF85E7AD54B61E46360648477A6B5359FAEC6C151CE3FA7D3BF6D474C7853707078CC97F7DB76DCAFF30F0E08F7773CBFC364E4CAC606CD0B8F99E873C8384691C0C703E29D4281A52F8A75AA606B44976D945770D995AB674A0B9F1616DAAE5CE97BE0C993A7577D631E2B8CF5A24144A9482462D7806CA3B388AA535EC4740C1E148D8860B5C320562337C465057365CC4943C3C1C10A11119D5131AA500C716326C59851C191251ED3C55B1FD!
C71CC5AA1A836E2B4A38060915C59199B5F7D25D8B734E6BB2FB3B28EAF5C19B5202B78B4C9F745D64905C7A597898E612D059DA31EC9C6718AC7DCC694A6614E74B06C3438AB024184304E7FCCD1C2D6833B449C312BEBB011FCC5052B82B38062746CF8247712F08D8A8A8A6A0587627EB09E43C40D0D9B148B5305B9035B2DCE9D1B3ED6501AF5E98551EE9DC0952B9DFE90257AA7DE76F6619085911B690B0F6F72745470D5C3102B3B1CD30302F21D1B4824588BB8F4FCFCFCACEA86C70AFC36207898E542673E1EA78B50C9F07D4156757EF568FA9701431CB723BD7A71FE75C5F041280BD19701DCE374CEF838F0B82077BDCD1FB79CAB56A417FA8F9E348E64C578AC74AA184525BEEF780119E2186E6BFBA4D0B6D4F6457E16656AC7D5D2525FDFABFEC322785454B6B1D0173F16E6371596228C3AD22118EE239C7C7D7DDB06D3AB0B7DF12C1F5B5787ACFDAFE2D7BEFB7F0A06070E3A1652C03DEDACD8EF22D85D54BE6ECB922F8D571A821548EFC3810481C3159A0E672916DCF5B5F5DFB1C37AC7DD420FDF8D28E8C7D21D0B577AA4E6577307EB712D23014D292B3D66C3106DBEA5E16D659C6807677DB71086DCB10341B938A6F44CE9C626C7B6B6ABA523F5A21DE74BCF34FAEEAF28131DB4367E195E5ADAB1E3F163AFE3821B2A3F1F9BD59F2AAC8F959521A!
3157084FC3AB94BF4B87A8197AF6F2767CD71A35901511EA51B0F8F5607BF1!
3EE51FA5
3D6A8F1202E65709803640FAFC30BB266DB8673C40F9C49A188F1D8B91F6950CD1D5E1075C637A0A2E2E498FFD59365D6239CA787FE4C44FE3198705811E06BDBC9E1FD6865F6CC98586EF1E998F5C12B22060156386C146181D1C38B4B4BFD2BAAB993F5A359150109674A9B5013B366AF2C3DF76985F58E8307AD45C3A3594D2B3D1667656DB4DD9895053F89EA4DC315811E97022B068DC35C5680E719DB4FB31E8F5DC84FE9E4C026B377B67A34E6941D4C1F341E56D8DA3E568C5D471F61E73A63E2C4D59F0E8948791E04EDC18A1760A983A6AC050756DA5E783C8AD4E182AB2B62769EC9091E15711B3D769E7B5C2D121D24675567ED5FB9D3EB5C604F78C568B5C8388440AF3E8C570472F52285E2F14F9E67AE5EBFF09DA27AF43027AA575438F51CEF59B932767404A70CB0B51D321AB300C1D5753A205423EF407D074760D846A7C388B583A6EB8B4B3D9CFE305A06A50CEB28AA6D1FECF482F04F05842C23D8E52031F6E1FDB0C2C69ED805081F64DD308AFE851882007EF84EF1E9D33309D72B2A2ECC760C06378C5D78D1F3D3625FC4D208573DFAA5EDD5619191A84935DD75D37BABABE99CC45B5CA07EA5D3753CB01ECC3AEEE111F307144C585C641ABBE0F4C063A36884ACF05316E2805E8217ED5F79C9E952E9F5EBC1AC9301FB8C5E8FF1F008E40E8E0C8D!
8D7DDAB5D2F6A1D7C3D9A54D57468C63272FA0A6FD21B0B4B1D4ABCC388A5840491E85155419D3FD608541B3152E2016E4152672F4774E2B71352440000FC53355BF32E59835475608E62B17AE3B1856283DE3E1F4370EB5034A6508F44C56B85276D07A48B120ECCC4EDBABB6A52BCF5E1119C71415293D8BFF706163E94A5F140485ADAF4264A49ED2F5AB8CB7C90A23ACBA0C561CF790385D807C39287A9CB2F292FFE151489B835058C38AD9FA95B30181AC306A1C34F185332B70A54744C4198F988A91F4418A276B2332A23450340208C10BEE34FAA66E8C7951EA7F45641A527075507717BE9BBD72656140D64FB6B6F51CB3C2DAD7A66D7A6F0920302163BC709C7801340E2BBC38E3B1B14244740A695B7621F6CC257FD1E0773C0423D33F43C62B812B2F7DFAA5EF99D2402ED8C8D00E2A3A90111C19E40A9232E19D778E5DB9EA4F2F567029B68E1CF8F689C7CAA8BF9DF3B58528500082BBF7D44D1BC81104C1A4B8BE9132620CFEB7362239EE1CE6C8E324F883C31A6D3B4DA2C70C02699B51B4B964854B3F5D7F587AC636FF3007E3211E60058270D07ACC187CE74C427585A2BA6D078C00B2AFB3F51AC1AB46406FB17FB3F57DAC18CD4238CEB4F49EB3813262900A2A201800C1C82E3CBFF48C6F3EAA13CD884012BE2B9D3811F75DAA4769C028099B60C2B1!
00103EFCF4FA6C8F339E0BAA47AD07EB19849D8117AC4DF5278D016167AEFE!
A4387952
313C3A3434167CB8CEB78943E51E6EE84110F7D8068F0E13049F7DDEDEE5ABEB210B5087D30F5F4F85152A1423F5D0B2C1B11E2BEBAA396385F5494570C5EC95B6018A412E6BB6C7CE0094C0B1ACC3FE0F4DE9140BD77FBABEA00ED71570389DDB3198CE6D44185F38593F76F224C231E1D393DF5D38F9A5A2E3CB93595975A58157686005DA5DE9B1F2EAA7A38A2CD4885579F3E32E069AAD40948A620D1E01538E049FB35DE9115EA1F8F28222F86F1B4B7D17678DA49BFE90EA71C9EB0A579D55916FFBC2F8CEE1540F8F05D7B30E07F4347A04A2D8A1CFBB809C09BC3E765271726C41C4195B50D37759150F6D1F5607FF67AC6F130C38347478C1FED233676C2176C90AAB9A27ED5B6B7192C2D168AC76DC6F7BE68CAF577EBA0815E3D88273611EA52FF21F5FA8CE0FF7B55D7C78C1E0B1FAC59E1E1E4F9A1A1A0216D795DE578CE4D79DD9E915501D7C18E72C8DC9876E500478AEF470F929B8FAE4C980C09E33BEA9F95FFE14E095E3DB79E1D305393B37D2544B311A9015B8F3CC55945E0AC7F8497BF37EC7626170C878DEB7D46367A947A96F0A7162D9E1AC800E5F0FDFAB8528C9B3AF046471D6D628D61E2B519FA1EC3C6CBFE4C2F1A3876FA163439DED4E0F8FD2ABFEC6EA8E03BE7845428CA2C2118FF0908A75A9C753C5D8591044E98136EA8547AF5F08F7B86!
A040458216FCAF3F88B4B4EB21192D1B1A9A9A9CDCBEB61479BC804CD96AEE0B2C61CC39F16A6DCC5BBAAAFA08A38DE0D5CDCD0D6D671F761608C23A7686BF2F76FF2BFFBE5705B53608CD7FD9836B49B1BFD9B02F7C738060F75FA07EEDFBF3F262626D03FE66CBAE264E7D9A6A6B3FE5F1AA1A820BDBE4B4921F188E63E74D294E6894BBE14914A2631076196C5A121A1E909711DA92D6AE04D83F42BEBFA0BD73F1D05391BAF43B28DD58B0E5E395C017D683D325ACD29A020A135451C24E5316EC8C48946CAF040C11D3E76E5583A442C8A1547094604565D31360682E508C21440D8FF29E3059A5C31CD6934D2F08BFA266B2375EE6C8664CD14B4E2BB8A6A545445D67759E801A15A4646205E59E330646D14D11819D847CA76D03CCA38324C67B40EBE52862EC8280A2E2BB316B17E6C5031C6918A1735C50A264D9914BA81089AEF7519E5F1CD2BFA5A6BE26C30F90888AF1EBF00E5A58FB1A66EE882A21A576F1A1229F00F5050A2D091A6A3AA89AC49498B44F5AC831619212745A2B263341B1BA4F9147D8110863FF0030D7A6085D089ABD32173152636007EB5931CE45B7163BA7114C46A0D6988158DC7E026721807810E558A8B3E468C046FE1138DA011327B6870C82482C2E1685DEBC1FF7298F8D99C28CBCB8920C4A34C01024DA17F6BD0059BDCEFF0C7477!
8C7DD8EB6326367877F67BAFFFDA6BBF77728868C6DF7119058834BF76FF3B!
F5B6D541
C1B726C7BD8E188B73535E5A73B36EDE044D6D6BF35FA63507808935E5AE1E06FCE67A085C23BFC9FBCF07F71B7A3D07F986B484909E89C5DD8D4F40235A7DEF1404A53F87D4EE4D871D7B1AD2325DD58D6E1DFE678F77C8731BDA9B0A921DC7F07F974F0B721A0A6F15608A562ADF82D2B98DBC2E14E6370CAEC63C1C1FE07F2DF091E0DC743FF9463C71CD387B874634AF895B34FB8E117F7E19AF4A7E1A3FE2FDA5040FC9F34553B167A353595A199120D99FE1D848A40DE0AEFADAE37220D4CFF0682C8385CD690127E0C2DD6939826C7A6BAB3C1C1319E4DE13082820B4E09F7AA0B7FC7FF29A39C8EC2CEF0172624F5704A4A7AD38198B30130EED090E9B72140117081512C16282346FFBD1528B91A5266071FE6FC9FDC0F8F894989C9E2CE16FAA7DC45BE72E907EA36D66DCC0A4F492F5304073B169E4D4941981A83C3672BBCAE163E0DE0402CF5FF068208FA66631841983C7149FA7F670513972E0A3870F68AA2A2232520B8AC3A3CFC70F0EC94C36D0DA0F474C593F0C381079A629E3A72A3C19C7FA1E38B17C661937114909B0E3C4C99CD8D0D7343C67F076150911A2188A758D85F4D1006C7C3D1DA9C0D88A321F4D4F5A26A51C393700E2D7D4A2788EBC57D0542921B19EEACE74E0E3FDD8862E0FFE581FB20FCE0176747CF163A72D5C6FC94A62CAF27F98E!
4FEF2B90A44611CE4327A3A19EB57982443939CC6D4C40999A12EFC35BE125048E4645221A44C237B804C588A92D253C7DF4E4FD1447E3B0634AF870C38B94CE1D1D77EBC7149D4FC31DFD5F382AFC53FC1BAAC367370437BC78D1A668E8B81F7C18C1FB78E35347F8B19EDF932062E2109BD62F2198B81806A1B97C49B568F85708A2FA74909A697C8383A39C68DAE8DF60DC71F77EDBF0D00E7F7F54A78EBB77EF772A4ED6DF0DBF7FF6617A8551E1E81F7EFF2EC8A93ABDED4578474330D7E03FFB61E7DD17F73BB9329016D8851B44600E2AD0FAFECA0B1762220479CFA7DC84235E85005A03D7C20883C46D349B1E32960D933D391A770F2145D211FE282446D0E318C73D369E1C52942940A1DCF0285E38A4009FD2CC0C0D15CDCD760CD6535A184578BE13A5C24CBB3439CA8A0913E46DB30A2D5F92FE4F10506A40E43850BC445426497A72C3E3F3549188B32E03BE6328A86043B4D070F42023E874C4AE62F8246ADD31C58851916E1AE38EA14541678CCCAEE776DC3D7FBED3C4FD0AC1381AD825C8B37A3E99204097FF6A85C1B2CEB636C711519963DB5D3CB01E32A5B73D847C36A1DA74A257C7B7918626C7F4363CE9D8E6D8202A6B6B4BEFC4330DB8CC61CE543F94DE995E0F51945E9FEED809F9D3D9892EDA646C7B71F56A271C621A7784280BD4848CC84338!
8A504BC7796150B4E32E083FFC7E4359C793F3FEF7C37718871C9F3EB99B8E!
A23DD2E1
EFD871FFACE8CADDF0B32F10A3770BC3CFA6341DDB71BEE36E4AC7C3279D5CE78BBB90D79DE1E71DA130BEBC9FE2DFD6D154066113DEC09938EBB6C2C24E6E70E4250463B0572C85639ECF2F014815233FF3C5EF87EE77EC308D383EF10FF67AE22F2ABBDB39C8959D0F179101F1CC88A829E56C43CAD9630F1D51AF9EDC2D6B6A18ECF477747CDA11EC3F3CDA56988228509C4F4947D537DD0569C24CE71BD2EFEEA04CEB0484116B74E507CDA55241043DE979F37B363F190F8A068DE641A7E2E1D34EC57059D9D9030DF92931016D3B464CA286F0F0E07A28BBA76DA3C1A301FE079A529EEC409428AA9FDE150D97216FC01C4D504BC31DE14F1DC1DBE1E1C348E6E1B694E161C7918603FE15303FC287AC40BBC207D954DD44491906473437FBAC5EA038281A21D8D43971E14FBF3BA9E0CAFC73F21DEFCC3E7BDE4B641A4E0704C4F28BC2CEE1E0E060D4C0A60385671B46AB035262200E480D3A3EF11AE5AA1BC21D53EE738F47EFBFF812526EB4E94047780C373ABB70761B72AC4CE15808E21A1939C8C6A9E40D0520BC1D1ADAFC9EC54F0AC235C426F4835CC753474540F015FFA701F99E671B9A1A8CC3C3E975B347CB868CE185289AD5A38E398E5C534ACEC62BC1014FFCF12E34FFA2FC278EC19CA2E9E9C3A7298F1515E12F02140AC5E187298E4D0F031E3F8E399!
0D2203AA6E01C0F5CCD3F46D33A73E619C70223046F4FB9E9333137FF2453746C3E3B22F27ABAF18262B42C7CF663AF2781C7AAD3878D8AEA17B3213C071D0B3B386869FF947CEE9D32CFF30DC1570A9B88C4A07B1B0E3C548CA6DF6F7B7C37050119FE220B2D006A7680E23124DEE1FC27E1C691EA635E8539F95C7099898D85A91210849B37E3D7D8B82C36D24481DF681D1929DBF834A6BAC1FF457AC5C3A71DA365C343264567DD8B00EBB6B6FAF3E79B3A879A663B36C4943550D12E7BE25F4FB2C8DAD4F0F421C22D65F8587DCA0B8E0B4F090868F07ADC71A0B322FD61873F1CE60F41CD791D28F40A367240C094AAC9F45D4C97E0A655FCC4F2AF178F890E8EF0D2111E1155C74027F9EF3859EFFFC2BFD39AE466DB8BF367FDC3FD0FEEE8B8DFD171B7333DFD7EF8D97047489727F71DAD493EEEF007153B76BCE8B4EE3C7F1E3990829777B4BD78EADF71FEEEC3171DE1E1B423DEF6A2B030FC21789536154670D1A6ACE37241BC55FC8C6FD2BC460F8E8CD084DE9A66486523C1D5C3F5F5A6B1A17AEBFA74B62F8C04A15B24505FEB77EC4847249775EEE04651DD4CD523F5A44F45F5A6FA41C50E641CDB701795A58F388E183B71824E937187E30E23CD3FD21DF3BFCCEFE4685B63144149633D8210FFDE86D52EF91746064F9A148A3113EDD6588F28468787E89!
606AC6E4DA335982C7874043E1CC1022814B01837A4407788CC41EF6D4227C!
4D1C2223
C43328DB6FF583F41D591ED6CD21EF7A0694C31A6500CD2D0C74823C67AE3E340B960D51B132FFE92BA382B58F1DD05C5850B0A23ED3D5FC90A868A42A73D4AE7C109868D87830F67E1181D350E0E0F8B907DE98A319CEEF149C700C786320EE982AC704C876E195170D4945D115D617586A3FAA0605ADF484C82674DB4F5820A861F2E04A2B98F9F686321DF7F7DC1E2C58BD1012E06E7B7397A79ED5FECE5886F5E8BBDD8D1B4D88BFAC3FD5E5EF9C0A108760C9FED0F9B5D780C5DB4B16EF659AF60341AC686F0D967B3B22A0E1FAE08080CC45B17E7E7E77B7939E6E73BE6E3A16327BC90FF654067E7F097D5013F9D3B17702EE0FA1FE41182668442EED6D5ABD396ADBFB17EFDB2CA889CAB09390911111109F4853FC222927B7A4E545676452427CB0317E7FFB47F764E8E674C7ED64F1B9D9CF2FFF37F05A47A860770E90181B3C33C6371EC3FE7D4E3DB43876F0FCE9280134424E48485E54439CD8E9D3D7B764A6AAA4B9A85C5F72E2E4B96249F103437CF7886E39B1933962F9FF1CCAEE0504F4F7272654225BE54AE5F5670021F950527AA6A6A82060A6EDCA83C7AA9B52739213921C13376F67100485DF0E7FFF8F39FFFB6D8D3D32B2060B14B54F2A54B3B77B6F654ED3CCA1F55872A2B2B4F9C38511911916C9B70AB2BA127A1CB33276DBBDD37DF7CF3DE37DF!
2CDD6EB75E10DA3C63E9333BBB673366CCD814BFEA5951C1A1CA885B8BD2162DDABA68FB86E58BEC701415151538B043152496481E48565E6A8D88B5D81F9B1CB1FFC337F71F8F8AD9BF2030C173F1820F8FCB4F541DEDCFCECE3EDA1FA4AA0A02EA81430E453716E163FBF6ADDBB76FAFAC3A21978745A5A5A595FBBCF7DE8C457603B94B0549CDCB6FDCB8F1CC2FC3D575DAB4691919454595CB16E50263F9F74B6197893E1B96DF702D707575CD70B876FA76AD50289118F4977656F5DC4A4BFBFA970FDF7CD3292139226AF1FED8E3A9695BE5CB4E54E91F894BFAC599252A1C007D4D55F06C834DF9D21BCFBE4FCBDDBEECC4B2ADDB6F6DDFBAA17CADCF723FBB8CA5DFE7DE40464C2BBA71C3EE999F5F46C6B4B7DEFADCAFC8A1C06EF93357BFF7DE5B3E71E28AEFBF5F54E45094E1A0B223085AA1C4D0D8D8A8C797EC9D27D2DEB4FFF387E7D2D222625D8E9FFB70BF53F2CE9D47FBF5865EAD38A824A8447BAD045F7154152C5AB16869F937EF7D54BEC1CEA1B5CAE190C38F9B7CE27D66642CB7B958BEFE8460D31B33FC9E2D6B1D78F66CF9C4774343F36E66EC5165BCF79EEB8CBC4D6B665E2E07EC13AD0E457B428A6EF8A94EB76BF48D127C36EAF52BF5872ABFFEF39F57BBB824B446A4A5BDE97C6E596BB65EDFABD41BF4E2201C25701B8EFEAA135DEB5B5545!
CF26CE8B8BFB66C0AE203324F3C8EF6FEECD7B2363D39A8B2B06825A05CD93!
566DB22B
285A3A6386CF449FA4C949F1AB5CF7383C2B9FF16C934FB1CF338781435537D6AB5499A755AECFFC1C4E0BC50F0C121C7A4963EFCEF54BDEFCF3925817B9938B8BCB8209FB2B7BF48DFA5E8944AAD48AC5FD2A872255504D49FFA3AAED370E05955C53F99547C7D9D9F9A9B42147F6DC9C14FAC6B4CFE357CDF0B17370403715BACAAEC86EF9AAE61933BE5A9594B7376F959FDD22BBED7619AB3E87F1EDEC06ECEC54BBDA4F9FBEE63A638643FBEDDAF67661FBED471A49F6A15BDB57BF79DCC5E5DC874BA2D2BE76B975A2B5B757AF94F46A34B58FFA4B0A8A8A82C406F1AED3250505AA9A921278F39B450E7B101B197BF6E4C537674CCFC878BF79DE8CA2226A6BF366B8FACDD8E7D39CE19731312F2F1469FA4D51819D5FB9CF47DFFB3D7BE6E0EAEA702444A8D5F63BF815855CCB98E6BAE7DAE976756376EBB2ED4E16B14EFB5DC29CD2A27A5A77665F821B7A35C2A0818112AD839F9D43A6C1A0BD864076509538383C5B6D53FE0C89E55AE470C4F58DCF711AD769CD793E7EAE3704CD53263DCFCBD8336DF3FC353E19457E3392429B43D7CC5BB17B45F9D22284B4DF8C196F644CFB51B54B28EE77282A72CDD8B42AB4F9F369AAF6ECECD6D69D272222E87EA0FDC713765ED25F3AAAD74B84FDCBD6DAEC1E7028F22B2AE9370877B96E7A7BD334BF4DCFEC1C16D96C7!
9DD66E9D26738EB11A49FEB9EF721963ECF705D0108A179B3A66EFA3C292E7ADE2A3BD73D7E6FACC95BF3DA5F262E1A106BB42A3F9F55CDF1D3BECA3892293E7A292848E5EAFAF9F3D02979CD7B8405EB971DAAF2684D88FDDBFFFACF73F2842A0FD0D08945EB0782767F3C6177914386DD9E7EBD587DDAF5EDF8F73F5FB56995DD9E5D0EBB374C78FD9715F07AC1B56B7B3EC95835F98DF75D7F5C5E2E88DF7B7392D5E6CD6FFF7E53E467C8936BD7327C10977EAE25BB548B325CFDA67DFEC6B4F76F4E3F72CD70F468768D4A75CD35D46ACAF37857D78FECFFB8AC45DF93107B7CFFE2E36109C93B8F5659FC7FCECE36254BD7953F5B047B9568FBFBC5A7F7DC9CFCFEF4F7A7C1FFB8F01287DD3636B94B7F2C08515D7BBF39B419CFBCBD66A2E0E694C993274D9E1A99B429CE7B0ED2E15A094210FEDF93F19177DC1A9F551F7CF0D6DEBDD3A75FD3F667D788C5AA3D7B56CDCA0BB50AFD7C4DA2FDB2C64395094EB1A9A9510909B70EE90B80C07EC3A2B56B7917F6C333E2F64FA6DFB49AF4C6A4E6E7CFF3C0040EAA56CA94906BA7F73437874E9E3CF96673BC0F20EC9D3265D2DEC9494973BCBD23E700C3AE1220C898E13375CEBE7D793E73366FDBFBD6FB7BF79CD68AFBF541AA6B7BDE9E65B5D76ADBE639DECE5BFB936FDDCA71F2ACCBE909733AD49F0B04F697132!
D2F4E7CE69059D2AFD71FD50B777D72E47D5C42E8E42993A63CCF2B9EF7ACC!
0AE0008A
EED697E9EB76DD6B6C993F2F6C509263F9F3469CAA4C9934267EDDBEC6D6919F7EEC4197B5C9F7DE3F3D99AA4F979CDA1F153A74E9EF2FEFB7B334E6BFBF5FD4141BB5CDFFE6072E8E4BC7DC5DECEABABAA22A292C3C2E006A7B0AA82D79D81C1DD3D6EED47CF54DAA01A83C12011AA3E09117C3B7DFA5B6F4D99126AB52F327161F9A2015C86EBAABCE6F9F3677D103A65FE666F9AB24C9A3265EFA4D06DFB22A32D131323A77E108FCE62B37764F19C6D7B93AC66C1F5EFBF35E5F34FDAB5FA7EB1F6F48CA991567B4393E2A313EDED17E90F45244445D9DA4638451CDA0000809078EAA389760EDA4CB141A216EE0A0939F2F3118140F0ED5B93676DF6F64EB477FEDD8A8C0CBF89D3DEDFB739FEE607F3376FDE6C090856CF9F5B854E7E9EB46F6A5CA2BBE59AC9569343F336E3F571C5DB70BDCFA710C6D09B19A76F6BB5EDED7B7C36CFDF161A5FFC5AA2BBBBF39F96B55646C5A686411324A7250281B3BBBBE567F3DEB373DD2514EE12B687B81E093942080482E9BFFF20DAD2DDDDDEFEEFE5BB977F35DDF57DABC94953B14652B1A5E066E8B659B3AC429392A646CE8F4B4CB48C8B9C3FEBF9E46DFBE65B7A2759594D22134D9A8458B9E9FAC9E9DBA7F72C9F3A3F69565E7CB177A2BBBDBBF3846561A90BCE2D088CB54D5E6D6F4F4600848F9E6514959CA6177F3EE3!
C8270CC2B7823D3FFEFEC7E56B6165CB8F36BD3DFD081C63B56D5B52A477D23C4BC1DB3727CF9A959734F5DD79AF454646132E2B1C7B6FEE8B8CDC6765F51C08A6BC4501153AE5735757BB4D6BD64C9DBA2D2F2F321110EC9D5FBFB5F5C3FFF8CFFF78333021D9063FDB0382F7BC3576AEC8888C3D196FE4ED253F7CCBCCE03ABD68BADF339F68CBE84D9F4F7FC36AD6249C7A6F52D29AB844C1AAA4B8B8C859C5DE9633A32DBD2DBDE3229B43F3426745E67D3075FEACC9932856C90AF8F23C34694E64F1BEA459B3929AE7E072E8AAFFB4CCE23F1084CEBF74B5A62D74774F744FB43C053F643884B836C7BF91B769CF9E234798198EB063BAABDF269F39796FD0554F993279EFCD2444E329C1AAE6A9C884E839C8266FEFE8C87D79F1F1DBF6ED9BBA2FAF392F29CF6ADB1433024ADCBCC8F949A1C825AB78B8951038AF5E6FB165C9845F7EB18838513011B0121327A212A8AE15ECD9F3F9AABC35D33E09095161E99F431812C29031E3F3CF6FC6C7CFB782733F88F38EDB5CEC2358D39CB72F320EB4B4E6B3C8C8B8F9FBB0C4663C133935292F69FEAC6DA166003826CF9A1FB92D3434749B555E1C2020FADC172DCBFDE5F58F6DAAAA4E9C70D8337166A2E5F2A56B9FED52153984EC796346C69ED3D7AE8520275447E82B1D217B323266CCC898366DD6ACE7CFB7C57947!
E635AF89167CB62F699B55E4E6B8B8B8CDFB8AE3E3F76D8EDBD61C8AD804C2!
B8A993B1
22B300FE3DB77A3E0BB98C1C0D4D2208F6EEF61F97FF896562AEF8685050C891E53397BB3EB3834E825EC0EAD7769DCE54658604310421AA904F006697835D46068AD41B08B3597392DE5EF59977A2A0386FDBB6BD93AD36CF8FCFDB367F7E7C52DCE65949F13793A237476EDE1C373F0F2CCACC30093C0E0643FE6E9B0408C870841E2519B2C0FE75554B55104C7EC3AE644055A26DD73ED264BADAA9DA8525104E99210EAA90924C952A042F5195F4EF2982429CF679DEF3D09B37D72006DD053ECD4956A1CD939EEFB36A6E4E9A9FB46F7E5ED2E6E839F16FAF593311393375D67CABC9C81F941104C3145865D2A4D0C9B0422248C89E1D1415DF6B6B33718D2A689B475A00D0B40885627C92822B29513994A8D00484B01F824A54AE45767ED3DEC8CB8B7F0D6495E82C28DEB76FD6075656CDFB662559ED9B5ABC26293E2F12E1F9597474F19C7920AFCDB342274DB64224902FA61097A3BA8340100989CC1BC40F0B5BE70A77E14277696FD7CE7DD4DBAB6E518B856A89243BBB2628A886AEBD5F4C8F2025FBFBB580EA9A91D19C3715E492E8EE2C98579C3415D78A24981A17171D1D3967AA0F9217CF8145E6F81447CE8F4491988485194F4D825FA07123F102770600EEA0AF8B6A6F0B3333B18246572B93BAC9D44AB5542371536B0C3535FDFDAA7E14EE6C40E83F5AD!
5DFFFA81F9AD235E3FD19442E086BC1A9CF8AE7CD29DEB7A6785E71B4A5A565A2F73C1F9F7933E939F744EF53F3E6440242A8D5DEC993B7814B9E5B81BE118E8491967636BBC23DB7465DAB11E22A33D532A954DAD7ADC1A1566B2412AD46ACCDECD7025D4D9058035DDBAF85C8871D5C337C88629D9D0596DE33677A47479F8A5B8810A308030ECBCBEE3CDD26267A7B6F9E1ABA77D6B649CFB7A1964C06991397C2118984E0E28444160B36ADC21675AF460F6BD7A865DDDD3F740B85428D10288490B042718DB63FA83FB3A65FA3D56BC580200EBA760DBE9848AE7C5DE0CE5F3099948A2D732EB18E335FF8405AC5DB4267594D7A3E6BD636B0C22CA409713B3361F9C0047BF6E2DD52BDA445D7AB7E64A809CA161286DA76AD902C2161711924D606F58BFB6BB49A471A2D0E8390EC6067F791BDFD171304CC167C6CB3655F3EE27F488C2E2E9E0A82A2B4D8367F56687CE4E67DFB928AE318E602AD0DBD66DD8A209944D2D222E9D52985D9E48BEEDBB2769841AD8131901704A1A6462BAE110BE9375A2D542EE80399B1EEE309B0C2AFEB99BF3BBF7AD85B4627C5CFCA43248211664526AD9A4F0C5A6C49D1E83E3077C06EF7223B95466630281FB829957D3AB5465C937DFB9E4E57DB8DE01076D7AA859935E2203823534360C8411ABD5AA34174AA0A8A9E5DB49920F!
8F592DD5F627805055C51BC6972DE145236A1F1F3A726CD89DB3C27691EEF8!
8A5998FD
0D9CCBD5D9B596350FE704FD6A756AB6B25E21ACD5C9D5229ED561B343AD95CB5161032854283E69150CB20A0D9E995186A5441D75425CF6C6C04EEEEE38B25FEF3F58F4348F42EDE07570001545C349513EF397004F3C484A52AEDAE4C1C12499FEC07595FB75A5AABD388B3356E6E5275B754AD51DFD6D5AAB5C2FE4C83C6A055AB79089A476AAD52928DB8016D2DCD15809ECC8B5DFE6D08C040696105869EBA39CEDB32D13271DEBC798C55EC5F5FEA505203432B918832373799B44FDD8D78A811CF8549944A9952098FE8C8231A3520E82414A3F0820E0129118AB5C2A0A0430502CB7108EEEB7E1302AB0590B553ADAC3E88DC3C7F4E34204417CF0314E4A25D89B01D277473EB55BA8190100C7DD26E9841AC96018F52A6D3E994B53A8A4AB51AFF946A3202E84223D4225B109862437695E094A579E5D76DFEE8FC9B18E8722DE72441F583179322E32C5163F7A14A24963B08B5EDB7E78292756E3A9D54760F18C81C5260E806069DCCAD056650338A521357E95E6290E05BAD305BAC111A0417BDCD106CBEB1F97756A080F84BFCCDBD7B9FEF9B85328E02BA0F145DAEBADDDE8E56BB76AE4E874FA152860B578299652024350049A52D80A1A30501432D11AA75B08304102464148A1AA4A9416013678E478BDDABFF2B02465C0423D1327A6AD2DEE7F3374FDD573C!
1F15658EA54FC96D6682B9EDAA1B05F8DA5DDB0D0412A55A296B516A109E80E0D6226B916245AC0A6C12FA821F241A0641ADD3696AB285D982799F512620112D727F0BC2C2999689BC2E4DF48E8C6FDE373F72FE07FB92F28A8B3F2AA25183AAC86ED1F2B5EEEB8AE66A11824845ACD2828B574AD4527628996180A01B4F1110209108CD6E91EAC4D91283E0D43C2CE1ECEEFC666EDAEABFFEE35F23D27D26952C568E80610EC4DC0753A74EFD20A9F8233B9860D7EE75544DF0EE757E1B768BE7CA74B082B245296D6911AAFB10152DD207141EB03E5B5F2D4105831D2464078D04F1A3CED62B05D1F3BC71928FFFF84BDA768B2D5BFE35101267CE3BC5A4AA3B2546DC6728AA73A2677AC7CD5B1E72FBF6FF7178DDD9FC0C52DB7DB7F0FFCC45D44B5B94A06AB54489C8708341A4585928D1C9280000907E94A859702034644282F0D9299861CB6A0BF9AD5C8BD5667E7E592FDC2D235FA392CAFBC23D6EDE9C357F21729A786DEEDCB9AA72774269EFCE17EECBB92A3505BDB257969DAD23A3CBDC1E48658C33B12CEF08B5B44FC9D627CA20B7F5E905A736477AA32DDAEA22BF9526DFC043B0B71F4702EB4793382057B8534C467F563C67CEBEA91910A2372EBA13ABDB134941C5B923707283E8DA646EE27EC49A5AE9E6A67C4001A153EBB251C4751418080F3E26943AA5!
8E0245223815173DD3DDDE469E1A2B7791E7DA9B8B84190483306F21AF5209!
027A8DB8
3579ABF27C4E9D5A372E9912CDCA895EBF9B54D35C9D58AC012DC10D445752D023D2545C0BA6C075231CA46A864049B90308F322A3A3DD1357BBC4C6CA53D3B6FF751C015FB349B458CEBCCC0370675C6D6939277ED5AA35DECCFA3C0ADE4B44F097D7439ED4648AB54416ED321982810C8E0C44FE893558564D18E8E2198348198435C5C4B9DFCBC3A2C2E4F2F57F1A570CF62C1E98F5CD52196B5E2C5F3EC327CEBB7855DEBE71154FE295B7C1E50D13CA77170D14150C142D2B72086A075BC9DC90113A99B45628AED58883AA32790F485FA26891227405F3F64D4587B85A7EE74E545757AE3D6F025E38D93B3B9B9B05FCF6F23A9BDDBBCB4FADFB6826BA4F9FE89989AC4EF10A966266E1EE2095C300C4715026C802404AE00B508414FC08A5A0A161606B8D584D7CA1EC7B690906A1B8B878A6BB8D4B6A6C6CAC0B9F11660CBC77DDF9076B97FAED2E7F1D8AF1F2EF12292A493D26F2A940AF285FB448A5D5D64215422DB5C3F10E8B76AB6A51A5503A74B5284750B7350505AD416210D2EDEEDBDD521D31A952DAA8EC15446F2EFE2032711D4170C97DFDA5267ED9A6B0878936AA81EFCB73772F2FF746F441D49E5A730AB53291D9E8B2BDFDDA82FE4CB1100BA21EAB6B215634990E8B960EB4D7B60BD5B25A35F422C850452E1AC8ACBD4D477BBB16B5ABFB41E3835E0!
1DAE9E262EF7516A9A9A91680F0F270B737071C7D2EDD35B0A1486567F391CF454B4244A9BAD0D2ACE42FAF5B5BA07D044A40055453F653DC6BDB331D8A54ED254135424DAD460B808FFA55550345F8DD6DE1AE10955D51914377B75AD9D8A81378C7CDF9604E9CF7D7B1A9A969B91FBF348039DC13897CDC6FEC0A7175B8E6BAC2671E328241A046879A797AD965BB01ED23A150A904EF2B5921862A8150697778E69089A6B2063A05A2514D5B042A075566A6CAF52B9F723BBB22D5EDDBEA078D2D02CBB862205867218FEA8AB0E013FCA50BD8E3753637D0257F12B2E7C71933FC8A2DF918A4AF7C3024BA5F76A86DD710D149D4BC3850D72A755443B51BCA559941AAA01AB14E53ABAE453B5302CD4AEDDCF2E51976AEAEAE9FDC56373636C211E8E4BCBDBF97CBBB6EFD62CFC7BF79FDC47530C1EBBB6FA84EC30A8269F19B36C5AFE1D99AEFE678AA70B754B5CFD5B8F15C03B1929D09218290B8DD5E5BB47611757955415A528CE871FB4BFA83608502BF0C34F976197B3EB92D018468D4BF39DEDEE5692E694E7FE423C06C0BE7B51B50046F0C386496ECC9D8F4FBB7A61F99B6E98D62DEF83C61F318166ADB35129E6B0C90E658B146580BF5DA7EBB64C30A87CC9AA02A87AA9A1AB1B8849ACACC9A5D8690A20C3FBFDD197E3F66EC39DD2D418D888CFCA078CEA9EFD!
35C5CE413C6C38F0751BED4DE7E375AA04C55886BC657493F1E9936E7834D3!
3CD8CE86
C2E91EE89CFE6C20F7D0F48B0D51080A04C5841D6DD276C6F2FB073D0C2FEC845343278AAA43F138189405DFED1EE1FA7F94DFFDCB55B5823888B2608F3566CB548DBBAC4FE25021C7FB75B6ABF811A0F6D66490842E1E611C1EF3F58C343308FD788C0BFB9565B2B25086E3209B173B698CC2EE9530B6B6F970CA8D04D0198584BCD4B498D18E4BD2BB3C4CEE6222C31FDFD6D5FDD16DA2123E2A0017CBEC9CD75495B6DF6334F073603362B4A6E6B6A1F6934DA5DD74242FC8E84FCECFA86A5D9FEEC2597ED2D97EE827613A28F00E141881858A30016E893486A6F67AA4AB0284D166A353A71504D0D847B3BAEE8FBB52B067E9CF6ED1B49BFFFF993DD0847EFE835F37C72D3725D722DFE4121E0CE87E3DF8B0A80A05D8DE2A2438F5A52722424E49323AEAFB1347819944B4FB797B8AA2007E00719A524556B54C6BE3E68B57674B0E8EF80405CABD6A1AD8460D6B6C311E513EC5C7FDC337DD6ACF8239F1C11A0953FF5D1A90D4B735D2C5C72574F701FAF11CEE5412A7409EDB5B5D48CA8DBDB3355AA4F8ECCC898C81098B9D97EA1AAD6E1E2EB7673354AA541ED4669413588F44A9FA4BB56A8BEAD866FFAE1884724D9334111E8ED4B0A6C2614FDF863C8CDA993270B3ED9836ECAB2DC66EDF76916162E5BB72FCBFD986768D4C122945CE27B1D983FA8E88656989929!
0CF9C867C6423E0A7912BB98D9FEDEBAC4A57375506C4C8DB8F5A12A400F402529A96511A26DEBEF0F42283CA28762F2447F91CD8A239F4F9FFEC1D449CFF74CDF040889DF97AFFE262DF0B84B44C47A973F998B94B34D26108BB56A4D7B7BD0D2D7FFBEAEA636287357884FE2475F30047C503A7F31A0DD55B06E614189161A8964222A316B27A0A06BD5DD1A03DAA51AA1B65FAB7EA4A1B814A3B36D170F94BBFA7DF5FEB6E859939FBFFFD62A34F7FF37376DFBF6D8D4E3A9B12E6916BFFC915568E7850570A45EA3D7CD6D772877B7FFC7172AA121B3BDC4EFD45F12C70B381B84FFCECEEE2248ECF2EBCB846C7119C2D20DC2883165B744689048C48F50A51EA150182818B48847955DC6EFDFB78A9C7A330FCDB20F3AEB8569DB6FDDAA8B42B14E75494B334FD497526A095B90592A36E05E4773A24C57BF8FA0E913172E64CD0533056F35E78F8BD044114149FB20549844454474774BBA2506214A08A41B595548DFB441769BA6BDBF79FEE4BD56CF2785C20ADEDECB97755D3D107BDCC525D5C5E5FB5F9015EE5FAC50815F346877DA3337B06BDE807308B521AE3EA8094B5BEDEC6EACF89D3DCFCF2C2ED72D13A279D548492ACAA4884BF45450EB4A52CFC8696A6B350603E36914AD1ABF4D6F59CD7ABE97363B4237092EC745976F757A1AE594E60408695B27B87F!
6C5F3E40842A44A1AF6DDFCD0C9F588453A0C8EEF1B174BF58D53FA06A6F2F!
72679D3F
6170FE7860AE0CD59029226A6CA11AFBA861A0AE41438A49080DAF113208064028CA609B5593270182ABC072E6BCF2ADF2036151B7E4B12EB1A988868F2754E9D4628DDA8008D2A82EDA53ECADCD440BDC7DDAD5D5CFD2FD86F651FF40C82ED58A75EBF8EC00958BA90C0949151204C240B3064090299968A384C1570A6FA156B2CB75531E8D949F873E7FDEBC078E9867B348EE541776EB56EC46A7AD100D5B726BA1C21149B0427BC1EBCCDEBB719A5A61889DDFE796A082DAB92AD7CCF61095EB8A85041046500BD93232B202F5B3040144459429AC51EBE839E8686D36284A2336685DF326B1C1515E6852BC9F20D172DE5A8BAEBAD4885B72CF54272744834581462F51EAB5BD1A6DEDAEA5346C765FA86A570BE78AFD36F9F95C5E219EDB5E9BE9EABAAB7D57896A030B5E9B5D42840E542113A5589F4584949F36A0D1D76998A412821F6B75C21A71BB6BB395D594E6E6BCA4A4E2C8CB82CBDE176DCAE5B1B151F2BAD8D42824C5D7EBFBF53497D128C14B0533ED898C51ADD492DA5DEFADF53BB570A05B785B7B4DE5F0A34AB8ABC4F562E2C28BBB0B32C5990634EBB8F23EE26A29DF2DF09DB55A4C7396710820C99A9A76D7BCF9F3ADF27C22E3488509DC2DCB9FA142DDAA9347A5CE0EEB4ACD4D3B841462432184DC45BE6C1581F595B5ED7EF33EB2FC5D6637B24A1!
502F1539259B2ABA0A8C02108B2448C159432487489C100BFD732B224083235646D2D13741A614D26345D667F7BC62AABA4A4397134B772B717AC4B5CB76CBB4B5A9DBCAECEC9891CB1BD9FB4288237535CB4D69E0FC620A14EEDA62BB15B3A33D1AEBBBB5BAB7208A1BD0EBA4F24B3A4065A04B4A791D4D292A001363C5053DD62EE208650B23113AC80A7B4B042311B9CB1847216AC9E30C16E7B9A4BACDC332A2C4CEE62915609790116D58A07962E64AD8CBDF3066DAD4E22ABDDE5F09EFB5A9550DD2DA4FD0D7E7321C87CD06095DA142827315DAF5AC903A0A138AFAC919010B034960ED2FAB10EC09EA75841EED71BD20021B5EE4E4E424257ACCBD6AA472054A136B368ADBBB3599ED9A15482F3B525E5F6364150FFED244A697BA1BF0462906D3250566A7808D934E6D5A08B92B1FC942AF9490F20D440D281A96B3297F2AA87EF1E055B211AE530022044852574A56D6D6D45816A5721DFC6CBF6C72A8434E2CA61D106FB09556A89EEB63693BFF62A9AF1F78B69B24DC36564257800C204393A1E8F8441C2A2110537285383AEA2266829DF24B2ED14670192E1CE2D97AE9CBAA83B51F28408F9D62ADA3118B0F9C7CBDED27E42899A20740F2C5DF1F15283BA4F36B77D57D0CB03178D3E8E8D97256A5C39FA0561AD46681E36B1EE91461BE400D20DED24A5778F9!
B8074B0C029B62E21C22922C1B30E8E48E88975395175A875A0DCFDEFE0DF8!
51318867
2108A5022EDCE76D8BD6540D622D3CDADD59218EB17334D46EB8BB528CB0844E225438D160424E4F392FF025EA2A6B22A484C93586DD022B3320282BF7F2188AD9BED19152B2F74AABB1391909323971F3AB16CD9F7BF94DBE015ABCB5F87319CD7539D1322BB84058B827A116773E73ED25655D564A276D6504C640AD9905FC88A84140511D6D68CA725C38076B3167DA683967A5C4DCD8DF1299EBDFD177F143845793A39C9A3C2A270C8A33C6F2524A741444EB0489BF08F2DDB17FD027B4D08C2DB0C1A19CA6E8DB85789767DEE5C9D249BC563093801254DCB3661241AA54CA704FDD5A01468D4FC24D68C4146F56A6040087D85B45CF67FEDC707237FFFAB401ED19390D3639BE09B9C13E61425F74C96BBB8A4B958C8E5B1812E5DEBD3B6383BE792E8D48A3532A910FA504667D6B92959D70203682912B4B4F5426440EDBC10E2A89D869D3AF3E0D16C88DA1A079550869653AF5FF6E69B5BFEF4477CBCBE65CB1F052EF284B030FA8C08937B86C5C6CA91215DEB23222A7B2A13BA2292B72FF98F459A76D4B820B14EC7271A4BB63E3594201A032D3B687D213FE857B3C60D3D2420E095BA710C4A5977B62AA81DC92969A9B2D8B265C204FCDB4287401ED605528AEA0A0BEB720A4B708A8D75494D93A7C9B7CABB706CBD752BED8F5BC1EBB711CE383FCD8ADC640C07!
229FB61D6104F649237E21429245289A486244546A9D6E7C9AA294D68A6B322127C512C9B2D5BF6CF9700B7D4E98F0E11641443212C1966EA2CCF1CC2108D00CB116E8F453A1A1E092D57FDDAABCADAE556752974EA30335ABC932994E9389EE9101A08C240C7418C42C42A9D546D9D2295F1ED26E8AD3B91A7D6F95CB6A0B60F8F0975F565B58AC5E22E8C2EAB6097484D585E538C53AC9A19DB0F856A734F6EDEB3F598865B5100B482974E932947D35EF8E5A31CFCB42E609C68E140C90053564328A059D52FAD20CE069F415528D5ABF3ED7C2C562C992255F1F4FA3B0832370FD8420E74E9D67D89D584F50652C5DBF3C1618B6CA2D9C5FAF92D60A596B88BCC62280A0A3699A8C08979A45A179CF896D33A8898AD95E1CB5FB40C020B4E0915A795BA796889586CA4AF9F1AF8F7FBD1F9768E1E2922BD88A4CF48CAAF38C8A72024186C53A39C5DE921384AD7801502E71FEF32125CDCCA8CAD092B026D51DE95C197810FD2A5D3E6DB25099A24D0709DB6DC9D64AC8097C52D09CAF458A948543C5BDBD427DE56A9784885492CB3804B13D4E4E9EB17572274F4FE048880DBB8314614F5AD0F372F8ED28BB32CA7C145B6115E81012144D930CCD720D7E5D5B4B9A94AA948C1FFCD3CBB3C51A26639524EE2993293894C848A5B4575F59B953EF1B9B8A703B9EEB22E83A!
14961376071F6151757561BE77A2A866A7BAC4A6B9B0904067B1EC281891F4!
3FDB4E42
A72C260C14946A6810AD986FA5D91618258A44C2AC040C12998C2812ACD4472FA64E4B03FA52F682191A5726B81C47F6C522162A7D290E7240CE514E9E39BE60C91C22CA5B4EB002EC90762BA2F228AE4D27AE41F181470C428301C9C797212C44FD3AA52B49740956E1773C9093A0525A18A58B44A49B140FD069F2E398C6C6C69DF2D83AA73A27B95C2EE8E94142801D936DC37212927B22C2C26015A447541ACB4917F9F6B4437AA544A94139D6D4EA58FFAEA155D80895769700619C1734126A68F1454618B20D3A14168992C96A4040D556F363DF16A5BE15512727089582E4E488B03B0909B72222A2802121CA33D609E688728A65B1F23579A432FB01A91EAC065E2049A06425A88FCE4DBF2542023AB6ED24615B0D444AD25A43B6504A66C0CBBA65D26EB290D23C846E696C4D937BC20A51B111824A3033AE1B11D01515063C514E613907502E9CF8708521BEDE7AC8401B3B08BE6C9D1BEB9BBB89A2995E576AC80C94252451B13C1BB7803674B0041C26E3A5BCB4BB4FD9CD7757F473AD54D2EA14EBE974272759BE15D48448C80100206104058E3C7035ACCE89B103D81AE5E250B684824922CE1622C2686B852050CB26653B8F100BAC489101FAA46E32733B25534247F26E9041F4327B00789F4C3657ADAFAABCE5147B75A747B29CFEA722E4A39353545844584!
232E83A2AECEA9D9C3B4EF81563A81EBD5ECFBB5102F71A345272B5922F55EC21C2035460A0BC603B3E4CB4BAA1B5250585E65E2D35CF80D42C2A08244C23BEB4333921C777E5CEE42E4157581DA8C933CA36D996958B88A89C3B51774012759EC010BBF5A894C6F96C2F85325CAD247DA6D43149283107A5542A21FA34A0DF61A25126E3AD000685A8072A37B639368E80BC810B4B4ED8B9D323011911D1E5999372E74E14B2212C220105232CE10E2051A878A274276723BB69EB596A3E2D7A15C80635B54DDD92BE3E255BD14DD647F12A26254FC947A58CB6D1F1454D630EDAA4E32D673EF4BD8DFACAAED69DAD5DC8884A27CFAB75108EB040046148084344C20D708493A7BCC720314F96953F10D7E17A642CF369C7B1AF4F66DEA57663CB69A09F8452A2D2EC1A9E1CF95004218959E7FFABAA962825FA9EAE849E1E79579520411E76352AC5C916FC4025B3A78795CD1C8A5104696BE303759F4E59CBF6E4798EA1948025FAA47D2FAF895DF15C580B0C6EA03A6130D400043C564BD21986CF3648CC829EBD0BEECCD667F79CE8A9949FD00B22C2E07CCF3B61093DBEC9949709949F38E09B2879585523025847CA833280E24A26ED7333D31C795746974F5FF0CC5C371D0DB7240652FC445544E4624A5890162F23192B5070025363F6D1435DCB2E35522C508192531!
878B2DCE08F3A1CB1CBF48D0F7036BA2D44D90D0CF7DC18927B34BE508F437!
01B87206
3BBF67D6405B184FA6C1DD54F78A05668660496B7640D90A644D278E94465D5831641421755484F79986D7282BC2EAA2E16CC48694A87BCE7C103B00A8946F23C3BA46EF77EE893FE700F7EE97B19FC44052421E08F7BCCDC6C317A1F6D88A240B259A494ED13D39BA803D72B1F541D3A2A7920112002C30EE42484DD62D5EA0E3E0F841D883A9073079EA8DCD9F240AAEEA6F33308CA3E373732E8031AAAB144E003D1BCE746FA44C62708E2020D3EFA17B4763AB58632494D31C15E87BAD9CDAA95E1A884F629E94F79727250322212921184576D6D73AE26E023073FB4EA1FB0B7F264D8DD875EEE07B71FD84F6E6EF7DCF8EE9DDD0E409BF1FC7D092FBB7A663B360B0612A98E924249C30704A3941983368BCD10404611E86200018A21EA0E5C0103809AA212F42D0F9474838C198392468AE6040002BA23837DA07A53092786646C353EF03233949AC918760785448C4E448A7051B319AD1B4D6901219917AFA4A3513A796204617AC6DEDAD9D8027AED96F293025801EBE2EC08C07BF7A4D003D98878A2082A9054BE195F305F9B075E8C32644C371139521E49943237D0989A1F8811594A205F7908C9C9093D7227F4D9E8F0EEDC41214FEBE96D5152AF4C65B1454610F8F067E795D4D0660FE898A71F65378DA0D5CA973326999B190320C8DCD894816F72A9118141CC!
2C830F8340DEC59BA012FFBA927B92E5B1B3A19BEA62E5113BDD5A948845B2024242DADD6D9E6A2211647D861A7EAEA2948D0721C5C6CB2E929115F39A9B94A713A623098244CA4B17B2810C7E16A34C45D8DA1229C00A091E068FD2649469CF9E56DFA38D0F5A688EDBDDCDC24BD9DDCD4FD2A8E6CA74ECBE086AD95E5E2CAB2070911B6F03F2978CA70D7E30CFBF914F1E56B170027AAB41D015911391437F34970C23A022E8F5AD951148051CCAF1D8C23BA138945410D9BD414A19BB4A5CDB3D3E4B411632DE0E3C4730D3332CF7DC90474ABA9F082C25BB778FE50AB538E43B46947A01F423B110AAE3F6AE9D1209881399C38B4C0A9E3EF3781FE980AA4835926E44315F3C33351F80FC27C5A9D9E08CA1F046944AF89B4190C8EEDDEEEEBEAD54F7221CBB75DDEA6E0AD16CC4C2018ABF3B517279B284DDD6A0E669D45CE2D935CA9850949205E83625F57887C0DF1B43955B030AC66B98979992E9E361F0A55228E926B9D4F743F70F3FF4F535B28C900203BA3D40A0FA7CD5F62A14ECB243BD349011666B692A43E37B89B90EB999B52AC961D2E5ACF881A7700221E35C260A088FB846C2CB232A207D323E308912FAFA1EF43D780086FD015FD89D46083235133E02F2431D941AA2A155A243D3E6303010D44FB78BB2418939B2E1075C2AD6A31E91CCC06A14D34DE6!
00A1FD08D08298952F3ED8C6139410D0AA0FA48DCA075225BEE06C90C0DD78!
4D37F102
15A53ACF5B69F265977AD10CD6B41614140CD468D0A6E14CAC02102F91EE64DD03A966D626AB79D6932140D88D733462670D869A111533C3CB310F8520F45F8BAE856509E525720DC100530862595D8E8A75429BA7176A589F4E1B22E80CD44AA9DBAF628B06DC140974CB14937FECDE24084B8D81CD16587B2D8615E88506491F751B52B32F64DDB76FD3AD13B57474DFEE66304985022BA829025D7D9D535AE551FA133C9C8EBF01404B9364DA4FE02F05CEA0C82356A0B89232D2277AD1E9DCD46C2047B347D227241A292A49E2F7F15A55CA06D042FAE33BD6756766626121DD730945936D10F4F8DAFA5E8D754241D0EB79CBCACC335B89C45CF4E8963DE4372118573E94ECBC06D1E9507A34D4CCB07D1F5E3DDC23E1405CD127E5334923136ABAD99DD1A0F4EE1FEEDD96CD9D4B37844A714E4165EC9DABBE51F21EB2019D9BE97CD278ECF22916C07714947DE61641AAE407CB6C8C05C46EA48C0C6CDC452337A95943F0E5A48FF941AAEEA5DBAF33B5FDDA47623DCC20DCB54BBC4B9CA9D521AE1E089CEAEEF8E6C4765D6A649D16AB5E7DF4563E9418CBD109E98E4EB28F1BCF137D2C126894279349C80F6A351B71C8CCA55C66AE10EC2C7DCA47FAA53636177DCA6DCA6D56AF9D6073F1E247172F5EB4B129429BDCAB14D000BCAE2E819A67590BCF827D0C411F2D7!
E4F66A67A37265B6901A579ACAC265F130C21DA2C1A28A86542A1F29E6CBC8190F2D7C1EF48942CFCC7CC99AF2D9C39D3DB7BE6CCCB0B17FE0E0FBF705EA151B7281B057234119EB1AD8D38E73D1D085D6936C003E93DE64EC0209146B5C08D0F853E257FA31CDF1D81A1353C26999BA14638EE01192F72CCA5F3F6B5E8D7A64FFFF65B7CBA4E9F7E04DFA7BB7EEB97B842582B9336C211754FEAEA5A1F48BAD573998AE8E379C01C896EAC46491945CAF882C57A6A751F1FEE4AE53D248959DB1B6A0CFC2BA54ADE924A56DCF0AE5DD17FF9592010FC2C98FED5BBEF7E35FD67FCF0B3EB171385B7BBC18EC44B7572DF0706752DEBDC799561164A7CD565FE95F2EEE06381B1255FFDD5F7CCB7FD92AB24867B3CF1B0169B816542656EE6CCD7D85F4FFD3E9AB6425EFBDFF4774CD3BFF8EAF66DB5442F003301C4A1C65EA9A41B390E832BA5F7EE29D56EF794F76875D43E73F195F1A121E50B8694DD310887B070919AA5589F1BF52960C83E255F31DD786954728A201CF9FDC7FCFD48AFFDF8F3B782E95FAC68977437C20A726AA213F4FA6C3556C3250105E2FD9E4489EF4C2AB322ECC60F8C5846F491186757A9A4BB37DC28B9653C7F48F96D42AA53D216BAE552FDC00D813E3733FA2FF41764BF73764FB44CB477FEC7DB4704821F17AED0491FF4322B00C29D9D8D781!
B3E5BA4EC3E4DE93D56EA292EFADCB00EF102EF5537F2300F015C6930D04BC!
506250B4
26615225F44EA03A5DE20D1672B29B0A5CACC998070E46DDA6E5B68E9EEEE9CF87B84C517365A491F392296ACE01971E9C1837BD20712370242A7C215D0A63356768350813F988FF93B0398872979A06EE0369A7A30FBA8D5E6FB6A5998641FCDCEAE3A8A33F64A752504E1DBD7E8CFFCD8ED07FF781710165E6CAD426B491008833C99FE885CE9A657EA25D46150482859B551539650E3C2525DC65307CB053E7F78F1C400329DC5DFC5A06C51EAB3254A40A49B0A0D0E0BDF452C2E9CB9CE3B7A62F4CC85A716CEA45828EF6FADCACE167439911152535DE4115DFA653796B5B62E5B565950596090B21922D351E64D4FEA00C6F759489052B6DCE30344CD14B979F46ABEA113170067B83D10571DD5AA16C20A5FB95B5ACE8CF389F3B6B45C78F9C79FA75F5E21AC397AB44AE01B010C51C73FFCF09709132A57FF71C98D1B4B262C593D61429554C22426D5BC5FE95A2D79A94394AFF4943C57C9A4AF8CFEF1580F31CCDA36A5AC1F8EF8F6DDBFBB9F8AB62CF6B69C87BCF8EAE71F2F6F7824397A74A740BF3321AACEC9E5DC12170B8BAD95B969870AB6EFDEBA2837B78A49C13EDE29E658A7019784DF9B7793F265009DB4394F792EE1EF3336637163914B02B70456F8F62FF6896BE32CD7785B7EE46EEFFE2E5941238119048D2B3D7C23E4728BDCA324DA1BA5BD06A5A4!
46DC9ADD2D9549D80DD41229F5EB549F996750E995AC4960F5540D4EBCC7C700A90824355F48E9DEDE5EF20DBE487A95B29285AFB168B4F48E8E8723C6213C524B100BD9BD8D2B77B6F6F46C3FEAA67CD0DB7BF4A89B5BD0FAAA1A9A1C4BA8FDA4722CE5ED4100F01E491FDFA64889C6988A521BD801BCA022FA2D72B4850D5A7B593BD0A22B59F8EE11400086793ED1DEF427B6EFFEFCE3C20DED2047BDE084C7CAC69567F4D955D93A69F6FA25ABABE63E5A3D61A09FCFAF3EF344800904838145859AA60CF4D70FF7180420A33F1542F6D4644BC0062D640129632682A0812A6F51EA4A2CFF22980E2B789F8223C80AF6B002412082DE1AD1EA0114BD477BA59A435B3E5EDFA2DFE06C135403F58CE4C499954C3428E98FA60D2063CA018A827BCC085809E121532322F8698194D91E8CD842377AC30868FA5A744A5DE665160B0BD77927AE894B9C7939F1EF6FC31113851A7244579A534E4FEB4E7DAB5ED952F0D75F7455139C9D17098384EA5A1AF8533413F3C0049271E1E6666E14912A64F33EF8EB5E1FAF2CC142D2164A46B716E60AC83476EBB91A56F8F9DB77ED2D2DED2DD75CB64F04417E05081BA025B38F0A12E46863A36E551EEA6D3158FC75D13220F8B8B53D48580B298473110B19B2599BC2F656400DA4E4DCA42C3FA9AFA1F8BB87571A8E1A10D02D8806!
3D3584B8789D92A29139427519E1F836BBCFFF236FDAB0FE02BC3073457B77!
3762A135
CCD33356EEB47EA7A6B7A660FDB20DCECECE1BDAB5AA4724C90D12D6FBF2DBEF4A767F8E928D7858E3D84731AA6675445A7354EA8640A50CA6CD0F98D7A0E91DBFDF1B684AA858FBFDDDD91D103EA2BDF8D78E087EBCBCA2BD56A6EC155CEA714A8872921FAA123FB2D962B3DDC6D9F97587B9FD4174A394AC1B10BA41D2FCB8B18FD74D6E6EE6BB026434E167F0B06AB644FACA78019D9D41924DF149031E442C78E108CB4A7BFB8B7497FF3FDE1650466835346BD2B746258475F518760AF51F3B3BAFFBABB37BC1DC16FA9BBF5EB546D6DD0708C26EF3AD52BC2234EB9A3EE90F325E38F551ABA694F4BDEC7AD83D6EEC5E5C6A34D91FE96412410BDEA65B972DD95F7EFCF8338A7579A658AF96082EED4CC809EBF2D51F128BD7D21FC77CECBE5B23CB6CADD1E8F824246FBB99472866253B3EF595F2429F91D103126E7D66C5C70F57FA0CD96406622D5DC9655841307D66E2CC85EE745FE9DB506ED317AE108A41E282433DB6095DF2D6C6D6D645AFFF83FD85CC961B41D935B92A098A045DB4942F06E3C32B37B7F1893ADAB43E7E355635CD0D241F308483353FACFB073B5E262BFCFC7B4B4BF6E7D17FF996007DB1A296B6B20495B4639C7CA9B76AD90971C16AE7D727D8BB4FC82D5A961B04B6A512CD0FD9C78DECE6E6368E41F6EB10BC8F9F27984198C50D939C527!
EB628E3AD7044F0D54C526E7FF916BAEDE71F01819E16D07F8694D0DAD85BD5AB9434D658A0424DB041BD1676F3332225AF665BCC837CBE4D79657D73E926352BE5EFB67C8976FCCFA650C865AC580BBE855A7BFBB5BFBC7DE467FAAF00C80A3AB0AA20223922E1D04E7DAFBE57D9D8A8ACC9CD9DB0E5869B906D3848694F93FECF9B16FA90B2BF8172336FF93C18F7C62B702826FACCAE20D569FEE31C824110BE65FF050182E0936F050CC2C2F7401DB042576504FAC943555586DEC6C6ECECD643AB6F64BB65575555E9599C4B008376BD1B952D04E4FFA7E28A41DC86A1A8D3AD1E3214B469F170940C1D54085E3AB4851B8E1EF5A0E112E892426829189AFACC2D221C24B77AEA208CA078F1A0BDB307F7B62C598C13088136F55EC32D99FABFECA4A98864CB0424BEFF97DE7B92CCD00C645DA62435640F11666BF2237B3361E298D544F7707AEC39CC11DB1CBF89B1CD81C7F4AD3C47779CCD803C5BE3577A9E16677A1C29F563AEE680A4948AA248919AA435645242DB046A242DA15E967549EA3AFD434CDBE581439C08118E73043946AF77DD258C0BFB6D8E69FBF025CF1FB6F0EBDF7F9BDDD8CCB6A250C6A95443AE27131D9EDF9E4FCE237D2B42E5259E548A324FD2BA5093248934D82A54999E32B8ABC2D0C3F060C7D7D13B367F28DA29160C0208FAEBD6240B8!
B3EBE95FEA38FBB999D518BC22C99166A18768578D6E9AC2EF8EA220A83442!
5BEE05C5
C70B110820780A3E036107C31E53F2BEE0751C71F570EF9DF2D0DD26227BB890CB1828E80159EEEF77BCC165CCCFD9BD71F76CB51665B058D8142D8FAAC9A08DC8DCD579D40A5A1AEB42F3A0BEE77DE2D38F7C5220804B41B70A1F938E43E1F737F4C013191F5411B6DFBD090B9936041035DDE3F1E0C5E18720DD7C1E00A8AAB27BF66AE6B772DC0EC1B401DF659186A70011D0D93444D55B774A730BA2118929E9CC2BC0349165887316F0AE09B7A4060CA6601B3592F69FB901D14DBD63DD0512E3FBDC4F419F277C8EF9B5A30CBB2CCB3289E1D8208B4DD54A631855CD091749DCA29111DB14D4D585D6E7A25851E806F823FAE7B318B252154228361260EB38307AE9B46FF217F23D3B26BFBFA0EF5285CB5B8EBB6428BCDA00B9555E1F045B3D10D1DC545B1319F9D424195A23CDBCEB7B19183A5F2A47902B15A4805E6AB60F85D9BF39AF8E7460764ED09B5067FB7E21C737BCBB7CB9B74B7CB32B327DA41D9AD877BF77F577F05180070305F1E2202685D0000000049454E44AE426082');
+
+insert into auctionImage (imageId, auction_id, data) values (3, 71234567, 'FFD8FFE000104A46494600010200006400640000FFEC00114475636B7900010004000000320000FFEE000E41646F62650064C000000001FFDB008400080606060606080606080C0807080C0E0A08080A0E100D0D0E0D0D10110C0E0D0D0E0C110F12131413120F18181A1A181823222222232727272727272727272701090808090A090B09090B0E0B0D0B0E110E0E0E0E11130D0D0E0D0D1318110F0F0F0F1118161714141417161A1A18181A1A212120212127272727272727272727FFC000110800BE00BE03012200021101031101FFC400A300000104030100000000000000000000000003040506020708010101010101010100000000000000000000000102030405100002010302030406060608030509000001020300110412052131064151221361718132140791A1B1425223C1627282B233D1E192A2C2532415F04334D26373A3168393B37484942527081101010002010302060301000000000000000111023121410361045171B1123213E1224223FFDA000C03010002110311003F00DFF4514501451450145145014514501451450145145014964E4E3E1C2F93952AC30C62EF24842A81E926AB5D55D77B374D6248FE7C7979A874FC140EB24CB7E1ADE256D5A54!
F3E55A23ABBAFB76DDF27C134B2A000AB491F96109E6B1C00B2ADBF19249AB225AE8EDB3A8765DE64961DB331326584069635B8650C4852CAC01E36A93AE5BD9FE63F55F4EE3A60EDD938FE55C12A71D1CB13CCC8E815DDBBC9635B4BA6FE6BEEBBCC6D24DB07E445E1972E19FC25D45DAD1326B03B7D1DF4C196D2A2B4E6F5F31333224231672ACBC55216291A7EDBF36ABB7CBCEA36EA2D8964C9CA8B2736076498C6EACC50B1F2DDD5492B71C38F3B52CC12E56DA28A2A28A28A280A28A280A28A280A28A81DF3AD3A57A6C94DEB75C7C597FC82DAA5FF00DD47A9FEAA09EA2B5B657CF2E8483F91265E5FA61C6703FF003BCBA6D1FCFAE8E720362EE280F69810FF000CA68369515AAF73F9EBD3B876183B766E6330B82EAB8E9EABC8DABFBB50C7E7FE41375E9B1A3D39A2FF00FC0A60CB76D15AA76CF9DF8392BE66E5B0E76240085391094C88C16171FE5B721D82A4FA9FE6F74D6D1B3459BB3E447BB67E629387891B5B4DB9BE57DE8957B88D4790EF04CC5ABA93AA764E93C03B8EF792208CDC4310F14B2B817D10C638B1FA876DAB9FFAAFE6C750F567998FB7BB6D1B3B12A208188C8900F09F3E65B117FC2961DE4D54776DDB75EA4DC9F75DEB25B2B2E4E1A8F048D2F711C29C910770F6F1A4042A1FCC43A18FBF6E4D6FC43F4D590B5E431884EA886827995E078!
F7D28C0B1D4D727BCD16717F1281EA3FD358B391F7AFECFEBAA80803D14A62!
6EF91B46
5264EDF2BA6546750086E0FEDA9E16F5D36725C589B03DDC0FD3483B244342003BC7F4D07999919D931159B234A7F94BEE9FDAB5AF5B23FFE7FDD22DBBA9770DBB2E68E21B8632F91A982892589F822DED76D2E7856AD7624DCD25A8A9041208E208E0411C88A2BBA68AE70E95F9F1BC6D18D0606FD88375C78404F8A57D195A7B0BEABA4840F513DA6B7D74EF50ED9D53B441BD6D3217C59C1E0C34BA329B34722F1B329ACAA568A28A028A28A02986F3BCEDDD3FB6CFBB6EB3AE3E263AEA776E64F6220FBCCDC801CE9EC8E91234B23048D0167763600017249F45735754F50E77CCEDFA6876FF30EDB8775DB6153A5145CA1CB9458DE47FBA2DC17877D04AF537CE8DFB7AC56C7E9CC1976AC63A84D98E43CE47604D234C7E9E24D6B04C1CCDC1E6CB5864CC78AD264E490D2E8D6748795ED65D478788D5E13E5D67A2049E7982B5B4C4A596307B2CA0F1AAF4B9F9B89B7E5EC3F10B1E0E166CA9262405109981D1E7D8FF38022DE23E1AD3286304C3DE5361DDFD54629C7F89920CB3E5A18C490C9D9AA3BB37AC9E02D565DBB71DDA1D9E464D8F0B70C04631AEE2F1E96591CDD7CC7F30316E36B30E1DF503B8E124980AF9457E2148D4C82CACEC7DD5F4D0CCF8AEB16FF00D3187852C7BAEDB90B2C7043E764E24D1CFA4C97F0C7165A8D1C54DD751A4F23A97A0F132A4276!
F9C478615668CE263B5CB02BC4F9DC4926FCF81AA218321E026F2B248DADD8BC6EACC2E2E75D9BB7BE99E4E0E74BE74D279ACB29F3257214036B9BDC31E1C682F39BD65B3489E4ED1879AD3411B471CF3C90E3C68641E12F1E323B48539AFE60AA9A46071ED3CCF69F5D4E6DBB2E3626D58D3E540F264650F38330B8D04D97C2A4F136BF2AC644C4BD952207BAC07DB4C2749C4450B0ACB59A732C517646A3D2B71F61A6AEAA395C7D7FD1555E137AF2BC8C79B2794846BEE26DF6D2B247E502A38B7227FA281BC8FA780E7DA69A352D25C70A41AA2927E548B1A55CDE9BB3807BFD028053C6DE822B71FC81EADF81DDF23A572E4B63EE43CEC30790C98C78D47FE2463E95AD316919B87D03D34F7026CEDAF331B73C162995872A4F111CF54643034A3B9A8A8FD8B76C7DFB66C1DE714FE4E74293A8EED42E54FA54F0A90ACA8A28A2835A7CECEA37D9FA5576AC672997BDC871B5036231D46BC83ED164FDEAD25D21BCEEFD2396FBCEDC60B245E4E563E490639632DE65B4DC3020F152BF655E7E770C9CAEB0DBF1E4BFC2C1801E207DDD52CCE246FA23515ADB7CDA63DACE3CA26975E44624D31101403702F70D7AD49D12AD9BBFCEADFB75832B140C0C28E54F2965C68E433C7ABDE7865672755B85C2F0ECE3540974CDE5C30466281486676E0EF637B05E6013CC9E269B43!
2438C2D047A6FCD98DDBF457AD9A40366B5FF0F0FB2825866AE26385202B5D!
999A43C2
E493C1071350B9BBC34AC7CA25DF9099F869FD841C1699E54E5C902FC799A683B4136BD2986C1E82E988FA8F033A7C9CD971E0DB93CFC891046238A366203BB49A99D9F43E9555ECE278D36CEDB1303758B6E973A3976BCA78AF9E9658DA266172EAA5BCB75E2B22DF8536E89EA2CCE9CC962029C69884C98278FCD8A48CFE38CD8929EF211C8F7DEA6F76DCE3DD53142C28B0431B2C6C57F32457919F5CC493A9BC46DE8A764BCAFDB0CF8437D6DEDD91F6ED9A093314232905615F2608D08278B16BD38EA6C0C1DBB33718E2C78A78362DBE7C861240AE24DC379C86F868A4E57F2C38D1DD5A68E1AFC4EA5458E2009F3233A1B570FC2453819BBB61FF00D26EB9318F3239B43B97532424344EC1B9B211E1BF2A0D83D41D010C599B7EDFB7CD0634E71944EAFA990AE247AB3F70CA983111E991B40402E6DD955B9FA177DF8E970B05E1CB54C38B728F29253145263E412B132F9FA74B330B6935190F5DF58E14F14CF9706E0B0AE4C7E565C48E92266B0972525161AD64717373EAA17E65EF4B3CF36E3818F9432F271323256CD1A98B038E3E246233A5215201B01CF99A08EDC3073B66DDE6DBF3BF2B2F124F2A78D595C060037065B83C0D483462DACDE457173A8F107D07B2AB99FBFB6E5B864EE59487CFCC9E4C99AC786A95CB902FD82F615350F53F4EAC0914D899ACE!
A2CD22CB1007F7741B7D34C9837C982C0BC675A8E63932FED0FD351D2BA20BB1B7701CEA465DDBA7B264508B990A936676F2DAC0F3365D37A75B547B3ED9BBEBDC9E0CBDB322190E267B248C8AE002AE513C5AD48D24106C7E9A2ABE46A1AAFC08B803BBD7590C6636E1607881DE0D3BDD25C2CADCF2E6DB11930A595A4C7575D074B73B2EA6B0D5CB8D2A64F2F0F195C6A50192FDA2C6FCFDB40D5200BC7B69655038F60AC93437B8D73DDC8D1243E6A34478123977F6D04EEC5D6BD4FD38AA366DD24871D6E463330960E3C4FE5497517F45AB717447CE9C4DDE78B69EA88936FCE908487312E31E463C02B87E3131ECE247A4569DDC7130BA736DDBA195E2C8CCCFC54CD974D99214909F2E21DEFC3C5DDCAA2B76C59E1C3DBE5C82867CD864CA6547570B1960220D637562035D4F1A83B468AE7FF0096BF3A8624583D37D50ACF1061041BB6AB945274C6B90A45C85F77583CB98EDAE80A8AD17F37B2C3F5A62624A584306DF1B89109568A496697C608BF30801AD7DBBEC53661494CAAC54594B4416EBDFAA1F09FECD5DFE61B09BE6367A37111E2E2C76FDC793FC75599A59F0243F08EAD09E2D8D28D519FD922C50FAAB3B6BBF3E3DB17BCBC57ABDBF9BDBE3F5FBAF17DD27E3BEB99BEBE971F94FA2AEBD2D9321D31BA5FB000DFF669A6E1D3FF00EDCA1F3B2442BD800!
E27D43813560CFDF3708D4B40B163771505DBE97E1F5552775C89F26633644!
AD2CA49D
4EE4B13F4F2A9ACF2FF00ADB1F2917CBB7B297FE3A5DFD6DDA4FAE4CE768359106A651C9A4E67D82B38CF951875FE639B06FC2391B536A908317CD1196242817D2BC58DFD57B0AE91E4DAE6E7127C8F36E8834B6278801549E3E3979B7B16A7A6961F308D6156F65B71B01651F50A8C8E3754F2D621123789BC5A6FE963727B294455001D2835701DFF005D564BB48AFEE191AC09711A8240ECFC74D32F1E4867F2A49D9C0557678665916CEBA829310E045FC4BD87853C8A4C8818B63C8D130209F2C95371C45F49ECA4242D2316909673CD98DCFD26985CA365C6325DA299DADCC17D4413DE08A61262E42936BB05EFE753830FE2658E252AAD23045776D2A093CD9FEE8A4F2B133701D5332162928D71483EFADEDAE36E522DEA60CABA6E0F1E06BCA979E1C778C3960437BA4733E8B73A6498524CF64B2802E7511C07A871FAA98536B8D36B7A6FDB4F30646659316E6CE35C63B9D471B7AD6F4DE481E3731B8B3AF31DE3BC5630C86195251CD1835BD541669A4DBDF6BC248420CB842F9BE55C5D5C36A12A9E4E8C398F794FA293C85276DD43FE54BFC429028AACCA0F82FE027F09E2BF51A76AAD2EDD9F18F7A38D66007721B31FAEAA23E26BFB2A4F19FCD0219399E11BF71EE3E8A6381B66E39302CF0A44C8D7B069F1D1F877C724AAE3E8A95C7D937B747923C279444A!
5E4F24C7332A8E6DA2191DAC3B4DA886992CD2E977E33E3AF971B3712A973C16FCB49351933B9F05F9713C6E4FACD4BEE31B8F87CA0418F263D60AF6904A37D9508CA16503BEE3E9E1453766209B7672F65769FF00BB0FFD09FEF9AB87FB4FC5EAF4FC3F995C5D23799202AA07002DEAE17ADD1B3754EEB9FF00253A976D9A7FCEDA0E2E24130001F84C99624F29BBFC1AD2FDD52871D767FF00D91BC1EE5C503FFB74FE9AADE6CACA64B0F7869B8E24036E3C2AC5D7DE1F98DBCFA5314DFF00FA741FA2AB196DC4F6FA3D35A9C337957B2CBAC0DAAFA59CE807BAC2FF005D56B36E640A05C9E42AD39E8D31080F0ED63D9C6BDC6DA7216D2C51F924F0F3E4035907F086BE91EA5F6D4540E0EC92CBA24C90555B8AC63991DEC4F05152E9008D34C68A80B5B48600D87E2BF1A903B6C03F9BAA43DA599D87D1A94560F8F8518B79641EF52C3EDD74C19346571E631040FBCDEF0F628F7BD66B12C411A8942C3803E295BFA053A5C7C3907872D2092FC17255910FAA784385FDF503D3586562E660BA7C54463F387E4CA4ABC720FF00B9C888B46FEC6340DCD9542B0F2C1E5127163FB46863DB25947DD51C58D0AA782422CE78B16E2DECEFAF06924F9635B1E6E68002DC6D74EDB8FB694F87132D938DB921248F65F95266C0DCF89FBBB2958DDA33AB80B5B52DFEBA08CCB87CA1!
ACC292A837915810FC3D208FAE968FFD4188E38690B831C28A2E7C475140A0!
5EF7EEAB
2614E89219D50491CAA22CA8C2866786E1995351166E1DFC6AAD91E561E53E461078B0DA40C149BC91E9374901E3E2068161B51DD70669B1640F978C430C75167F2AC4B49AB9691DBDDF6D79D75297B5997848BE9FC5EDAB3E6678CC396B32FC0C732F018C9E689A4D5E643F14D248AC4160DF9838F1E56A63B6E141BA66C8999998FB608A0999A69C111C8D1A16487C1F7DED607F4F3553CD8F728F6FF23709618F2156192178A6019091C05C107B34D39DA63F3F731005B266C534010DEC04A8CC9F4102D515B33C1108C6646F2E3E3E5413CD14640778588675427EF32A70AB01CF824DFE3CFC7F063AE4234234B4768C3F01A646765F0F31ABD5C2818E149B03ED7045BB0D590259926F878819E38CE9D2753695621C31009E54B8936C89E0C8DA648B172E3895FCD00C2F1CDA1445E5BF8ACC928D4E6FCAAB9BEC1F07BEE7C086CA991205B1E0416245658A49B5CF77D34173EAA9B6ECE497376950B82372CC4C6B2E90639024A0AAF62B36A603B01AA5CA2CE0F2E3FA6ACA9E3E9A9C73F273A17F6490C89FE1AAE640F6F6D0618D0B4B2CF1C6A59CAF840ED3AD455E3A61E51D11D758A14D9A3DB18FA1C66AA5BEBAA463BBC5933BC6C55BCB7B11CC71156CD932A4C7E97EA6C4D47466E1E3CA47EBC1B863056FA246A0BD7CC65D1F31B713F8F1F11AFF00FB32BFE1AAB4E!
924D3886152F2C86C91F227D7E8EF356FF9AC9E57CC067E425C0C77BFECBCC9FA2A0E29136EC6932FF2D7265505E69BF9704646A50C058B337BC11789EDE1567097932931F6FD8D03E537C4E7B0D41540E17FC01B820FD66E26A1B2773DC72C9F2408D4F644A656F6B9069093738A595A4C388E4BB125B3F33C4CE4F364887814562D919925F5E4372E005940F60A06B90B9F62D2CB94BE9D2C05FE8A6666C9D568B3C920FB93007B7B6AED0B745CF04693646760E5363812CABAA655C90A97741A8DE366D570470FA2A337DDAF6E85227C2DCA3DDA395995D1E3D0F1D8075FCCE1AB9DB5055E3432AC3E7E545C72A10CBC3F362F4FD5D94F307779B1D1D31241262CA41C8C3906B864B7F9B0B70BF730F10EC34DDF1A44623158863CF1E437BF0B781BB787B7D34CCC0B331931AF0E429E31F2E3DDD96B0E77A8AB4418906E71993680C66894BCFB63317994282CD2623F395140B943F98BFAC38D350BE72A287015B8AB8E4D7E5723B6A130F3668E6492366832E160E8C84AB065370C84710473AB5CF9789BC629DCD42C3B9060BB9632AD9272C0FF00AC8828B2BF0FCD5E00FBEBF7851114A6FE1896C396B3CFFAA8E00D97C6E7FE3852D28F390967B18949371EFADF9DFBC522A4B02221A40F79C9FB68178A67C77125AD13358806E14F3B561B9C297F88400C5370917B357!
F5D60045AB410CE18789870B1B731EA34BE1FFA88E4C29BDE3E1F511EE9AA2!
1A1495EF
8719FCC881747B78DA01E3B03FAA45FECA4BCC4D1A23168C8E24F16614F61963C4C869F220F39E28E787CBBD806951A20C7D08C6F51AA34D81E361C6A29CE1DD629C5EE5102DBF6645753FD9661ECAF336738A4C4FC64EC00DC5BB0DEB1C79C45E7B15BFE5116ED2C1B40FE214D2139AA8D343E388717516702FD8CA79502D14F3E44DE64F12C80D831616361E9A934DBE392369B0B8941AA484FBC00E6C3BE9B99124C44CB8134293E5CA8392BDAE3D8D4E766C87833B1F207882BADC7E25274B29F58341258773B06E8BCF4CB8725FF007A44FD355DC91CED56C971D70D3A8F0E2E31C3242A9EA139B7DB554C9E47EAA04A1FFA89BFF0DFEC156CD8E113F4D753E4123FD1E0E322AF6DE7DC31F8FD11D552117C89872FCB7E27D9574E99889E88EB99FB160DB23BFED66AB7E8A0D8DF37B18B75AEDD213A227DB899653EEAA4133B3B1F507F6D6A4DEB749378CDF868EE98501368EFDA78F8BBD8F363ECE42B6BFCFBDDA1C7CBC4C5880F8818EDE73F6F965C388FD45D54D69280F918BADB8BBDC9EF24F3FA4D2702423D523F918EB723DE6EC029C9C350006BC8DDA5AFA7D8A2DF5D3EDBB0BE1B0D4BF19651ADCFAEB0CA2224200F19ED3F656B1D1E6F279AE6EBAF493BA2E6C7C241F99A40FD58D0FF001014D81C243FE9B2DA07EE652A87D762E9FDD15ECB1BCD2E917676F6!
9F6D2F89B54790EE919D663FE6CA6C114FE1D4785EB17A2F8F7DAFF24DA61611672A856FE5E4C67F2C9ECE22FA4FB6D5E4D8C677F2D8E9CB1FC89B979B6FB8FDCDDC695936F748DDB1D9254E22489486E5DA54535C77560312427CB63681CFBC8E3888C9FE13ECA4B97794D2689B257CC50572A3E6391B8E63D0072F5FAE9C6DB9ACACB3A1B32F86551FF1ED14A65066033748F35088B2D7B18FDD73E86EDA62E462E62CC0FE54DC24BF3E3F788E16EFAAA9D94F96CB2456D37BA70F0F2E2BEA20FD158CE9E2598D931E5BB46A87EEF6ADBB08ACF1D5A681E0E6CA4691F4E8FAEEBEDAC1151F1A4D68CF242434416E4056367D407603C6AA305D4EA51088E2E275376D877FA6948E4D3950CFE66B325D5EFEF02A6C357AC5607924B3B6AB70F2BB6CB6B03E822B290388598C3A3CA915F571BAA9F0E93E837A832DFB18459EC40F065C4265F59163FDE5A80B5CDEAE1D4281B0B64CCEFF003616F63238FE23552B69623B891F41A0418E99651FA84FD256B3D95A3F8F09331582447599BB9749607D840A560556C99CB0054461483E9E3FA2B38704487C8490A2486CC02A8245F916BF2A294DADE2381BBAB0F04A22F201EC904A185BF775539C068E0956561758C863E9B710BED3484FE5E1BAE342A1D53BEE45FBFD26BC123CAC0B72EE1C00F50A09CC795E7DB77A9E537925F2!
1D8FA5A6D46ABB93C6E6A7F1386CBB99EF38C3FBEC7F4557F22F7B50248409!
A6D46DE0
603DA456E0D9BA5372C0F92DD49B84B8B27C4EEEF8B3C38E14F99F0B8D3C4DE615E76B6B7FD9E35A7553CCCC48EDC5E554FA580AEE9F2C7C3F956E1A34DBD16B54A398BE74CFF17D6B99149ABCB8FE1E0B2F16D3652DA477F1AA66E3851E267C185148F225E124C89A1AEEBE615B71E5DF571F9D50B63F58EE2E2FE2F879D78DB9AA76F67106AABBD3E9DC31F2480B718F215120942F0F2CAEA1DD6AA2CD3A853A4725F081E81C2A1F3389B9F4FD75313B02DAAFC0F1FA78D4365F6FA2E2BAECF9D223D51CA49E5FF32421030E617B4D4AC9819102E26DF8EDA0C807E61008506DA9ADC89E35E74F498072333173DB479D8EE31A4EC128E201F5D259FB9CD9D8F143190B2C17B30E0483E13CAB8DCFDD3E1DDEEF6F3C7FAF6BB5C6D8FEBF3EF2B0CDC59A193831F28314138035AB0E4D7502FC7DE1DD5079035F97311E5F9C0A49A7EEBAB5B50FD96B1A9C8B2258D089889E420E88549625BBDDADA5477F6D41EE80E3C51E331BBC6A59CF6966E24FD34DF6977B759359DA4E8B259C9EE332E498CCC005CA071B20760727483EC6A8E9E076C7971E41F9B0B30B71F7949BFB787D752BB36D93EEEDB962C32C70BC18EDB806975043E5A8D6BA941D2C59469E1C4F0ACB738C1CE192A2D1E763C1976E36BCD1F8FDDFD74AAD30D85CE49C75BF8A7538E4FEBDBC07FB616A412364DCB!
CB864117C402A9211C144E97048EE17E3509B1BB6317039E364AB8FDD607FC3567DDA358777C7503DD6084778599D07F76912A091748758D448EA46A9BEEA8E2BC2FD87BEBD7F2FC9C8FCE666D0A4920D99AEBE1FDDEF34A4C024932321C650E4261AF3E0DEEB7ECD6190645C79752A0044519516BADC823DA40E35448EF3287D8F678CFBDF1129F669415556605D8F7927EBA95DDB2BF2B060BF08237948F4B1E1FC350909D72017E1CCD45384BA2B13EF4AC5ADE81C07D94F713C0AF90FC028B0F5D618F8AD396773A631EFB9E40770AF32A6125A18B8429C17D27BCD03566323B4879937A5A3E7EBA480B52D18B9A099C736D8F3CF7CB8E2FEAD66ABF3F16F6D4FAF8762C8B1B6BC98B87ECA39AAFCA497EFE200A053688BE237CDBE21FF00332E15FED4AA2BB96B8C3A1B03FDC7ADB61C68EF66CD819CDAF6D0DE6B7D4B5D9F52F2AD0BF3FF00672B9BB7EEEABF97970BE2CAC3B1E33A96FEB57FAAB4F48B1E46CF0C8AB1C52C5FE9E650E5A42070491C1E5E25B57597CC3E9AFF00D55D2D99B744A0E6460646113FE747C42FEF8BAFB6B9331C08F38E1E4C871F1B2C94C8B8008900F0AB92090350E356254FEDF9C3336E8A427F31079720EE65E148E51B8BF7F03E83D950D04B3ECD9D2E2E48B293A651C08BF638B5C71A909661CC1BA9FA08AE92E67AC79B7D31B667151!
D33B236A1C181A45B2622DE65DA197B597883ECA73347E60F05DBD5EF0F67D!
E151B243
25C85B311D80D8FF65AC6B1B1ACB0E9F779954A8C86248B12A2C7E9E3516CF265CEB1AF391801DE4936E359B62CE4710101ED623EC1763F4539860F86000FFAA97C1129E05750E3237E1B0E55CDDF58B1F4A4D0C5BCCB992A66490C3039276E04CAA1CC881DADF734B71F65259C41C5D94837FF0042D1FA4AC7952AA5EDFAB521D23911ECFE76E93413BC12AAC71CF085D3114D2F8ED3860DC18C40F2EDA85CDC8E38A8E6E71B114C9CBDE919F21B9FA6415BECBDCDF6C177CCB0F7A6D23D773FD3564DDF2125DE636D5650E4B37E1024663501B327970C72C9FF003243337A81FEAA70990EF912E4DC068D4952DC46A6E1CBB4F13483D2C59A46562E2573F9ADC657E24DC0ECBDE9B65B20686254D06E65604DFC3C93F4D2DE18D4BCBA82A8F1B8E7CFBFB3D0291DA767DE3AA3735DBB67C67C9CB9FEE2F28E21C2EEE7C28A395CD15179B399646606FE610A96FC0BC07D269FE0E0A431879AEEEDC4A2F1F65EBA3FA13E4D6C7D3719CDDF638B76DDA54D0C2440F8D0A91C5228E40751FD7617EEB558733E57F40E69264D8B1A363F7B1C3407FF002192A6472ACED24A0269288392AF65346465E7CBBEBA6B27E487464B738EF9B8A7B04791AC0F64CB2542657C83C737387BE48BDCB3E3A3FD68D1FD95730C39FE948F9D6E4C8F90FBFA5CE3EE18338EC0EB2C44FD024151727C!
96EB38CD93170E41F89726DFC6829914490E9D8D7F5F289F5E98C7FDAA8DC2DAB3B74CE870B031DF232A636871E21A9D8FABB07793CAB6F6D7F243A972DD23DDF2F1B6EC356D44404E44C6FCF4F0441F4D6DEE96E89E9FE90C7316D18D699C5A7CC94EB9E4FDA73D9E81615326156F963F2B60E8F8C6EDBAE89F7C954A80BC63C656F79233F798FDE6F60E1CF6551454515CF3F3AFE5F360E54BD55B6437DBB31BFF00C94683F933B7FCEF4239E7DCDEBAE86A4F231E0CA824C6C98D658265292C4E032B2B0B1560798341C5EB2E3EED847133DC47B96329F2324803CE516558ADABC44F6F0E14C4FC560C870F363789D403A1C10C011707D208EDAD9BF327E5065EC0F2EEDB046F97B2DCC8D125DA6C4EDF4978C7637676F7D51A1DDA2CD7D1D469F121C24699A01BA2EABB35D4DD48BDF8037E55B959B3B544BCACBE21C47630E55E7FB9B28B31D407E2B1FB6F4E8C788D2C8715D8C3ADBCA2DEF14B9D3A8AF6DAB35C78CF320FA74A93F652F5666B8E0C06E3953DD31A32C7F101603D7D82A4368D967CD96DC6432DC48F7D21C0F118E326DE1FC6FDD4B22C09CD7CC23906F77E8152FB46E93451E746618658A64119C99515840476202ADAF503FCAFBDDBC2F5246927BF4C9B56D2BB1E34EC51F8E69471E5B9215F5268B7874586961753606FC2A86E25CE9CC2BC24CA6D4F!
FA912FF50B54A6E595267E418E2064762491704DC9D44B30E172C6EC7E8E00!
52F8F8F1
6D90B49211264C9C5CF2E5C947728A53835CA2B8C8228C58800003B07203DB58C51E845436B93A98DF8EA3D9ECABCF45FCAFDEFAC265DCB34B6DFB493ABE2DD3F325FF00E5E37ECEE73E1EEBD6F6D83A03A4FA6CACBB66DC9F12B6FF00573DE69AE3B43C97D3FBB6A995C342F4CFCA8EA4EAC923932236DA768E0CF9592A44920E7F910B589F416B0F5D741F4BF49EC9D21B78DBB65C7F295ACD3CEDE2966702DAE57ED3DDD83B054E5151451451405145140514514051451405145140514514056BBEAAF93DD35D42F2666003B46E0FC5A4C7506176EF920E02FE9522B625141CD3BA7C93EADC07271F1A1DCA3EC970E511BDBD31CDA38FA89A853F2F3AA62243ECBBA0B73D312BFD62F5D61455CD4C390DF62CCC47D12EC9B84928FBB930CC17FB11A2DFE9A798FD29D5DBC1448367CC310E11A240608941EC06411AA8AEB0A299A61CF7B57C98EAD9BCB191F09B642FFCD2EE669547EC4434B1FDFAD83D39F283A6F6678F2F742DBCE7A1D424C816841ECD30025787EB5EB61D14EA74780000002C0700057B451514514514051451405145140514514051451405145141FFD9');
+
+insert into auctionImage (imageId, auction_id, data) values (4, 73219532, 'FFD8FFE000104A46494600010201004800480000FFE1122B4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001B0000007201320002000000140000008D8769000400000001000000A4000000D00000004800000001000000480000000141646F62652050686F746F73686F702043532057696E646F777300323030373A30383A32312031343A32373A3533000000000003A001000300000001FFFF0000A0020004000000010000019BA003000400000001000000D30000000000000006010300030000000100060000011A0005000000010000011E011B0005000000010000012601280003000000010002000002010004000000010000012E0202000400000001000010F50000000000000048000000010000004800000001FFD8FFE000104A46494600010201004800480000FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0!
E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A4925A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127!
D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEA!
FDADAEB7
BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A5249249294924924A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DDBAC735ABD1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEF!
A2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438!
977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F5!
07E15C7F
3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B2CF4FF00495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B!
9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB!
4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD14!
3FFD2F2A
486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC234515E465616563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC!
4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAAC!
D5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577!
ABBBA575
3A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24CF1F48EE57F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35D!
FE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9FFED16CA50686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000001E3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D040A00000000000100003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E80000000!
0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D0!
40800000
0000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033D000000060000000000000000000000D30000019B00000004006B00690074007400000001000000000000000000000000000000000000000100000000000000000000019B000000D300000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B00000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E6700000000!
0000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B0000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000013FF00000000000003842494D041100000000000101003842494D0414000000000004000000013842494D040C00000000111100000001000000A000000052000001E0000099C0000010F500180001FFD8FFE000104A46494600010201004800!
480000FFED000C41646F62655F434D0002FFEE000E41646F62650064800000!
0001FFDB
0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A49!
25A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEAFDADAEB7BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A52492492949249!
24A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DD!
BAC735AB
D1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEFA2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9!
D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F507E15C7F3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F!
7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B!
2CF4FF00
495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9!
DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD143FFD2F2A486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3!
713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC2345!
15E46561
6563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC!
2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAACD5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577ABBBA5753A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510!
D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24C!
F1F48EE5
7F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35DFE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9003842494D042100000000005300000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001200410064006F00620065002000500068006F0074006F00730068006F007000200043005300000001003842494D04060000000000070003000000010100FFE11803687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D27EFBBBF272069643D2757354D304D7043656869487A7265537A4E54637A6B633964273F3E0A3C783A786D706D65746120786D6C6E733A783D2761646F62653A6E733A6D6574612F2720783A786D70746B3D27584D5020746F6F6C6B697420332E302D32382C206672616D65776F726B20312E36273E0A3C7264663A52444620786D6C6E733!
A7264663D27687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E73232720786D6C6E733A69583D27687474703A2F2F6E732E61646F62652E636F6D2F69582F312E302F273E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A657869663D27687474703A2F2F6E732E61646F62652E636F6D2F657869662F312E302F273E0A20203C657869663A436F6C6F7253706163653E343239343936373239353C2F657869663A436F6C6F7253706163653E0A20203C657869663A506978656C5844696D656E73696F6E3E3431313C2F657869663A506978656C5844696D656E73696F6E3E0A20203C657869663A506978656C5944696D656E73696F6E3E3231313C2F657869663A506978656C5944696D656E73696F6E3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7064663D27687474703A2F2F6E732E61646F62652E636F6D2F7064662F312E332F2!
73E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A446!
57363726
97074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A70686F746F73686F703D27687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F273E0A20203C70686F746F73686F703A486973746F72793E3C2F70686F746F73686F703A486973746F72793E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A746966663D27687474703A2F2F6E732E61646F62652E636F6D2F746966662F312E302F273E0A20203C746966663A4F7269656E746174696F6E3E313C2F746966663A4F7269656E746174696F6E3E0A20203C746966663A585265736F6C7574696F6E3E37322F313C2F746966663A585265736F6C7574696F6E3E0A20203C746966663A595265736F6C7574696F6E3E37322F313C2F746966663A595265736F6C7574696F6E3E0A20203C746966663A5265736F6C7574696F6E556E69743E323C2F746966663A5265736F6C7574696F6E556E69743E0A203C2F7264663A4465736372697074696F6E3E0A0A!
203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861703D27687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F273E0A20203C7861703A437265617465446174653E323030372D30382D32315431343A32353A32312B31303A30303C2F7861703A437265617465446174653E0A20203C7861703A4D6F64696679446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D6F64696679446174653E0A20203C7861703A4D65746164617461446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D65746164617461446174653E0A20203C7861703A43726561746F72546F6F6C3E41646F62652050686F746F73686F702043532057696E646F77733C2F7861703A43726561746F72546F6F6C3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861704D4D3D27687474703A2F2F6E732E61646F62652E636F6D!
2F7861702F312E302F6D6D2F273E0A20203C7861704D4D3A446F63756D656E!
7449443E
61646F62653A646F6369643A70686F746F73686F703A63393464383463362D346639652D313164632D623434612D6462616432653537656630373C2F7861704D4D3A446F63756D656E7449443E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A64633D27687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F273E0A20203C64633A666F726D61743E696D6167652F6A7065673C2F64633A666F726D61743E0A203C2F7264663A4465736372697074696F6E3E0A0A3C2F7264663A5244463E0A3C2F783A786D706D6574613E0A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
0202020202020202020202020202020200A202020202020202020202020202!
02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020!
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020!
2020200A202020202020202020202020202020202020202020202020202020!
20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202!
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202!
02020202020202020202020202020202020202020202020202020202020202!
02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020!
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202020202020202020202020202020!
20202020202020202020202020202020202020202020202020202020202020!
20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A3C3F787061636B657420656E643D2777273F3EFFEE000E41646F626500640000000001FFDB0084000A07070708070A08080A0F0A080A0F120D0A0A0D1214101012101014110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010B0C0C15131522181822140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110800D3019B03011100021101031101FFDD0004003!
4FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00E338ABB15762AEC55D8ABB15762AEC55D4C55D4C55D4C55D4C55D4C55D8ABA98ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AE!
C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5!
5D8ABB15
762AEC55D8ABB157FFFD0E338ABB15762AEC55D8ABB155F1C324868AA4F6AE0269205B30F2BE8CEBA95BDA49A643737329A96B9E4CAAAC3F6A1FB1FF079599B6703DCB47F26797EDE10F269907AAF42C1A34201F051C7ECE4A365814D3FC37E5EFF00AB5DA7857D08FF00E69C931B483CE16FA069BA7B3AE9F6A25A1A7EE631DBE1FD9E593885B78C5D79B658E7744D3AC99396DFBA02A3232098943BF99ED9EA24D134F2C7AF18A877F1FDAC8D32523ACE90451F43B7DFF90B2E2B4D1BDF2AC8E1A5D1E5407ED08A634FF600E2B4B5FF00C16E4520D4231D36789B7FA571B2B4B1348D0AEE5E169753C658D156745DABFCCC8D920189653FF2A535C96D56E2D2FEDA6E42BC183A1DFA745930134A0245ABFE5B7997498CCB70B0C918EF149CBF80C41B5A48E0D0757B8DA0B492523F9057F564A90D4DA16B5054CDA7DCA05EA4C4F414FF002B8D302A04A95342083E076C55AC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD1E338ABB15762AEC55D8AA77E5BF2DCFACCAF2BB7A1A75B82F7574DB2A81FB20FF3B64652A6518DA75777FA6A294B08C4505B8020000AB536F51DBF99FED653B92DE299E7E50E8725D4B73AF5E3191C90B106DF7A7DBC9016C245EB4065AD2E3B0C!
2AF25FCC49B53B9B8748EDE564A9DC027AF4E83F6572C082F29B9D3EF44ACCD6F28249FB4A47F0DB224241421B79947C51B76EC47CBB60A4DB4508EA30526D6F163B5294F1FA322432B70046F4C56D1760E639C1F7FD472712D65EFDE43D48DDE9F1C25B93014F889EC3BFD1864141641ABE8D6D7D6B22BC6A5F89E2C7AF8F7F87005615E554B2B1D567B5994092324AF2DB6F1FF886495E851A44CA085AAD29423BF7FB59029416A1E59F2F6A8A45FE9D6F715EACD1AF2DBFCB03960430FD6FF25BCA97EA5AC049A74DDBD36E49FF0001272FF89629797F993F2A3CCFA187992317D68A4D2582A5A9FCCD1F518DAD30A646462AE0AB29A3291420E14358ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AFFFD2E338ABB15762AEC551DA369373AB6A3058DB29692660BB7604EEDFEC7232953288B7A84F656D39B4F24E9429046C0DE4A06EEEBFDE3D476E59546C96D3B04179E34ED374C82D74CB48B835033B53E23D157FE1B2F9000358365EC3E53D323D2F40B3B4414E3186623BB37C4DFAF2B80599DD39CB1834FBA91E3D7BE02A8196D165724D46F4DB635EBFF11C2249212F9F4547154501BB0DBC695FB3FF0060F2568A427F86E1706A919A9A54A0A787BE1B0A8697C9FA5B805ECA26A8D8!
95506BF2FA31B5415C7E5DF9725A9364AA294251B8D083F16DFEC7FCFEDE05!
4BEE3F29
FCBEF411ACD19E838BD7E2AB03D7F6A98D252B9FF296D91C7D5AEA443B7DA0A46FB76A74638400825927943CB77FA3DC2FEFD668CD08AA9141F6149E5FCDCB12A033FD99771B1ED90579779E2C8E93AB457D01A2B6FB6D4FC4FECFC39645059B79775AB6D4EC90C720760A050EC41A7BEFFEB64484A76BD37C82B476C055A342B461F4604B01F3BFE58699AF4525DD9C62DB5203E164002B91D9C61052F05D6344D4747BA7B5BE85A37534048D8FCB2484BF143B15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFFD3E338ABB156C2D4D05493D862AE5525801D4ED8A43D0FC8C89A4417377222C7792A18EDE690D046187C4E72B9449671349FF906E34CB4F344AD777D1DCDDDD2B242D1F2216BF130FE5F897964626994907A8BAEB3E72782302482194CB31FF253655DBE15DF2C9498443DBAD5425BC680710140A7D18C58956C28689F6AE02556725A604B9C023E2E9892AE50BD7A9EB5F7E871B55A557B1A0EF4A78636AE31AD3E5523BF6A7BE1E25532869B0ED5EBF8FF00C2E0E24A9B42A6A8CBB375EA7AD77F8B0F12D3422457241DC9A915AD4D001D7ED6DFF35E1E2B452363FB3BFF0098ED8841623F989A7C979A621450CC84915F61BD3271D90F3BF2F6A3716172B1C9511921452B4AF4ED922!
87B3695769716884302E051857BF86FFE4F1C81648E39155A77141F4644A5A00508ED885487CCDE51D2B5E857EB56C92C919AA96A827FC9665F8B0ABE7CF39F95FF00436A92C76E8C90B125617AD50782B1FEF13F970AD318C28762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD4E338ABB154FF0040B7D164B3B86BA9261AA160B671A01E9D29F1F3277E4D842A69059FE879A39AFF0049924B4660E250A4301E2BB7FB2C4A433BD5DFCBFE63D3E19B48BD88DCC518596D1E91CAC07829A2B32E444BA24C5845816B2F3344A89E9BC61B973DA950D534C810CC72657E49B76B391F5865E51DECDC149A1A80DCD8AF2FF2B0016AF625B880202644E951F10FEB9214D641529F54B0881E5750A11B90CEBFD701924040CDE65D11369353B651DFF789FD71E24F0A1AE7CD3E5E28D4D5605F75753BF5EC701290109179E3CB70C7E9CBAB41211B862E2B4F0395D967C2170FCC2F28AD6BA9C3B74A303F778E4ACB1315ABF98DE51A1E5A8463DAB5A636BC2BD3F307CA2C69FA4E214EBC8918D95E1565F3D7945AA3F4B5B8FF00663240B13142EAFE67D2AF2C1EDF49D62DA3BA620095A40283BF1FF2B083BA692AD3E2861A037304EDDDC4C189FF0086CB048312197E9B7D0143575AF5FB61BB7FC0FECFECE02!
57856EA77D66D1947F8D54FC63B74C3128A2C3F504D1B831F4C46CB5A501EF!
5FB59340
50B0F3C436158A2B39AE20068CD0AF24A8FF2BFC9FE5C3CD168A97F3674C818896C6EC28EADC09EE7B655205902D47F9D1E543F6D2E233DEA953FAF2165970A616FF9AFE4C94D0DE18DAA07C68C3AFD1B60E25E14D6D7CF5E53B91FBBD56DEA7F659C29FB9B25C48E12A1E63D1BCBDE6AB0685A685E602B0CF1BAB329EA3EC9C6D68BC1BCD9E4CD4746BC78A58EBD59644DD587D1D0EF920A4314208343B11D46162EC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD5E338ABB1546E9AD24570B2C6A5829A9DABF3D86297D15E59F36796757B086CEE1E249D1557D29E82A69FB3EA64884301FCD5D1BCBF6F22DD694C914E77758C8A57724FC3838536F3CB4BDB857E44866E25096A9241F13D722CB9239FCCBAA2ADBA4337A705B0FDDC2BB26FD792E3C979A7369E62F2D6A748B5A827B476EB756D2311BFED321DB06CBB856BBF22DB5EC267D03584BF04545BCD20590FB76DFF0067ECE3C34A0B17BAF2C6BD6B37A5358CFCAB4AAA16077FF23960B0947C1E4AF3B2209A0D26EC2B0142226DC1E878D315B4CAD3CAFE7A5DA4D05EE17B89E1DFC695F870AA60BE50BD714BCF295CC7E2F6A48FF846AE0428C9E48D22426AD7DA6B5765BCB73407DCA8F8714DA1A7FCBABF281F4FBAB6BD5EA151C2B7FC036349!
B63F7BE5DD66C9CA5CD84D1B0EFC1B8FD0CB5C56D0234FBC6345B795BE48DFD315555D2B53A82B6D38FF0060E3EEDB1B545DB695E656DEDA0BC045775120FC462845187CF16BFF002DEA3D8498ECA86B9BDF35B232CF2DD94E8DCC3D29DD4E112410B74BD77CC1A4BD6CE69156B568981287FD65C3C48E166BA5FE68B10B16B3A52C8BB03340A4377FD93F0E3C416991C50FE5E799A30DC561B83BD194C2F5F6FE6E8B902C91B6FF00953E4E256AB34B53B7EF36DFFD55C484DA716FF95FE49550469E1BDD99ABFAF080C4C9737E58F9441E505BC96EDD8C5232FF005C7851C450D71F96B6AC0882FEE545085591F9A8069E2B9245B09F307E4F5E8E52DB37AE402792ECDDBED0DF0ABCD356D0AF34B99A39D190AF40C38D4614259815D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD6E338AB22D03C95ABEB9A55FEAD6C512CEC01F519CEECE007F4D147F92705ABD4BF293C97A7CBA1AEA9A8DB892595996347150029A72A1FE6C92B21F317E5AE95A842EFA728B3BB00B46C9F08E5D474C41578B79A743D6F48B9306A45DC0DD589AD7B8C2770A18E8620785695C83353663F8F4C0AB4B1FBB0D22D1961A8B5B38E5531D7E250687E60FF003610696ADE95E58F385F69912DD076D47495A7AC0FC53423FCBAF55C06!
36A090F63D2758D3F57B44BAB1996589C576EA3FD65C508EC50EC2AD322B02!
AC0153D4
1DC6054B6E3CB7A1DC37392CA30FD990703FF09C71A4DA0E7F2A45C58DA5DCD0B7EC873EAA0FF60DBF1FF658D2DA413DAF9B34E6669AC2DEFA104D25B7015E9E250E46AD97121A1F37D9C5384BB8DED1C6CCB347C4547F95BFFC364F802389935979974F923E71857DBFDD6411DBF0C7851699C5A969F31550C013D030A63C2AAE6DECE51BC71C83FD556F960A5B526D23496FB5636E7FE7927FCD38D2DBBF43E93FF2C307FC8A4FF9A70505B2B1F43D1A4003D8C040DC7EED47EA18696D5A3D3ECE2004518403600569BFB634B6AE1157A75A52BDE98D212AD535A1A74D1C6ED19E6090AE78B1F97ECE4C0B555B7D7F4D95C46F20864207C321001AF83569829531D987883F48A605631E70F2758EB96329F4C2DDA8255C0DCD3B6D84157CE3AFE817DA25F3DB5DC65373C188D8807122952CE35FEB8134D889E9502BEDDF05AD35C1BA50D7E5850B68475C55D4C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55FFFD7E338AB2AF2879BAEB45B1D4F4E047D52F63E4C09350E9B2F0FF5EBC5B01487AEFE5E7E60E897BA65B6992B0B5B981029E7B2B31279529F671521E86AE8E39230653D0835185093F99BCB765E61D365B3B850242A7D294804AB50F1DFED71DF1055F3D6B5E49D734A9E48A6B4731AC8104C07C2D5FB254E12120B1FBFB55B5!
98C2B2895D7EDF1E80F75FA32292878636964545FB4E4015F12683150CC20FCBFD49F48BBB978D96EED08631D2B543D48382D29069FA85F68B7A258495653C648987C2CB5F895D0F55A6157A3683A890875CF2DB142BBEA1A583D0FED3443A64A9897A9F967CCF69AEDA2C8A42CE3ED2F4A9EF4C084F315762AEC55D8AA1A7D4AC206E135C468DFCA58576C55037B3F96EEA16FAD35BCE846EA4AB350F80FB7855E33E61B5B0B29E4B8D2A76B57EBFBA63C09A0FD9AE4A9095D87E636A76F586FD45D20F84C8A78B506DFEAE478995322B2F37E9B7C01B4D424B2BBEC9292072DBBD7085298CDE69F3669EA65F5CCF101B303CD48192A0C504FF9D3AADAB159A0576A529C40A6020282E3F9EF774A7D49397F36FF00860D9560FCF1D45B6FABA83E3F0D3F563B2AFB7FCF3BA5FEF6D43EFB5475FF0027E1C1B258BF9C3F31EF7CC5441188501A823AA8DF65A7F2E1B5A49AC3CDFACDA0F4DE5FACC03FDD736FB7806EAB91B4B2EF2FFE664F692288266850905AD663CE2249FD96FD9AE485143D4341FCC3D23520B1DD11693B7424D626F949DBFD96242A2BCCDE53D1BCD161C1C27320B453250D6A3F981FE6FDAC0AF9E7CD7E55BDF2D6A06DA7AB46DBC6F4EA3B602120A4D127360A3666341F4E0A656DB1922728E0AB2EC57C0D30B16C4B5DFF000EBE1DB0DA1504D11004918!
3BEFB0AD053BF5C55CD1D9C83E1AA3788A907BF4F8B1553FA9291F0CA3E904!
7EAE58D2
A83C1221A11F76F81565315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD0E338AAE8C8E6BCBA577C551B2C7240C248DFE1FD8950EDD7D8E0A656CAFCA7F98FAD681208CC9EBD9B30E68FBEC3C0F6C569EF3E5EF34693E61B513D84A19E80C911FB4B5EDFE562C6921FCC5D5B4FFD1CFA4ADD88B529C0E0AA03305DF7FF00230713201E2573E46D712CA4D46085AE2CD0D1DC0DC78F25DF0AA47676F34D771C5102652C29E35AE297D55E5E0F2E8D672DCC7C6778544AA69B9038EF82904B11F3CFE59E9FAA412DE69F1FA576AB5F4D07DAA7864916F1AB7B8D5BCA7ABAB85292467E346FB322D7ECFF00B25C79279BD4F4CD7B4F36516B160A12DE57FF004A2868D149FCCC3F97964D872661279EB43B2B6497519BD1A8DDC02CA7A7C4A57E791A4A4F77F9C9E4D8437A52C9311D288547FC36FF00F0B8D2B11D4FF3CEECB95D3AD51129B336E7FE1B1D9522B8FCE6F364A8C8B22206AEEAA0115F0A2E0B4B14BDF336AF7B299A6B862EC6BD70DAA0DB52BF7AD677F8B63434FD582D548DCCCC38B3B30F024E2AB2BBFBE04DB7534C529869FAF6A7A791F579D820FD8624A9FF00626BFEAE4AD8D268DAC68DAB8E3A95BFD5A720FEFE2E95EBBA530DB14BAF7CBD3C4BEADA38BA80F464A134FF00571A54A0A952430208EA0E04B60E0576296B1577EBC508BB4D46!
EACCD61734E9C4F4A61056999797BCFCF6D2AF3964B2714F8E33CA33DBE38C8C24AA6FE6DF317E99453EAC3323A541E038D695F81FAFC5CBF6B2403125E62E642E5A94604D29E3ED4CADB39A6B3CB6FAA5AA30023D4A15E2E2BB48BD981FE7E3F6B25CD8F2497A1AD771914B61A9FE7E18AAE24D295DBA62AD7A8C3BFD18DAB6253DFEFC55CD213D77F9FF006D7157108FDB89F6C5569888E8790F6C50B315762AEC55D8ABB15762AEC55D8ABB15762AFF00FFD1E338AAADB40D712F05EA1598FC9472C52113617E2D27FDEC627B63B490B7423A62A9A5F68F6D25AFE91D1E4F5ED284CD09FEF623DD641FB4BFE5E349B4268FAD6B1A35DACFA5DCBC339F868BB86AFEC943D6B815BD7759BCD4AEFD4BA62D702A6573D4BF7FF81C1492699B7E5FFE62C1A34634DD494C967310198D4F1A9FB584297A0E97F96BA147A936AF1FEF1243EAC201A81507A7DF86D8B0DFCD0F37F98F44F310D374BBC7B4B486142A894DEBBEED4C8D26D0DE53FCE6D5EDAE520D79BEB768EC019800244A9A576A72C559F79CBCA3A579B345FAF5804698A19A0993F6B6AE482393C5B42D565D03549ECAF949B09898AF213E07E1F500FF00270834A45A69797B1C2CDA2EA2DEAE9F2D1EC2E7C14D08E9F3C921865F594B6570F049BD3EC378AF62320943D7B62AD549EB8A1D8A5C37F9E2ADE056FF00!
577C55C7A62968FF0099C50EAD70AABDB5E5CDAB73824287BD3A7DD8DA2934!
1A8699A8
294D462F46E2945B98C6D53FCEB92B08A405EE9B25B51D1965818556543514276AE02136833D7FCFA604B58A1D8ABB15762AA89712A2940E781EAB5DB0DAD384C46DD8F6F95302569735A8EB8AAD249EBDFBE28762AE0698A5DD715762877BE2976055C1C8141EFF008E156CB2B9F8877EA3C3155A508F96285B8ABB15762AEC55D8ABB15762AEC55FFFD2E338AA73E5778535098CB2A435B69951E4FB3C8A5157014849B0A111677B73672FA96EE50F461D88FE5618AA77A29D3A6BE5BC91D22F4B93C90374242FEC7D3894848A790CB34929EAECCDF79AE052B01C52F41D07F347CC3A168D1430AA5D428C54FAE492BE014FF2E049633E6EF33CDE66D5DB5396210B322A18C1A814EE30B148C1C55E9BF951F982748BA5D17527FF0071D72E043231DA273F0FFC8B380A79B21FCD3F20C57103EBDA5A80F4E5322F420FED2F11879A06CF2A8EE1AF2C7EA13926E20A9B527AFF00951E486FB29EF5289D2FA2FA9DD3F0B88FFDE691813FF3C9B0284034091B9477A329A1DBFAE04D3825B8EAC4FCBC31577FA2F5F8BE5B6286AB057EC9A7CF14B7CA0EE877F7C55DCE0EF1FE27156FD4B5A6F19AFB1C50BE686D4A46D6AECEE56B3230A7135E8BFCD8AA17BD3BE156F1571AE2AAB05D4D0D551AA87AA1DD4FFB1C6D0D49E9BD5D071F15FE9812A5850EC55D8AB58AB7DB156B156!
F156B156F15762AEEF8AB8604BB1576142ADBAC2D2A89DCA46DB33015A62956B9B392DC86FEF213BA4ABF648FA30250E1856806D850D1094F87AF8628598ABB15762AEC55D8ABB15762AFFFD3E338AB6868714868E28762AA901FDE0A8AEC462521B8E29659561894B48C68AA3A9381534D4342B8D2D62375C59E4152886A57D9FC1B224B30146D104914F00AB7A82A83FCA5AFF0C54840B432AEFC4D3E59360A7B8C55B048208342370462AF75FCB4F3F586ABA3FE81D6A709751A18D1E46E3EA47D29C9BF6D723C95E77E7CF2F4BA06B6D3414FABC8DEAC0EBBAEE796DF4E4AD3497EB1A77D6AC21F3058AFEE9CF0BB8D3731CA3F68FF0092F8AA512A5C5DACB74685A3A7A8075A7F3D302109850EC55AC55BC55D8A5D8A1B562AC194D08EF8A51AF025D406E20DA54FEF611D69FCC98AA08EDF218AB47143B15762AEC52EC50EC55D8ABB156B156F156B156F15762AEC55BE98A5C715762AD6284559DFCB6A4A802485BEDC2FBA9FA314AEBA8ADA40D7168782F56858EEB5FE5FF271541D714358ABB15762AEC55D8ABB15762AFF00FFD4E338AA32C74E9AEE1BB9E300ADA46259077A1609FC71484253156B1436AC54861B118AB24F295B88C5E6AEEA48B38C88BFE323EDFF000AB912C8285E6B22E0B015657079B11B93D4D321C2D9612F867782649E2A06435A7CBC72682!
CD34AFCC0D0E04105E689134727F7CE054D4FED2A9C935B5AD794B48D5EDDF!
55F2A482
48F7696CBA3AEDFB2AD84845B03961921629229561D4114351812B031520A9A30EE36C559CF963558B5FB06F2D6AF255C293A75C39DD48DDA3A9C0136A5E5CB91A45E5DE95A901E8BD62BB81BA32578F35FF2F15426AFE5DBBD07525953F7BA5DC54C13FECBC4DFB24FF371C52916A7642D67F8378241CE26ED43DBFD8E1625038A1BC55D8ABB1576F8A5D8A15219648241246DC597A1C528DB9B78EEA037B6A2857FDE8847EC9FE75FF25B0252F20F8628A750F4C2B4EE0FD2876EB8AD3B8375A74C55BE0FFCA7EEC556D0E285E20958542123B1A1C064198812BBEAD31FD9391E20D83048F42B859CFF00CA71E30CBF2D3EE77D4E7FE438F1851A69F72E5B0B83FB269F2C1E206434933D177E8DB9077423E783C40CBF2735DFA2EE6952BB78E0F14321A29AF4D16EDC121761B93F2C4E6013F9193869339341B93D863E2865F9092F3A3CAA68C68723E30643B3E47F1FF1D54FD052802AD4E5D3078E127407BFF1FE955B4EF2B6A1A8C770F68BCCDB02CEB5DC81D78E5D1982E065C662527654524106A3623A11F3C9B52C34A6D507155B4C50D62ADE2AD62AEC55D8ABB15762AFFFD5E338AA67A4DCCD6F6BA918DA8B25BFA722F8867518AA5A7156B1570C55398F5492D745FA8C7B199FD4761E1DB0331C9BD0F451A8B34B7330B6B28CD1E6A57AF655C84A54CA31B6417BE4!
8B6974F7BCD02F96F922AFAD6E4709471FB452BF6FF9B0092486112290E54EC41A119606A28BD2F57BFD26E96E6CA568E41D403B30FE565EF92050CC5BF44F9D612D185B3D7D17E24A7C131F15FD9E75C3CD584DED8DC594ED6F708525434653DA9914A823BC6C1D18AB8355606841C509C5C4B2EA9A7FD719B95E5AD04E7BB21FB2E7FD5C4A4320F2DEB0758D125F2B5F4844B532E9D31DC875F8BD1DFF00D5C8948492492CE312D8EA6B298A27F82440032B8F85978B7ECE1494233E803ECC770DFEC94628D94CDC69409A5ABB8FF2A423FE238AECB5EEB4FAFC1674F9C8C71A45AC1756C3A5AA56B5DC938ADAD6BA56624431A8ECA06D856D699F6FB0A2BD36EC702DAD33313BD3DF6C56D19A2FD59B508A3BB99A0B590F195D372478531484D3CD9A55BE9B7AB2E9AE65D3A6158A5AD4D47DA0D8D258F191EB5AEFE38D31B6BD593AF23855C2593F98F86287737229C8D3C31A4DB553D71547DAEA72C68B139AC6BD06D954E16E5E9F3889DD3A8EEF4E6B42776989A03DB314C656EE2192077D9D6B77688C7D652C08D80EB8C816D94E2792C82F2059C3B2D6304EC7C3E9C4C4D2F1C48A6AE2F217999914AA1ED8889A5196202A5D6A503A22C69C4A8F888EF82302C4668858754436DE97015FE6EF87C336BE3C2EDB835730C4F1A81F1F8D09C4E224B13A8815186FD5240E!
00D8F439238CA7F3515F3EA6B3CBEA3F53E0300C6580D5443573AB195154B5!
78EC0D3F
CEB86389AE7AB88E48ED07566B03EADADD05724728DB6A13D59724410E1E49C6480F3469C8253A85B00A929FF488C7ECB9FDB1FE449993136EBE428B1D2724C5AC50D62AEC55D8AAE11B9D8035C534D3295346143E18A1AC55D8ABFFD6E338AB61980201201D88F1C55AC55D8AB856B8AA20A996548D77AD117F56064CC34CD126D5661A4DA49C12DA22F393D0BA8E5C731EDBC8A0A76BA8DBD8CB15F584AF1CB6CE4CB6D27DA634E1B3775CB406B281F37D8C6CD6BAD5B270B7D4939B2765906CEBFECB26181635858AF8669609165898A3A905586C411BE2ACF74EBCD2FCE968BA6EA6CB6BAE46BC6D6E8FD9948E88FD32576AC3F59D12FF0047BD7B4BC8CA3A9F849E8C3B329C8A557CB7232EB16D1F2558E77114A24FB051CF16E58DA808EF35D82E81E66923B13C52064960706BBFDAE4ADF31812F43D37CB7A2F9F34D4D52290457ACA22BE8B6F865514136D9032A6556F33F33F966F3CBB7ED69742BB9F4DE840650763930589092E1438E28762AEC55BA1F9629A750834C569B181535B3D4C359C96175F14120F81BBAB766C369A4A585188AD69DF145358A1D438A5B0AC7A02715A5C2294F4463F20702D2E5B4BA6DC42E4788538555E2B4D4148020929E054E4486C8C88EA89B8B6BE8006688AA91DC7F6E478436F8D2EF4219E4F1E95DB0F08478D2EF5A6E24EA5B1E!
10C4E6977B46663D5B0D20E43DED19D8FED63C28F10B4677FE6C691C656FACE3B9FBF0D2F1977AADD6A71A471968B31DC9C69165BE55EFE3BE34BC4883A8DD1B716ECD58E9420F5A78634B686A2F7E9E38A1C4C7BD01C2AEE49D97F1C0B6D161FCA0615B5CB2B28A2D062B6D7AB27F37DF8A16924F535C55AC55D8ABFFFD7E338ABB15762AEC55B1D715098E8AAD26A71B01C8A55C0F1E3F16573E4D90E6F40F21DCA47E628E365005D16576269F1302331ADC923663FAB7972E74E83509E68CF2B7BAE00914AA9272EE2DDAA92EFAC35EE917B6E187A50159A046FB400FB5C6BFB3973531FC2C1D8AB6A5948652430DC11B10714B294F33C3AC698BA56BBFDEC43FD135003E2423F665FE65C0A527FD03A9BC8CB6D09B80A2A1E2F8811E238E369E156B633DFA1D2EE2BF5A1FEF33C868411FEEA35FE6C28A28DF29F982F7CA7AFACB2AB0881F4AF2DCF74AFC5B7B7ECE448640BD5BCD5A4E9DE76D3126B2915AE0A096D5AA396E3ECB2E423B3221E74BF953E6BAA86B47A10492ABCA94C9DB05927E5D6AB1920DADD965EA040C7F1031B4D282F93A48686E2CEF78F7222236FF6430A16345E51B462B75697DCC7ECB155E9ED8AAC9351F2505022D32E4B52956947DFFB58ADA02E350D11FF00B9D3D90EDBB48715B413CF6BFB36F4F9B138A1BFAE463A5BC74F03538A5B4D415!
2BFE8B0B127A9535FD78A2DC352707E182102BB7C15C696D736B17447D88D7!
E4831A5B
5A357BF1F664E3F251FD31A5B68EADA89EB3B7DC07F0C696D69D4AFC8A7AEF4F634C348586F6F0F59DCFF00B238A6DA4BCB9470E246246E2A491F8E34B69CC10E99ADAF1F512C354A7C3C8F186520789FEEDF0252CD434CBFD3A6F46F21689BB123E123C55BA3614213143B1570C55D8ABBB62AEC52DFB7EBC55DEF8A1AC52E2298A1D8AB58ABB15762ADD2B8AB650D0B5361D7DB155B8ABFFFD0E338ABB15762AEC55D8AA79E5789E4BAB96404BC76EEFB7CC6573E4DB0E69AB5EDCE9620BD836904AAC29D6A32902DB897A5EA5AD797BCC5A1AC8248D1EE47EF626F84F203E22DF77C3913B200796DCE911E9DAEC708902D95C7250F52400C29C4FD397E3958DDAF24698DDCC5E8DC4B175F4DD96BF234CB5A94CF6C5596687A4E9DA9693475513A13CA4A856DCFBE61E5C9289D9CEC38E321BA55A9797EE2D034B19F5211DC751BF719663CE24C726988DC25F697D7B672092D67785C774623F565F4E1D946BEB26F24125F2D6E06EB751FC32023ECB1FE6DF0532BB52D4EFA7BD6479D848EA3889A94765EDEA789C284DFCBDE6CBDD2A38E20D58A36E50BD48642372B5FE56C052FA0FCB3E71D1F5FD3E2B88275498802585C8043F703C7FC9C431213FDB0A164D043327A72A0743D8E2AC1FCD1E49F2ACB2196655499D764EA7E630A6DE1FE62D2ACF4FBE920B76E48A76AEF!
B0DBB625212371434FBB1415B8ABB143B156B156F156B156F156B15762AEC55B04D7DF1566BE58F33DA4F08D23CC708BCB23F0C12B00658C9FE573D5710C89641FF2A7A3D5D5AEF41D423FAA9AF159ABC837F29E01B094241AAFE5379C34F72A2D45D46057D580F25A7DD5C0A90BF94F5F4AF3D3E71C763FBB6A0A7D18152D9ED67B7204D1B464F40C08FD78554A9F462AEA6F8157B46D4069B1EF8554F143B156FAE2968ED8A1AC55B552C683A9E98AA2ACF4DBBBD97D1B689E690F458D4B1FC305B2A66369F97CB650ADDF996FA1D2A0D8984B07B86FF5231809480EF31DFF009363F2AFD4B43B3717124E805ECC07A8EB1D5A4237F8579620959304C9307FFFD1E338ABB15762AEC55C31564DE4AB79A7BDBC8E204B9B57341EC572126C8A69ADBBD97D62DC44AF14B1A08CC8BDE9F13A7F94AD950E6DBCC30CFAC4A360E40F9E5DC21AB888578EF672D1F27E7C18150E7606BEF8294CAD46F64325D48E400C4D485E95C9060543A1C50AF6B7973692092091908F03407E6304A20B642663C93F5F334135A4B15CC656564215977049CC5FCBD4AC39875571A6344E663816D0C55D538AB81C56D36D335BBCB4B736B0CCB123372A95DBDF937DAED81369AA79F7CE81825BEAB3708871501CD29F22710AB87E6279D092B2EAB73E14572A41F98C5692BBAD6B55BB93D4B9D427!
2D5A82ECC7E5F1570A10724734BF1B5CA4B2375AB54FFC3604A91B2B824900!
311D6846
1435F50BBFF7D31F90AF4F962868D9DD8EB0BFFC09EF8AAC30CABB3230F9823155B423B62AD5315762B4EA62AEC55D8ABA98ABA98AB6A581041A11D0E2967BE42F36DCC17F0D8BDCB5B3CADC526AFC0C49D9645F7C0AF6EB2F335BA916FAA3A5B4DFB13310B1BFFB23F0AB7F9388521172798F438D589BC8DB88A90A791FC30A1E37E7CD4752F353AC56BA6451450B12930203B0247DA3B1ED925610DE52D7475B63DFA32FF0391A64A12797756854B4B07003AD48C690ABA6E9171732189A48E343DE460A2B86916BEFFCB72DAC8144B1C808EA86BF88C69508DA484DE49957C4753912590088B0D21AE2654B5B79AEDC900041B75FBB23C41908944DFF009435A8F5192DBF47CEB312088550B50353F6F11253144C5F975AF2A09AFD23D3ADF6265B960A69FEA7DAC36C69111DAF9074750D75732EB176BD6180048ABEEEDD7136952BCFCC2BE585AD744B58748B53B7EE14190FFAD31DF1016D8CC93DE5FDC069A492E2773B3312EC49F9D70A115AF29B7BA4B006A2CE35434E9CD87A927FC3362104A575C287FFD2E338ABB15762AEC55D8AB2FF00CBE24F981E152795C412A285AD49FB54FF0085C849B228FF0039AFA69609C8F2F4C8E27B50FC59586CB61D7D716D32C29140B149182B2C8A4FC67B315CB834C9062B5F9E1404EBCC5A1B696B632D2897902CA056B43FB43!
6C012424B8A1C70A1DED8ABB157018ABB15762AE15C55BE4474DB14B83B78E2B68A8353BB876560C3BABA86C555BF4BB56AD6B0904D4D1698AB6751B17147B155F74760715B515BB8D1C95122A7F287FBB15B4645A94206D75711D3A29F8BF8E2B6B5EFD5BA5D48DFEB01DFDC8C5567E90626866DBC4A7F41884B7F5C1CC51D0AF72CA3DB142A99E061B3C42BE232485093D3626861A76E8B914A994A529E91F9506295EC24E247A70F80206F8AAC5AD29E9C7F11D8D715733DB4647AB02B1F056F1C505AFAE5A2FD8B6FBD8E14350DF243711DC4702F28D83053D2A0F21D302593DD79E2E2FEC120BD025442C52D4034E44539F3FF002460654C69AE7507A942EA95F85456806F80C82F01EE53FF004F3FEFC3DFAB7F9F6C1C63BD3C07B9717BF514E52AFCC9C3C41784A935D5C9146918D7B924E4AD8D2C2EEDB6368A7A87933F2BE7D5B4C86FAF6E648619B75886C695F85B7F1CA0C89E4DC000CEB4EFCA7F2E5A3ABBA199850D5C93EFD0E3C25066986BB71E5FF26E9125F3C61154718615A2B3B6C02AEDFEAE3C081325E3FACFE6F799AFD985994B085BA08C55FF00E46B648414C9865EEA7A85FC865BCB992773D5A462DFAF2CA616A30DB4F3B058919D8F6504E032014449667E58FCB2D57596592E644B4B6A8E4588673FEAA03903907467C0F466D13F2EFC8962D3DE4!
8936A010F02FF00BC90B11F0F0857ECF5C90DD897835E5C35CDDCD70DB995D!
9F7EBF11
AE4D828E2AFFFD3E338ABB15762AEC55D8AA7FE50BD167E62D3EE18FC1EA04623B72FDDFEAC89661927E60431D16290F09ED5DC293BF3590F25CAE3CD99E4F3F78D929C87DA151BD72D6A2168DCEDD70AB20D76D1AD74DB28E572F2B00E4313C96A3EC6F910C8B1FED9260EC55D8AA26C6D24BA94A44A5DC296006FD3C71A4AA5E08185445F57B85FB71F63EEB8AA0B143B15762AE38AAE8FD3E69CEBC2BF153AD3DB0253D934FD16396D26996EA0D3E65AB3B254920FFBACFED7C38195278D63F95CF6AA1750BA49D8EEEC84D3FD8D306E9D9896AB67696D7456CAE3EB56A45526E257FD890DDF24C690721424715E3B6E3AD4F8E142E81A24995A65E718FB495A5702A3EEAE74A59A19ECA034E03D686424A892BBF13E18D26D33B7D7BCB323402FB44555423D4781D94914FE5AE0A4D854F35C5E4A36B0DD79724904933524B592B58E9FEB622D058AD724C5D8A5DBE284E3CBD0E812CF2B6B73BC3022D5163524BB787C39136CC25B77F57FACCBF55AFD5F911172EBC7F679610C4A8D4E143B157034C555E0BB9E260508047B0C043389DD9BA44AD1C4CCA3914566A78F5CD64C9B76B8C0E16D220C76A2F86024B2118AA1D22D661C6715EF41B7E38633218CE00B8795F4EFB621A8F1249DFC7F0CB0E493488455F44F24D8C9AAFD76E9D63D36DFF7B372D9405F8A9960C848!
A6A942215FCC7F9BD7A8FF00A3FCB6AB6D6508E097054176A0A1E21BECAE5F1877B8E4A49A47E6A79BB4EB9469EF5AEADC35658A40AD55AFC40353E1C970A109E79F3ADE79AF50599818ACA0A8B7B73BD3F99DBFCAC2C58DC56B248788049F000938929E1643A6F956E5C09EE63582DC6FEADC3841FF0003F6B2A948F46D8C40E69BAEADE59D1A3E0B39BD94758EDD78A57DE56C87864B33900E481D47F323579A236DA6A2E9D6C76223F89C8FF8CAE32D8E301A4CD8A4B35C5D4A6495DE695CD4B1259893965303BA8B295255B6606847B8C2C5AC55FFD4E338ABB15762AEC55D8AA26D64646575EB1B0714EBB11912CE2F4EF3AE976DAB5AE97AA5B49437F002D535F8D5072A8FF85CAB8A9B00795C808620F6CB83515F6B049717314110AC9230551EE71280C8FCEB14F05D4714CFEA7C2BC18F5A2A852323167262E726C1D8A156D638659552593D356DB9F61F3C5592689E57D4A46BD9616A1B581A68E64DC350576A78D327548B4326ABA76A30341AA4423BAA522BC4DB7EDEA0C814A497307A12B47C83807661D08F1C52A5B628762AD62AD83435F0ED8AA75AB799EF753D2EC74C991560B1148D86EC7B7C55C00322525C2C51D65AACD6904B0055912452143EFC49FDA18A6D038A1D8A5D438AD3A8715710476C50EC55AC55BA62AEC55D8ABB14BB143B156D4F121A9D!
37F6C0905336D7F502080C00200D87400532BF083778C54A3D6B5189832CA6!
A37C4E28
A3C69045A79A754570CEC18775A01913862CFF003124F6CFCF76E9195B8B76E5D82D08F7EB959C05B066096EBFE71BCD521FA9C0A6DECBAB463AB9A53E3A65D085344E76925B69D7F78DC6DA0794FF0092A4E4EC30A25385F28CF0289352B982CD0FECBB866FF805C8992447BD733F946C80A09F5097B9DA28FF00E6AC1522CAC0517F35DCC7198B4EB78AC90FED22867FF836192E063C6945CDEDDDD316B999E527BB31392A0C6C9510093B0C28568E28854CEFC40FD91BB1F60302694BD561F64951ED86916B3143B157FFD5E338ABB15762AEC55D8AAADB3012807A1FD780B289DDEADE416B6D6B42BCD0EE49FACD9D6E2C8ED5A1D9D14FDAFB5FC994486EDCF38D6F49BBD32ECC37402C8DF1D01AECDBE5D16A92BF95F4F375A9A4AC4AC56A0CEEC3C23DFAF6C4958854F37943AA1F4E5F55194480D79539EF4C42C92139262EC50EC5594793BCEF79E5CBCAB28B8B294709E16DFE03D69FF3461B5669E6DF2EF92B58D206B3E5D7586E187236E94AFF00B28FED2E1A5793CF118A568DBAA9A6452A74C50D9523AEDE18AB54C55D8ABB15753156D4027734C5211296F11A55ABE343B64496C1108FB7B0B46721892A07507FAE532996D100A9243A6C47E1899C8EF5DBC3E788322990885159E00DFDC7C3B6C0F6193DDAF65513695237EF2C9D8FB3D31DD765295AC03D62B26!
E3E0CE4E116834B3D4829F0D8AFD2C7C30B15394827E1B644E9DC9C2B487757353C500F6FD585042811BE2C5C17DC0C2ADF05AFDA0305A69516288F59540EFD71B5A718E21FEEC18AD0770B7FF7E7E18AD06B8DB8FDA24E2BB2C6E1FB35A7BE14394A721CC7C35DFE58AA7C9AD6876683EA5A5ACB2D07EF2E9B9FC43FC85A6468B2B086BAF34EB33A98D66F4223B7A700E0B4FA3E2C78429914A9E492462D231763D598D4FDE70B1B5B850EA62AD8A77FC314BB9B0FB3B62B6B6A49A9C50EC55D8ABB157FFFD6E338ABB15762AEC55D8AB8120D47518AB23D0B55BBD3EF20BEB37E13A1DB7D88FDA8DBFC96CAA41BE2F47D5ECFCB7E69812EE778ECEE9C0F55643C0EDD7D27FDA1918C96410D369DA2683E5FB916F203EAA15129DFD43523E03FC8B88B43C9266E4E77A81D32D0C0A99DBAE162D6143B156B154CF47D5A6B096AADF07F29E87DB0DAA6973A75BEB3135DD8B05B9AFEF2DCEC6B848B5482E6DA6B63C268D91C13D452B91A4DBA5BB9258D2370BC5294A000EC3155F15F7A69C1A08A4F765A9DB15B735EA9047D5A200F829FEB8AA9099791631A9AF6ED8AAA9BA848A7D5D3E78A149A588D3F7607CABFD714B5EA2F65FA2B82936DFD61C1D89FBF070A788AE178FF00CA3E9AFF005C7853C6C9346F26F9BB59884D61A7892261C96462A8B43FE5332E1A4712327FC!
B7F3F5B935D2B9D3FDF6CAFB7FB16F8B1A419316BFB7D474FB936F7D0BDBDC!
2F589C50
EFED8D2F121FEB53766FC31A5E2537919CF226A70A2D6E286B156F15762AEC55AC55BC55D8AB58ABB156F156B155C013D074C52D1C50D571575715762AEC55D8ABB15762AFF00FFD7E338ABB15762AEC55D8ABB15445B5CB42C37A0AD41F039122D9C64F52F23DF585EC4DF5D457E042AC6C030A52B5CAAA8B61DD22F3FEB9697F24696EFCBEA8CF1040388E2771B6594C6D8281BE49834D8A16E143B157571575715558AE2589C346E558742A68714BD83C8571E5DF38E93268FADA45FA4A304432100391DA443B726FF00271560DE73F245D795AF95276F52C6727EAF70BEC7A32F50D82D698ABAAAB9556E401D9BC70A1512DA7701952A0F43518A57FE8FBCA06F4CD0F7A8FEB8A2945E378CD1C50E295CB04CC01552478F6C556FA5252BC4D315A68AB034228475C569DC1A95A6D8AD322D13CF1E6AD182476178E2251C4444065A0FF5B15A64C3F397CF063E2120E5FEFCF4C7EAC28A619AEEADAC6BF7C6FF005221EE080B50028A0F618094D2586271B152305AD2D2AC3A8A62B4DFA521FD93F71C2B4D1561D4118AB5435C50EA1C55D438ABB89C569D4F1C55D8AB58AB862ADE2AEA818AB8B1229DB156B15762AEC55D8ABB15762AEC55D8ABFFD0E338ABB15762AEC55D8ABB15762A8AB4D46EAD2A2191901F024603164254A6CED212E4D4B1FC714F35BD01ED5FD58A16!
13858B58ABB15762AEC55D8AAF8279ADE559A0731CA86A8EA684118AA79ADF9DBCC3AE59C567A8DC0960880A0E0B5247ED33D397FC0E29B483143AA7156C3B0E848F962AE2C49A9249C55B0EE0503103D8E2AD726EB535C55AE47156F9B789C56DBF524FE63F7E29B6FD697F9CFDE7143425907476FBCE2AEF564FE6351B83538A6DC6473D589FA715B6FD697F9CFDE7145AD2EEDD589F99C55AE4715754E2AEA9C55D5C55D5C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD1E338ABB15762AEC55D8ABB15762AE18AAE1F4FD1D31641AFBF14358A1D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD9');
+
+update auction set image_id = 1 where auctionId = 19264723;
+update auction set image_id = 2 where auctionId = 62748261;
+update auction set image_id = 3 where auctionId = 71234567;
+update auction set image_id = 4 where auctionId = 73219532;
+
+insert into feedback (feedbackId, for_account_id, from_account_id, feedbackDate, item_id, rating, comment, response) values (1, 1, 2, CURRENT_TIMESTAMP, 19264723, 0, 'Pleasure to deal with', 'Thanks!');
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<datasources>
- <local-tx-datasource>
- <jndi-name>restbayDatasource</jndi-name>
- <connection-url>jdbc:hsqldb:.</connection-url>
- <driver-class>org.hsqldb.jdbcDriver</driver-class>
- <user-name>sa</user-name>
- <password></password>
- </local-tx-datasource>
-</datasources>
-
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/jboss-rest-bay-ds.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<datasources>
+ <local-tx-datasource>
+ <jndi-name>restbayDatasource</jndi-name>
+ <connection-url>jdbc:hsqldb:.</connection-url>
+ <driver-class>org.hsqldb.jdbcDriver</driver-class>
+ <user-name>sa</user-name>
+ <password></password>
+ </local-tx-datasource>
+</datasources>
+
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
-
- <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
- <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
- <param name="Target" value="System.out"/>
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%-5p [%c{6}] %m%n"/>
- </layout>
- </appender>
-
- <!-- ############### Embedded JBoss AS ################# -->
- <category name="org.jboss">
- <priority value="ERROR"/>
- </category>
- <category name="com.arjuna">
- <priority value="ERROR"/>
- </category>
-
- <!-- EMB-6, JMS activation throws an error due to deployment ordering, but as there is a timeout
- and retry the tests pass. Hide the error message -->
- <category name="jboss.resource.adapter.jms.inflow.JmsActivation">
- <priority value="ERROR"/>
- </category>
-
- <!-- ############### Hibernate logging ################# -->
-
- <category name="org.hibernate">
- <priority value="ERROR"/>
- </category>
-
- <!--
- <category name="org.hibernate.SQL">
- <priority value="TRACE"/>
- </category>
- <category name="org.hibernate.type">
- <priority value="TRACE"/>
- </category>
- <category name="org.hibernate.loader">
- <priority value="TRACE"/>
- </category>
- <category name="org.hibernate.cache">
- <priority value="TRACE"/>
- </category>
- -->
-
- <!-- Ajax4jsf is too noisy -->
- <category name="org.ajax4jsf.cache">
- <priority value="WARN"/>
- </category>
-
-
- <!-- ############### Seam logging ################### -->
- <category name="org.jboss.seam">
- <priority value="ERROR"/>
- </category>
-
- <category name="org.jboss.seam.resteasy">
- <priority value="WARN"/>
- </category>
-
- <!-- Seam logs exceptions as WARN and re-throws them, switch to ERROR level -->
- <category name="org.jboss.seam.web.ExceptionFilter">
- <priority value="ERROR"/>
- </category>
-
- <!-- These things are too noisy
- <category name="org.jboss.seam.jsf.SeamVariableResolver">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.contexts.Contexts">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.Component">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.deployment.Scanner">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.util.Naming">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.debug.hot">
- <priority value="INFO"/>
- </category>
- <category name="org.jboss.seam.core.Events">
- <priority value="INFO"/>
- </category>
- -->
-
- <!-- Debugging conversations and persistence contexts
- <category name="org.jboss.seam.core.Manager">
- <priority value="DEBUG"/>
- </category>
- <category name="org.jboss.seam.core.ManagedPersistenceContext">
- <priority value="DEBUG"/>
- </category>
- <category name="org.jboss.seam.jsf.AbstractSeamPhaseListener">
- <priority value="DEBUG"/>
- </category>
- <category name="org.jboss.seam.interceptors.ConversationInterceptor">
- <priority value="DEBUG"/>
- </category>
- <category name="org.jboss.seam.contexts.Lifecycle">
- <priority value="DEBUG"/>
- </category>
- <category name="org.hibernate.impl.SessionImpl">
- <priority value="DEBUG"/>
- </category>
- <category name="org.hibernate.event.def.AbstractFlushingEventListener">
- <priority value="DEBUG"/>
- </category>
- -->
-
- <root>
- <priority value="INFO"/>
- <appender-ref ref="CONSOLE"/>
- </root>
-
-</log4j:configuration>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/resources/log4j.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ <param name="Target" value="System.out"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%-5p [%c{6}] %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- ############### Embedded JBoss AS ################# -->
+ <category name="org.jboss">
+ <priority value="ERROR"/>
+ </category>
+ <category name="com.arjuna">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- EMB-6, JMS activation throws an error due to deployment ordering, but as there is a timeout
+ and retry the tests pass. Hide the error message -->
+ <category name="jboss.resource.adapter.jms.inflow.JmsActivation">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- ############### Hibernate logging ################# -->
+
+ <category name="org.hibernate">
+ <priority value="ERROR"/>
+ </category>
+
+ <!--
+ <category name="org.hibernate.SQL">
+ <priority value="TRACE"/>
+ </category>
+ <category name="org.hibernate.type">
+ <priority value="TRACE"/>
+ </category>
+ <category name="org.hibernate.loader">
+ <priority value="TRACE"/>
+ </category>
+ <category name="org.hibernate.cache">
+ <priority value="TRACE"/>
+ </category>
+ -->
+
+ <!-- Ajax4jsf is too noisy -->
+ <category name="org.ajax4jsf.cache">
+ <priority value="WARN"/>
+ </category>
+
+
+ <!-- ############### Seam logging ################### -->
+ <category name="org.jboss.seam">
+ <priority value="ERROR"/>
+ </category>
+
+ <category name="org.jboss.seam.resteasy">
+ <priority value="WARN"/>
+ </category>
+
+ <!-- Seam logs exceptions as WARN and re-throws them, switch to ERROR level -->
+ <category name="org.jboss.seam.web.ExceptionFilter">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- These things are too noisy
+ <category name="org.jboss.seam.jsf.SeamVariableResolver">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.contexts.Contexts">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.Component">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.deployment.Scanner">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.util.Naming">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.debug.hot">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.jboss.seam.core.Events">
+ <priority value="INFO"/>
+ </category>
+ -->
+
+ <!-- Debugging conversations and persistence contexts
+ <category name="org.jboss.seam.core.Manager">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.jboss.seam.core.ManagedPersistenceContext">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.jboss.seam.jsf.AbstractSeamPhaseListener">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.jboss.seam.interceptors.ConversationInterceptor">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.jboss.seam.contexts.Lifecycle">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.hibernate.impl.SessionImpl">
+ <priority value="DEBUG"/>
+ </category>
+ <category name="org.hibernate.event.def.AbstractFlushingEventListener">
+ <priority value="DEBUG"/>
+ </category>
+ -->
+
+ <root>
+ <priority value="INFO"/>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/seam.properties
===================================================================
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/resources/seam.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/resources/seam.properties)
===================================================================
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example)
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,80 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import org.jboss.seam.Component;
-import static org.jboss.seam.ScopeType.APPLICATION;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.Startup;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-
-import javax.naming.InitialContext;
-import javax.persistence.EntityManager;
-import javax.transaction.SystemException;
-import javax.transaction.UserTransaction;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Nasty nasty hack because hsqldb doesn't support date arithmetic and we actually
- * want to deploy with usable test data.
- *
- * @author shane
- *
- */
- at Startup
- at Name("aargh")
- at Scope(APPLICATION)
- at BypassInterceptors
-public class Aargh
-{
-
- @Create
- public void create()
- {
- UserTransaction t = null;
- try
- {
- InitialContext ctx = new InitialContext();
-
- t = (UserTransaction) ctx.lookup("UserTransaction");
- t.begin();
-
- EntityManager em = (EntityManager) Component.getInstance("entityManager", true);
-
- List<Auction> auctions = em.createQuery("select a from Auction a").getResultList();
-
- Calendar cal = new GregorianCalendar();
-
- Random r = new Random(System.currentTimeMillis());
-
- for (Auction auction : auctions)
- {
- cal.setTime(auction.getEndDate());
- cal.add(Calendar.DATE, r.nextInt(7));
- cal.add(Calendar.MINUTE, 30 + r.nextInt(1410));
- auction.setEndDate(cal.getTime());
- auction.setStatus(Auction.STATUS_COMPLETED);
- em.merge(auction);
-
- AuctionEndAction auctionEnd = (AuctionEndAction) Component.getInstance(AuctionEndAction.class, true);
- auctionEnd.endAuction(auction.getAuctionId(), auction.getEndDate());
- }
-
- t.commit();
- }
- catch (Exception e)
- {
- try
- {
- if (t != null)
- t.rollback();
- }
- catch (SystemException e1) {}
-
- throw new RuntimeException("Error starting transaction", e);
- }
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Aargh.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,80 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.Component;
+import static org.jboss.seam.ScopeType.APPLICATION;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Nasty nasty hack because hsqldb doesn't support date arithmetic and we actually
+ * want to deploy with usable test data.
+ *
+ * @author shane
+ *
+ */
+ at Startup
+ at Name("aargh")
+ at Scope(APPLICATION)
+ at BypassInterceptors
+public class Aargh
+{
+
+ @Create
+ public void create()
+ {
+ UserTransaction t = null;
+ try
+ {
+ InitialContext ctx = new InitialContext();
+
+ t = (UserTransaction) ctx.lookup("UserTransaction");
+ t.begin();
+
+ EntityManager em = (EntityManager) Component.getInstance("entityManager", true);
+
+ List<Auction> auctions = em.createQuery("select a from Auction a").getResultList();
+
+ Calendar cal = new GregorianCalendar();
+
+ Random r = new Random(System.currentTimeMillis());
+
+ for (Auction auction : auctions)
+ {
+ cal.setTime(auction.getEndDate());
+ cal.add(Calendar.DATE, r.nextInt(7));
+ cal.add(Calendar.MINUTE, 30 + r.nextInt(1410));
+ auction.setEndDate(cal.getTime());
+ auction.setStatus(Auction.STATUS_COMPLETED);
+ em.merge(auction);
+
+ AuctionEndAction auctionEnd = (AuctionEndAction) Component.getInstance(AuctionEndAction.class, true);
+ auctionEnd.endAuction(auction.getAuctionId(), auction.getEndDate());
+ }
+
+ t.commit();
+ }
+ catch (Exception e)
+ {
+ try
+ {
+ if (t != null)
+ t.rollback();
+ }
+ catch (SystemException e1) {}
+
+ throw new RuntimeException("Error starting transaction", e);
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,109 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.validator.Length;
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Pattern;
-
- at Entity
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
-public class Account implements Serializable
-{
- private static final long serialVersionUID = 8444287111124328025L;
-
- private Integer accountId;
- private String name;
- private int feedbackScore;
- private float feedbackPercent;
- private Date memberSince;
- private String location;
-
- @Id @GeneratedValue
- public Integer getAccountId()
- {
- return accountId;
- }
-
- public void setAccountId(Integer accountId)
- {
- this.accountId = accountId;
- }
-
- @NotNull
- @Length(min = 3, max = 40)
- @Pattern(regex="[a-zA-Z]?[a-zA-Z0-9]+",
- message="Account name must start with a letter, and only contain letters or numbers")
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public int getFeedbackScore()
- {
- return feedbackScore;
- }
-
- public void setFeedbackScore(int score)
- {
- this.feedbackScore = score;
- }
-
- public float getFeedbackPercent()
- {
- return feedbackPercent;
- }
-
- public void setFeedbackPercent(float percent)
- {
- this.feedbackPercent = percent;
- }
-
- public Date getMemberSince()
- {
- return memberSince;
- }
-
- public void setMemberSince(Date memberSince)
- {
- this.memberSince = memberSince;
- }
-
- public String getLocation()
- {
- return location;
- }
-
- public void setLocation(String location)
- {
- this.location = location;
- }
-
- @Override
- public boolean equals(Object value)
- {
- if (!(value instanceof Account)) return false;
-
- Account other = (Account) value;
-
- return other.accountId != null && other.accountId.equals(this.accountId);
- }
-
- @Override
- public int hashCode()
- {
- return accountId != null ? accountId.intValue() : super.hashCode();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Account.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,109 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+
+ at Entity
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
+public class Account implements Serializable
+{
+ private static final long serialVersionUID = 8444287111124328025L;
+
+ private Integer accountId;
+ private String name;
+ private int feedbackScore;
+ private float feedbackPercent;
+ private Date memberSince;
+ private String location;
+
+ @Id @GeneratedValue
+ public Integer getAccountId()
+ {
+ return accountId;
+ }
+
+ public void setAccountId(Integer accountId)
+ {
+ this.accountId = accountId;
+ }
+
+ @NotNull
+ @Length(min = 3, max = 40)
+ @Pattern(regex="[a-zA-Z]?[a-zA-Z0-9]+",
+ message="Account name must start with a letter, and only contain letters or numbers")
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public int getFeedbackScore()
+ {
+ return feedbackScore;
+ }
+
+ public void setFeedbackScore(int score)
+ {
+ this.feedbackScore = score;
+ }
+
+ public float getFeedbackPercent()
+ {
+ return feedbackPercent;
+ }
+
+ public void setFeedbackPercent(float percent)
+ {
+ this.feedbackPercent = percent;
+ }
+
+ public Date getMemberSince()
+ {
+ return memberSince;
+ }
+
+ public void setMemberSince(Date memberSince)
+ {
+ this.memberSince = memberSince;
+ }
+
+ public String getLocation()
+ {
+ return location;
+ }
+
+ public void setLocation(String location)
+ {
+ this.location = location;
+ }
+
+ @Override
+ public boolean equals(Object value)
+ {
+ if (!(value instanceof Account)) return false;
+
+ Account other = (Account) value;
+
+ return other.accountId != null && other.accountId.equals(this.accountId);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return accountId != null ? accountId.intValue() : super.hashCode();
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,292 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToOne;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-
-import org.hibernate.validator.NotNull;
-
- at Entity
-public class Auction implements Serializable
-{
- public static final int STATUS_UNLISTED = 0;
- public static final int STATUS_LIVE = 1;
- public static final int STATUS_COMPLETED = 2;
-
- private static final long serialVersionUID = -8349473227099432431L;
-
- private Integer auctionId;
- private Account account;
- private Category category;
- private String title;
- private String description;
- private Date endDate;
- private AuctionImage image;
- private Bid highBid;
- private int bids;
- private double startingPrice;
-
- private int status;
- private int version;
-
- @Id @GeneratedValue
- public Integer getAuctionId()
- {
- return auctionId;
- }
-
- public void setAuctionId(Integer auctionId)
- {
- this.auctionId = auctionId;
- }
-
- @NotNull
- @ManyToOne
- @JoinColumn(name = "ACCOUNT_ID")
- public Account getAccount()
- {
- return account;
- }
-
- public void setAccount(Account account)
- {
- this.account = account;
- }
-
- @NotNull
- @ManyToOne
- @JoinColumn(name = "CATEGORY_ID")
- public Category getCategory()
- {
- return category;
- }
-
- public void setCategory(Category category)
- {
- this.category = category;
- }
-
- @NotNull
- public String getTitle()
- {
- return title;
- }
-
- public void setTitle(String title)
- {
- this.title = title;
- }
-
- @NotNull
- public String getDescription()
- {
- return description;
- }
-
- public void setDescription(String description)
- {
- this.description = description;
- }
-
- @NotNull
- public Date getEndDate()
- {
- return endDate;
- }
-
- public void setEndDate(Date endDate)
- {
- this.endDate = endDate;
- }
-
- @OneToOne
- @JoinColumn(name = "IMAGE_ID")
- public AuctionImage getImage()
- {
- return image;
- }
-
- public void setImage(AuctionImage image)
- {
- this.image = image;
- }
-
- @OneToOne
- public Bid getHighBid()
- {
- return highBid;
- }
-
- public void setHighBid(Bid highBid)
- {
- this.highBid = highBid;
- }
-
- public int getBids()
- {
- return bids;
- }
-
- public void setBids(int bids)
- {
- this.bids = bids;
- }
-
- @Transient
- public long getTimeLeft()
- {
- return endDate != null ? (endDate.getTime() - System.currentTimeMillis()) : 0;
- }
-
- @Transient
- public String getPrettyTimeLeft()
- {
- long timeLeft = getTimeLeft() / 1000;
-
- int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
-
- timeLeft -= days * 24 * 60 * 60;
- int hours = (int) Math.floor(timeLeft / (60 * 60));
-
- timeLeft -= hours * 60 * 60;
- int minutes = (int) Math.floor(timeLeft / 60);
-
- StringBuilder sb = new StringBuilder();
-
- if (days > 0)
- sb.append(String.format("%dd ", days));
-
- if (hours > 0)
- sb.append(String.format("%dh ", hours));
-
- if (minutes > 0)
- sb.append(String.format("%dm ", minutes));
-
- return sb.toString();
- }
-
- @Transient
- public String getDaysHoursLeft()
- {
- long timeLeft = getTimeLeft() / 1000;
-
- int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
-
- timeLeft -= days * 24 * 60 * 60;
- int hours = (int) Math.floor(timeLeft / (60 * 60));
-
- StringBuilder sb = new StringBuilder();
-
- if (days > 0)
- sb.append(String.format("%d days ", days));
-
- if (hours > 0)
- sb.append(String.format("%d hour", hours));
-
- if (hours > 1)
- sb.append('s');
-
- return sb.toString();
- }
-
- public double getStartingPrice()
- {
- return startingPrice;
- }
-
- public void setStartingPrice(double startingPrice)
- {
- this.startingPrice = startingPrice;
- }
-
- public int getStatus()
- {
- return status;
- }
-
- public void setStatus(int status)
- {
- this.status = status;
- }
-
- @Version
- public int getVersion()
- {
- return version;
- }
-
- public void setVersion(int version)
- {
- this.version = version;
- }
-
- @Transient
- public double getCurrentPrice()
- {
- return highBid != null ? highBid.getActualAmount() : getStartingPrice();
- }
-
- @Transient
- public double getRequiredBid()
- {
- return highBid != null ? getRequiredBid(highBid.getActualAmount()) :
- getStartingPrice();
- }
-
- /**
- * Returns the amount required to outbid the specified bid amount.
- *
- * @param amount The current bid amount
- * @return The bid amount required to outbid the current bid
- */
- @Transient
- static double getRequiredBid(double amount)
- {
- if (amount < 100)
- {
- return Math.ceil(amount) + 1;
- }
- else if (amount < 200)
- {
- return Math.ceil(amount) + 2;
- }
- else if (amount < 500)
- {
- return Math.ceil(amount) + 5;
- }
- else if (amount < 1000)
- {
- return Math.ceil(amount) + 10;
- }
- else if (amount < 5000)
- {
- return Math.ceil(amount) + 20;
- }
- else if (amount < 20000)
- {
- return Math.ceil(amount) + 50;
- }
- else if (amount < 50000)
- {
- return Math.ceil(amount) + 100;
- }
- else if (amount < 100000)
- {
- return Math.ceil(amount) + 200;
- }
- else if (amount < 500000)
- {
- return Math.ceil(amount) + 500;
- }
-
- return Math.ceil(amount) + 1000;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Auction.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,292 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.hibernate.validator.NotNull;
+
+ at Entity
+public class Auction implements Serializable
+{
+ public static final int STATUS_UNLISTED = 0;
+ public static final int STATUS_LIVE = 1;
+ public static final int STATUS_COMPLETED = 2;
+
+ private static final long serialVersionUID = -8349473227099432431L;
+
+ private Integer auctionId;
+ private Account account;
+ private Category category;
+ private String title;
+ private String description;
+ private Date endDate;
+ private AuctionImage image;
+ private Bid highBid;
+ private int bids;
+ private double startingPrice;
+
+ private int status;
+ private int version;
+
+ @Id @GeneratedValue
+ public Integer getAuctionId()
+ {
+ return auctionId;
+ }
+
+ public void setAuctionId(Integer auctionId)
+ {
+ this.auctionId = auctionId;
+ }
+
+ @NotNull
+ @ManyToOne
+ @JoinColumn(name = "ACCOUNT_ID")
+ public Account getAccount()
+ {
+ return account;
+ }
+
+ public void setAccount(Account account)
+ {
+ this.account = account;
+ }
+
+ @NotNull
+ @ManyToOne
+ @JoinColumn(name = "CATEGORY_ID")
+ public Category getCategory()
+ {
+ return category;
+ }
+
+ public void setCategory(Category category)
+ {
+ this.category = category;
+ }
+
+ @NotNull
+ public String getTitle()
+ {
+ return title;
+ }
+
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ @NotNull
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public void setDescription(String description)
+ {
+ this.description = description;
+ }
+
+ @NotNull
+ public Date getEndDate()
+ {
+ return endDate;
+ }
+
+ public void setEndDate(Date endDate)
+ {
+ this.endDate = endDate;
+ }
+
+ @OneToOne
+ @JoinColumn(name = "IMAGE_ID")
+ public AuctionImage getImage()
+ {
+ return image;
+ }
+
+ public void setImage(AuctionImage image)
+ {
+ this.image = image;
+ }
+
+ @OneToOne
+ public Bid getHighBid()
+ {
+ return highBid;
+ }
+
+ public void setHighBid(Bid highBid)
+ {
+ this.highBid = highBid;
+ }
+
+ public int getBids()
+ {
+ return bids;
+ }
+
+ public void setBids(int bids)
+ {
+ this.bids = bids;
+ }
+
+ @Transient
+ public long getTimeLeft()
+ {
+ return endDate != null ? (endDate.getTime() - System.currentTimeMillis()) : 0;
+ }
+
+ @Transient
+ public String getPrettyTimeLeft()
+ {
+ long timeLeft = getTimeLeft() / 1000;
+
+ int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
+
+ timeLeft -= days * 24 * 60 * 60;
+ int hours = (int) Math.floor(timeLeft / (60 * 60));
+
+ timeLeft -= hours * 60 * 60;
+ int minutes = (int) Math.floor(timeLeft / 60);
+
+ StringBuilder sb = new StringBuilder();
+
+ if (days > 0)
+ sb.append(String.format("%dd ", days));
+
+ if (hours > 0)
+ sb.append(String.format("%dh ", hours));
+
+ if (minutes > 0)
+ sb.append(String.format("%dm ", minutes));
+
+ return sb.toString();
+ }
+
+ @Transient
+ public String getDaysHoursLeft()
+ {
+ long timeLeft = getTimeLeft() / 1000;
+
+ int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
+
+ timeLeft -= days * 24 * 60 * 60;
+ int hours = (int) Math.floor(timeLeft / (60 * 60));
+
+ StringBuilder sb = new StringBuilder();
+
+ if (days > 0)
+ sb.append(String.format("%d days ", days));
+
+ if (hours > 0)
+ sb.append(String.format("%d hour", hours));
+
+ if (hours > 1)
+ sb.append('s');
+
+ return sb.toString();
+ }
+
+ public double getStartingPrice()
+ {
+ return startingPrice;
+ }
+
+ public void setStartingPrice(double startingPrice)
+ {
+ this.startingPrice = startingPrice;
+ }
+
+ public int getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(int status)
+ {
+ this.status = status;
+ }
+
+ @Version
+ public int getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion(int version)
+ {
+ this.version = version;
+ }
+
+ @Transient
+ public double getCurrentPrice()
+ {
+ return highBid != null ? highBid.getActualAmount() : getStartingPrice();
+ }
+
+ @Transient
+ public double getRequiredBid()
+ {
+ return highBid != null ? getRequiredBid(highBid.getActualAmount()) :
+ getStartingPrice();
+ }
+
+ /**
+ * Returns the amount required to outbid the specified bid amount.
+ *
+ * @param amount The current bid amount
+ * @return The bid amount required to outbid the current bid
+ */
+ @Transient
+ static double getRequiredBid(double amount)
+ {
+ if (amount < 100)
+ {
+ return Math.ceil(amount) + 1;
+ }
+ else if (amount < 200)
+ {
+ return Math.ceil(amount) + 2;
+ }
+ else if (amount < 500)
+ {
+ return Math.ceil(amount) + 5;
+ }
+ else if (amount < 1000)
+ {
+ return Math.ceil(amount) + 10;
+ }
+ else if (amount < 5000)
+ {
+ return Math.ceil(amount) + 20;
+ }
+ else if (amount < 20000)
+ {
+ return Math.ceil(amount) + 50;
+ }
+ else if (amount < 50000)
+ {
+ return Math.ceil(amount) + 100;
+ }
+ else if (amount < 100000)
+ {
+ return Math.ceil(amount) + 200;
+ }
+ else if (amount < 500000)
+ {
+ return Math.ceil(amount) + 500;
+ }
+
+ return Math.ceil(amount) + 1000;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,32 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.annotations.async.Asynchronous;
-import org.jboss.seam.annotations.async.Expiration;
-
-import javax.persistence.EntityManager;
-import javax.persistence.LockModeType;
-import java.util.Date;
-
- at Name("auctionEnd")
-public class AuctionEndAction
-{
- @In EntityManager entityManager;
-
- @Asynchronous
- @Transactional
- public void endAuction(int auctionId, @Expiration Date endDate)
- {
- System.out.println("Auction " + auctionId + " ending");
-
- Auction auction = entityManager.find(Auction.class, auctionId);
-
- entityManager.lock(auction, LockModeType.WRITE);
-
- auction.setStatus(Auction.STATUS_COMPLETED);
-
- entityManager.merge(auction);
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionEndAction.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.async.Asynchronous;
+import org.jboss.seam.annotations.async.Expiration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import java.util.Date;
+
+ at Name("auctionEnd")
+public class AuctionEndAction
+{
+ @In EntityManager entityManager;
+
+ @Asynchronous
+ @Transactional
+ public void endAuction(int auctionId, @Expiration Date endDate)
+ {
+ System.out.println("Auction " + auctionId + " ending");
+
+ Auction auction = entityManager.find(Auction.class, auctionId);
+
+ entityManager.lock(auction, LockModeType.WRITE);
+
+ auction.setStatus(Auction.STATUS_COMPLETED);
+
+ entityManager.merge(auction);
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,67 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.xml.bind.annotation.XmlTransient;
-
- at Entity
-public class AuctionImage implements Serializable
-{
- private static final long serialVersionUID = -1219357931402690891L;
-
- private Integer imageId;
- private Auction auction;
- private byte[] data;
- private String contentType;
-
- @Id @GeneratedValue
- public Integer getImageId()
- {
- return imageId;
- }
-
- public void setImageId(Integer imageId)
- {
- this.imageId = imageId;
- }
-
- @XmlTransient
- @ManyToOne
- @JoinColumn(name = "AUCTION_ID")
- public Auction getAuction()
- {
- return auction;
- }
-
- public void setAuction(Auction auction)
- {
- this.auction = auction;
- }
-
- @Lob
- public byte[] getData()
- {
- return data;
- }
-
- public void setData(byte[] data)
- {
- this.data = data;
- }
-
- public String getContentType()
- {
- return contentType;
- }
-
- public void setContentType(String contentType)
- {
- this.contentType = contentType;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionImage.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,67 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.xml.bind.annotation.XmlTransient;
+
+ at Entity
+public class AuctionImage implements Serializable
+{
+ private static final long serialVersionUID = -1219357931402690891L;
+
+ private Integer imageId;
+ private Auction auction;
+ private byte[] data;
+ private String contentType;
+
+ @Id @GeneratedValue
+ public Integer getImageId()
+ {
+ return imageId;
+ }
+
+ public void setImageId(Integer imageId)
+ {
+ this.imageId = imageId;
+ }
+
+ @XmlTransient
+ @ManyToOne
+ @JoinColumn(name = "AUCTION_ID")
+ public Auction getAuction()
+ {
+ return auction;
+ }
+
+ public void setAuction(Auction auction)
+ {
+ this.auction = auction;
+ }
+
+ @Lob
+ public byte[] getData()
+ {
+ return data;
+ }
+
+ public void setData(byte[] data)
+ {
+ this.data = data;
+ }
+
+ public String getContentType()
+ {
+ return contentType;
+ }
+
+ public void setContentType(String contentType)
+ {
+ this.contentType = contentType;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,69 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.util.Reflections;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.UriInfo;
-import javax.persistence.EntityManager;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.lang.reflect.Field;
-
-/**
- * @author Christian Bauer
- */
- at Name("auctionService")
- at Path("/auction")
-public class AuctionService
-{
-
- @Context
- private UriInfo uriInfo;
-
- private HttpHeaders headers;
-
- @Context
- public void setHeaders(HttpHeaders headers) {
- this.headers = headers;
- }
-
- @In
- EntityManager entityManager;
-
- @GET
- @Produces("text/plain")
- public String getAuctions()
- {
- // This is supposed to test field and setter injection for @Context
- assert uriInfo.getPath().equals("/auction");
- assert headers.getAcceptableMediaTypes().size() == 1;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
-
- List<Object[]> auctions =
- entityManager.createQuery("select a.auctionId, a.title from Auction a order by a.auctionId asc").getResultList();
- StringBuilder s = new StringBuilder();
- for (Object[] auction : auctions)
- {
- s.append(auction[0]).append(",").append(auction[1]).append("\n");
- }
-
- return s.toString();
- }
-
- @GET
- @Path("/{auctionId}")
- @Produces("text/plain")
- public String getAuction(@Context HttpHeaders httpHeaders, @PathParam("auctionId") int auctionId)
- {
- assert httpHeaders.getAcceptableMediaTypes().size() == 1;
- assert httpHeaders.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
-
- return entityManager.find(Auction.class, auctionId).getTitle();
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/AuctionService.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,75 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+
+import javax.persistence.EntityManager;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.net.URI;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("auctionService")
+ at Path("/auction")
+public class AuctionService
+{
+
+ @Context
+ private UriInfo uriInfo;
+
+ private HttpHeaders headers;
+
+ @Context
+ public void setHeaders(HttpHeaders headers) {
+ this.headers = headers;
+ }
+
+ @In
+ EntityManager entityManager;
+
+ @GET
+ @Produces("text/plain")
+ public String getAuctions()
+ {
+
+ URI builtURI = uriInfo.getAbsolutePathBuilder().path("3").build();
+ // We can't test for /<context> prefix here, as we don't have a context in unit tests but we
+ // have it when the application is deployed... so use endsWith()
+ assert builtURI.getPath().endsWith("/seam/resource/restv1/auction/3");
+
+ // This is supposed to test field and setter injection for @Context
+ assert uriInfo.getPath().equals("/auction");
+ assert headers.getAcceptableMediaTypes().size() == 1;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+
+ List<Object[]> auctions =
+ entityManager.createQuery("select a.auctionId, a.title from Auction a order by a.auctionId asc").getResultList();
+ StringBuilder s = new StringBuilder();
+ for (Object[] auction : auctions)
+ {
+ s.append(auction[0]).append(",").append(auction[1]).append("\n");
+ }
+
+ return s.toString();
+ }
+
+ @GET
+ @Path("/{auctionId}")
+ @Produces("text/plain")
+ public String getAuction(@Context HttpHeaders httpHeaders, @PathParam("auctionId") int auctionId)
+ {
+ assert httpHeaders.getAcceptableMediaTypes().size() == 1;
+ assert httpHeaders.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+
+ return entityManager.find(Auction.class, auctionId).getTitle();
+ }
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,90 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.validator.NotNull;
-
- at Entity
-public class Bid implements Serializable
-{
- private static final long serialVersionUID = -6214050645831251660L;
-
- private Integer bidId;
- private Auction auction;
- private Account account;
- private Date bidDate;
- private double maxAmount;
- private double actualAmount;
-
- @Id @GeneratedValue
- public Integer getBidId()
- {
- return bidId;
- }
-
- public void setBidId(Integer bidId)
- {
- this.bidId = bidId;
- }
-
- @NotNull
- @ManyToOne
- public Auction getAuction()
- {
- return auction;
- }
-
- public void setAuction(Auction auction)
- {
- this.auction = auction;
- }
-
- @NotNull
- public Account getAccount()
- {
- return account;
- }
-
- public void setAccount(Account account)
- {
- this.account = account;
- }
-
- @NotNull
- public Date getBidDate()
- {
- return bidDate;
- }
-
- public void setBidDate(Date bidDate)
- {
- this.bidDate = bidDate;
- }
-
- public double getMaxAmount()
- {
- return maxAmount;
- }
-
- public void setMaxAmount(double maxAmount)
- {
- this.maxAmount = maxAmount;
- }
-
- public double getActualAmount()
- {
- return actualAmount;
- }
-
- public void setActualAmount(double actualAmount)
- {
- this.actualAmount = actualAmount;
- }
-}
-
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Bid.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,90 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.validator.NotNull;
+
+ at Entity
+public class Bid implements Serializable
+{
+ private static final long serialVersionUID = -6214050645831251660L;
+
+ private Integer bidId;
+ private Auction auction;
+ private Account account;
+ private Date bidDate;
+ private double maxAmount;
+ private double actualAmount;
+
+ @Id @GeneratedValue
+ public Integer getBidId()
+ {
+ return bidId;
+ }
+
+ public void setBidId(Integer bidId)
+ {
+ this.bidId = bidId;
+ }
+
+ @NotNull
+ @ManyToOne
+ public Auction getAuction()
+ {
+ return auction;
+ }
+
+ public void setAuction(Auction auction)
+ {
+ this.auction = auction;
+ }
+
+ @NotNull
+ public Account getAccount()
+ {
+ return account;
+ }
+
+ public void setAccount(Account account)
+ {
+ this.account = account;
+ }
+
+ @NotNull
+ public Date getBidDate()
+ {
+ return bidDate;
+ }
+
+ public void setBidDate(Date bidDate)
+ {
+ this.bidDate = bidDate;
+ }
+
+ public double getMaxAmount()
+ {
+ return maxAmount;
+ }
+
+ public void setMaxAmount(double maxAmount)
+ {
+ this.maxAmount = maxAmount;
+ }
+
+ public double getActualAmount()
+ {
+ return actualAmount;
+ }
+
+ public void setActualAmount(double actualAmount)
+ {
+ this.actualAmount = actualAmount;
+ }
+}
+
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,55 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.xml.bind.annotation.XmlRootElement;
-
- at Entity
- at XmlRootElement
-public class Category implements Serializable
-{
- private static final long serialVersionUID = 411989568594034566L;
-
- private Integer categoryId;
- private String name;
- private Category parent;
-
- @Id
- @GeneratedValue
- public Integer getCategoryId()
- {
- return categoryId;
- }
-
- public void setCategoryId(Integer categoryId)
- {
- this.categoryId = categoryId;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- @ManyToOne
- @JoinColumn(name = "PARENT_CATEGORY_ID")
- public Category getParent()
- {
- return parent;
- }
-
- public void setParent(Category parent)
- {
- this.parent = parent;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Category.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,55 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.xml.bind.annotation.XmlRootElement;
+
+ at Entity
+ at XmlRootElement
+public class Category implements Serializable
+{
+ private static final long serialVersionUID = 411989568594034566L;
+
+ private Integer categoryId;
+ private String name;
+ private Category parent;
+
+ @Id
+ @GeneratedValue
+ public Integer getCategoryId()
+ {
+ return categoryId;
+ }
+
+ public void setCategoryId(Integer categoryId)
+ {
+ this.categoryId = categoryId;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "PARENT_CATEGORY_ID")
+ public Category getParent()
+ {
+ return parent;
+ }
+
+ public void setParent(Category parent)
+ {
+ this.parent = parent;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,37 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import javax.ws.rs.Path;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.framework.EntityHome;
-import org.jboss.seam.framework.Home;
-import org.jboss.seam.resteasy.ResourceHome;
-
-/**
- * This resource demonstrates using ResourceHome component. This resource is
- * used for testing purposes.
- *
- * @author Jozef Hartinger
- *
- */
-
- at Name("categoryResourceHome")
- at Path("extendedCategory")
-public class CategoryResourceHome extends ResourceHome<Category, Integer>
-{
-
- @In
- private EntityHome<Category> categoryHome;
-
- @Override
- public Home<?, Category> getEntityHome()
- {
- return categoryHome;
- }
-
- public CategoryResourceHome()
- {
- setMediaTypes(new String[] { "application/xml", "application/json" });
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,37 @@
+package org.jboss.seam.example.restbay;
+
+import javax.ws.rs.Path;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.framework.Home;
+import org.jboss.seam.resteasy.ResourceHome;
+
+/**
+ * This resource demonstrates using ResourceHome component. This resource is
+ * used for testing purposes.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+
+ at Name("categoryResourceHome")
+ at Path("extendedCategory")
+public class CategoryResourceHome extends ResourceHome<Category, Integer>
+{
+
+ @In
+ private EntityHome<Category> categoryHome;
+
+ @Override
+ public Home<?, Category> getEntityHome()
+ {
+ return categoryHome;
+ }
+
+ public CategoryResourceHome()
+ {
+ setMediaTypes(new String[] { "application/xml", "application/json" });
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,19 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import javax.ws.rs.Path;
-
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.resteasy.ResourceQuery;
-
-/**
- * Example of ResourceQuery usage. Used for testing purposes.
- *
- * @author Jozef Hartinger
- *
- */
- at Name("categoryResourceQuery")
- at Path("extendedCategory")
-public class CategoryResourceQuery extends ResourceQuery<Category>
-{
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,19 @@
+package org.jboss.seam.example.restbay;
+
+import javax.ws.rs.Path;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.resteasy.ResourceQuery;
+
+/**
+ * Example of ResourceQuery usage. Used for testing purposes.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Name("categoryResourceQuery")
+ at Path("extendedCategory")
+public class CategoryResourceQuery extends ResourceQuery<Category>
+{
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,13 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-/**
- * @author Christian Bauer
- */
-public interface CategoryService
-{
-
- public String getCategories();
-
- public String getCategory(int categoryId);
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryService.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,13 @@
+package org.jboss.seam.example.restbay;
+
+/**
+ * @author Christian Bauer
+ */
+public interface CategoryService
+{
+
+ public String getCategories();
+
+ public String getCategory(int categoryId);
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,45 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-
-import javax.ws.rs.*;
-import javax.persistence.EntityManager;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("categoryService")
- at Path("/category")
-public class CategoryServiceImpl implements CategoryService
-{
-
- @In
- EntityManager entityManager;
-
- @GET
- @Produces("text/plain")
- public String getCategories()
- {
- List<Object[]> categories =
- entityManager.createQuery("select c.categoryId, c.name from Category c order by c.id asc").getResultList();
- StringBuilder s = new StringBuilder();
- for (Object[] category : categories)
- {
- s.append(category[0]).append(",").append(category[1]).append("\n");
- }
-
- return s.toString();
- }
-
- @GET
- @Path("/{categoryId}")
- @Produces("text/plain")
- public String getCategory(@PathParam("categoryId") int categoryId)
- {
- return entityManager.find(Category.class, categoryId).getName();
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/CategoryServiceImpl.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,45 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+
+import javax.ws.rs.*;
+import javax.persistence.EntityManager;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("categoryService")
+ at Path("/category")
+public class CategoryServiceImpl implements CategoryService
+{
+
+ @In
+ EntityManager entityManager;
+
+ @GET
+ @Produces("text/plain")
+ public String getCategories()
+ {
+ List<Object[]> categories =
+ entityManager.createQuery("select c.categoryId, c.name from Category c order by c.id asc").getResultList();
+ StringBuilder s = new StringBuilder();
+ for (Object[] category : categories)
+ {
+ s.append(category[0]).append(",").append(category[1]).append("\n");
+ }
+
+ return s.toString();
+ }
+
+ @GET
+ @Path("/{categoryId}")
+ @Produces("text/plain")
+ public String getCategory(@PathParam("categoryId") int categoryId)
+ {
+ return entityManager.find(Category.class, categoryId).getName();
+ }
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,116 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToOne;
-
- at Entity
-public class Feedback implements Serializable
-{
- private static final long serialVersionUID = -5814392910187956828L;
-
- public enum Rating {positive, neutral, negative};
-
- private Integer feedbackId;
- private Account forAccount;
- private Account fromAccount;
- private Date feedbackDate;
- private Auction item;
- private Rating rating;
- private String comment;
- private String response;
-
- @Id @GeneratedValue
- public Integer getFeedbackId()
- {
- return feedbackId;
- }
-
- public void setFeedbackId(Integer feedbackId)
- {
- this.feedbackId = feedbackId;
- }
-
- @ManyToOne
- @JoinColumn(name = "FOR_ACCOUNT_ID")
- public Account getForAccount()
- {
- return forAccount;
- }
-
- public void setForAccount(Account account)
- {
- this.forAccount = account;
- }
-
- @ManyToOne
- @JoinColumn(name = "FROM_ACCOUNT_ID")
- public Account getFromAccount()
- {
- return fromAccount;
- }
-
- public void setFromAccount(Account account)
- {
- this.fromAccount = account;
- }
-
- public Date getFeedbackDate()
- {
- return feedbackDate;
- }
-
- public void setFeedbackDate(Date feedbackDate)
- {
- this.feedbackDate = feedbackDate;
- }
-
- @OneToOne
- @JoinColumn(name = "ITEM_ID")
- public Auction getItem()
- {
- return item;
- }
-
- public void setItem(Auction item)
- {
- this.item = item;
- }
-
- public Rating getRating()
- {
- return rating;
- }
-
- public void setRating(Rating rating)
- {
- this.rating = rating;
- }
-
- public String getComment()
- {
- return comment;
- }
-
- public void setComment(String comment)
- {
- this.comment = comment;
- }
-
- public String getResponse()
- {
- return response;
- }
-
- public void setResponse(String response)
- {
- this.response = response;
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/Feedback.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,116 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+
+ at Entity
+public class Feedback implements Serializable
+{
+ private static final long serialVersionUID = -5814392910187956828L;
+
+ public enum Rating {positive, neutral, negative};
+
+ private Integer feedbackId;
+ private Account forAccount;
+ private Account fromAccount;
+ private Date feedbackDate;
+ private Auction item;
+ private Rating rating;
+ private String comment;
+ private String response;
+
+ @Id @GeneratedValue
+ public Integer getFeedbackId()
+ {
+ return feedbackId;
+ }
+
+ public void setFeedbackId(Integer feedbackId)
+ {
+ this.feedbackId = feedbackId;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "FOR_ACCOUNT_ID")
+ public Account getForAccount()
+ {
+ return forAccount;
+ }
+
+ public void setForAccount(Account account)
+ {
+ this.forAccount = account;
+ }
+
+ @ManyToOne
+ @JoinColumn(name = "FROM_ACCOUNT_ID")
+ public Account getFromAccount()
+ {
+ return fromAccount;
+ }
+
+ public void setFromAccount(Account account)
+ {
+ this.fromAccount = account;
+ }
+
+ public Date getFeedbackDate()
+ {
+ return feedbackDate;
+ }
+
+ public void setFeedbackDate(Date feedbackDate)
+ {
+ this.feedbackDate = feedbackDate;
+ }
+
+ @OneToOne
+ @JoinColumn(name = "ITEM_ID")
+ public Auction getItem()
+ {
+ return item;
+ }
+
+ public void setItem(Auction item)
+ {
+ this.item = item;
+ }
+
+ public Rating getRating()
+ {
+ return rating;
+ }
+
+ public void setRating(Rating rating)
+ {
+ this.rating = rating;
+ }
+
+ public String getComment()
+ {
+ return comment;
+ }
+
+ public void setComment(String comment)
+ {
+ this.comment = comment;
+ }
+
+ public String getResponse()
+ {
+ return response;
+ }
+
+ public void setResponse(String response)
+ {
+ this.response = response;
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,75 +0,0 @@
-package org.jboss.seam.example.restbay;
-
-import java.io.Serializable;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.validator.Length;
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Pattern;
-
- at Entity
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
-public class User implements Serializable
-{
- private static final long serialVersionUID = 1L;
-
- private Integer userId;
- private String username;
- private String password;
- private Account account;
-
- @Id @GeneratedValue
- public Integer getUserId()
- {
- return userId;
- }
-
- public void setUserId(Integer userId)
- {
- this.userId = userId;
- }
-
- @NotNull
- @Length(min = 3, max = 40)
- @Pattern(regex="[a-zA-Z]?[a-zA-Z0-9]+",
- message="Username must start with a letter, and only contain letters or numbers")
- public String getUsername()
- {
- return username;
- }
-
- public void setUsername(String username)
- {
- this.username = username;
- }
-
- public String getPassword()
- {
- return password;
- }
-
- public void setPassword(String password)
- {
- this.password = password;
- }
-
- @OneToOne
- @NotNull
- @JoinColumn(name = "ACCOUNT_ID")
- public Account getAccount()
- {
- return account;
- }
-
- public void setAccount(Account account)
- {
- this.account = account;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/User.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,75 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+
+ at Entity
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
+public class User implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private Integer userId;
+ private String username;
+ private String password;
+ private Account account;
+
+ @Id @GeneratedValue
+ public Integer getUserId()
+ {
+ return userId;
+ }
+
+ public void setUserId(Integer userId)
+ {
+ this.userId = userId;
+ }
+
+ @NotNull
+ @Length(min = 3, max = 40)
+ @Pattern(regex="[a-zA-Z]?[a-zA-Z0-9]+",
+ message="Username must start with a letter, and only contain letters or numbers")
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ @OneToOne
+ @NotNull
+ @JoinColumn(name = "ACCOUNT_ID")
+ public Account getAccount()
+ {
+ return account;
+ }
+
+ public void setAccount(Account account)
+ {
+ this.account = account;
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,46 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.security.Identity;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
-
- at Path("/secured")
- at Name("securedResource")
- at Produces("text/plain")
-public class SecuredResource
-{
-
- @In
- private Identity identity;
-
- @GET
- public String getHello()
- {
- return "Hello world!";
- }
-
- @GET
- @Path("/admin")
- public boolean isAdmin() {
- return identity.hasRole("admin");
- }
-
- @GET
- @Path("/restrictedAdmin")
- @Restrict("#{s:hasRole('admin')}")
- public boolean restrictedIsAdmin() {
- return identity.hasRole("admin");
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SecuredResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,46 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.security.Identity;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+
+ at Path("/secured")
+ at Name("securedResource")
+ at Produces("text/plain")
+public class SecuredResource
+{
+
+ @In
+ private Identity identity;
+
+ @GET
+ public String getHello()
+ {
+ return "Hello world!";
+ }
+
+ @GET
+ @Path("/admin")
+ public boolean isAdmin() {
+ return identity.hasRole("admin");
+ }
+
+ @GET
+ @Path("/restrictedAdmin")
+ @Restrict("#{s:hasRole('admin')}")
+ public boolean restrictedIsAdmin() {
+ return identity.hasRole("admin");
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,21 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-import javax.ws.rs.GET;
-
-/**
- * @author Christian Bauer
- */
-public class SubResource
-{
- private String baz;
-
- public SubResource(String baz)
- {
- this.baz = baz;
- }
-
- @GET
- public String get() {
- return "bar: " + baz;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/SubResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,21 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+
+/**
+ * @author Christian Bauer
+ */
+public class SubResource
+{
+ private String baz;
+
+ public SubResource(String baz)
+ {
+ this.baz = baz;
+ }
+
+ @GET
+ public String get() {
+ return "bar: " + baz;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,44 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.security.Credentials;
-import org.jboss.seam.security.Identity;
-
- at Name("testAuthenticator")
- at Scope(ScopeType.EVENT)
-public class TestAuthenticator
-{
-
- @In
- private Identity identity;
-
- @In
- private Credentials credentials;
-
- @Logger
- private Log log;
-
- public boolean authenticate()
- {
- log.debug("Authenticating username/password: " + credentials.getUsername() + "/" + credentials.getPassword());
- if (credentials.getUsername().equals(credentials.getPassword())) {
- log.info("Authenticated {0}", credentials.getUsername());
-
- if (credentials.getUsername().equals("admin")) {
- identity.addRole("admin");
- log.info("Admin rights granted for {0}", credentials.getUsername());
- }
- log.debug("Authentication valid");
- return true;
- } else {
- log.debug("Authentication invalid");
- return false;
- }
- }
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,44 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.security.Credentials;
+import org.jboss.seam.security.Identity;
+
+ at Name("testAuthenticator")
+ at Scope(ScopeType.EVENT)
+public class TestAuthenticator
+{
+
+ @In
+ private Identity identity;
+
+ @In
+ private Credentials credentials;
+
+ @Logger
+ private Log log;
+
+ public boolean authenticate()
+ {
+ log.debug("Authenticating username/password: " + credentials.getUsername() + "/" + credentials.getPassword());
+ if (credentials.getUsername().equals(credentials.getPassword())) {
+ log.info("Authenticated {0}", credentials.getUsername());
+
+ if (credentials.getUsername().equals("admin")) {
+ identity.addRole("admin");
+ log.info("Admin rights granted for {0}", credentials.getUsername());
+ }
+ log.debug("Authentication valid");
+ return true;
+ } else {
+ log.debug("Authentication invalid");
+ return false;
+ }
+ }
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,27 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.AutoCreate;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * @author Christian Bauer
- */
- at Name("testComponent")
- at AutoCreate
-public class TestComponent
-{
-
- public List<String[]> getCommaSeparated() {
- List<String[]> csv = new ArrayList();
- csv.add(new String[]{"foo", "bar"});
- csv.add(new String[]{"asdf", "123"});
- return csv;
- }
-
- public String getTestString() {
- return "abc";
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestComponent.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,27 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.AutoCreate;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("testComponent")
+ at AutoCreate
+public class TestComponent
+{
+
+ public List<String[]> getCommaSeparated() {
+ List<String[]> csv = new ArrayList();
+ csv.add(new String[]{"foo", "bar"});
+ csv.add(new String[]{"asdf", "123"});
+ return csv;
+ }
+
+ public String getTestString() {
+ return "abc";
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,23 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-import javax.ws.rs.FormParam;
-import javax.ws.rs.HeaderParam;
-
-/**
- * @author Christian Bauer
- */
-public class TestForm
-{
-
- @FormParam("foo")
- private String[] foo;
-
- @HeaderParam("bar")
- private String bar;
-
- @Override
- public String toString()
- {
- return bar + foo[0] + foo[1];
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestForm.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,23 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.FormParam;
+import javax.ws.rs.HeaderParam;
+
+/**
+ * @author Christian Bauer
+ */
+public class TestForm
+{
+
+ @FormParam("foo")
+ private String[] foo;
+
+ @HeaderParam("bar")
+ private String bar;
+
+ @Override
+ public String toString()
+ {
+ return bar + foo[0] + foo[1];
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,124 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy;
-
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.UriInfo;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Collections;
-import java.util.Arrays;
-
-/**
- * Plain JAX RS root resource, no Seam components/lifecycle.
- *
- * @author Christian Bauer
- */
-public class TestResource
-{
-
- @Context
- protected UriInfo uriInfo;
-
- @Context
- protected HttpHeaders headers;
-
- public void setUriInfo(UriInfo uriInfo)
- {
- this.uriInfo = uriInfo;
- }
-
- public void setHeaders(HttpHeaders headers)
- {
- this.headers = headers;
- }
-
- public String echoUri()
- {
- return uriInfo.getPath();
- }
-
- public String echoQueryParam(String bar)
- {
- return bar;
- }
-
- public String echoHeaderParam(String bar)
- {
- return bar;
- }
-
- public String echoCookieParam(String bar)
- {
- return bar;
- }
-
- public String echoTwoParams(String one, String two)
- {
- return one+two;
- }
-
- public String echoEncoded(String val)
- {
- return val;
- }
-
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- String result = "";
- for (String s : formMap.get("foo"))
- {
- result = result + s;
- }
- return result;
- }
-
- public String echoFormParams2(String[] foo)
- {
- String result = "";
- for (String s : foo)
- {
- result = result + s;
- }
- return result;
- }
-
- public String echoFormParams3(TestForm form)
- {
- return form.toString();
- }
-
- public SubResource getBar(String baz)
- {
- return new SubResource(baz);
- }
-
- public long convertPathParam(GregorianCalendar isoDate)
- {
- return isoDate.getTime().getTime();
- }
-
- public String throwException()
- {
- throw new UnsupportedOperationException("foo");
- }
-
- public List<String[]> getCommaSeparated() {
- assert headers.getAcceptableMediaTypes().size() == 2;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
- assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
- return new TestComponent().getCommaSeparated();
- }
-
- public String[] getCommaSeparatedStrings() {
- return new String[] {"foo", "bar", "baz"};
- }
-
- public Integer[] getCommaSeparatedIntegers() {
- return new Integer[] {1, 2, 3};
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/TestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,124 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collections;
+import java.util.Arrays;
+
+/**
+ * Plain JAX RS root resource, no Seam components/lifecycle.
+ *
+ * @author Christian Bauer
+ */
+public class TestResource
+{
+
+ @Context
+ protected UriInfo uriInfo;
+
+ @Context
+ protected HttpHeaders headers;
+
+ public void setUriInfo(UriInfo uriInfo)
+ {
+ this.uriInfo = uriInfo;
+ }
+
+ public void setHeaders(HttpHeaders headers)
+ {
+ this.headers = headers;
+ }
+
+ public String echoUri()
+ {
+ return uriInfo.getPath();
+ }
+
+ public String echoQueryParam(String bar)
+ {
+ return bar;
+ }
+
+ public String echoHeaderParam(String bar)
+ {
+ return bar;
+ }
+
+ public String echoCookieParam(String bar)
+ {
+ return bar;
+ }
+
+ public String echoTwoParams(String one, String two)
+ {
+ return one+two;
+ }
+
+ public String echoEncoded(String val)
+ {
+ return val;
+ }
+
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ String result = "";
+ for (String s : formMap.get("foo"))
+ {
+ result = result + s;
+ }
+ return result;
+ }
+
+ public String echoFormParams2(String[] foo)
+ {
+ String result = "";
+ for (String s : foo)
+ {
+ result = result + s;
+ }
+ return result;
+ }
+
+ public String echoFormParams3(TestForm form)
+ {
+ return form.toString();
+ }
+
+ public SubResource getBar(String baz)
+ {
+ return new SubResource(baz);
+ }
+
+ public long convertPathParam(GregorianCalendar isoDate)
+ {
+ return isoDate.getTime().getTime();
+ }
+
+ public String throwException()
+ {
+ throw new UnsupportedOperationException("foo");
+ }
+
+ public List<String[]> getCommaSeparated() {
+ assert headers.getAcceptableMediaTypes().size() == 2;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+ assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+ return new TestComponent().getCommaSeparated();
+ }
+
+ public String[] getCommaSeparatedStrings() {
+ return new String[] {"foo", "bar", "baz"};
+ }
+
+ public Integer[] getCommaSeparatedIntegers() {
+ return new Integer[] {1, 2, 3};
+ }
+
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,194 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.applicationcomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.contexts.Contexts;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("applicationComponentTestResource")
- at Path("/applicationComponentTest")
- at Scope(ScopeType.APPLICATION)
-public class ApplicationComponentTestResource extends TestResource
-{
- protected final String INSTANCE_CODE_KEY = "applicationComponentTestResource.instanceCode";
-
- // We want to verify that this is really an application-scoped single instance
- public ApplicationComponentTestResource()
- {
- // Yes, this check is really required, probably because Seam instantiates this twice or something for proxying?! :)
- if (Contexts.getApplicationContext().get(INSTANCE_CODE_KEY) == null)
- {
- Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
- }
- }
-
- protected void assertSingleton()
- {
- assert Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
- }
-
- @In
- TestComponent testComponent;
-
- @GET
- @Path("/echouri")
- @Override
- public String echoUri()
- {
- assertSingleton();
- return super.echoUri();
- }
-
- @GET
- @Path("/echoquery")
- @Override
- public String echoQueryParam(@QueryParam("bar") String bar)
- {
- assertSingleton();
- return super.echoQueryParam(bar);
- }
-
- @GET
- @Path("/echoheader")
- @Override
- public String echoHeaderParam(@HeaderParam("bar") String bar)
- {
- assertSingleton();
- return super.echoHeaderParam(bar);
- }
-
- @GET
- @Path("/echocookie")
- @Override
- public String echoCookieParam(@CookieParam("bar") String bar)
- {
- assertSingleton();
- return super.echoCookieParam(bar);
- }
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- @Override
- public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
- {
- assertSingleton();
- return super.echoTwoParams(one, two);
- }
-
- @GET
- @Path("/echoencoded/{val}")
- @Override
- public String echoEncoded(@PathParam("val") @Encoded String val)
- {
- assertSingleton();
- return super.echoEncoded(val);
- }
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- @Override
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- assertSingleton();
- return super.echoFormParams(formMap);
- }
-
- @POST
- @Path("/echoformparams2")
- @Override
- public String echoFormParams2(@FormParam("foo") String[] foo)
- {
- assertSingleton();
- return super.echoFormParams2(foo);
- }
-
- @POST
- @Path("/echoformparams3")
- @Override
- public String echoFormParams3(@Form TestForm form)
- {
- assertSingleton();
- return super.echoFormParams3(form);
- }
-
- @Path("/foo/bar/{baz}")
- @Override
- public SubResource getBar(@PathParam("baz") String baz)
- {
- assertSingleton();
- return super.getBar(baz);
- }
-
- @GET
- @Path("/convertDate/{isoDate}")
- @Override
- public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
- {
- assertSingleton();
- return super.convertPathParam(isoDate);
- }
-
- @GET
- @Path("/trigger/unsupported")
- @Override
- public String throwException()
- {
- assertSingleton();
- return super.throwException();
- }
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- @Override
- public List<String[]> getCommaSeparated()
- {
- assertSingleton();
- return testComponent.getCommaSeparated();
- }
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- @Override
- public String[] getCommaSeparatedStrings()
- {
- assertSingleton();
- return super.getCommaSeparatedStrings();
- }
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- @Override
- public Integer[] getCommaSeparatedIntegers()
- {
- assertSingleton();
- return super.getCommaSeparatedIntegers();
- }
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,194 @@
+package org.jboss.seam.example.restbay.resteasy.applicationcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.contexts.Contexts;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("applicationComponentTestResource")
+ at Path("/applicationComponentTest")
+ at Scope(ScopeType.APPLICATION)
+public class ApplicationComponentTestResource extends TestResource
+{
+ protected final String INSTANCE_CODE_KEY = "applicationComponentTestResource.instanceCode";
+
+ // We want to verify that this is really an application-scoped single instance
+ public ApplicationComponentTestResource()
+ {
+ // Yes, this check is really required, probably because Seam instantiates this twice or something for proxying?! :)
+ if (Contexts.getApplicationContext().get(INSTANCE_CODE_KEY) == null)
+ {
+ Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+ }
+ }
+
+ protected void assertSingleton()
+ {
+ assert Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+ }
+
+ @In
+ TestComponent testComponent;
+
+ @GET
+ @Path("/echouri")
+ @Override
+ public String echoUri()
+ {
+ assertSingleton();
+ return super.echoUri();
+ }
+
+ @GET
+ @Path("/echoquery")
+ @Override
+ public String echoQueryParam(@QueryParam("bar") String bar)
+ {
+ assertSingleton();
+ return super.echoQueryParam(bar);
+ }
+
+ @GET
+ @Path("/echoheader")
+ @Override
+ public String echoHeaderParam(@HeaderParam("bar") String bar)
+ {
+ assertSingleton();
+ return super.echoHeaderParam(bar);
+ }
+
+ @GET
+ @Path("/echocookie")
+ @Override
+ public String echoCookieParam(@CookieParam("bar") String bar)
+ {
+ assertSingleton();
+ return super.echoCookieParam(bar);
+ }
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ @Override
+ public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+ {
+ assertSingleton();
+ return super.echoTwoParams(one, two);
+ }
+
+ @GET
+ @Path("/echoencoded/{val}")
+ @Override
+ public String echoEncoded(@PathParam("val") @Encoded String val)
+ {
+ assertSingleton();
+ return super.echoEncoded(val);
+ }
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ @Override
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ assertSingleton();
+ return super.echoFormParams(formMap);
+ }
+
+ @POST
+ @Path("/echoformparams2")
+ @Override
+ public String echoFormParams2(@FormParam("foo") String[] foo)
+ {
+ assertSingleton();
+ return super.echoFormParams2(foo);
+ }
+
+ @POST
+ @Path("/echoformparams3")
+ @Override
+ public String echoFormParams3(@Form TestForm form)
+ {
+ assertSingleton();
+ return super.echoFormParams3(form);
+ }
+
+ @Path("/foo/bar/{baz}")
+ @Override
+ public SubResource getBar(@PathParam("baz") String baz)
+ {
+ assertSingleton();
+ return super.getBar(baz);
+ }
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ @Override
+ public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+ {
+ assertSingleton();
+ return super.convertPathParam(isoDate);
+ }
+
+ @GET
+ @Path("/trigger/unsupported")
+ @Override
+ public String throwException()
+ {
+ assertSingleton();
+ return super.throwException();
+ }
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ assertSingleton();
+ return testComponent.getCommaSeparated();
+ }
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ @Override
+ public String[] getCommaSeparatedStrings()
+ {
+ assertSingleton();
+ return super.getCommaSeparatedStrings();
+ }
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ @Override
+ public Integer[] getCommaSeparatedIntegers()
+ {
+ assertSingleton();
+ return super.getCommaSeparatedIntegers();
+ }
+}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,159 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.eventcomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("eventComponentTestResource")
- at Path("/eventComponentTest")
-public class EventComponentTestResource extends TestResource
-{
-
- @In
- TestComponent testComponent;
-
- @GET
- @Path("/echouri")
- @Override
- public String echoUri()
- {
- return super.echoUri();
- }
-
- @GET
- @Path("/echoquery")
- @Override
- public String echoQueryParam(@QueryParam("bar") String bar)
- {
- return super.echoQueryParam(bar);
- }
-
- @GET
- @Path("/echoheader")
- @Override
- public String echoHeaderParam(@HeaderParam("bar") String bar)
- {
- return super.echoHeaderParam(bar);
- }
-
- @GET
- @Path("/echocookie")
- @Override
- public String echoCookieParam(@CookieParam("bar") String bar)
- {
- return super.echoCookieParam(bar);
- }
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- @Override
- public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
- {
- return super.echoTwoParams(one, two);
- }
-
- @GET
- @Path("/echoencoded/{val}")
- @Override
- public String echoEncoded(@PathParam("val") @Encoded String val)
- {
- return super.echoEncoded(val);
- }
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- @Override
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- return super.echoFormParams(formMap);
- }
-
- @POST
- @Path("/echoformparams2")
- @Override
- public String echoFormParams2(@FormParam("foo") String[] foo)
- {
- return super.echoFormParams2(foo);
- }
-
- @POST
- @Path("/echoformparams3")
- @Override
- public String echoFormParams3(@Form TestForm form)
- {
- return super.echoFormParams3(form);
- }
-
- @Path("/foo/bar/{baz}")
- @Override
- public SubResource getBar(@PathParam("baz") String baz)
- {
- return super.getBar(baz);
- }
-
- @GET
- @Path("/convertDate/{isoDate}")
- @Override
- public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
- {
- return super.convertPathParam(isoDate);
- }
-
- @GET
- @Path("/trigger/unsupported")
- @Override
- public String throwException()
- {
- return super.throwException();
- }
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- @Override
- public List<String[]> getCommaSeparated()
- {
- return testComponent.getCommaSeparated();
- }
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- @Override
- public String[] getCommaSeparatedStrings()
- {
- return super.getCommaSeparatedStrings();
- }
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- @Override
- public Integer[] getCommaSeparatedIntegers()
- {
- return super.getCommaSeparatedIntegers();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,159 @@
+package org.jboss.seam.example.restbay.resteasy.eventcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("eventComponentTestResource")
+ at Path("/eventComponentTest")
+public class EventComponentTestResource extends TestResource
+{
+
+ @In
+ TestComponent testComponent;
+
+ @GET
+ @Path("/echouri")
+ @Override
+ public String echoUri()
+ {
+ return super.echoUri();
+ }
+
+ @GET
+ @Path("/echoquery")
+ @Override
+ public String echoQueryParam(@QueryParam("bar") String bar)
+ {
+ return super.echoQueryParam(bar);
+ }
+
+ @GET
+ @Path("/echoheader")
+ @Override
+ public String echoHeaderParam(@HeaderParam("bar") String bar)
+ {
+ return super.echoHeaderParam(bar);
+ }
+
+ @GET
+ @Path("/echocookie")
+ @Override
+ public String echoCookieParam(@CookieParam("bar") String bar)
+ {
+ return super.echoCookieParam(bar);
+ }
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ @Override
+ public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+ {
+ return super.echoTwoParams(one, two);
+ }
+
+ @GET
+ @Path("/echoencoded/{val}")
+ @Override
+ public String echoEncoded(@PathParam("val") @Encoded String val)
+ {
+ return super.echoEncoded(val);
+ }
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ @Override
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ return super.echoFormParams(formMap);
+ }
+
+ @POST
+ @Path("/echoformparams2")
+ @Override
+ public String echoFormParams2(@FormParam("foo") String[] foo)
+ {
+ return super.echoFormParams2(foo);
+ }
+
+ @POST
+ @Path("/echoformparams3")
+ @Override
+ public String echoFormParams3(@Form TestForm form)
+ {
+ return super.echoFormParams3(form);
+ }
+
+ @Path("/foo/bar/{baz}")
+ @Override
+ public SubResource getBar(@PathParam("baz") String baz)
+ {
+ return super.getBar(baz);
+ }
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ @Override
+ public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+ {
+ return super.convertPathParam(isoDate);
+ }
+
+ @GET
+ @Path("/trigger/unsupported")
+ @Override
+ public String throwException()
+ {
+ return super.throwException();
+ }
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ return testComponent.getCommaSeparated();
+ }
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ @Override
+ public String[] getCommaSeparatedStrings()
+ {
+ return super.getCommaSeparatedStrings();
+ }
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ @Override
+ public Integer[] getCommaSeparatedIntegers()
+ {
+ return super.getCommaSeparatedIntegers();
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,101 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Path("/interfaceApplicationComponentTest")
-public interface InterfaceApplicationComponentTestResource
-{
-
- @Context
- public void setUriInfo(UriInfo uriInfo);
-
- @Context
- public void setHeaders(HttpHeaders headers);
-
- @GET
- @Path("/echouri")
- String echoUri();
-
- @GET
- @Path("/echoquery")
- String echoQueryParam(@QueryParam("bar") String bar);
-
- @GET
- @Path("/echoheader")
- String echoHeaderParam(@HeaderParam("bar") String bar);
-
- @GET
- @Path("/echocookie")
- String echoCookieParam(@CookieParam("bar") String bar);
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
-
- @GET
- @Path("/echoencoded/{val}")
- String echoEncoded(@PathParam("val") @Encoded String val);
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- String echoFormParams(MultivaluedMap<String, String> formMap);
-
- @POST
- @Path("/echoformparams2")
- String echoFormParams2(@FormParam("foo") String[] foo);
-
- @POST
- @Path("/echoformparams3")
- String echoFormParams3(@Form TestForm form);
-
- @Path("/foo/bar/{baz}")
- SubResource getBar(@PathParam("baz") String baz);
-
- @GET
- @Path("/convertDate/{isoDate}")
- long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
-
- @GET
- @Path("/trigger/unsupported")
- String throwException();
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- List<String[]> getCommaSeparated();
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- String[] getCommaSeparatedStrings();
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- Integer[] getCommaSeparatedIntegers();
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceApplicationComponentTest")
+public interface InterfaceApplicationComponentTestResource
+{
+
+ @Context
+ public void setUriInfo(UriInfo uriInfo);
+
+ @Context
+ public void setHeaders(HttpHeaders headers);
+
+ @GET
+ @Path("/echouri")
+ String echoUri();
+
+ @GET
+ @Path("/echoquery")
+ String echoQueryParam(@QueryParam("bar") String bar);
+
+ @GET
+ @Path("/echoheader")
+ String echoHeaderParam(@HeaderParam("bar") String bar);
+
+ @GET
+ @Path("/echocookie")
+ String echoCookieParam(@CookieParam("bar") String bar);
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+ @GET
+ @Path("/echoencoded/{val}")
+ String echoEncoded(@PathParam("val") @Encoded String val);
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ String echoFormParams(MultivaluedMap<String, String> formMap);
+
+ @POST
+ @Path("/echoformparams2")
+ String echoFormParams2(@FormParam("foo") String[] foo);
+
+ @POST
+ @Path("/echoformparams3")
+ String echoFormParams3(@Form TestForm form);
+
+ @Path("/foo/bar/{baz}")
+ SubResource getBar(@PathParam("baz") String baz);
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+ @GET
+ @Path("/trigger/unsupported")
+ String throwException();
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ List<String[]> getCommaSeparated();
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ String[] getCommaSeparatedStrings();
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ Integer[] getCommaSeparatedIntegers();
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,32 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("interfaceApplicationComponentTestResource")
- at Scope(ScopeType.EVENT)
-public class InterfaceApplicationComponentTestResourceBean extends TestResource implements InterfaceApplicationComponentTestResource
-{
-
- @In
- TestComponent testComponent;
-
- @Override
- public List<String[]> getCommaSeparated()
- {
- assert headers.getAcceptableMediaTypes().size() == 2;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
- assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
- return testComponent.getCommaSeparated();
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceApplicationComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceApplicationComponentTestResourceBean extends TestResource implements InterfaceApplicationComponentTestResource
+{
+
+ @In
+ TestComponent testComponent;
+
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ assert headers.getAcceptableMediaTypes().size() == 2;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+ assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+ return testComponent.getCommaSeparated();
+ }
+
+}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,101 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Path("/interfaceEventComponentTest")
-public interface InterfaceEventComponentTestResource
-{
-
- @Context
- public void setUriInfo(UriInfo uriInfo);
-
- @Context
- public void setHeaders(HttpHeaders headers);
-
- @GET
- @Path("/echouri")
- String echoUri();
-
- @GET
- @Path("/echoquery")
- String echoQueryParam(@QueryParam("bar") String bar);
-
- @GET
- @Path("/echoheader")
- String echoHeaderParam(@HeaderParam("bar") String bar);
-
- @GET
- @Path("/echocookie")
- String echoCookieParam(@CookieParam("bar") String bar);
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
-
- @GET
- @Path("/echoencoded/{val}")
- String echoEncoded(@PathParam("val") @Encoded String val);
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- String echoFormParams(MultivaluedMap<String, String> formMap);
-
- @POST
- @Path("/echoformparams2")
- String echoFormParams2(@FormParam("foo") String[] foo);
-
- @POST
- @Path("/echoformparams3")
- String echoFormParams3(@Form TestForm form);
-
- @Path("/foo/bar/{baz}")
- SubResource getBar(@PathParam("baz") String baz);
-
- @GET
- @Path("/convertDate/{isoDate}")
- long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
-
- @GET
- @Path("/trigger/unsupported")
- String throwException();
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- List<String[]> getCommaSeparated();
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- String[] getCommaSeparatedStrings();
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- Integer[] getCommaSeparatedIntegers();
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceEventComponentTest")
+public interface InterfaceEventComponentTestResource
+{
+
+ @Context
+ public void setUriInfo(UriInfo uriInfo);
+
+ @Context
+ public void setHeaders(HttpHeaders headers);
+
+ @GET
+ @Path("/echouri")
+ String echoUri();
+
+ @GET
+ @Path("/echoquery")
+ String echoQueryParam(@QueryParam("bar") String bar);
+
+ @GET
+ @Path("/echoheader")
+ String echoHeaderParam(@HeaderParam("bar") String bar);
+
+ @GET
+ @Path("/echocookie")
+ String echoCookieParam(@CookieParam("bar") String bar);
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+ @GET
+ @Path("/echoencoded/{val}")
+ String echoEncoded(@PathParam("val") @Encoded String val);
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ String echoFormParams(MultivaluedMap<String, String> formMap);
+
+ @POST
+ @Path("/echoformparams2")
+ String echoFormParams2(@FormParam("foo") String[] foo);
+
+ @POST
+ @Path("/echoformparams3")
+ String echoFormParams3(@Form TestForm form);
+
+ @Path("/foo/bar/{baz}")
+ SubResource getBar(@PathParam("baz") String baz);
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+ @GET
+ @Path("/trigger/unsupported")
+ String throwException();
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ List<String[]> getCommaSeparated();
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ String[] getCommaSeparatedStrings();
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ Integer[] getCommaSeparatedIntegers();
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,32 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("interfaceEventComponentTestResource")
- at Scope(ScopeType.EVENT)
-public class InterfaceEventComponentTestResourceBean extends TestResource implements InterfaceEventComponentTestResource
-{
-
- @In
- TestComponent testComponent;
-
- @Override
- public List<String[]> getCommaSeparated()
- {
- assert headers.getAcceptableMediaTypes().size() == 2;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
- assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
- return testComponent.getCommaSeparated();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceEventComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceEventComponentTestResourceBean extends TestResource implements InterfaceEventComponentTestResource
+{
+
+ @In
+ TestComponent testComponent;
+
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ assert headers.getAcceptableMediaTypes().size() == 2;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+ assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+ return testComponent.getCommaSeparated();
+ }
+
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,101 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Path("/interfaceStatelessComponentTest")
-public interface InterfaceStatelessComponentTestResource
-{
-
- @Context
- public void setUriInfo(UriInfo uriInfo);
-
- @Context
- public void setHeaders(HttpHeaders headers);
-
- @GET
- @Path("/echouri")
- String echoUri();
-
- @GET
- @Path("/echoquery")
- String echoQueryParam(@QueryParam("bar") String bar);
-
- @GET
- @Path("/echoheader")
- String echoHeaderParam(@HeaderParam("bar") String bar);
-
- @GET
- @Path("/echocookie")
- String echoCookieParam(@CookieParam("bar") String bar);
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
-
- @GET
- @Path("/echoencoded/{val}")
- String echoEncoded(@PathParam("val") @Encoded String val);
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- String echoFormParams(MultivaluedMap<String, String> formMap);
-
- @POST
- @Path("/echoformparams2")
- String echoFormParams2(@FormParam("foo") String[] foo);
-
- @POST
- @Path("/echoformparams3")
- String echoFormParams3(@Form TestForm form);
-
- @Path("/foo/bar/{baz}")
- SubResource getBar(@PathParam("baz") String baz);
-
- @GET
- @Path("/convertDate/{isoDate}")
- long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
-
- @GET
- @Path("/trigger/unsupported")
- String throwException();
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- List<String[]> getCommaSeparated();
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- String[] getCommaSeparatedStrings();
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- Integer[] getCommaSeparatedIntegers();
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceStatelessComponentTest")
+public interface InterfaceStatelessComponentTestResource
+{
+
+ @Context
+ public void setUriInfo(UriInfo uriInfo);
+
+ @Context
+ public void setHeaders(HttpHeaders headers);
+
+ @GET
+ @Path("/echouri")
+ String echoUri();
+
+ @GET
+ @Path("/echoquery")
+ String echoQueryParam(@QueryParam("bar") String bar);
+
+ @GET
+ @Path("/echoheader")
+ String echoHeaderParam(@HeaderParam("bar") String bar);
+
+ @GET
+ @Path("/echocookie")
+ String echoCookieParam(@CookieParam("bar") String bar);
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+ @GET
+ @Path("/echoencoded/{val}")
+ String echoEncoded(@PathParam("val") @Encoded String val);
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ String echoFormParams(MultivaluedMap<String, String> formMap);
+
+ @POST
+ @Path("/echoformparams2")
+ String echoFormParams2(@FormParam("foo") String[] foo);
+
+ @POST
+ @Path("/echoformparams3")
+ String echoFormParams3(@Form TestForm form);
+
+ @Path("/foo/bar/{baz}")
+ SubResource getBar(@PathParam("baz") String baz);
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+ @GET
+ @Path("/trigger/unsupported")
+ String throwException();
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ List<String[]> getCommaSeparated();
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ String[] getCommaSeparatedStrings();
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ Integer[] getCommaSeparatedIntegers();
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,153 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-
-import javax.ws.rs.core.MultivaluedMap;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("interfaceStatelessComponentTestResource")
- at Scope(ScopeType.EVENT)
-public class InterfaceStatelessComponentTestResourceBean extends TestResource implements InterfaceStatelessComponentTestResource
-{
-
- protected final String INSTANCE_CODE_KEY = "interfaceStatelessComponentTestResource.instanceCode";
-
- // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
- public InterfaceStatelessComponentTestResourceBean()
- {
- Integer instanceCode;
- if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
- {
- assert !instanceCode.equals(hashCode());
- }
- Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
- }
-
- protected void assertStateless()
- {
- assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
- }
-
- @In
- TestComponent testComponent;
-
- @Override
- public String echoUri()
- {
- assertStateless();
- return super.echoUri();
- }
-
- @Override
- public String echoQueryParam(String bar)
- {
- assertStateless();
- return super.echoQueryParam(bar);
- }
-
- @Override
- public String echoHeaderParam(String bar)
- {
- assertStateless();
- return super.echoHeaderParam(bar);
- }
-
- @Override
- public String echoCookieParam(String bar)
- {
- assertStateless();
- return super.echoCookieParam(bar);
- }
-
- @Override
- public String echoTwoParams(String one, String two)
- {
- assertStateless();
- return super.echoTwoParams(one, two);
- }
-
- @Override
- public String echoEncoded(String val)
- {
- assertStateless();
- return super.echoEncoded(val);
- }
-
- @Override
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- assertStateless();
- return super.echoFormParams(formMap);
- }
-
- @Override
- public String echoFormParams2(String[] foo)
- {
- assertStateless();
- return super.echoFormParams2(foo);
- }
-
- @Override
- public String echoFormParams3(TestForm form)
- {
- assertStateless();
- return super.echoFormParams3(form);
- }
-
- @Override
- public SubResource getBar(String baz)
- {
- assertStateless();
- return super.getBar(baz);
- }
-
- @Override
- public long convertPathParam(GregorianCalendar isoDate)
- {
- assertStateless();
- return super.convertPathParam(isoDate);
- }
-
- @Override
- public String throwException()
- {
- assertStateless();
- return super.throwException();
- }
-
- @Override
- public List<String[]> getCommaSeparated()
- {
- assertStateless();
- assert headers.getAcceptableMediaTypes().size() == 2;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
- assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
- return testComponent.getCommaSeparated();
- }
-
- @Override
- public String[] getCommaSeparatedStrings()
- {
- assertStateless();
- return super.getCommaSeparatedStrings();
- }
-
- @Override
- public Integer[] getCommaSeparatedIntegers()
- {
- assertStateless();
- return super.getCommaSeparatedIntegers();
- }
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,153 @@
+package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceStatelessComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceStatelessComponentTestResourceBean extends TestResource implements InterfaceStatelessComponentTestResource
+{
+
+ protected final String INSTANCE_CODE_KEY = "interfaceStatelessComponentTestResource.instanceCode";
+
+ // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
+ public InterfaceStatelessComponentTestResourceBean()
+ {
+ Integer instanceCode;
+ if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
+ {
+ assert !instanceCode.equals(hashCode());
+ }
+ Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+ }
+
+ protected void assertStateless()
+ {
+ assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+ }
+
+ @In
+ TestComponent testComponent;
+
+ @Override
+ public String echoUri()
+ {
+ assertStateless();
+ return super.echoUri();
+ }
+
+ @Override
+ public String echoQueryParam(String bar)
+ {
+ assertStateless();
+ return super.echoQueryParam(bar);
+ }
+
+ @Override
+ public String echoHeaderParam(String bar)
+ {
+ assertStateless();
+ return super.echoHeaderParam(bar);
+ }
+
+ @Override
+ public String echoCookieParam(String bar)
+ {
+ assertStateless();
+ return super.echoCookieParam(bar);
+ }
+
+ @Override
+ public String echoTwoParams(String one, String two)
+ {
+ assertStateless();
+ return super.echoTwoParams(one, two);
+ }
+
+ @Override
+ public String echoEncoded(String val)
+ {
+ assertStateless();
+ return super.echoEncoded(val);
+ }
+
+ @Override
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ assertStateless();
+ return super.echoFormParams(formMap);
+ }
+
+ @Override
+ public String echoFormParams2(String[] foo)
+ {
+ assertStateless();
+ return super.echoFormParams2(foo);
+ }
+
+ @Override
+ public String echoFormParams3(TestForm form)
+ {
+ assertStateless();
+ return super.echoFormParams3(form);
+ }
+
+ @Override
+ public SubResource getBar(String baz)
+ {
+ assertStateless();
+ return super.getBar(baz);
+ }
+
+ @Override
+ public long convertPathParam(GregorianCalendar isoDate)
+ {
+ assertStateless();
+ return super.convertPathParam(isoDate);
+ }
+
+ @Override
+ public String throwException()
+ {
+ assertStateless();
+ return super.throwException();
+ }
+
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ assertStateless();
+ assert headers.getAcceptableMediaTypes().size() == 2;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+ assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+ return testComponent.getCommaSeparated();
+ }
+
+ @Override
+ public String[] getCommaSeparatedStrings()
+ {
+ assertStateless();
+ return super.getCommaSeparatedStrings();
+ }
+
+ @Override
+ public Integer[] getCommaSeparatedIntegers()
+ {
+ assertStateless();
+ return super.getCommaSeparatedIntegers();
+ }
+}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain)
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,20 @@
+package org.jboss.seam.example.restbay.resteasy.plain;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.GET;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/")
+public class PlainRootResource
+{
+
+ @GET
+ @Produces("text/plain")
+ public String getResource()
+ {
+ return "Root";
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,142 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.plain;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MultivaluedMap;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Path("/plainTest")
-public class PlainTestResource extends TestResource
-{
-
- @GET
- @Path("/echouri")
- @Override
- public String echoUri()
- {
- return super.echoUri();
- }
-
- @GET
- @Path("/echoquery")
- @Override
- public String echoQueryParam(@QueryParam("bar") String bar)
- {
- return super.echoQueryParam(bar);
- }
-
- @GET
- @Path("/echoheader")
- @Override
- public String echoHeaderParam(@HeaderParam("bar") String bar)
- {
- return super.echoHeaderParam(bar);
- }
-
- @GET
- @Path("/echocookie")
- @Override
- public String echoCookieParam(@CookieParam("bar") String bar)
- {
- return super.echoCookieParam(bar);
- }
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- @Override
- public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
- {
- return super.echoTwoParams(one, two);
- }
-
- @GET
- @Path("/echoencoded/{val}")
- @Override
- public String echoEncoded(@PathParam("val") @Encoded String val)
- {
- return super.echoEncoded(val);
- }
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- @Override
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- return super.echoFormParams(formMap);
- }
-
- @POST
- @Path("/echoformparams2")
- @Override
- public String echoFormParams2(@FormParam("foo") String[] foo)
- {
- return super.echoFormParams2(foo);
- }
-
- @POST
- @Path("/echoformparams3")
- @Override
- public String echoFormParams3(@Form TestForm form)
- {
- return super.echoFormParams3(form);
- }
-
- @Path("/foo/bar/{baz}")
- @Override
- public SubResource getBar(@PathParam("baz") String baz)
- {
- return super.getBar(baz);
- }
-
- @GET
- @Path("/convertDate/{isoDate}")
- @Override
- public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
- {
- return super.convertPathParam(isoDate);
- }
-
- @GET
- @Path("/trigger/unsupported")
- @Override
- public String throwException()
- {
- return super.throwException();
- }
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- @Override
- public List<String[]> getCommaSeparated()
- {
- return super.getCommaSeparated();
- }
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- @Override
- public String[] getCommaSeparatedStrings()
- {
- return super.getCommaSeparatedStrings();
- }
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- @Override
- public Integer[] getCommaSeparatedIntegers()
- {
- return super.getCommaSeparatedIntegers();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,142 @@
+package org.jboss.seam.example.restbay.resteasy.plain;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/plainTest")
+public class PlainTestResource extends TestResource
+{
+
+ @GET
+ @Path("/echouri")
+ @Override
+ public String echoUri()
+ {
+ return super.echoUri();
+ }
+
+ @GET
+ @Path("/echoquery")
+ @Override
+ public String echoQueryParam(@QueryParam("bar") String bar)
+ {
+ return super.echoQueryParam(bar);
+ }
+
+ @GET
+ @Path("/echoheader")
+ @Override
+ public String echoHeaderParam(@HeaderParam("bar") String bar)
+ {
+ return super.echoHeaderParam(bar);
+ }
+
+ @GET
+ @Path("/echocookie")
+ @Override
+ public String echoCookieParam(@CookieParam("bar") String bar)
+ {
+ return super.echoCookieParam(bar);
+ }
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ @Override
+ public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+ {
+ return super.echoTwoParams(one, two);
+ }
+
+ @GET
+ @Path("/echoencoded/{val}")
+ @Override
+ public String echoEncoded(@PathParam("val") @Encoded String val)
+ {
+ return super.echoEncoded(val);
+ }
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ @Override
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ return super.echoFormParams(formMap);
+ }
+
+ @POST
+ @Path("/echoformparams2")
+ @Override
+ public String echoFormParams2(@FormParam("foo") String[] foo)
+ {
+ return super.echoFormParams2(foo);
+ }
+
+ @POST
+ @Path("/echoformparams3")
+ @Override
+ public String echoFormParams3(@Form TestForm form)
+ {
+ return super.echoFormParams3(form);
+ }
+
+ @Path("/foo/bar/{baz}")
+ @Override
+ public SubResource getBar(@PathParam("baz") String baz)
+ {
+ return super.getBar(baz);
+ }
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ @Override
+ public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+ {
+ return super.convertPathParam(isoDate);
+ }
+
+ @GET
+ @Path("/trigger/unsupported")
+ @Override
+ public String throwException()
+ {
+ return super.throwException();
+ }
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ return super.getCommaSeparated();
+ }
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ @Override
+ public String[] getCommaSeparatedStrings()
+ {
+ return super.getCommaSeparatedStrings();
+ }
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ @Override
+ public Integer[] getCommaSeparatedIntegers()
+ {
+ return super.getCommaSeparatedIntegers();
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,63 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.provider;
-
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.ScopeType;
-
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * @author Christian Bauer
- */
- at Name("applicationComponentTestProvider")
- at Scope(ScopeType.APPLICATION)
- at Provider
- at Produces("text/plain")
-public class ApplicationComponentTestProvider implements MessageBodyWriter
-{
-
- @In
- TestComponent testComponent;
-
- public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return aClass.isArray() && (aClass.getComponentType().equals(String.class)) ;
- }
-
- public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return -1;
- }
-
- public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
- MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
- {
- String[] strings = (String[])o;
-
- StringBuilder line = new StringBuilder();
-
- line.append(testComponent.getTestString()).append(",");
-
- for (String string : strings)
- {
- line.append(string).append(",");
- }
- if (line.length()>0) {
- line.deleteCharAt(line.length() - 1);
- }
-
- outputStream.write(line.toString().getBytes());
-
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,64 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.ScopeType;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("applicationComponentTestProvider")
+ at Scope(ScopeType.APPLICATION)
+ at Provider
+ at Produces("text/plain")
+public class ApplicationComponentTestProvider implements MessageBodyWriter
+{
+
+ // TODO: Retracted support for Seam component providers, injection shouldn't happen, see https://jira.jboss.org/jira/browse/JBSEAM-4247
+ @In
+ TestComponent testComponent = new TestComponent();
+
+ public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return aClass.isArray() && (aClass.getComponentType().equals(String.class)) ;
+ }
+
+ public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return -1;
+ }
+
+ public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+ MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+ {
+ String[] strings = (String[])o;
+
+ StringBuilder line = new StringBuilder();
+
+ line.append(testComponent.getTestString()).append(",");
+
+ for (String string : strings)
+ {
+ line.append(string).append(",");
+ }
+ if (line.length()>0) {
+ line.deleteCharAt(line.length() - 1);
+ }
+
+ outputStream.write(line.toString().getBytes());
+
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,58 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.provider;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.MediaType;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * @author Christian Bauer
- */
- at Name("interfaceApplicationComponentTestProvider")
- at Scope(ScopeType.APPLICATION)
-public class InterfaceApplicationComponenTestProviderBean implements InterfaceApplicationComponentTestProvider
-{
-
- @In
- TestComponent testComponent;
-
- public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return aClass.isArray() && (aClass.getComponentType().equals(Integer.class)) ;
- }
-
- public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return -1;
- }
-
- public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
- MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
- {
- Integer[] integers = (Integer[])o;
-
- StringBuilder line = new StringBuilder();
-
- line.append(testComponent.getTestString()).append(",");
-
- for (Integer integer : integers)
- {
- line.append(integer).append(",");
- }
- if (line.length()>0) {
- line.deleteCharAt(line.length() - 1);
- }
-
- outputStream.write(line.toString().getBytes());
-
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,58 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceApplicationComponentTestProvider")
+ at Scope(ScopeType.APPLICATION)
+public class InterfaceApplicationComponenTestProviderBean implements InterfaceApplicationComponentTestProvider
+{
+
+ @In
+ TestComponent testComponent;
+
+ public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return aClass.isArray() && (aClass.getComponentType().equals(Integer.class)) ;
+ }
+
+ public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return -1;
+ }
+
+ public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+ MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+ {
+ Integer[] integers = (Integer[])o;
+
+ StringBuilder line = new StringBuilder();
+
+ line.append(testComponent.getTestString()).append(",");
+
+ for (Integer integer : integers)
+ {
+ line.append(integer).append(",");
+ }
+ if (line.length()>0) {
+ line.deleteCharAt(line.length() - 1);
+ }
+
+ outputStream.write(line.toString().getBytes());
+
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,15 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.provider;
-
-import javax.ws.rs.Produces;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-
-/**
- * @author Christian Bauer
- */
- at Provider
- at Produces("text/plain")
-public interface InterfaceApplicationComponentTestProvider extends MessageBodyWriter
-{
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,15 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author Christian Bauer
+ */
+ at Provider
+ at Produces("text/plain")
+public interface InterfaceApplicationComponentTestProvider extends MessageBodyWriter
+{
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,42 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.provider;
-
-import org.jboss.resteasy.spi.StringConverter;
-
-import javax.ws.rs.ext.Provider;
-import java.util.GregorianCalendar;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-
-/**
- * Converts QueryParam etc. strings to GregorianCalendar if they are in ISO date format
- *
- * @author Christian Bauer
- */
- at Provider
-public class PlainResteasyStringConverterProvider implements StringConverter<GregorianCalendar>
-{
- public static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
-
- public GregorianCalendar fromString(String s)
- {
- SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
- GregorianCalendar cal = new GregorianCalendar();
- try
- {
- cal.setTime(sdf.parse(s));
- }
- catch (ParseException e)
- {
- throw new RuntimeException(e);
- }
- return cal;
-
- }
-
- // TODO: RESTEasy doesn't seem to use that at all
- public String toString(GregorianCalendar gregorianCalendar)
- {
- SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
- return sdf.format(gregorianCalendar.getTime());
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,42 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.resteasy.spi.StringConverter;
+
+import javax.ws.rs.ext.Provider;
+import java.util.GregorianCalendar;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+
+/**
+ * Converts QueryParam etc. strings to GregorianCalendar if they are in ISO date format
+ *
+ * @author Christian Bauer
+ */
+ at Provider
+public class PlainResteasyStringConverterProvider implements StringConverter<GregorianCalendar>
+{
+ public static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
+
+ public GregorianCalendar fromString(String s)
+ {
+ SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
+ GregorianCalendar cal = new GregorianCalendar();
+ try
+ {
+ cal.setTime(sdf.parse(s));
+ }
+ catch (ParseException e)
+ {
+ throw new RuntimeException(e);
+ }
+ return cal;
+
+ }
+
+ // TODO: RESTEasy doesn't seem to use that at all
+ public String toString(GregorianCalendar gregorianCalendar)
+ {
+ SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
+ return sdf.format(gregorianCalendar.getTime());
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,50 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.provider;
-
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Provider
- at Produces("text/csv")
-public class PlainTestProvider implements MessageBodyWriter
-{
-
- public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return List.class.isAssignableFrom(aClass);
- }
-
- public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
- {
- return -1;
- }
-
- public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
- MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
- {
- List<String[]> lines = (List<String[]>) o;
- StringBuilder cvs = new StringBuilder();
- for (String[] line : lines)
- {
- for (String field : line)
- {
- cvs.append(field).append(",");
- }
- cvs.deleteCharAt(cvs.length() - 1);
- cvs.append("\r\n");
- }
- outputStream.write(cvs.toString().getBytes());
-
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,50 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Provider
+ at Produces("text/csv")
+public class PlainTestProvider implements MessageBodyWriter
+{
+
+ public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return List.class.isAssignableFrom(aClass);
+ }
+
+ public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+ {
+ return -1;
+ }
+
+ public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+ MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+ {
+ List<String[]> lines = (List<String[]>) o;
+ StringBuilder csv = new StringBuilder();
+ for (String[] line : lines)
+ {
+ for (String field : line)
+ {
+ csv.append(field).append(",");
+ }
+ csv.deleteCharAt(csv.length() - 1);
+ csv.append("\r\n");
+ }
+ outputStream.write(csv.toString().getBytes());
+
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,199 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.statelesscomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.contexts.Contexts;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MultivaluedMap;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("statelessComponentTestResource")
- at Path("/statelessComponentTest")
- at Scope(ScopeType.STATELESS)
-public class StatelessComponentTestResource extends TestResource
-{
-
- protected final String INSTANCE_CODE_KEY = "statelessComponentTestResource.instanceCode";
-
- // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
- public StatelessComponentTestResource()
- {
- Integer instanceCode;
- if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
- {
- assert !instanceCode.equals(hashCode());
- }
- Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
- }
-
- protected void assertStateless()
- {
- assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
- }
-
- @In
- TestComponent testComponent;
-
- @GET
- @Path("/echouri")
- @Override
- public String echoUri()
- {
- assertStateless();
- return super.echoUri();
- }
-
- @GET
- @Path("/echoquery")
- @Override
- public String echoQueryParam(@QueryParam("bar") String bar)
- {
- assertStateless();
- return super.echoQueryParam(bar);
- }
-
- @GET
- @Path("/echoheader")
- @Override
- public String echoHeaderParam(@HeaderParam("bar") String bar)
- {
- assertStateless();
- return super.echoHeaderParam(bar);
- }
-
- @GET
- @Path("/echocookie")
- @Override
- public String echoCookieParam(@CookieParam("bar") String bar)
- {
- assertStateless();
- return super.echoCookieParam(bar);
- }
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- @Override
- public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
- {
- assertStateless();
- return super.echoTwoParams(one, two);
- }
-
- @GET
- @Path("/echoencoded/{val}")
- @Override
- public String echoEncoded(@PathParam("val") @Encoded String val)
- {
- assertStateless();
- return super.echoEncoded(val);
- }
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- @Override
- public String echoFormParams(MultivaluedMap<String, String> formMap)
- {
- assertStateless();
- return super.echoFormParams(formMap);
- }
-
- @POST
- @Path("/echoformparams2")
- @Override
- public String echoFormParams2(@FormParam("foo") String[] foo)
- {
- assertStateless();
- return super.echoFormParams2(foo);
- }
-
- @POST
- @Path("/echoformparams3")
- @Override
- public String echoFormParams3(@Form TestForm form)
- {
- assertStateless();
- return super.echoFormParams3(form);
- }
-
- @Path("/foo/bar/{baz}")
- @Override
- public SubResource getBar(@PathParam("baz") String baz)
- {
- assertStateless();
- return super.getBar(baz);
- }
-
- @GET
- @Path("/convertDate/{isoDate}")
- @Override
- public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
- {
- assertStateless();
- return super.convertPathParam(isoDate);
- }
-
- @GET
- @Path("/trigger/unsupported")
- @Override
- public String throwException()
- {
- assertStateless();
- return super.throwException();
- }
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- @Override
- public List<String[]> getCommaSeparated()
- {
- assertStateless();
- assert headers.getAcceptableMediaTypes().size() == 2;
- assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
- assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
- return testComponent.getCommaSeparated();
- }
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- @Override
- public String[] getCommaSeparatedStrings()
- {
- assertStateless();
- return super.getCommaSeparatedStrings();
- }
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- @Override
- public Integer[] getCommaSeparatedIntegers()
- {
- assertStateless();
- return super.getCommaSeparatedIntegers();
- }
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,199 @@
+package org.jboss.seam.example.restbay.resteasy.statelesscomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.contexts.Contexts;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("statelessComponentTestResource")
+ at Path("/statelessComponentTest")
+ at Scope(ScopeType.STATELESS)
+public class StatelessComponentTestResource extends TestResource
+{
+
+ protected final String INSTANCE_CODE_KEY = "statelessComponentTestResource.instanceCode";
+
+ // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
+ public StatelessComponentTestResource()
+ {
+ Integer instanceCode;
+ if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
+ {
+ assert !instanceCode.equals(hashCode());
+ }
+ Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+ }
+
+ protected void assertStateless()
+ {
+ assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+ }
+
+ @In
+ TestComponent testComponent;
+
+ @GET
+ @Path("/echouri")
+ @Override
+ public String echoUri()
+ {
+ assertStateless();
+ return super.echoUri();
+ }
+
+ @GET
+ @Path("/echoquery")
+ @Override
+ public String echoQueryParam(@QueryParam("bar") String bar)
+ {
+ assertStateless();
+ return super.echoQueryParam(bar);
+ }
+
+ @GET
+ @Path("/echoheader")
+ @Override
+ public String echoHeaderParam(@HeaderParam("bar") String bar)
+ {
+ assertStateless();
+ return super.echoHeaderParam(bar);
+ }
+
+ @GET
+ @Path("/echocookie")
+ @Override
+ public String echoCookieParam(@CookieParam("bar") String bar)
+ {
+ assertStateless();
+ return super.echoCookieParam(bar);
+ }
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ @Override
+ public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+ {
+ assertStateless();
+ return super.echoTwoParams(one, two);
+ }
+
+ @GET
+ @Path("/echoencoded/{val}")
+ @Override
+ public String echoEncoded(@PathParam("val") @Encoded String val)
+ {
+ assertStateless();
+ return super.echoEncoded(val);
+ }
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ @Override
+ public String echoFormParams(MultivaluedMap<String, String> formMap)
+ {
+ assertStateless();
+ return super.echoFormParams(formMap);
+ }
+
+ @POST
+ @Path("/echoformparams2")
+ @Override
+ public String echoFormParams2(@FormParam("foo") String[] foo)
+ {
+ assertStateless();
+ return super.echoFormParams2(foo);
+ }
+
+ @POST
+ @Path("/echoformparams3")
+ @Override
+ public String echoFormParams3(@Form TestForm form)
+ {
+ assertStateless();
+ return super.echoFormParams3(form);
+ }
+
+ @Path("/foo/bar/{baz}")
+ @Override
+ public SubResource getBar(@PathParam("baz") String baz)
+ {
+ assertStateless();
+ return super.getBar(baz);
+ }
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ @Override
+ public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+ {
+ assertStateless();
+ return super.convertPathParam(isoDate);
+ }
+
+ @GET
+ @Path("/trigger/unsupported")
+ @Override
+ public String throwException()
+ {
+ assertStateless();
+ return super.throwException();
+ }
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ @Override
+ public List<String[]> getCommaSeparated()
+ {
+ assertStateless();
+ assert headers.getAcceptableMediaTypes().size() == 2;
+ assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+ assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+ return testComponent.getCommaSeparated();
+ }
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ @Override
+ public String[] getCommaSeparatedStrings()
+ {
+ assertStateless();
+ return super.getCommaSeparatedStrings();
+ }
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ @Override
+ public Integer[] getCommaSeparatedIntegers()
+ {
+ assertStateless();
+ return super.getCommaSeparatedIntegers();
+ }
+}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,106 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.statelessejb;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ejb.Local;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.Path;
-import javax.ws.rs.GET;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.POST;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.Produces;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Local
- at Path("/statelessEjbTest")
-public interface StatelessEjbTestResource
-{
-
- // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
- // That's why we have to do it through parameter injection below
- @Context
- public void setUriInfo(UriInfo uriInfo);
-
- @Context
- public void setHeaders(HttpHeaders headers);
-
-
- @GET
- @Path("/echouri")
- String echoUri(@Context UriInfo uriInfo); // TODO
-
- @GET
- @Path("/echoquery")
- String echoQueryParam(@QueryParam("bar") String bar);
-
- @GET
- @Path("/echoheader")
- String echoHeaderParam(@HeaderParam("bar") String bar);
-
- @GET
- @Path("/echocookie")
- String echoCookieParam(@CookieParam("bar") String bar);
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
-
- @GET
- @Path("/echoencoded/{val}")
- String echoEncoded(@PathParam("val") @Encoded String val);
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- String echoFormParams(MultivaluedMap<String, String> formMap);
-
- @POST
- @Path("/echoformparams2")
- String echoFormParams2(@FormParam("foo") String[] foo);
-
- @POST
- @Path("/echoformparams3")
- String echoFormParams3(@Form TestForm form);
-
- @Path("/foo/bar/{baz}")
- SubResource getBar(@PathParam("baz") String baz);
-
- @GET
- @Path("/convertDate/{isoDate}")
- long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
-
- @GET
- @Path("/trigger/unsupported")
- String throwException();
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- String[] getCommaSeparatedStrings();
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- Integer[] getCommaSeparatedIntegers();
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,106 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejb;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ejb.Local;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.Path;
+import javax.ws.rs.GET;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.POST;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.Produces;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Local
+ at Path("/statelessEjbTest")
+public interface StatelessEjbTestResource
+{
+
+ // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
+ // That's why we have to do it through parameter injection below
+ @Context
+ public void setUriInfo(UriInfo uriInfo);
+
+ @Context
+ public void setHeaders(HttpHeaders headers);
+
+
+ @GET
+ @Path("/echouri")
+ String echoUri(@Context UriInfo uriInfo); // TODO
+
+ @GET
+ @Path("/echoquery")
+ String echoQueryParam(@QueryParam("bar") String bar);
+
+ @GET
+ @Path("/echoheader")
+ String echoHeaderParam(@HeaderParam("bar") String bar);
+
+ @GET
+ @Path("/echocookie")
+ String echoCookieParam(@CookieParam("bar") String bar);
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+ @GET
+ @Path("/echoencoded/{val}")
+ String echoEncoded(@PathParam("val") @Encoded String val);
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ String echoFormParams(MultivaluedMap<String, String> formMap);
+
+ @POST
+ @Path("/echoformparams2")
+ String echoFormParams2(@FormParam("foo") String[] foo);
+
+ @POST
+ @Path("/echoformparams3")
+ String echoFormParams3(@Form TestForm form);
+
+ @Path("/foo/bar/{baz}")
+ SubResource getBar(@PathParam("baz") String baz);
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+ @GET
+ @Path("/trigger/unsupported")
+ String throwException();
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ String[] getCommaSeparatedStrings();
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ Integer[] getCommaSeparatedIntegers();
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,35 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.statelessejb;
-
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-
-import javax.ejb.Stateless;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.UriInfo;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Stateless
-public class StatelessEjbTestResourceBean extends TestResource implements StatelessEjbTestResource
-{
-
- @javax.annotation.Resource // EJB injection!
- javax.ejb.SessionContext ejbSessionContext;
-
-
- public String echoUri(@Context UriInfo uriInfo)
- {
- assert ejbSessionContext != null; // Ensure this is executed in the EJB container
- setUriInfo(uriInfo);
- return super.echoUri();
- }
-
- public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
- {
- setHeaders(headers);
- return super.getCommaSeparated();
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,35 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejb;
+
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Stateless
+public class StatelessEjbTestResourceBean extends TestResource implements StatelessEjbTestResource
+{
+
+ @javax.annotation.Resource // EJB injection!
+ javax.ejb.SessionContext ejbSessionContext;
+
+
+ public String echoUri(@Context UriInfo uriInfo)
+ {
+ assert ejbSessionContext != null; // Ensure this is executed in the EJB container
+ setUriInfo(uriInfo);
+ return super.echoUri();
+ }
+
+ public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
+ {
+ setHeaders(headers);
+ return super.getCommaSeparated();
+ }
+
+}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,105 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
-
-import org.jboss.resteasy.annotations.Form;
-import org.jboss.seam.example.restbay.resteasy.TestForm;
-import org.jboss.seam.example.restbay.resteasy.SubResource;
-
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.GET;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.UriInfo;
-import javax.ejb.Local;
-import java.util.List;
-import java.util.GregorianCalendar;
-
-/**
- * @author Christian Bauer
- */
- at Local
- at Path("/statelessEjbComponentTest")
-public interface StatelessEjbComponentTestResource
-{
- // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
- // That's why we have to do it through parameter injection below
- @Context
- public void setUriInfo(UriInfo uriInfo);
-
- @Context
- public void setHeaders(HttpHeaders headers);
-
-
- @GET
- @Path("/echouri")
- String echoUri(@Context UriInfo uriInfo); // TODO
-
- @GET
- @Path("/echoquery")
- String echoQueryParam(@QueryParam("bar") String bar);
-
- @GET
- @Path("/echoheader")
- String echoHeaderParam(@HeaderParam("bar") String bar);
-
- @GET
- @Path("/echocookie")
- String echoCookieParam(@CookieParam("bar") String bar);
-
- @GET
- @Path("/echotwoparams/{1}/{2}")
- String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
-
- @GET
- @Path("/echoencoded/{val}")
- String echoEncoded(@PathParam("val") @Encoded String val);
-
- @POST
- @Path("/echoformparams")
- @Consumes("application/x-www-form-urlencoded")
- String echoFormParams(MultivaluedMap<String, String> formMap);
-
- @POST
- @Path("/echoformparams2")
- String echoFormParams2(@FormParam("foo") String[] foo);
-
- @POST
- @Path("/echoformparams3")
- String echoFormParams3(@Form TestForm form);
-
- @Path("/foo/bar/{baz}")
- SubResource getBar(@PathParam("baz") String baz);
-
- @GET
- @Path("/convertDate/{isoDate}")
- long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
-
- @GET
- @Path("/trigger/unsupported")
- String throwException();
-
- @GET
- @Path("/commaSeparated")
- @Produces("text/csv")
- List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
-
- @GET
- @Path("/commaSeparatedStrings")
- @Produces("text/plain")
- String[] getCommaSeparatedStrings();
-
- @GET
- @Path("/commaSeparatedIntegers")
- @Produces("text/plain")
- Integer[] getCommaSeparatedIntegers();
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,105 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.GET;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
+import javax.ejb.Local;
+import java.util.List;
+import java.util.GregorianCalendar;
+
+/**
+ * @author Christian Bauer
+ */
+ at Local
+ at Path("/statelessEjbComponentTest")
+public interface StatelessEjbComponentTestResource
+{
+ // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
+ // That's why we have to do it through parameter injection below
+ @Context
+ public void setUriInfo(UriInfo uriInfo);
+
+ @Context
+ public void setHeaders(HttpHeaders headers);
+
+
+ @GET
+ @Path("/echouri")
+ String echoUri(@Context UriInfo uriInfo); // TODO
+
+ @GET
+ @Path("/echoquery")
+ String echoQueryParam(@QueryParam("bar") String bar);
+
+ @GET
+ @Path("/echoheader")
+ String echoHeaderParam(@HeaderParam("bar") String bar);
+
+ @GET
+ @Path("/echocookie")
+ String echoCookieParam(@CookieParam("bar") String bar);
+
+ @GET
+ @Path("/echotwoparams/{1}/{2}")
+ String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+ @GET
+ @Path("/echoencoded/{val}")
+ String echoEncoded(@PathParam("val") @Encoded String val);
+
+ @POST
+ @Path("/echoformparams")
+ @Consumes("application/x-www-form-urlencoded")
+ String echoFormParams(MultivaluedMap<String, String> formMap);
+
+ @POST
+ @Path("/echoformparams2")
+ String echoFormParams2(@FormParam("foo") String[] foo);
+
+ @POST
+ @Path("/echoformparams3")
+ String echoFormParams3(@Form TestForm form);
+
+ @Path("/foo/bar/{baz}")
+ SubResource getBar(@PathParam("baz") String baz);
+
+ @GET
+ @Path("/convertDate/{isoDate}")
+ long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+ @GET
+ @Path("/trigger/unsupported")
+ String throwException();
+
+ @GET
+ @Path("/commaSeparated")
+ @Produces("text/csv")
+ List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
+
+ @GET
+ @Path("/commaSeparatedStrings")
+ @Produces("text/plain")
+ String[] getCommaSeparatedStrings();
+
+ @GET
+ @Path("/commaSeparatedIntegers")
+ @Produces("text/plain")
+ Integer[] getCommaSeparatedIntegers();
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,45 +0,0 @@
-package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.example.restbay.resteasy.TestComponent;
-import org.jboss.seam.example.restbay.resteasy.TestResource;
-
-import javax.ejb.Stateless;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.UriInfo;
-import java.util.List;
-
-/**
- * @author Christian Bauer
- */
- at Name("statelessEjbComponentTestResource")
- at Scope(ScopeType.STATELESS)
- at Stateless
-public class StatelessEjbComponentTestResourceBean extends TestResource implements StatelessEjbComponentTestResource
-{
-
- @javax.annotation.Resource // EJB injection!
- javax.ejb.SessionContext ejbSessionContext;
-
- @In
- TestComponent testComponent;
-
- public String echoUri(@Context UriInfo uriInfo)
- {
- assert ejbSessionContext != null; // Ensure this is executed in the EJB container
- setUriInfo(uriInfo);
- return super.echoUri();
- }
-
- public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
- {
- setHeaders(headers);
- super.getCommaSeparated(); // Ignore return, just to run the assertions
- return testComponent.getCommaSeparated();
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,45 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("statelessEjbComponentTestResource")
+ at Scope(ScopeType.STATELESS)
+ at Stateless
+public class StatelessEjbComponentTestResourceBean extends TestResource implements StatelessEjbComponentTestResource
+{
+
+ @javax.annotation.Resource // EJB injection!
+ javax.ejb.SessionContext ejbSessionContext;
+
+ @In
+ TestComponent testComponent;
+
+ public String echoUri(@Context UriInfo uriInfo)
+ {
+ assert ejbSessionContext != null; // Ensure this is executed in the EJB container
+ setUriInfo(uriInfo);
+ return super.echoUri();
+ }
+
+ public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
+ {
+ setHeaders(headers);
+ super.getCommaSeparated(); // Ignore return, just to run the assertions
+ return testComponent.getCommaSeparated();
+ }
+
+}
\ No newline at end of file
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,24 @@
+package org.jboss.seam.example.restbay.resteasy.subresource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.Name;
+
+ at Path("/garage")
+ at Produces("text/plain")
+ at Name("garage")
+public class Garage
+{
+ @GET
+ public String getInfo() {
+ return "garage";
+ }
+
+ @Path("/1")
+ public Vehicle getVehicle() {
+ return (Vehicle) Component.getInstance(Vehicle.class);
+ }
+}
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,16 @@
+package org.jboss.seam.example.restbay.resteasy.subresource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.annotations.Name;
+
+ at Name("vehicle")
+ at Produces("text/plain")
+public class Vehicle
+{
+ @GET
+ public String getInfo() {
+ return "Honda";
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,85 +0,0 @@
-package org.jboss.seam.example.restbay.test;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class AuctionServiceTest extends ResourceSeamTest
-{
-
- @Override
- public Map<String, Object> getDefaultHeaders()
- {
- return new HashMap<String, Object>()
- {{
- put("Accept", "text/plain");
- }};
- }
-
- @Test
- public void testCategories() throws Exception
- {
-
- new ResourceRequest(Method.GET, "/restv1/category")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- String[] lines = response.getContentAsString().split("\n");
- assert lines[0].equals("1,Antiques");
- assert lines[1].equals("2,Art");
- assert lines[2].equals("3,Books");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, "/restv1/category/1")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("Antiques");
- }
-
- }.run();
-
- }
-
- @Test
- public void testAuctions() throws Exception
- {
-
- new ResourceRequest(Method.GET, "/restv1/auction")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- // TODO: Assert content
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, "/restv1/auction/19264723")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("Whistler's Mother, original painting by James McNeill Whistler");
- }
-
- }.run();
-
- }
-
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/AuctionServiceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,102 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class AuctionServiceTest extends SeamTest
+{
+
+ ResourceRequestEnvironment requestEnv;
+
+ @BeforeClass
+ public void prepareEnv() throws Exception
+ {
+ requestEnv = new ResourceRequestEnvironment(this)
+ {
+ @Override
+ public Map<String, Object> getDefaultHeaders()
+ {
+ return new HashMap<String, Object>()
+ {{
+ put("Accept", "text/plain");
+ }};
+ }
+ };
+ }
+
+ @Test
+ public void testCategories() throws Exception
+ {
+
+ // Just verify we can do that, even if it doesn't make much sense
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1/category").run();
+
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/category")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ String[] lines = response.getContentAsString().split("\n");
+ assert lines[0].equals("1,Antiques");
+ assert lines[1].equals("2,Art");
+ assert lines[2].equals("3,Books");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/category/1")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("Antiques");
+ }
+
+ }.run();
+
+ }
+
+ @Test
+ public void testAuctions() throws Exception
+ {
+
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/auction")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ // TODO: Assert content
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/auction/19264723")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("Whistler's Mother, original painting by James McNeill Whistler");
+ }
+
+ }.run();
+
+ }
+
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,377 +0,0 @@
-package org.jboss.seam.example.restbay.test;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import static org.testng.Assert.assertEquals;
-
-import javax.servlet.http.Cookie;
-import javax.ws.rs.core.MediaType;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * <p>
- * This is the test matrix for resources:
- * </p>
- *
- * <pre>
- * | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
- * ---------------------------------------------------------------------------------------------
- * Plain JAX-RS Resource | OK | - | - | - | -
- * ---------------------------------------------------------------------------------------------
- * POJO Seam Component Resource | OK | ? | ? | OK | OK
- * ---------------------------------------------------------------------------------------------
- * POJO interface-annotated Component | OK | ? | ? | OK | OK
- * ---------------------------------------------------------------------------------------------
- * EJB Plain SLSB Resource | - | - | - | - | OK
- * ---------------------------------------------------------------------------------------------
- * EJB SLSB Seam Component Resource | - | - | - | - | OK
- * ---------------------------------------------------------------------------------------------
- * EJB SFSB Seam Component Resource | ? | ? | ? | ? | -
- * ---------------------------------------------------------------------------------------------
- * </pre>
- *
- * <p>
- * Note that all EJB resources are always @Path annotated on their interface, not the implementation class.
- * </p>
- *
- * <p>
- * This is the test matrix for providers:
- * </p>
- *
- * <pre>
- * | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
- * ---------------------------------------------------------------------------------------------
- * Plain JAX-RS Provider | - | - | - | - | OK
- * ---------------------------------------------------------------------------------------------
- * RESTEasy StringConverter Provider | - | - | - | - | OK
- * ---------------------------------------------------------------------------------------------
- * RESTEasy StringConverter Component | ? | - | - | ? | ?
- * ---------------------------------------------------------------------------------------------
- * POJO Seam Component Provider | ? | - | - | OK | ?
- * ---------------------------------------------------------------------------------------------
- * POJO interface-annotated Component | ? | - | - | OK | ?
- * ---------------------------------------------------------------------------------------------
- * EJB Plain SLSB Provider | - | - | - | - | ?
- * ---------------------------------------------------------------------------------------------
- * EJB SLSB Seam Component Provider | - | - | - | - | ?
- * ---------------------------------------------------------------------------------------------
- * EJB SFSB Seam Component Resource | ? | - | - | ? | -
- * ---------------------------------------------------------------------------------------------
- * </pre>
- *
- */
-public class BasicServiceTest extends ResourceSeamTest
-{
-
- @Override
- public Map<String, Object> getDefaultHeaders()
- {
- return new HashMap<String, Object>()
- {{
- put("Accept", "text/plain");
- }};
- }
-
- @Override
- public String getServletPath()
- {
- return "/override/seam/resource/is/not/my/path/for/SeamResourceServlet";
- }
-
- @DataProvider(name = "queryPaths")
- public Object[][] getData()
- {
- return new String[][] {
- { "/restv1/plainTest" },
-
- { "/restv1/eventComponentTest" },
- { "/restv1/applicationComponentTest" },
- { "/restv1/statelessComponentTest" },
-
- { "/restv1/interfaceEventComponentTest" },
- { "/restv1/interfaceApplicationComponentTest" },
- { "/restv1/interfaceStatelessComponentTest" },
-
- { "/restv1/statelessEjbTest" },
- { "/restv1/statelessEjbComponentTest" }
- };
- }
-
- @Test(dataProvider = "queryPaths")
- public void testExeptionMapping(final String resourcePath) throws Exception
- {
- new ResourceRequest(Method.GET, resourcePath + "/trigger/unsupported")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 501;
- assert response.getStatusMessage().equals("The request operation is not supported: foo");
- }
-
- }.run();
-
- }
-
- @Test(dataProvider = "queryPaths")
- public void testEchos(final String resourcePath) throws Exception
- {
- new ResourceRequest(Method.GET, resourcePath + "/echouri")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().endsWith("/echouri");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/echoquery")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.setQueryString("asdf=123");
- request.addQueryParameter("bar", "bbb");
- request.addQueryParameter("baz", "bzzz");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("bbb");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/echoheader")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.addHeader("bar", "baz");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("baz");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/echocookie")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.addCookie(new Cookie("bar", "baz"));
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("baz");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/foo/bar/asdf")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
-
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("bar: asdf");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/echotwoparams/foo/bar")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("foobar");
- }
-
- }.run();
-
- }
-
- @Test(dataProvider = "queryPaths")
- public void testEncoding(final String resourcePath) throws Exception
- {
- new ResourceRequest(Method.GET, resourcePath + "/echoencoded/foo bar")
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("foo%20bar");
- }
-
- }.run();
- }
-
- @Test(dataProvider = "queryPaths")
- public void testFormHandling(final String resourcePath) throws Exception
- {
- new ResourceRequest(Method.POST, resourcePath + "/echoformparams")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- request.addParameter("foo", new String[]{"bar", "baz"});
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("barbaz");
- }
-
- }.run();
-
- new ResourceRequest(Method.POST, resourcePath + "/echoformparams2")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- request.addParameter("foo", new String[]{"bar", "baz"});
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("barbaz");
- }
-
- }.run();
-
- new ResourceRequest(Method.POST, resourcePath + "/echoformparams3")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- request.addHeader("bar", "foo");
- request.addParameter("foo", new String[]{"bar", "baz"});
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("foobarbaz");
- }
-
- }.run();
-
- }
-
- @Test(dataProvider = "queryPaths")
- public void testStringConverter(final String resourcePath) throws Exception
- {
- final String ISO_DATE = "2007-07-10T14:54:56-0500";
- final String ISO_DATE_MILLIS = "1184097296000";
-
- new ResourceRequest(Method.GET, resourcePath + "/convertDate/" + ISO_DATE)
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assertEquals(response.getContentAsString(), ISO_DATE_MILLIS);
- }
-
- }.run();
-
- }
-
- @Test(dataProvider = "queryPaths")
- public void testProvider(final String resourcePath) throws Exception
- {
-
- new ResourceRequest(Method.GET, resourcePath + "/commaSeparated")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.addHeader("Accept", "text/csv");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("foo,bar\r\nasdf,123\r\n");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/commaSeparatedStrings")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.addHeader("Accept", "text/plain");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("abc,foo,bar,baz");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, resourcePath + "/commaSeparatedIntegers")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- request.addHeader("Accept", "text/plain");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assert response.getStatus() == 200;
- assert response.getContentAsString().equals("abc,1,2,3");
- }
-
- }.run();
-
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/BasicServiceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,407 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.BeforeClass;
+import static org.testng.Assert.assertEquals;
+
+import javax.servlet.http.Cookie;
+import javax.ws.rs.core.MediaType;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * This is the test matrix for resources:
+ * </p>
+ *
+ * <pre>
+ * | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
+ * ---------------------------------------------------------------------------------------------
+ * Plain JAX-RS Resource | OK | - | - | - | -
+ * ---------------------------------------------------------------------------------------------
+ * POJO Seam Component Resource | OK | ? | ? | OK | OK
+ * ---------------------------------------------------------------------------------------------
+ * POJO interface-annotated Component | OK | ? | ? | OK | OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB Plain SLSB Resource | - | - | - | - | OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB SLSB Seam Component Resource | - | - | - | - | OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB SFSB Seam Component Resource | ? | ? | ? | ? | -
+ * ---------------------------------------------------------------------------------------------
+ * </pre>
+ *
+ * <p>
+ * Note that all EJB resources are always @Path annotated on their interface, not the implementation class.
+ * </p>
+ *
+ * <p>
+ * This is the test matrix for providers:
+ * </p>
+ *
+ * <pre>
+ * | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
+ * ---------------------------------------------------------------------------------------------
+ * Plain JAX-RS Provider | - | - | - | - | OK
+ * ---------------------------------------------------------------------------------------------
+ * RESTEasy StringConverter Provider | - | - | - | - | OK
+ * ---------------------------------------------------------------------------------------------
+ * RESTEasy StringConverter Component | ? | - | - | ? | ?
+ * ---------------------------------------------------------------------------------------------
+ * POJO Seam Component Provider | ? | - | - | OK | ?
+ * ---------------------------------------------------------------------------------------------
+ * POJO interface-annotated Component | ? | - | - | OK | ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB Plain SLSB Provider | - | - | - | - | ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB SLSB Seam Component Provider | - | - | - | - | ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB SFSB Seam Component Resource | ? | - | - | ? | -
+ * ---------------------------------------------------------------------------------------------
+ * </pre>
+ *
+ */
+public class BasicServiceTest extends SeamTest
+{
+
+ ResourceRequestEnvironment requestEnv;
+
+ @BeforeClass
+ public void prepareEnv() throws Exception
+ {
+ requestEnv = new ResourceRequestEnvironment(this)
+ {
+ @Override
+ public Map<String, Object> getDefaultHeaders()
+ {
+ return new HashMap<String, Object>()
+ {{
+ put("Accept", "text/plain");
+ }};
+ }
+
+ @Override
+ public String getServletPath()
+ {
+ return "/override/seam/resource/is/not/my/path/for/SeamResourceServlet";
+ }
+
+ };
+ }
+
+ @DataProvider(name = "queryPaths")
+ public Object[][] getData()
+ {
+ return new String[][] {
+ { "/restv1/plainTest" },
+
+ { "/restv1/eventComponentTest" },
+ { "/restv1/applicationComponentTest" },
+ { "/restv1/statelessComponentTest" },
+
+ { "/restv1/interfaceEventComponentTest" },
+ { "/restv1/interfaceApplicationComponentTest" },
+ { "/restv1/interfaceStatelessComponentTest" },
+
+ { "/restv1/statelessEjbTest" },
+ { "/restv1/statelessEjbComponentTest" }
+ };
+ }
+
+ @Test
+ public void testRootResource() throws Exception {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200);
+ assertEquals(response.getContentAsString(), "Root");
+ }
+
+ }.run();
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testExeptionMapping(final String resourcePath) throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/trigger/unsupported")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 501;
+ assert response.getStatusMessage().equals("The request operation is not supported: foo");
+ }
+
+ }.run();
+
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testEchos(final String resourcePath) throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echouri")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().endsWith("/echouri");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoquery")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.setQueryString("asdf=123");
+ request.addQueryParameter("bar", "bbb");
+ request.addQueryParameter("baz", "bzzz");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("bbb");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoheader")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addHeader("bar", "baz");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("baz");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echocookie")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addCookie(new Cookie("bar", "baz"));
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("baz");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/foo/bar/asdf")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("bar: asdf");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echotwoparams/foo/bar")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("foobar");
+ }
+
+ }.run();
+
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testEncoding(final String resourcePath) throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoencoded/foo bar")
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("foo%20bar");
+ }
+
+ }.run();
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testFormHandling(final String resourcePath) throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+ request.addParameter("foo", new String[]{"bar", "baz"});
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("barbaz");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams2")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+ request.addParameter("foo", new String[]{"bar", "baz"});
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("barbaz");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams3")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+ request.addHeader("bar", "foo");
+ request.addParameter("foo", new String[]{"bar", "baz"});
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("foobarbaz");
+ }
+
+ }.run();
+
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testStringConverter(final String resourcePath) throws Exception
+ {
+ final String ISO_DATE = "2007-07-10T14:54:56-0500";
+ final String ISO_DATE_MILLIS = "1184097296000";
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/convertDate/" + ISO_DATE)
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assertEquals(response.getContentAsString(), ISO_DATE_MILLIS);
+ }
+
+ }.run();
+
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testProvider(final String resourcePath) throws Exception
+ {
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparated")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addHeader("Accept", "text/csv");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("foo,bar\r\nasdf,123\r\n");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparatedStrings")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addHeader("Accept", "text/plain");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("abc,foo,bar,baz");
+ }
+
+ }.run();
+
+ new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparatedIntegers")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ request.addHeader("Accept", "text/plain");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ assert response.getContentAsString().equals("abc,1,2,3");
+ }
+ };
+ // }.run();
+ // TODO: Retracted support for Seam component providers, injection shouldn't happen, see https://jira.jboss.org/jira/browse/JBSEAM-4247
+
+ }
+}
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,82 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.dbunit.operation.DatabaseOperation;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
+import org.jboss.seam.mock.DBUnitSeamTest;
+
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ *
+ */
+public class CategoryServiceDBUnitTest extends DBUnitSeamTest
+{
+
+ protected void prepareDBUnitOperations() {
+ beforeTestOperations.add(
+ new DataSetOperation("org/jboss/seam/example/restbay/test/dbunitdata.xml", DatabaseOperation.CLEAN_INSERT)
+ );
+ }
+
+ // Or, if you don't want shared headers between test methods, just use
+ // it directly in your test method:
+
+ // new ResourceRequest(new ResourceRequestTest(this), Method.GET, ...).run();
+
+ ResourceRequestEnvironment sharedEnvironment;
+ @BeforeClass
+ public void prepareSharedEnvironment() throws Exception
+ {
+ sharedEnvironment = new ResourceRequestEnvironment(this)
+ {
+ @Override
+ public Map<String, Object> getDefaultHeaders()
+ {
+ return new HashMap<String, Object>()
+ {{
+ put("Accept", "text/plain");
+ }};
+ }
+ };
+ }
+
+ @Test
+ public void testCategories() throws Exception
+ {
+ // new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1/category")
+ // or:
+ new ResourceRequest(sharedEnvironment, Method.GET, "/restv1/category")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ // Or set it as default in environment
+ request.addHeader("Accept", "text/plain");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assert response.getStatus() == 200;
+ String[] lines = response.getContentAsString().split("\n");
+ assert lines[0].equals("16,foo");
+ assert lines[1].equals("17,bar");
+ assert lines[2].equals("18,baz");
+ }
+
+ }.run();
+
+ }
+
+
+}
Property changes on: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java
___________________________________________________________________
Name: svn:executable
+ *
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,163 +0,0 @@
-package org.jboss.seam.example.restbay.test;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.assertEquals;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
-public class ResourceHomeTest extends ResourceSeamTest
-{
-
- @DataProvider(name = "queryPaths")
- public Object[][] getData()
- {
- return new String[][]{ { "/configuredCategory" }, { "/extendedCategory" } };
- }
-
- @Test(dataProvider = "queryPaths")
- public void testResourceHomeRead(final String resourcePath) throws Exception
- {
- final String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>1</categoryId><name>Antiques</name></category>";
- final String path = "/restv1" + resourcePath + "/1";
-
- new ResourceRequest(Method.GET, path)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
- }
-
- }.run();
- }
-
- @Test(dataProvider = "queryPaths")
- public void testResourceHomeCreate(final String resourcePath) throws Exception
- {
- final String name = "Airplanes";
- final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><name>" + name + "</name></category>";
- final String mediaType = "application/xml";
- final String path = "/restv1" + resourcePath;
-
- new ResourceRequest(Method.POST, path)
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- // TODO for some reason content type must be set using both these
- // methods
- request.addHeader("Content-Type", mediaType);
- request.setContentType(mediaType);
- request.setContent(body.getBytes());
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 201, "Unexpected response code.");
- }
-
- }.run();
- }
-
- @Test(dataProvider = "queryPaths")
- public void testResourceHomeUpdate(String resourcePath) throws Exception
- {
- final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>5</categoryId><name>" + resourcePath.hashCode() + "</name></category>";
- final String mediaType = "application/xml";
- final String path = "/restv1" + resourcePath + "/5";
-
- new ResourceRequest(Method.PUT, path)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.setContentType(mediaType);
- request.addHeader("Content-Type", mediaType);
- request.setContent(body.getBytes());
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, path)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", mediaType);
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertEquals(response.getContentAsString(), body, "Unexpected response.");
- }
-
- }.run();
-
- }
-
- @Test
- public void testResourceHomeDelete() throws Exception
- {
-
- final String path = "/restv1/configuredCategory/15004";
-
- new ResourceRequest(Method.DELETE, path)
- {
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, path)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 404, "Unexpected response code.");
- }
-
- }.run();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceHomeTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,166 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertEquals;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+public class ResourceHomeTest extends SeamTest
+{
+
+ @DataProvider(name = "queryPaths")
+ public Object[][] getData()
+ {
+ return new String[][]{ { "/configuredCategory" }, { "/extendedCategory" } };
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testResourceHomeRead(final String resourcePath) throws Exception
+ {
+ final String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>1</categoryId><name>Antiques</name></category>";
+ final String path = "/restv1" + resourcePath + "/1";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testResourceHomeCreate(final String resourcePath) throws Exception
+ {
+ final String name = "Airplanes";
+ final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><name>" + name + "</name></category>";
+ final String mediaType = "application/xml";
+ final String path = "/restv1" + resourcePath;
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.POST, path)
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ // TODO for some reason content type must be set using both these
+ // methods
+ request.addHeader("Content-Type", mediaType);
+ request.setContentType(mediaType);
+ request.setContent(body.getBytes());
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 201, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testResourceHomeUpdate(String resourcePath) throws Exception
+ {
+ final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>5</categoryId><name>" + resourcePath.hashCode() + "</name></category>";
+ final String mediaType = "application/xml";
+ final String path = "/restv1" + resourcePath + "/5";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.PUT, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.setContentType(mediaType);
+ request.addHeader("Content-Type", mediaType);
+ request.setContent(body.getBytes());
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", mediaType);
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), body, "Unexpected response.");
+ }
+
+ }.run();
+
+ }
+
+ @Test
+ public void testResourceHomeDelete() throws Exception
+ {
+
+ final String path = "/restv1/configuredCategory/15004";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.DELETE, path)
+ {
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 404, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,52 +0,0 @@
-package org.jboss.seam.example.restbay.test;
-
-import static org.testng.Assert.assertEquals;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
-public class ResourceQueryTest extends ResourceSeamTest
-{
-
- @DataProvider(name = "queryPaths")
- public Object[][] getData()
- {
- String[][] data = new String[2][1];
- data[0][0] = "/configuredCategory";
- data[1][0] = "/extendedCategory";
- return data;
- }
-
- @Test(dataProvider = "queryPaths")
- public void testResourceQuery(String path) throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1" + path)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- request.setQueryString("start=2&show=2");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><collection><category><categoryId>3</categoryId><name>Books</name></category><category><categoryId>4</categoryId><name>Cameras and Photography</name></category></collection>";
- assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
- }
-
- }.run();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/ResourceQueryTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,55 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+public class ResourceQueryTest extends SeamTest
+{
+
+ @DataProvider(name = "queryPaths")
+ public Object[][] getData()
+ {
+ String[][] data = new String[2][1];
+ data[0][0] = "/configuredCategory";
+ data[1][0] = "/extendedCategory";
+ return data;
+ }
+
+ @Test(dataProvider = "queryPaths")
+ public void testResourceQuery(String path) throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1" + path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ request.setQueryString("start=2&show=2");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><collection><category><categoryId>3</categoryId><name>Books</name></category><category><categoryId>4</categoryId><name>Cameras and Photography</name></category></collection>";
+ assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,150 +0,0 @@
-package org.jboss.seam.example.restbay.test;
-
-import static org.testng.Assert.assertEquals;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class tests RESTEasy integration together with Seam Security.
- *
- * @author Jozef Hartinger
- */
-public class SecurityTest extends ResourceSeamTest
-{
-
- @Override
- public Map<String, Object> getDefaultHeaders()
- {
- return new HashMap<String, Object>()
- {{
- put("Accept", "text/plain");
- }};
- }
-
- @Test
- public void basicAuthTest() throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1/secured/admin")
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "text/plain");
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertEquals(response.getContentAsString(), "false", "Unexpected response.");
- }
-
- }.run();
- }
-
- @Test
- public void invalidCredentialsBasicAuthTest() throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1/secured")
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "text/plain");
- request.addHeader("Authorization", "Basic ZGVtbzpvbWVk"); // demo:omed
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(
- response.getHeader("WWW-Authenticate"),
- "Basic realm=\"Seam RestBay Application\"",
- "Invalid authentication header value"
- );
- assertEquals(response.getStatus(), 401, "Unexpected response code.");
- }
-
- }.run();
- }
-
- @Test
- public void adminRoleTest() throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1/secured/admin")
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "text/plain");
- request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertEquals(response.getContentAsString(), "true");
- }
-
- }.run();
- }
-
- @Test
- public void adminRoleTestWithRestriction() throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1/secured/restrictedAdmin")
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "text/plain");
- request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertEquals(response.getContentAsString(), "true");
- }
-
- }.run();
- }
-
- @Test
- public void invalidAdminAuthorization() throws Exception
- {
- new ResourceRequest(Method.GET, "/restv1/secured/restrictedAdmin")
- {
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "text/plain");
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- // See AuthorizationException mapping to 403 in pages.xml!
- assertEquals(response.getStatus(), 403, "Unexpected response code.");
- assert response.getStatusMessage().startsWith("Not authorized to access resource");
- }
-
- }.run();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SecurityTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,163 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class tests RESTEasy integration together with Seam Security.
+ *
+ * @author Jozef Hartinger
+ */
+public class SecurityTest extends SeamTest
+{
+
+ ResourceRequestEnvironment requestEnv;
+
+ @BeforeClass
+ public void prepareEnv() throws Exception
+ {
+ requestEnv = new ResourceRequestEnvironment(this)
+ {
+ @Override
+ public Map<String, Object> getDefaultHeaders()
+ {
+ return new HashMap<String, Object>()
+ {{
+ put("Accept", "text/plain");
+ }};
+ }
+ };
+ }
+
+ @Test
+ public void basicAuthTest() throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/admin")
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), "false", "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void invalidCredentialsBasicAuthTest() throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/secured")
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ request.addHeader("Authorization", "Basic ZGVtbzpvbWVk"); // demo:omed
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(
+ response.getHeader("WWW-Authenticate"),
+ "Basic realm=\"Seam RestBay Application\"",
+ "Invalid authentication header value"
+ );
+ assertEquals(response.getStatus(), 401, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void adminRoleTest() throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/admin")
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), "true");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void adminRoleTestWithRestriction() throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/restrictedAdmin")
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), "true");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void invalidAdminAuthorization() throws Exception
+ {
+ new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/restrictedAdmin")
+ {
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ // See AuthorizationException mapping to 403 in pages.xml!
+ assertEquals(response.getStatus(), 403, "Unexpected response code.");
+ assert response.getStatusMessage().startsWith("Not authorized to access resource");
+ }
+
+ }.run();
+ }
+
+}
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SubresourceTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SubresourceTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/SubresourceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,39 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+
+public class SubresourceTest extends SeamTest
+{
+ @Test
+ public void testSubresourceGET() throws Exception
+ {
+ final String path = "/restv1/garage/1";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), "Honda", "Unexpected response.");
+ }
+
+ }.run();
+ }
+}
Added: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/dbunitdata.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/dbunitdata.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/dbunitdata.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<dataset>
+
+ <category categoryId="16" name="foo"/>
+ <category categoryId="17" name="bar"/>
+ <category categoryId="18" name="baz"/>
+
+</dataset>
\ No newline at end of file
Property changes on: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/dbunitdata.xml
___________________________________________________________________
Name: svn:executable
+ *
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,35 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-
-<suite name="RestBay" verbose="2" parallel="false">
-
- <test name="RestBay: Basic Services">
- <classes>
- <class name="org.jboss.seam.example.restbay.test.BasicServiceTest"/>
- </classes>
- </test>
-
- <test name="RestBay: Auction Services">
- <classes>
- <class name="org.jboss.seam.example.restbay.test.AuctionServiceTest"/>
- </classes>
- </test>
-
- <test name="RestBay: ResourceHome">
- <classes>
- <class name="org.jboss.seam.example.restbay.test.ResourceHomeTest"/>
- </classes>
- </test>
-
- <test name="RestBay: ResourceQuery">
- <classes>
- <class name="org.jboss.seam.example.restbay.test.ResourceQueryTest"/>
- </classes>
- </test>
-
- <test name="RestBay: Security">
- <classes>
- <class name="org.jboss.seam.example.restbay.test.SecurityTest"/>
- </classes>
- </test>
-
-</suite>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,53 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+
+<suite name="RestBay" verbose="2" parallel="false">
+
+ <test name="RestBay Basic Services">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.BasicServiceTest"/>
+ </classes>
+ </test>
+
+ <test name="RestBay Auction Services">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.AuctionServiceTest"/>
+ </classes>
+ </test>
+
+ <test name="RestBay ResourceHome">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.ResourceHomeTest"/>
+ </classes>
+ </test>
+
+ <test name="RestBay ResourceQuery">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.ResourceQueryTest"/>
+ </classes>
+ </test>
+
+ <test name="RestBay Security">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.SecurityTest"/>
+ </classes>
+ </test>
+
+ <!-- JBSEAM-4039
+ <test name="RestBay Subresources">
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.SubresourceTest"/>
+ </classes>
+ </test>
+ -->
+
+ <test name="RestBay DBUnit Integration">
+
+ <parameter name="database" value="hsql"/>
+ <parameter name="datasourceJndiName" value="java:/restbayDatasource"/>
+
+ <classes>
+ <class name="org.jboss.seam.example.restbay.test.CategoryServiceDBUnitTest"/>
+ </classes>
+ </test>
+
+</suite>
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/view (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/view)
Deleted: branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,31 +0,0 @@
-<html>
-<head>
- <title>restBay Seam example</title>
-</head>
-
-<body>
-
-<p>This application does not have a human-user interface. Execute 'ant test' to run the unit tests
-and explore the source code.</p>
-
-<p>
-You can invoke some of the RESTful webservices directly in your browser though:
-</p>
-
-<ul>
- <li>
- <a href="http://localhost:8080/rest-bay/seam/resource/restv1/auction">GET /auction</a>
- </li>
- <li>
- <a href="http://localhost:8080/rest-bay/seam/resource/restv1/auction/19264723">GET /auction/{auctionId}</a>
- </li>
- <li>
- <a href="http://localhost:8080/rest-bay/seam/resource/restv1/category">GET /category/</a>
- </li>
- <li>
- <a href="http://localhost:8080/rest-bay/seam/resource/restv1/category/4">GET /category/{categoryId}</a>
- </li>
-</ul>
-
-</body>
-</html>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/restbay/view/index.html 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,31 @@
+<html>
+<head>
+ <title>restBay Seam example</title>
+</head>
+
+<body>
+
+<p>This application does not have a human-user interface. Execute 'ant test' to run the unit tests
+and explore the source code.</p>
+
+<p>
+You can invoke some of the RESTful webservices directly in your browser though:
+</p>
+
+<ul>
+ <li>
+ <a href="http://localhost:8080/rest-bay/seam/resource/restv1/auction">GET /auction</a>
+ </li>
+ <li>
+ <a href="http://localhost:8080/rest-bay/seam/resource/restv1/auction/19264723">GET /auction/{auctionId}</a>
+ </li>
+ <li>
+ <a href="http://localhost:8080/rest-bay/seam/resource/restv1/category">GET /category/</a>
+ </li>
+ <li>
+ <a href="http://localhost:8080/rest-bay/seam/resource/restv1/category/4">GET /category/{categoryId}</a>
+ </li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="Tasks" default="deploy" basedir=".">
-
- <!-- Naming -->
- <property name="Name" value="JBoss Tasks Example"/>
- <property name="example.name" value="jboss-seam-tasks"/>
-
- <!-- Libraries to include -->
- <property name="seam.ui.lib" value="yes"/>
- <property name="seam.debug.lib" value="yes"/>
- <property name="facelets.lib" value="yes"/>
- <!--<property name="richfaces.lib" value="yes"/>-->
- <property name="seam.resteasy.lib" value="yes"/>
-
- <!-- Datasource -->
- <property name="example.ds" value="jboss-seam-tasks-ds.xml"/>
-
- <import file="../build.xml"/>
-</project>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/build.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+
+<project name="Tasks" default="deploy" basedir=".">
+
+ <!-- Naming -->
+ <property name="Name" value="JBoss Tasks Example"/>
+ <property name="example.name" value="jboss-seam-tasks"/>
+
+ <!-- Libraries to include -->
+ <property name="seam.ui.lib" value="yes"/>
+ <property name="seam.debug.lib" value="yes"/>
+ <property name="facelets.lib" value="yes"/>
+ <!--<property name="richfaces.lib" value="yes"/>-->
+ <property name="seam.resteasy.lib" value="yes"/>
+
+ <!-- Datasource -->
+ <property name="example.ds" value="jboss-seam-tasks-ds.xml"/>
+
+ <import file="../build.xml"/>
+</project>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<application xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
- version="5">
-
- <display-name>Seam Tasks</display-name>
-
- <module>
- <web>
- <web-uri>jboss-seam-tasks.war</web-uri>
- <context-root>/seam-tasks</context-root>
- </web>
- </module>
-
- <module>
- <ejb>jboss-seam-tasks.jar</ejb>
- </module>
-
- <module>
- <ejb>jboss-seam.jar</ejb>
- </module>
-
-</application>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/application.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
+ version="5">
+
+ <display-name>Seam Tasks</display-name>
+
+ <module>
+ <web>
+ <web-uri>jboss-seam-tasks.war</web-uri>
+ <context-root>/seam-tasks</context-root>
+ </web>
+ </module>
+
+ <module>
+ <ejb>jboss-seam-tasks.jar</ejb>
+ </module>
+
+ <module>
+ <ejb>jboss-seam.jar</ejb>
+ </module>
+
+</application>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
- version="3.0">
-
- <interceptors>
- <interceptor>
- <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
- </interceptor>
- </interceptors>
-
- <assembly-descriptor>
- <interceptor-binding>
- <ejb-name>*</ejb-name>
- <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
- </interceptor-binding>
- </assembly-descriptor>
-
-</ejb-jar>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/ejb-jar.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+ version="3.0">
+
+ <interceptors>
+ <interceptor>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor>
+ </interceptors>
+
+ <assembly-descriptor>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor-binding>
+ </assembly-descriptor>
+
+</ejb-jar>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="tasksDatabase">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <jta-data-source>java:/tasksDatasource</jta-data-source>
- <properties>
- <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
- <property name="hibernate.show_sql" value="true"/>
- <!-- These are the default for JBoss EJB3, but not for HEM: -->
- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
- <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
- <property name="jboss.entity.manager.factory.jndi.name" value="java:/tasksEntityManagerFactory"/>
- </properties>
- </persistence-unit>
-</persistence>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/META-INF/persistence.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ version="1.0">
+ <persistence-unit name="tasksDatabase">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:/tasksDatasource</jta-data-source>
+ <properties>
+ <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+ <property name="hibernate.show_sql" value="true"/>
+ <!-- These are the default for JBoss EJB3, but not for HEM: -->
+ <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
+ <property name="jboss.entity.manager.factory.jndi.name" value="java:/tasksEntityManagerFactory"/>
+ </properties>
+ </persistence-unit>
+</persistence>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<components xmlns="http://jboss.com/products/seam/components"
- xmlns:core="http://jboss.com/products/seam/core" xmlns:security="http://jboss.com/products/seam/security"
- xmlns:transaction="http://jboss.com/products/seam/transaction"
- xmlns:persistence="http://jboss.com/products/seam/persistence"
- xmlns:framework="http://jboss.com/products/seam/framework" xmlns:web="http://jboss.com/products/seam/web"
- xmlns:resteasy="http://jboss.com/products/seam/resteasy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd
- http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
- http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd
- http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
- http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.2.xsd
- http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
- http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
- http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.2.xsd">
-
- <core:init jndi-pattern="@jndiPattern@" debug="false" />
-
- <core:manager conversation-timeout="120000"
- concurrent-request-timeout="500" conversation-id-parameter="cid" />
-
- <transaction:ejb-transaction />
-
- <persistence:managed-persistence-context
- name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/tasksEntityManagerFactory" />
-
- <framework:entity-home name="userHome"
- entity-class="org.jboss.seam.example.tasks.entity.User" auto-create="true" />
-
- <framework:entity-home name="taskHome"
- entity-class="org.jboss.seam.example.tasks.entity.Task" auto-create="true" />
-
- <framework:entity-query name="categoryQuery"
- ejbql="select c from Category c">
- <framework:restrictions>
- <value>c.owner.username =
- #{user.username}</value>
- </framework:restrictions>
- </framework:entity-query>
-
- <resteasy:resource-query name="categoryResourceQuery"
- entity-query="#{categoryQuery}" path="/auth/category"
- entity-class="org.jboss.seam.example.tasks.entity.Category"
- media-types="application/xml application/json application/fastinfoset"/>
-
- <resteasy:application resource-path-prefix="/v1">
- <resteasy:media-type-mappings>
- <key>xml</key>
- <value>application/xml</value>
- </resteasy:media-type-mappings>
- </resteasy:application>
-
-
- <web:authentication-filter url-pattern="/seam/resource/v1/auth/*"
- auth-type="basic" realm="Seam Tasks Application" />
-
- <security:identity authenticate-method="#{authenticator.authenticate}" />
-
-</components>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/components.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+ xmlns:core="http://jboss.com/products/seam/core" xmlns:security="http://jboss.com/products/seam/security"
+ xmlns:transaction="http://jboss.com/products/seam/transaction"
+ xmlns:persistence="http://jboss.com/products/seam/persistence"
+ xmlns:framework="http://jboss.com/products/seam/framework" xmlns:web="http://jboss.com/products/seam/web"
+ xmlns:resteasy="http://jboss.com/products/seam/resteasy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd
+ http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
+ http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd
+ http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
+ http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.2.xsd
+ http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
+ http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
+ http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.2.xsd">
+
+ <core:init jndi-pattern="@jndiPattern@" debug="false" />
+
+ <core:manager conversation-timeout="120000"
+ concurrent-request-timeout="500" conversation-id-parameter="cid" />
+
+ <transaction:ejb-transaction />
+
+ <persistence:managed-persistence-context
+ name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/tasksEntityManagerFactory" />
+
+ <framework:entity-home name="userHome"
+ entity-class="org.jboss.seam.example.tasks.entity.User" auto-create="true" />
+
+ <framework:entity-home name="taskHome"
+ entity-class="org.jboss.seam.example.tasks.entity.Task" auto-create="true" />
+
+ <framework:entity-query name="categoryQuery"
+ ejbql="select c from Category c">
+ <framework:restrictions>
+ <value>c.owner.username =
+ #{user.username}</value>
+ </framework:restrictions>
+ </framework:entity-query>
+
+ <resteasy:resource-query name="categoryResourceQuery"
+ entity-query="#{categoryQuery}" path="/auth/category"
+ entity-class="org.jboss.seam.example.tasks.entity.Category"
+ media-types="application/xml application/json application/fastinfoset"/>
+
+ <resteasy:application resource-path-prefix="/v1">
+ <resteasy:media-type-mappings>
+ <key>xml</key>
+ <value>application/xml</value>
+ </resteasy:media-type-mappings>
+ </resteasy:application>
+
+
+ <web:authentication-filter url-pattern="/seam/resource/v1/auth/*"
+ auth-type="basic" realm="Seam Tasks Application" />
+
+ <security:identity authenticate-method="#{authenticator.authenticate}" />
+
+</components>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<faces-config version="1.2"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
-
- <application>
- <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
- </application>
-
-</faces-config>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/faces-config.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,11 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config version="1.2"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
+
+ <application>
+ <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
+ </application>
+
+</faces-config>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<pages xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.com/products/seam/pages /home/jharting/jboss/workspace/Seam_trunk_working_copy/src/main/org/jboss/seam/pages-2.2.xsd"
-
- no-conversation-view-id="/main.xhtml" login-view-id="/login.xhtml">
-
- <page view-id="/login.xhtml">
- <navigation from-action="#{identity.login}">
- <rule if="#{identity.loggedIn}">
- <redirect view-id="/tasks.xhtml" />
- </rule>
- </navigation>
- </page>
-
- <page view-id="/tasks.xhtml" login-required="true" />
-
- <page view-id="/categories.xhtml" login-required="true" />
-
- <page view-id="/resolved.xhtml" login-required="true" />
-
- <exception class="javax.persistence.NoResultException"
- log-level="debug">
- <http-error error-code="404" />
- </exception>
-
- <exception class="org.jboss.seam.security.AuthorizationException"
- log-level="debug">
- <http-error error-code="403">
- <message>Unauthorized</message>
- </http-error>
- </exception>
-
- <exception class="org.jboss.seam.framework.EntityNotFoundException"
- log-level="debug">
- <http-error error-code="404">
- <message>Not Found</message>
- </http-error>
- </exception>
-
- <exception
- class="org.jboss.seam.example.tasks.exceptions.ResourceNotFoundException"
- log-level="debug">
- <http-error error-code="404">
- <message>Not Found</message>
- </http-error>
- </exception>
-
- <exception class="java.sql.BatchUpdateException" log-level="debug">
- <http-error error-code="409">
- <message>Conflict</message>
- </http-error>
- </exception>
-
- <exception class="javax.persistence.EntityExistsException" log-level="debug">
- <http-error error-code="409">
- <message>Conflict</message>
- </http-error>
- </exception>
-
- <exception class="org.hibernate.PropertyValueException"
- log-level="debug">
- <http-error error-code="400">
- <message>Bad request</message>
- </http-error>
- </exception>
-
- <exception>
- <http-error error-code="500" />
- </exception>
-
-</pages>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/pages.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pages xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://jboss.com/products/seam/pages /home/jharting/jboss/workspace/Seam_trunk_working_copy/src/main/org/jboss/seam/pages-2.2.xsd"
+
+ no-conversation-view-id="/main.xhtml" login-view-id="/login.xhtml">
+
+ <page view-id="/login.xhtml">
+ <navigation from-action="#{identity.login}">
+ <rule if="#{identity.loggedIn}">
+ <redirect view-id="/tasks.xhtml" />
+ </rule>
+ </navigation>
+ </page>
+
+ <page view-id="/tasks.xhtml" login-required="true" />
+
+ <page view-id="/categories.xhtml" login-required="true" />
+
+ <page view-id="/resolved.xhtml" login-required="true" />
+
+ <exception class="javax.persistence.NoResultException"
+ log-level="debug">
+ <http-error error-code="404" />
+ </exception>
+
+ <exception class="org.jboss.seam.security.AuthorizationException"
+ log-level="debug">
+ <http-error error-code="403">
+ <message>Unauthorized</message>
+ </http-error>
+ </exception>
+
+ <exception class="org.jboss.seam.framework.EntityNotFoundException"
+ log-level="debug">
+ <http-error error-code="404">
+ <message>Not Found</message>
+ </http-error>
+ </exception>
+
+ <exception
+ class="org.jboss.seam.example.tasks.exceptions.ResourceNotFoundException"
+ log-level="debug">
+ <http-error error-code="404">
+ <message>Not Found</message>
+ </http-error>
+ </exception>
+
+ <exception class="java.sql.BatchUpdateException" log-level="debug">
+ <http-error error-code="409">
+ <message>Conflict</message>
+ </http-error>
+ </exception>
+
+ <exception class="javax.persistence.EntityExistsException" log-level="debug">
+ <http-error error-code="409">
+ <message>Conflict</message>
+ </http-error>
+ </exception>
+
+ <exception class="org.hibernate.PropertyValueException"
+ log-level="debug">
+ <http-error error-code="400">
+ <message>Bad request</message>
+ </http-error>
+ </exception>
+
+ <exception>
+ <http-error error-code="500" />
+ </exception>
+
+</pages>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
- <display-name>Seam Tasks Example</display-name>
-
- <!-- Seam -->
-
- <listener>
- <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
- </listener>
-
- <servlet>
- <servlet-name>Seam Resource Servlet</servlet-name>
- <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Seam Resource Servlet</servlet-name>
- <url-pattern>/seam/resource/*</url-pattern>
- </servlet-mapping>
-
- <filter>
- <filter-name>Seam Filter</filter-name>
- <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>Seam Filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <!-- JSF -->
-
- <context-param>
- <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
- <param-value>.xhtml</param-value>
- </context-param>
-
- <context-param>
- <param-name>facelets.DEVELOPMENT</param-name>
- <param-value>true</param-value>
- </context-param>
-
- <servlet>
- <servlet-name>Faces Servlet</servlet-name>
- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.seam</url-pattern>
- </servlet-mapping>
-
- <session-config>
- <session-timeout>10</session-timeout>
- </session-config>
-
-</web-app>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/WEB-INF/web.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <display-name>Seam Tasks Example</display-name>
+
+ <!-- Seam -->
+
+ <listener>
+ <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <url-pattern>/seam/resource/*</url-pattern>
+ </servlet-mapping>
+
+ <filter>
+ <filter-name>Seam Filter</filter-name>
+ <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Seam Filter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- JSF -->
+
+ <context-param>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>facelets.DEVELOPMENT</param-name>
+ <param-value>true</param-value>
+ </context-param>
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.seam</url-pattern>
+ </servlet-mapping>
+
+ <session-config>
+ <session-timeout>10</session-timeout>
+ </session-config>
+
+</web-app>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,3 +0,0 @@
-# The pattern in components.xml is replaced by an application server specific value in the ant build. This value is used for running tests
-
-jndiPattern \#{ejbName}/local
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/components.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,3 @@
+# The pattern in components.xml is replaced by an application server specific value in the ant build. This value is used for running tests
+
+jndiPattern \#{ejbName}/local
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,24 +0,0 @@
-insert into User (username, password, admin) values ('demo', 'demo', false)
-insert into User (username, password, admin) values ('admin', 'password', true)
-
-insert into Category (id, name, owner_username) values (1, 'School', 'demo')
- insert into Task (id, name, resolved, created, updated, category_id) values (2, 'Build the Turing machine', false, '2009-04-19 16:11:05', null, 1)
- insert into Task (id, name, resolved, created, updated, category_id) values (3, 'Finish the RESTEasy-Seam integration example', false, '2009-04-19 16:11:05', null, 1)
- insert into Task (id, name, resolved, created, updated, category_id) values (4, 'Learn new vocab for English conversations', false, '2009-04-19 16:11:05', null, 1)
- insert into Task (id, name, resolved, created, updated, category_id) values (5, 'Prepare a presentation for webdesign seminar', false, '2009-04-19 16:11:05', null, 1)
-
-insert into Category (id, name, owner_username) values (2, 'Work', 'demo')
- insert into Task (id, name, resolved, created, updated, category_id) values (6, 'Pick up meal tickets', false, '2009-04-19 16:11:05', null, 2)
-insert into Category (id, name, owner_username) values (3, 'Buy', 'demo')
- insert into Task (id, name, resolved, created, updated, category_id) values (7, 'Buy milk', false, '2009-04-19 16:11:05', null, 3)
- insert into Task (id, name, resolved, created, updated, category_id) values (8, 'Buy an infinite tape', false, '2009-04-19 16:11:05', null, 3)
- insert into Task (id, name, resolved, created, updated, category_id) values (9, 'Order books', false, '2009-04-19 16:11:05', null, 3)
- insert into Task (id, name, resolved, created, updated, category_id) values (10, 'Buy a turtle', true, '2009-04-19 16:11:05', '2009-04-22 13:15:33', 3)
-insert into Category (id, name, owner_username) values (4, 'Other stuff', 'demo')
- insert into Task (id, name, resolved, created, updated, category_id) values (11, 'Learn to fly', false, '2009-04-19 16:11:05', null, 4)
- insert into Task (id, name, resolved, created, updated, category_id) values (12, 'Visit grandma', false, '2009-04-19 16:11:05', null, 4)
- insert into Task (id, name, resolved, created, updated, category_id) values (13, 'Extend passport', false, '2009-04-19 16:11:05', null, 4)
- insert into Task (id, name, resolved, created, updated, category_id) values (14, 'Get a haircut', false, '2009-04-19 16:11:05', null, 4)
-
-insert into Category (id, name, owner_username) values (5, 'Administration', 'admin')
-insert into Task (id, name, resolved, created, updated, category_id) values (15, 'Ban demo user :-)', false, '2009-05-04 12:35:13', null, 5)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/import.sql 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,24 @@
+insert into User (username, password, admin) values ('demo', 'demo', false)
+insert into User (username, password, admin) values ('admin', 'password', true)
+
+insert into Category (id, name, owner_username) values (1, 'School', 'demo')
+ insert into Task (id, name, resolved, created, updated, category_id) values (2, 'Build the Turing machine', false, '2009-04-19 16:11:05', null, 1)
+ insert into Task (id, name, resolved, created, updated, category_id) values (3, 'Finish the RESTEasy-Seam integration example', false, '2009-04-19 16:11:05', null, 1)
+ insert into Task (id, name, resolved, created, updated, category_id) values (4, 'Learn new vocab for English conversations', false, '2009-04-19 16:11:05', null, 1)
+ insert into Task (id, name, resolved, created, updated, category_id) values (5, 'Prepare a presentation for webdesign seminar', false, '2009-04-19 16:11:05', null, 1)
+
+insert into Category (id, name, owner_username) values (2, 'Work', 'demo')
+ insert into Task (id, name, resolved, created, updated, category_id) values (6, 'Pick up meal tickets', false, '2009-04-19 16:11:05', null, 2)
+insert into Category (id, name, owner_username) values (3, 'Buy', 'demo')
+ insert into Task (id, name, resolved, created, updated, category_id) values (7, 'Buy milk', false, '2009-04-19 16:11:05', null, 3)
+ insert into Task (id, name, resolved, created, updated, category_id) values (8, 'Buy an infinite tape', false, '2009-04-19 16:11:05', null, 3)
+ insert into Task (id, name, resolved, created, updated, category_id) values (9, 'Order books', false, '2009-04-19 16:11:05', null, 3)
+ insert into Task (id, name, resolved, created, updated, category_id) values (10, 'Buy a turtle', true, '2009-04-19 16:11:05', '2009-04-22 13:15:33', 3)
+insert into Category (id, name, owner_username) values (4, 'Other stuff', 'demo')
+ insert into Task (id, name, resolved, created, updated, category_id) values (11, 'Learn to fly', false, '2009-04-19 16:11:05', null, 4)
+ insert into Task (id, name, resolved, created, updated, category_id) values (12, 'Visit grandma', false, '2009-04-19 16:11:05', null, 4)
+ insert into Task (id, name, resolved, created, updated, category_id) values (13, 'Extend passport', false, '2009-04-19 16:11:05', null, 4)
+ insert into Task (id, name, resolved, created, updated, category_id) values (14, 'Get a haircut', false, '2009-04-19 16:11:05', null, 4)
+
+insert into Category (id, name, owner_username) values (5, 'Administration', 'admin')
+insert into Task (id, name, resolved, created, updated, category_id) values (15, 'Ban demo user :-)', false, '2009-05-04 12:35:13', null, 5)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE datasources
- PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
- "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
-
-<datasources>
- <local-tx-datasource>
- <jndi-name>tasksDatasource</jndi-name>
- <connection-url>jdbc:hsqldb:.</connection-url>
- <driver-class>org.hsqldb.jdbcDriver</driver-class>
- <user-name>sa</user-name>
- <password></password>
- </local-tx-datasource>
-</datasources>
-
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/resources/jboss-seam-tasks-ds.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE datasources
+ PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
+ "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
+
+<datasources>
+ <local-tx-datasource>
+ <jndi-name>tasksDatasource</jndi-name>
+ <connection-url>jdbc:hsqldb:.</connection-url>
+ <driver-class>org.hsqldb.jdbcDriver</driver-class>
+ <user-name>sa</user-name>
+ <password></password>
+ </local-tx-datasource>
+</datasources>
+
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/seam.properties
===================================================================
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/resources/seam.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/resources/seam.properties)
===================================================================
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,77 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks;
-
-import javax.persistence.EntityManager;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Out;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.example.tasks.entity.User;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.security.Credentials;
-import org.jboss.seam.security.Identity;
-
-/**
- * Application authenticator. User is added to admin role if the admin property
- * is set to true.
- *
- * @author Jozef Hartinger
- *
- */
- at Name("authenticator")
- at Scope(ScopeType.EVENT)
-public class Authenticator
-{
-
- @In
- private Identity identity;
- @In
- private Credentials credentials;
- @In
- private EntityManager entityManager;
- @Out(scope = ScopeType.SESSION)
- private User user;
- @Logger
- private Log log;
-
- public boolean authenticate()
- {
- user = entityManager.find(User.class, credentials.getUsername());
- if ((user != null) && (user.getPassword().equals(credentials.getPassword())))
- {
- if (user.isAdmin())
- {
- log.info("Admin rights granted for {0}", user.getUsername());
- identity.addRole("admin");
- }
- return true;
- }
- else
- {
- return false;
- }
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/Authenticator.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks;
+
+import javax.persistence.EntityManager;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.tasks.entity.User;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.security.Credentials;
+import org.jboss.seam.security.Identity;
+
+/**
+ * Application authenticator. User is added to admin role if the admin property
+ * is set to true.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Name("authenticator")
+ at Scope(ScopeType.EVENT)
+public class Authenticator
+{
+
+ @In
+ private Identity identity;
+ @In
+ private Credentials credentials;
+ @In
+ private EntityManager entityManager;
+ @Out(scope = ScopeType.SESSION)
+ private User user;
+ @Logger
+ private Log log;
+
+ public boolean authenticate()
+ {
+ user = entityManager.find(User.class, credentials.getUsername());
+ if ((user != null) && (user.getPassword().equals(credentials.getPassword())))
+ {
+ if (user.isAdmin())
+ {
+ log.info("Admin rights granted for {0}", user.getUsername());
+ identity.addRole("admin");
+ }
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,45 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks;
-
-import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.example.tasks.entity.Category;
-import org.jboss.seam.framework.EntityHome;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
- at Name("categoryHome")
- at AutoCreate
-public class CategoryHome extends EntityHome<Category>
-{
-
- public Category findByUsernameAndCategory(String username, String category)
- {
- setInstance((Category) getEntityManager().createNamedQuery("categoryByNameAndUser").setParameter("username", username).setParameter("category", category).getSingleResult());
- return getInstance();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/CategoryHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,45 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks;
+
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.example.tasks.entity.Category;
+import org.jboss.seam.framework.EntityHome;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Name("categoryHome")
+ at AutoCreate
+public class CategoryHome extends EntityHome<Category>
+{
+
+ public Category findByUsernameAndCategory(String username, String category)
+ {
+ setInstance((Category) getEntityManager().createNamedQuery("categoryByNameAndUser").setParameter("username", username).setParameter("category", category).getSingleResult());
+ return getInstance();
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,41 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks;
-
-/**
- * This exception is mapped to 404 HTTP response code.
- * @author Jozef Hartinger
- *
- */
-public class ResourceNotFoundException extends RuntimeException
-{
-
- public ResourceNotFoundException()
- {
- }
-
- public ResourceNotFoundException(String message)
- {
- super(message);
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/ResourceNotFoundException.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks;
+
+/**
+ * This exception is mapped to 404 HTTP response code.
+ * @author Jozef Hartinger
+ *
+ */
+public class ResourceNotFoundException extends RuntimeException
+{
+
+ public ResourceNotFoundException()
+ {
+ }
+
+ public ResourceNotFoundException(String message)
+ {
+ super(message);
+ }
+
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,116 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.entity;
-
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import org.hibernate.validator.NotNull;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
- at Entity
- at XmlRootElement
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = { "NAME", "OWNER_USERNAME" }))
- at NamedQuery(name = "categoryByNameAndUser", query = "select category from Category category where category.owner.username like :username and category.name like :category")
-public class Category
-{
- private Long id;
- private String name;
- private List<Task> tasks;
- private User owner;
-
- public Category()
- {
- }
-
- public Category(Long id, String name, List<Task> tasks, User owner)
- {
- this.id = id;
- this.name = name;
- this.tasks = tasks;
- this.owner = owner;
- }
-
- @Id
- @GeneratedValue
- @XmlTransient
- public Long getId()
- {
- return id;
- }
-
- public void setId(Long id)
- {
- this.id = id;
- }
-
- @NotNull
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- @OneToMany(mappedBy = "category", cascade = CascadeType.REMOVE)
- @XmlTransient
- public List<Task> getTasks()
- {
- return tasks;
- }
-
- public void setTasks(List<Task> tasks)
- {
- this.tasks = tasks;
- }
-
- @ManyToOne
- @XmlTransient
- public User getOwner()
- {
- return owner;
- }
-
- public void setOwner(User owner)
- {
- this.owner = owner;
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Category.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,116 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.entity;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Entity
+ at XmlRootElement
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = { "NAME", "OWNER_USERNAME" }))
+ at NamedQuery(name = "categoryByNameAndUser", query = "select category from Category category where category.owner.username like :username and category.name like :category")
+public class Category
+{
+ private Long id;
+ private String name;
+ private List<Task> tasks;
+ private User owner;
+
+ public Category()
+ {
+ }
+
+ public Category(Long id, String name, List<Task> tasks, User owner)
+ {
+ this.id = id;
+ this.name = name;
+ this.tasks = tasks;
+ this.owner = owner;
+ }
+
+ @Id
+ @GeneratedValue
+ @XmlTransient
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ @NotNull
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "category", cascade = CascadeType.REMOVE)
+ @XmlTransient
+ public List<Task> getTasks()
+ {
+ return tasks;
+ }
+
+ public void setTasks(List<Task> tasks)
+ {
+ this.tasks = tasks;
+ }
+
+ @ManyToOne
+ @XmlTransient
+ public User getOwner()
+ {
+ return owner;
+ }
+
+ public void setOwner(User owner)
+ {
+ this.owner = owner;
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,140 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.entity;
-
-import java.util.Date;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQuery;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import org.hibernate.validator.NotNull;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
- at Entity
- at XmlRootElement
- at NamedQuery(name="taskByNameAndCategory", query="select task from Task task where task.name like :task and task.category.id = :category")
-public class Task
-{
- private Long id;
- private String name;
- private boolean resolved;
- private Date created;
- private Date updated;
- private Category category;
-
- @Id
- @GeneratedValue
- public Long getId()
- {
- return id;
- }
-
- public void setId(Long id)
- {
- this.id = id;
- }
-
- @NotNull
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- @NotNull
- public boolean isResolved()
- {
- return resolved;
- }
-
- public void setResolved(boolean resolved)
- {
- this.resolved = resolved;
- }
-
- @Temporal(TemporalType.TIMESTAMP)
- @XmlElement(name="created")
- @NotNull
- public Date getCreated()
- {
- return created;
- }
-
- public void setCreated(Date created)
- {
- this.created = created;
- }
-
- @Temporal(TemporalType.TIMESTAMP)
- public Date getUpdated()
- {
- return updated;
- }
-
- public void setUpdated(Date updated)
- {
- this.updated = updated;
- }
-
- @ManyToOne
- @XmlTransient
- @NotNull
- public Category getCategory()
- {
- return category;
- }
-
-
- public void setCategory(Category category)
- {
- this.category = category;
- }
-
- @Transient
- @XmlElement(name="category")
- public String getCategoryName() {
- return category.getName();
- }
-
- @Transient
- public User getOwner() {
- return category.getOwner();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/Task.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,140 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.entity;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Entity
+ at XmlRootElement
+ at NamedQuery(name="taskByNameAndCategory", query="select task from Task task where task.name like :task and task.category.id = :category")
+public class Task
+{
+ private Long id;
+ private String name;
+ private boolean resolved;
+ private Date created;
+ private Date updated;
+ private Category category;
+
+ @Id
+ @GeneratedValue
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ @NotNull
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @NotNull
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void setResolved(boolean resolved)
+ {
+ this.resolved = resolved;
+ }
+
+ @Temporal(TemporalType.TIMESTAMP)
+ @XmlElement(name="created")
+ @NotNull
+ public Date getCreated()
+ {
+ return created;
+ }
+
+ public void setCreated(Date created)
+ {
+ this.created = created;
+ }
+
+ @Temporal(TemporalType.TIMESTAMP)
+ public Date getUpdated()
+ {
+ return updated;
+ }
+
+ public void setUpdated(Date updated)
+ {
+ this.updated = updated;
+ }
+
+ @ManyToOne
+ @XmlTransient
+ @NotNull
+ public Category getCategory()
+ {
+ return category;
+ }
+
+
+ public void setCategory(Category category)
+ {
+ this.category = category;
+ }
+
+ @Transient
+ @XmlElement(name="category")
+ public String getCategoryName() {
+ return category.getName();
+ }
+
+ @Transient
+ public User getOwner() {
+ return category.getOwner();
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,91 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.entity;
-
-import java.util.List;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import org.hibernate.validator.NotNull;
-
-/**
- *
- * @author Jozef Hartinger
- *
- */
- at Entity
- at XmlRootElement
-public class User
-{
- private String username;
- private String password;
- private List<Category> categories;
- private boolean admin;
-
- @Id
- public String getUsername()
- {
- return username;
- }
-
- public void setUsername(String username)
- {
- this.username = username;
- }
-
- @NotNull
- public String getPassword()
- {
- return password;
- }
-
- public void setPassword(String password)
- {
- this.password = password;
- }
-
- @OneToMany(mappedBy = "owner")
- @XmlTransient
- public List<Category> getCategories()
- {
- return categories;
- }
-
- public void setCategories(List<Category> categories)
- {
- this.categories = categories;
- }
-
- public boolean isAdmin()
- {
- return admin;
- }
-
- public void setAdmin(boolean admin)
- {
- this.admin = admin;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/entity/User.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.entity;
+
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Entity
+ at XmlRootElement
+public class User
+{
+ private String username;
+ private String password;
+ private List<Category> categories;
+ private boolean admin;
+
+ @Id
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ @NotNull
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ @OneToMany(mappedBy = "owner")
+ @XmlTransient
+ public List<Category> getCategories()
+ {
+ return categories;
+ }
+
+ public void setCategories(List<Category> categories)
+ {
+ this.categories = categories;
+ }
+
+ public boolean isAdmin()
+ {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin)
+ {
+ this.admin = admin;
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,91 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.resource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.example.tasks.CategoryHome;
-import org.jboss.seam.example.tasks.entity.User;
-
-/**
- * This resource demonstrates use of plain JAX-RS resource (no ResourceHome
- * component) with Seam. It allows retrieving (GET), creating (PUT) and deleting
- * (DELETE) of task categories. To create new category, simply send a PUT request
- * without entity body to /auth/category/name where "name" is the name of
- * category. Same path applies for retrieving and deleting of category.
- *
- * @author Jozef Hartinger
- *
- */
-
- at Path("/auth/category/{category}")
- at Name("categoryResource")
- at Produces( { "application/xml", "application/json", "application/fastinfoset" })
- at Consumes( { "application/xml", "application/json", "application/fastinfoset" })
-public class CategoryResource
-{
- @In
- private CategoryHome categoryHome;
-
- @javax.ws.rs.core.Context
- private UriInfo uriInfo;
-
- @In
- private User user;
-
- @PathParam("category")
- private String category;
-
- @GET
- public Response getCategory()
- {
- return Response.ok(categoryHome.findByUsernameAndCategory(user.getUsername(), category)).build();
- }
-
- @PUT
- public Response putCategory()
- {
- categoryHome.getInstance().setName(category);
- categoryHome.getInstance().setOwner(user);
- // may cause exception if user already has a category with that name
- // in that case the exception is handled by exception mapper
- categoryHome.persist();
- return Response.created(uriInfo.getAbsolutePath()).build();
- }
-
- @DELETE
- public void deleteCategory()
- {
- categoryHome.findByUsernameAndCategory(user.getUsername(), category);
- categoryHome.remove();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/CategoryResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.resource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.example.tasks.CategoryHome;
+import org.jboss.seam.example.tasks.entity.User;
+
+/**
+ * This resource demonstrates use of plain JAX-RS resource (no ResourceHome
+ * component) with Seam. It allows retrieving (GET), creating (PUT) and deleting
+ * (DELETE) of task categories. To create new category, simply send a PUT request
+ * without entity body to /auth/category/name where "name" is the name of
+ * category. Same path applies for retrieving and deleting of category.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+
+ at Path("/auth/category/{category}")
+ at Name("categoryResource")
+ at Produces( { "application/xml", "application/json", "application/fastinfoset" })
+ at Consumes( { "application/xml", "application/json", "application/fastinfoset" })
+public class CategoryResource
+{
+ @In
+ private CategoryHome categoryHome;
+
+ @javax.ws.rs.core.Context
+ private UriInfo uriInfo;
+
+ @In
+ private User user;
+
+ @PathParam("category")
+ private String category;
+
+ @GET
+ public Response getCategory()
+ {
+ return Response.ok(categoryHome.findByUsernameAndCategory(user.getUsername(), category)).build();
+ }
+
+ @PUT
+ public Response putCategory()
+ {
+ categoryHome.getInstance().setName(category);
+ categoryHome.getInstance().setOwner(user);
+ // may cause exception if user already has a category with that name
+ // in that case the exception is handled by exception mapper
+ categoryHome.persist();
+ return Response.created(uriInfo.getAbsolutePath()).build();
+ }
+
+ @DELETE
+ public void deleteCategory()
+ {
+ categoryHome.findByUsernameAndCategory(user.getUsername(), category);
+ categoryHome.remove();
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,111 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.resource;
-
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-
-import org.jboss.resteasy.plugins.providers.atom.Entry;
-import org.jboss.resteasy.plugins.providers.atom.Feed;
-import org.jboss.resteasy.plugins.providers.atom.Person;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.Factory;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.example.tasks.ResourceNotFoundException;
-import org.jboss.seam.example.tasks.entity.Task;
-import org.jboss.seam.resteasy.ResourceQuery;
-
-/**
- * This resource exposes a list of resolved tasks for a particular user using
- * ResourceQuery component. This list is available publicly without
- * authentication needed. The list can be marshalled to XML, JSON, Fastinfoset.
- * ResourceQuery component is extended in order to provide Atom feed.
- *
- * @author Jozef Hartinger
- *
- */
- at Name("resolvedTaskResourceQuery")
- at Path("/user/{username}/tasks/resolved")
-public class ResolvedTaskResourceQuery extends ResourceQuery<Task>
-{
-
- @PathParam("username")
- private String username;
-
- public ResolvedTaskResourceQuery()
- {
- setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
- }
-
- @Override
- @Create
- public void create()
- {
- super.create();
- List<String> restrictions = new ArrayList<String>();
- restrictions.add("category.owner.username = #{username} AND resolved = true");
- getEntityQuery().setRestrictionExpressionStrings(restrictions);
- getEntityQuery().setOrderColumn("updated");
- getEntityQuery().setOrderDirection("desc");
- }
-
- @Produces("application/atom+xml")
- @GET
- public Feed getFeed() throws URISyntaxException
- {
- List<Task> tasks = getEntityList(0, 0);
- if (tasks.size() == 0)
- {
- // TODO make difference between empty list and nonsense user
- throw new ResourceNotFoundException();
- }
-
- Feed feed = new Feed();
- feed.setTitle("Resolved feeds for " + username);
- feed.getAuthors().add(new Person(username));
- feed.setUpdated(new Date(0));
-
- for (Task task : tasks)
- {
- Entry entry = new Entry();
- entry.setTitle(task.getName());
- entry.setSummary(task.getName());
- entry.setPublished(task.getCreated());
- entry.setUpdated(task.getUpdated());
- feed.getEntries().add(entry);
- }
- return feed;
- }
-
- @Factory("username")
- public String getUsername()
- {
- return username;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/ResolvedTaskResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,109 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.resource;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import org.jboss.resteasy.plugins.providers.atom.Entry;
+import org.jboss.resteasy.plugins.providers.atom.Feed;
+import org.jboss.resteasy.plugins.providers.atom.Person;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.example.tasks.ResourceNotFoundException;
+import org.jboss.seam.example.tasks.entity.Task;
+import org.jboss.seam.resteasy.ResourceQuery;
+
+/**
+ * This resource exposes a list of resolved tasks for a particular user using
+ * ResourceQuery component. This list is available publicly without
+ * authentication needed. The list can be marshalled to XML, JSON, Fastinfoset.
+ * ResourceQuery component is extended in order to provide Atom feed.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Name("resolvedTaskResourceQuery")
+ at Path("/user/{username}/tasks/resolved")
+public class ResolvedTaskResourceQuery extends ResourceQuery<Task>
+{
+
+ @PathParam("username")
+ private String username;
+
+ public ResolvedTaskResourceQuery()
+ {
+ setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
+ }
+
+ @Override
+ @Create
+ public void create()
+ {
+ super.create();
+ List<String> restrictions = new ArrayList<String>();
+ restrictions.add("category.owner.username = #{resolvedTaskResourceQuery.username} AND resolved = true");
+ getEntityQuery().setRestrictionExpressionStrings(restrictions);
+ getEntityQuery().setOrderColumn("updated");
+ getEntityQuery().setOrderDirection("desc");
+ }
+
+ @Produces("application/atom+xml")
+ @GET
+ public Feed getFeed() throws URISyntaxException
+ {
+ List<Task> tasks = getEntityList(0, 0);
+ if (tasks.size() == 0)
+ {
+ // TODO make difference between empty list and nonsense user
+ throw new ResourceNotFoundException();
+ }
+
+ Feed feed = new Feed();
+ feed.setTitle("Resolved feeds for " + username);
+ feed.getAuthors().add(new Person(username));
+ feed.setUpdated(new Date(0));
+
+ for (Task task : tasks)
+ {
+ Entry entry = new Entry();
+ entry.setTitle(task.getName());
+ entry.setSummary(task.getName());
+ entry.setPublished(task.getCreated());
+ entry.setUpdated(task.getUpdated());
+ feed.getEntries().add(entry);
+ }
+ return feed;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,145 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.resource;
-
-import java.io.InputStream;
-import java.util.Date;
-
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.Response;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.example.tasks.CategoryHome;
-import org.jboss.seam.example.tasks.ResourceNotFoundException;
-import org.jboss.seam.example.tasks.entity.Task;
-import org.jboss.seam.example.tasks.entity.User;
-import org.jboss.seam.framework.EntityHome;
-import org.jboss.seam.framework.Home;
-import org.jboss.seam.resteasy.ResourceHome;
-
-/**
- * This class exposes CRUD interface for manipulating tasks. ResourceHome
- * component is used as the base and is significantly customized to correspond
- * with usecase.
- *
- * @author Jozef Hartinger
- *
- */
- at Path("/auth/category/{category}/{status}")
- at Name("taskResourceHome")
-public class TaskResourceHome extends ResourceHome<Task, Long>
-{
-
- @PathParam("status")
- private String taskStatus;
- @In
- private User user;
- @In
- private CategoryHome categoryHome;
- @In
- private EntityHome<Task> taskHome;
- @PathParam("category")
- private String categoryName;
-
- public TaskResourceHome()
- {
- setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
- }
-
- @Override
- public Task getEntity(Long id)
- {
- Task task = super.getEntity(id);
- if (!task.getCategory().getName().equals(categoryName) || !task.getOwner().getUsername().equals(user.getUsername()))
- {
- throw new ResourceNotFoundException("Task not found");
- }
- if (!task.isResolved() == isResolved())
- {
- throw new ResourceNotFoundException("Task found, but in different state.");
- }
- return task;
- }
-
- @Override
- @POST
- public Response createResource(InputStream messageBody)
- {
- if (isResolved())
- {
- // do not allow creating already resolved tasks
- return Response.status(405).build();
- }
- return super.createResource(messageBody);
- }
-
- @Override
- public Long createEntity(Task entity)
- {
- entity.setCategory(categoryHome.findByUsernameAndCategory(user.getUsername(), categoryName));
- entity.setResolved(false);
- entity.setCreated(new Date());
- return super.createEntity(entity);
- }
-
- @Override
- public void updateEntity(Task entity, Long id)
- {
- Task task = super.getEntity(id);
- task.setCategory(categoryHome.findByUsernameAndCategory(user.getUsername(), categoryName));
- task.setResolved(isResolved());
- if (entity.getName() != null)
- {
- task.setName(entity.getName());
- }
- if (isResolved())
- {
- task.setUpdated(new Date());
- }
- taskHome.update();
- }
-
- @Override
- public Home<?, Task> getEntityHome()
- {
- return taskHome;
- }
-
- private boolean isResolved()
- {
- if (taskStatus.equals("resolved"))
- {
- return true;
- }
- else if (taskStatus.equals("unresolved"))
- {
- return false;
- }
- else
- {
- throw new ResourceNotFoundException();
- }
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,145 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.resource;
+
+import java.io.InputStream;
+import java.util.Date;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.example.tasks.CategoryHome;
+import org.jboss.seam.example.tasks.ResourceNotFoundException;
+import org.jboss.seam.example.tasks.entity.Task;
+import org.jboss.seam.example.tasks.entity.User;
+import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.framework.Home;
+import org.jboss.seam.resteasy.ResourceHome;
+
+/**
+ * This class exposes CRUD interface for manipulating tasks. ResourceHome
+ * component is used as the base and is significantly customized to correspond
+ * with usecase.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Path("/auth/category/{category}/{status}")
+ at Name("taskResourceHome")
+public class TaskResourceHome extends ResourceHome<Task, Long>
+{
+
+ @PathParam("status")
+ private String taskStatus;
+ @In
+ private User user;
+ @In
+ private CategoryHome categoryHome;
+ @In
+ private EntityHome<Task> taskHome;
+ @PathParam("category")
+ private String categoryName;
+
+ public TaskResourceHome()
+ {
+ setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
+ }
+
+ @Override
+ public Task getEntity(Long id)
+ {
+ Task task = super.getEntity(id);
+ if (!task.getCategory().getName().equals(categoryName) || !task.getOwner().getUsername().equals(user.getUsername()))
+ {
+ throw new ResourceNotFoundException("Task not found");
+ }
+ if (!task.isResolved() == isResolved())
+ {
+ throw new ResourceNotFoundException("Task found, but in different state.");
+ }
+ return task;
+ }
+
+ @Override
+ @POST
+ public Response createResource(InputStream messageBody)
+ {
+ if (isResolved())
+ {
+ // do not allow creating already resolved tasks
+ return Response.status(405).build();
+ }
+ return super.createResource(messageBody);
+ }
+
+ @Override
+ public Long createEntity(Task entity)
+ {
+ entity.setCategory(categoryHome.findByUsernameAndCategory(user.getUsername(), categoryName));
+ entity.setResolved(false);
+ entity.setCreated(new Date());
+ return super.createEntity(entity);
+ }
+
+ @Override
+ public void updateEntity(Task entity, Long id)
+ {
+ Task task = super.getEntity(id);
+ task.setCategory(categoryHome.findByUsernameAndCategory(user.getUsername(), categoryName));
+ task.setResolved(isResolved());
+ if (entity.getName() != null)
+ {
+ task.setName(entity.getName());
+ }
+ if (isResolved())
+ {
+ task.setUpdated(new Date());
+ }
+ taskHome.update();
+ }
+
+ @Override
+ public Home<?, Task> getEntityHome()
+ {
+ return taskHome;
+ }
+
+ private boolean isResolved()
+ {
+ if (taskStatus.equals("resolved"))
+ {
+ return true;
+ }
+ else if (taskStatus.equals("unresolved"))
+ {
+ return false;
+ }
+ else
+ {
+ throw new ResourceNotFoundException();
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,95 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.resource;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.Factory;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.example.tasks.ResourceNotFoundException;
-import org.jboss.seam.example.tasks.entity.Task;
-import org.jboss.seam.resteasy.ResourceQuery;
-
-/**
- * This class exposes two lists of tasks for every category. Unresolved tasks can
- * be obtained by sending HTTP GET request to category/{category}/unresolved URI.
- * To obtain a list of already resolved tasks, use category/{category}/resolved
- * URI.
- *
- * @author Jozef Hartinger
- *
- */
- at Name("taskResourceQuery")
- at Path("/auth/category/{category}/{status}")
-public class TaskResourceQuery extends ResourceQuery<Task>
-{
-
- @PathParam("category")
- private String categoryName;
- @PathParam("status")
- private String taskStatus;
-
- public TaskResourceQuery()
- {
- setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
- }
-
- @Override
- @Create
- public void create()
- {
- super.create();
- List<String> restrictions = new ArrayList<String>();
- restrictions.add("category.name = #{categoryName}");
- restrictions.add("resolved = #{taskStatus}");
- restrictions.add("category.owner.username = #{user.username}");
- getEntityQuery().setRestrictionExpressionStrings(restrictions);
- }
-
- @Factory("categoryName")
- public String getCategoryName()
- {
- return categoryName;
- }
-
- @Factory("taskStatus")
- public boolean isResolved()
- {
- if (taskStatus.equals("resolved"))
- {
- return true;
- }
- else if (taskStatus.equals("unresolved"))
- {
- return false;
- }
- else
- {
- throw new ResourceNotFoundException();
- }
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/TaskResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.example.tasks.ResourceNotFoundException;
+import org.jboss.seam.example.tasks.entity.Task;
+import org.jboss.seam.resteasy.ResourceQuery;
+
+/**
+ * This class exposes two lists of tasks for every category. Unresolved tasks can
+ * be obtained by sending HTTP GET request to category/{category}/unresolved URI.
+ * To obtain a list of already resolved tasks, use category/{category}/resolved
+ * URI.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Name("taskResourceQuery")
+ at Path("/auth/category/{category}/{status}")
+public class TaskResourceQuery extends ResourceQuery<Task>
+{
+
+ @PathParam("category")
+ private String categoryName;
+ @PathParam("status")
+ private String taskStatus;
+
+ public TaskResourceQuery()
+ {
+ setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
+ }
+
+ @Override
+ @Create
+ public void create()
+ {
+ super.create();
+ List<String> restrictions = new ArrayList<String>();
+ restrictions.add("category.name = #{categoryName}");
+ restrictions.add("resolved = #{taskStatus}");
+ restrictions.add("category.owner.username = #{user.username}");
+ getEntityQuery().setRestrictionExpressionStrings(restrictions);
+ }
+
+ @Factory("categoryName")
+ public String getCategoryName()
+ {
+ return categoryName;
+ }
+
+ @Factory("taskStatus")
+ public boolean isResolved()
+ {
+ if (taskStatus.equals("resolved"))
+ {
+ return true;
+ }
+ else if (taskStatus.equals("unresolved"))
+ {
+ return false;
+ }
+ else
+ {
+ throw new ResourceNotFoundException();
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,60 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.resource;
-
-import javax.ws.rs.Path;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.example.tasks.entity.User;
-import org.jboss.seam.framework.EntityHome;
-import org.jboss.seam.resteasy.ResourceHome;
-
-/**
- * This resource demonstrates use of ResourceHome component together with Seam
- * security. This resource exposes user management as a web service, however only
- * users with admin permission are allowed to access it.
- *
- * @author Jozef Hartinger
- *
- */
- at Path("/auth/user")
- at Name("userResourceHome")
- at Restrict("#{s:hasRole('admin')}")
-public class UserResourceHome extends ResourceHome<User, String>
-{
-
- public UserResourceHome()
- {
- setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
- }
-
- @In()
- private EntityHome<User> userHome;
-
- @Override
- public EntityHome getEntityHome()
- {
- return userHome;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/resource/UserResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.resource;
+
+import javax.ws.rs.Path;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.example.tasks.entity.User;
+import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.resteasy.ResourceHome;
+
+/**
+ * This resource demonstrates use of ResourceHome component together with Seam
+ * security. This resource exposes user management as a web service, however only
+ * users with admin permission are allowed to access it.
+ *
+ * @author Jozef Hartinger
+ *
+ */
+ at Path("/auth/user")
+ at Name("userResourceHome")
+ at Restrict("#{s:hasRole('admin')}")
+public class UserResourceHome extends ResourceHome<User, String>
+{
+
+ public UserResourceHome()
+ {
+ setMediaTypes(new String[] { "application/xml", "application/json", "application/fastinfoset" });
+ }
+
+ @In
+ private EntityHome<User> userHome;
+
+ @Override
+ public EntityHome getEntityHome()
+ {
+ return userHome;
+ }
+}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,167 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.test;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Test class for /category part of API
- * @author Jozef Hartinger
- *
- */
-public class CategoryResourceTest extends ResourceSeamTest
-{
- @DataProvider(name = "query")
- public String[][] getQueryData()
- {
- return new String[][] { new String[] { "application/xml", "<category><name>School</name></category>" }, new String[] { "application/json", "{\"category\":{\"name\":\"School\"}}" } };
- }
-
- @Test(dataProvider = "query")
- public void getCategoryListTest(final String contentType, final String expectedResponse) throws Exception
- {
- new ResourceRequest(Method.GET, "/v1/auth/category")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", contentType);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertTrue(response.getContentAsString().contains(expectedResponse), "Unexpected response.");
- }
-
- }.run();
- }
-
- @Test
- public void deleteCategoryTest() throws Exception
- {
- new ResourceRequest(Method.DELETE, "/v1/auth/category/Work")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
- }
-
- @Test
- public void createCategoryTest() throws Exception
- {
-
- final String uri = "/v1/auth/category/Test%20Category";
- final String mimeType = "application/json";
- final String expectedResponse = "{\"category\":{\"name\":\"Test Category\"}}";
-
- new ResourceRequest(Method.PUT, uri)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 201, "Unexpected response code.");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, uri)
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", mimeType);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
- }
-
- }.run();
- }
-
- @Test
- public void noAuthorizationHeaderTest() throws Exception
- {
- new ResourceRequest(Method.GET, "/v1/auth/category")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 401, "Unexpected response code.");
- }
-
- }.run();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/CategoryResourceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,170 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.test;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.seam.mock.SeamTest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test class for /category part of API
+ * @author Jozef Hartinger
+ *
+ */
+public class CategoryResourceTest extends SeamTest
+{
+ @DataProvider(name = "query")
+ public String[][] getQueryData()
+ {
+ return new String[][] { new String[] { "application/xml", "<category><name>School</name></category>" }, new String[] { "application/json", "{\"category\":{\"name\":\"School\"}}" } };
+ }
+
+ @Test(dataProvider = "query")
+ public void getCategoryListTest(final String contentType, final String expectedResponse) throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/v1/auth/category")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", contentType);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertTrue(response.getContentAsString().contains(expectedResponse), "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void deleteCategoryTest() throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.DELETE, "/v1/auth/category/Work")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void createCategoryTest() throws Exception
+ {
+
+ final String uri = "/v1/auth/category/Test%20Category";
+ final String mimeType = "application/json";
+ final String expectedResponse = "{\"category\":{\"name\":\"Test Category\"}}";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.PUT, uri)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 201, "Unexpected response code.");
+ }
+
+ }.run();
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, uri)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", mimeType);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void noAuthorizationHeaderTest() throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/v1/auth/category")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 401, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,104 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.test;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Test class for /user/{username}/tasks/resolved part of API.
- * @author Jozef Hartinger
- *
- */
-public class ResolvedTaskResourceQueryTest extends ResourceSeamTest
-{
-
- // We could do this BeforeClass only once but we can't do ResourceRequests there
- @BeforeMethod
- public void resolveTask() throws Exception {
-
- final String mimeType = "application/xml";
- final String representation = "<task><id>14</id></task>";
-
- new ResourceRequest(Method.PUT, "/v1/auth/category/School/resolved/14")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- request.addHeader("Content-Type", mimeType);
- request.setContentType(mimeType);
- request.setContent(representation.getBytes());
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
- }
-
- @DataProvider(name="data")
- public String[][] getData() {
- return new String[][] {
- new String[] {"application/xml", "<name>Get a haircut</name>"},
- new String[] {"application/json", "\"name\":\"Get a haircut\""},
- new String[] {"application/atom+xml", "<atom:title>Get a haircut</atom:title>"}
- };
- }
-
- @Test(dataProvider="data")
- public void editTaskTest(final String mimeType, final String expectedResponsePart) throws Exception
- {
- new ResourceRequest(Method.GET, "/v1/user/demo/tasks/resolved")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", mimeType);
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertTrue(response.getContentAsString().contains(expectedResponsePart), "Unexpected response.");
- }
-
- }.run();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/ResolvedTaskResourceQueryTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,107 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.test;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.seam.mock.SeamTest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test class for /user/{username}/tasks/resolved part of API.
+ * @author Jozef Hartinger
+ *
+ */
+public class ResolvedTaskResourceQueryTest extends SeamTest
+{
+
+ // We could do this BeforeClass only once but we can't do ResourceRequests there
+ @BeforeMethod
+ public void resolveTask() throws Exception {
+
+ final String mimeType = "application/xml";
+ final String representation = "<task><id>14</id></task>";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.PUT, "/v1/auth/category/School/resolved/14")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ request.addHeader("Content-Type", mimeType);
+ request.setContentType(mimeType);
+ request.setContent(representation.getBytes());
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+ @DataProvider(name="data")
+ public String[][] getData() {
+ return new String[][] {
+ new String[] {"application/xml", "<name>Get a haircut</name>"},
+ new String[] {"application/json", "\"name\":\"Get a haircut\""},
+ new String[] {"application/atom+xml", "<atom:title>Get a haircut</atom:title>"}
+ };
+ }
+
+ @Test(dataProvider="data")
+ public void editTaskTest(final String mimeType, final String expectedResponsePart) throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/v1/user/demo/tasks/resolved")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", mimeType);
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertTrue(response.getContentAsString().contains(expectedResponsePart), "Unexpected response.");
+ }
+
+ }.run();
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,140 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.example.tasks.test;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-import org.jboss.seam.resteasy.testfwk.ResourceSeamTest;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletResponse;
-import org.jboss.seam.resteasy.testfwk.MockHttpServletRequest;
-import org.testng.annotations.Test;
-
-/**
- * Test class for TaskResourceHome and TaskResourceQuery components.
- * @author Jozef Hartinger
- *
- */
-public class TaskResourceTest extends ResourceSeamTest
-{
- @Test
- public void createTaskTest() throws Exception
- {
- final String mimeType = "application/json";
- final String representation = "{\"task\":{\"name\":\"Test task\"}}";
-
- new ResourceRequest(Method.POST, "/v1/auth/category/School/unresolved")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- request.addHeader("Content-Type", mimeType);
- request.setContentType(mimeType);
- request.setContent(representation.getBytes());
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 201, "Unexpected response code.");
- }
-
- }.run();
- }
-
- @Test
- public void editTaskTest() throws Exception
- {
- final String mimeType = "application/xml";
- final String representation = "<task><id>4</id><name>Learn new English vocabulary</name></task>";
-
- new ResourceRequest(Method.PUT, "/v1/auth/category/School/unresolved/4")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- request.addHeader("Content-Type", mimeType);
- request.setContentType(mimeType);
- request.setContent(representation.getBytes());
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
-
- new ResourceRequest(Method.GET, "/v1/auth/category/School/unresolved/4")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Accept", "application/xml");
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 200, "Unexpected response code.");
- assertTrue(response.getContentAsString().contains("Learn new English vocabulary"), "Unexpected response.");
- }
-
- }.run();
- }
-
- @Test
- public void deleteTaskTest() throws Exception
- {
- new ResourceRequest(Method.DELETE, "/v1/auth/category/School/unresolved/2")
- {
-
- @Override
- protected void prepareRequest(MockHttpServletRequest request)
- {
- super.prepareRequest(request);
- request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
- }
-
- @Override
- protected void onResponse(MockHttpServletResponse response)
- {
- super.onResponse(response);
- assertEquals(response.getStatus(), 204, "Unexpected response code.");
- }
-
- }.run();
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/TaskResourceTest.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,143 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.example.tasks.test;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.seam.mock.SeamTest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.Test;
+
+/**
+ * Test class for TaskResourceHome and TaskResourceQuery components.
+ * @author Jozef Hartinger
+ *
+ */
+public class TaskResourceTest extends SeamTest
+{
+ @Test
+ public void createTaskTest() throws Exception
+ {
+ final String mimeType = "application/json";
+ final String representation = "{\"task\":{\"name\":\"Test task\"}}";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.POST, "/v1/auth/category/School/unresolved")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ request.addHeader("Content-Type", mimeType);
+ request.setContentType(mimeType);
+ request.setContent(representation.getBytes());
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 201, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void editTaskTest() throws Exception
+ {
+ final String mimeType = "application/xml";
+ final String representation = "<task><id>4</id><name>Learn new English vocabulary</name></task>";
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.PUT, "/v1/auth/category/School/unresolved/4")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ request.addHeader("Content-Type", mimeType);
+ request.setContentType(mimeType);
+ request.setContent(representation.getBytes());
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/v1/auth/category/School/unresolved/4")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "application/xml");
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 200, "Unexpected response code.");
+ assertTrue(response.getContentAsString().contains("Learn new English vocabulary"), "Unexpected response.");
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void deleteTaskTest() throws Exception
+ {
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.DELETE, "/v1/auth/category/School/unresolved/2")
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ super.onResponse(response);
+ assertEquals(response.getStatus(), 204, "Unexpected response code.");
+ }
+
+ }.run();
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,12 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-
-<suite name="Tasks" verbose="2" parallel="false">
-
- <test name="Tasks">
- <classes>
- <class name="org.jboss.seam.example.tasks.test.CategoryResourceTest"/>
- <class name="org.jboss.seam.example.tasks.test.TaskResourceTest"/>
- <class name="org.jboss.seam.example.tasks.test.ResolvedTaskResourceQueryTest"/>
- </classes>
- </test>
-</suite>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/src/main/org/jboss/seam/example/tasks/test/testng.xml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,12 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+
+<suite name="Tasks" verbose="2" parallel="false">
+
+ <test name="Tasks">
+ <classes>
+ <class name="org.jboss.seam.example.tasks.test.CategoryResourceTest"/>
+ <class name="org.jboss.seam.example.tasks.test.TaskResourceTest"/>
+ <class name="org.jboss.seam.example.tasks.test.ResolvedTaskResourceQueryTest"/>
+ </classes>
+ </test>
+</suite>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,30 +0,0 @@
-$(document).ready(function() {
- // load category list
- getCategories(function(data) {
- $(data).find('category').each(function() {
- var categoryName = $(this).find('name').text();
- addCategory(categoryName);
- });
- });
- // create new category on submit
- $('#editCategorySubmit').click(function(event) {
- event.preventDefault();
- var categoryName = $('#editCategoryName').attr('value');
- putCategory(categoryName, function() {
- addCategory(categoryName);
- $('#editCategoryName').attr('value', '');
- });
- });
-});
-
-function addCategory(categoryName) {
- var nameCell = $('<td/>').addClass('name').text(categoryName);
- var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this category').click(function(event) {
- event.preventDefault();
- deleteCategory(categoryName, function() {
- $('[id=' + categoryName + ']').remove();
- });
- });
- var buttonCell = $('<td/>').append(deleteButton);
- $('<tr/>').attr('id', categoryName).append(buttonCell).append(nameCell).appendTo('#categories tbody');
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,30 @@
+$(document).ready(function() {
+ // load category list
+ getCategories(function(data) {
+ $(data).find('category').each(function() {
+ var categoryName = $(this).find('name').text();
+ addCategory(categoryName);
+ });
+ });
+ // create new category on submit
+ $('#editCategorySubmit').click(function(event) {
+ event.preventDefault();
+ var categoryName = $('#editCategoryName').attr('value');
+ putCategory(categoryName, function() {
+ addCategory(categoryName);
+ $('#editCategoryName').attr('value', '');
+ });
+ });
+});
+
+function addCategory(categoryName) {
+ var nameCell = $('<td/>').addClass('name').text(categoryName);
+ var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this category').click(function(event) {
+ event.preventDefault();
+ deleteCategory(categoryName, function() {
+ $('[id=' + categoryName + ']').remove();
+ });
+ });
+ var buttonCell = $('<td/>').append(deleteButton);
+ $('<tr/>').attr('id', categoryName).append(buttonCell).append(nameCell).appendTo('#categories tbody');
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,27 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core" template="template.xhtml">
-
- <ui:define name="head">
- <script src="categories.js" type="text/javascript" />
- </ui:define>
- <ui:define name="body">
- <table id="categories">
- <thead>
- <tr><td colspan="2"><h2>Categories</h2></td></tr>
- </thead>
- <tbody/>
- </table>
-
- <hr />
-
- <form action="" id="newCategoryForm">
- <h2>Care for a new category?</h2>
- <input id="editCategoryName" type="text" />
- <input id="editCategorySubmit" type="button" value="Create" />
- </form>
- </ui:define>
-</ui:composition>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/categories.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core" template="template.xhtml">
+
+ <ui:define name="head">
+ <script src="categories.js" type="text/javascript" />
+ </ui:define>
+ <ui:define name="body">
+ <table id="categories">
+ <thead>
+ <tr><td colspan="2"><h2>Categories</h2></td></tr>
+ </thead>
+ <tbody/>
+ </table>
+
+ <hr />
+
+ <form action="" id="newCategoryForm">
+ <h2>Care for a new category?</h2>
+ <input id="editCategoryName" type="text" />
+ <input id="editCategorySubmit" type="button" value="Create" />
+ </form>
+ </ui:define>
+</ui:composition>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/bg.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/bg.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/bg.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-delete.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-delete.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-delete.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-done.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-done.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-done.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-edit.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-edit.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-edit.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-undo.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-undo.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/task-undo.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/tasks-logo.png
===================================================================
(Binary files differ)
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/tasks-logo.png (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/img/tasks-logo.png)
===================================================================
(Binary files differ)
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,5 +0,0 @@
-<html>
-<head>
- <meta http-equiv="Refresh" content="0; URL=tasks.seam">
-</head>
-</html>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/index.html 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,5 @@
+<html>
+<head>
+ <meta http-equiv="Refresh" content="0; URL=tasks.seam">
+</head>
+</html>
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,19 +0,0 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(!
H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(fun!
ction(){var G=this;while(G.firstChild){G=G.firstChild}return G!
}).appen
d(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.no!
CloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pu!
shStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilt!
er(E,thi
s)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.!
makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;functi!
on K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?!
(N.getEl
ementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"}!
,isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?!
I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\!
s+/),fun
ction(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}ret!
urn o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("di!
v");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S!
){return
}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.le!
ngth){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}!
if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return !
I&&I.spe
cified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}!
return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){retu!
rn o.nth(E,2,"previousSibling")},nextAll:function(E){return o.!
dir(E,"n
extSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeo!
f E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"q!
ueue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.ma!
keArray(
H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)!
}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){!
if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=!
false;if
(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{!
"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementByI!
d!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]!
:[]}},NA
ME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}ret!
urn X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"sub!
mit"===T.type},image:function(T){return"image"===T.type},reset!
:functio
n(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}!
}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var !
M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[!
O].sourc
e+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplic!
ate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undef!
ined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.h!
ref=func
tion(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;f!
or(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.!
match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}!
T=I.rela
tive[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);!
H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort(!
).join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}!
else{for
(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)!
}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaK!
ey newValue originalTarget pageX pageY prevValue relatedNode r!
elatedTa
rget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},s!
pecial:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagatio!
nStopped:k,isImmediatePropagationStopped:k};var a=function(F){!
var E=F.
relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}r!
eturn this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/!
\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false!
,readyLi
st:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,e!
rror").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.st!
yle.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:fal!
se,noClo
neEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.s!
lice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o!
.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend!
({get:fu
nction(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.dat!
a=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.h!
ost)){var H=document.getElementsByTagName("head")[0];var T=doc!
ument.cr
eateElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState!
==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxSt!
op")}}return J},handleError:function(F,H,E,G){if(F.error){F.er!
ror(H,E,
G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunctio!
n(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G]!
,"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.le!
ngth;G<F
;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cu!
r(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};retur!
n E},easing:{linear:function(G,H,E,F){return E+F*G},swing:func!
tion(G,H
,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n)!
;n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.e!
lem)}return false}else{var J=G-this.startTime;this.state=J/thi!
s.option
s.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this!
[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{to!
p:N,left:I}}}o.offset={initialize:function(){if(this.initializ!
ed){retu
rn}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:functi!
on(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||th!
is[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxMode!
l&&docum
ent.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/jquery-1.3.2.min.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(!
H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(fun!
ction(){var G=this;while(G.firstChild){G=G.firstChild}return G!
}).appen
d(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.no!
CloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pu!
shStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilt!
er(E,thi
s)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.!
makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;functi!
on K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?!
(N.getEl
ementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"}!
,isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?!
I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\!
s+/),fun
ction(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}ret!
urn o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("di!
v");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S!
){return
}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.le!
ngth){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}!
if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return !
I&&I.spe
cified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}!
return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){retu!
rn o.nth(E,2,"previousSibling")},nextAll:function(E){return o.!
dir(E,"n
extSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeo!
f E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"q!
ueue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.ma!
keArray(
H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)!
}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){!
if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=!
false;if
(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{!
"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementByI!
d!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]!
:[]}},NA
ME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}ret!
urn X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"sub!
mit"===T.type},image:function(T){return"image"===T.type},reset!
:functio
n(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}!
}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var !
M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[!
O].sourc
e+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplic!
ate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undef!
ined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.h!
ref=func
tion(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;f!
or(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.!
match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}!
T=I.rela
tive[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);!
H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort(!
).join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}!
else{for
(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)!
}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaK!
ey newValue originalTarget pageX pageY prevValue relatedNode r!
elatedTa
rget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},s!
pecial:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagatio!
nStopped:k,isImmediatePropagationStopped:k};var a=function(F){!
var E=F.
relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}r!
eturn this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/!
\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false!
,readyLi
st:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,e!
rror").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.st!
yle.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:fal!
se,noClo
neEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.s!
lice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o!
.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend!
({get:fu
nction(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.dat!
a=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.h!
ost)){var H=document.getElementsByTagName("head")[0];var T=doc!
ument.cr
eateElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState!
==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxSt!
op")}}return J},handleError:function(F,H,E,G){if(F.error){F.er!
ror(H,E,
G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunctio!
n(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G]!
,"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.le!
ngth;G<F
;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cu!
r(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};retur!
n E},easing:{linear:function(G,H,E,F){return E+F*G},swing:func!
tion(G,H
,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n)!
;n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.e!
lem)}return false}else{var J=G-this.startTime;this.state=J/thi!
s.option
s.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this!
[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{to!
p:N,left:I}}}o.offset={initialize:function(){if(this.initializ!
ed){retu
rn}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:functi!
on(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||th!
is[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxMode!
l&&docum
ent.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,25 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- template="template.xhtml">
-
- <ui:define name="body">
- <h:form id="login">
- <h2>Welcome to Seam Tasks.</h2>
- <div>
- <h:outputLabel value="Username" for="username" />
- <h:inputText id="username" value="#{credentials.username}" />
- </div>
- <div>
- <h:outputLabel value="Password" for="password" />
- <h:inputSecret id="password" value="#{credentials.password}" />
- </div>
- <div><h:messages/></div>
- <div><h:commandButton action="#{identity.login}" value="Login" /></div>
- </h:form>
- <div id="rightPanel">Welcome to Seam Tasks application. This application demonstrates integration of Seam and RESTEasy. Please log in to see more. You can use demo/demo for user account or admin/password for admin account.</div>
- </ui:define>
-</ui:composition>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/login.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ template="template.xhtml">
+
+ <ui:define name="body">
+ <h:form id="login">
+ <h2>Welcome to Seam Tasks.</h2>
+ <div>
+ <h:outputLabel value="Username" for="username" />
+ <h:inputText id="username" value="#{credentials.username}" />
+ </div>
+ <div>
+ <h:outputLabel value="Password" for="password" />
+ <h:inputSecret id="password" value="#{credentials.password}" />
+ </div>
+ <div><h:messages/></div>
+ <div><h:commandButton action="#{identity.login}" value="Login" /></div>
+ </h:form>
+ <div id="rightPanel">Welcome to Seam Tasks application. This application demonstrates integration of Seam and RESTEasy. Please log in to see more. You can use demo/demo for user account or admin/password for admin account.</div>
+ </ui:define>
+</ui:composition>
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,68 +0,0 @@
-var firstTask = 0;
-var maxResults = 25;
-var username;
-
-
-$(document).ready(function() {
- username = $('#username').text();
-
- // next and previous buttons
- $('.next').click(function(event) {
- event.preventDefault();
- firstTask += maxResults;
- loadTasks();
- });
- $('.previous').click(function(event) {
- event.preventDefault();
- firstTask -= maxResults;
- loadTasks();
- });
-
- loadTasks();
-});
-
-function loadTasks() {
- $('#tasks tbody').empty();
- getResolvedTasks(username, firstTask, maxResults, function(data) {
- var tasks = $(data).find('task');
- tasks.each(function() {
- addTask($(this));
- })
- // pagination handling
- if (tasks.size() == maxResults) {
- $('.next').show();
- } else {
- $('.next').hide();
- }
- if (firstTask >= maxResults) {
- $('.previous').show();
- } else {
- $('.previous').hide();
- }
- });
-}
-
-function addTask(task) {
- var taskId = $(task).find('id').text();
- var taskName = $(task).find('name').text();
- var categoryName = $(task).find('category').text();
- var taskCompleted = $(task).find('completed').text();
-
- var parent = $('#tasks tbody');
- var nameCell = $('<td/>').addClass('name').text(taskName);
- var completedCell = $('<td/>').addClass('completed').text(taskCompleted);
- var undoButton = $('<img/>').attr('src', 'img/task-undo.png').attr('title', 'Undo this task').click(function(event) {
- event.preventDefault();
- putTask(categoryName, taskId, taskName, false, function() {
- $('#' + taskId).remove();
- });
- });
- var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this task').click(function(event) {
- event.preventDefault();
- deleteTask(categoryName, taskId, true, function() {
- $('#' + taskId).remove();
- });
- });
- var buttonCell = $('<td/>').append(undoButton).append(deleteButton);
- $('<tr/>').attr('id', taskId).append(buttonCell).append(nameCell).append(completedCell).appendTo(parent);
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,68 @@
+var firstTask = 0;
+var maxResults = 25;
+var username;
+
+
+$(document).ready(function() {
+ username = $('#username').text();
+
+ // next and previous buttons
+ $('.next').click(function(event) {
+ event.preventDefault();
+ firstTask += maxResults;
+ loadTasks();
+ });
+ $('.previous').click(function(event) {
+ event.preventDefault();
+ firstTask -= maxResults;
+ loadTasks();
+ });
+
+ loadTasks();
+});
+
+function loadTasks() {
+ $('#tasks tbody').empty();
+ getResolvedTasks(username, firstTask, maxResults, function(data) {
+ var tasks = $(data).find('task');
+ tasks.each(function() {
+ addTask($(this));
+ })
+ // pagination handling
+ if (tasks.size() == maxResults) {
+ $('.next').show();
+ } else {
+ $('.next').hide();
+ }
+ if (firstTask >= maxResults) {
+ $('.previous').show();
+ } else {
+ $('.previous').hide();
+ }
+ });
+}
+
+function addTask(task) {
+ var taskId = $(task).find('id').text();
+ var taskName = $(task).find('name').text();
+ var categoryName = $(task).find('category').text();
+ var taskCompleted = $(task).find('completed').text();
+
+ var parent = $('#tasks tbody');
+ var nameCell = $('<td/>').addClass('name').text(taskName);
+ var completedCell = $('<td/>').addClass('completed').text(taskCompleted);
+ var undoButton = $('<img/>').attr('src', 'img/task-undo.png').attr('title', 'Undo this task').click(function(event) {
+ event.preventDefault();
+ putTask(categoryName, taskId, taskName, false, function() {
+ $('#' + taskId).remove();
+ });
+ });
+ var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this task').click(function(event) {
+ event.preventDefault();
+ deleteTask(categoryName, taskId, true, function() {
+ $('#' + taskId).remove();
+ });
+ });
+ var buttonCell = $('<td/>').append(undoButton).append(deleteButton);
+ $('<tr/>').attr('id', taskId).append(buttonCell).append(nameCell).append(completedCell).appendTo(parent);
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,27 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- template="template.xhtml">
-
-<ui:define name="head">
- <script src="resolved.js" type="text/javascript" />
-</ui:define>
-<ui:define name="body">
- <table id="tasks">
- <thead>
- <tr>
- <td colspan="3"><h2>Hooray, resolved tasks!</h2></td>
- </tr>
- </thead>
- <tbody/>
- <tfoot>
- <tr>
- <td class="previous">Previous</td><td class="next">Next</td>
- </tr>
- </tfoot>
- </table>
-</ui:define>
-</ui:composition>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/resolved.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ template="template.xhtml">
+
+<ui:define name="head">
+ <script src="resolved.js" type="text/javascript" />
+</ui:define>
+<ui:define name="body">
+ <table id="tasks">
+ <thead>
+ <tr>
+ <td colspan="3"><h2>Hooray, resolved tasks!</h2></td>
+ </tr>
+ </thead>
+ <tbody/>
+ <tfoot>
+ <tr>
+ <td class="previous">Previous</td><td class="next">Next</td>
+ </tr>
+ </tfoot>
+ </table>
+</ui:define>
+</ui:composition>
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,77 +0,0 @@
-function getCategories(callback) {
- $.get("seam/resource/v1/auth/category", callback);
-}
-
-function putCategory(categoryName, callback) {
- $.ajax({
- type: "PUT",
- url: "seam/resource/v1/auth/category/" + categoryName,
- contentType: "application/xml",
- success: callback
- });
-}
-
-function deleteCategory(categoryName, callback) {
- $.ajax({
- type: "DELETE",
- url: "seam/resource/v1/auth/category/" + categoryName,
- success: callback
- });
-}
-
-function getTask(categoryName, taskId, taskDone, callback) {
- var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved" : "/unresolved"));
- $.get(URI, callback);
-}
-
-function getTasksForCategory(categoryName, taskDone, callback) {
- var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved" : "/unresolved"));
- $.get(URI, function(data) {
- callback(data);
- });
-}
-
-function getResolvedTasks(username, start, show, callback) {
- var URI = escape("seam/resource/v1/user/" + username + "/tasks/resolved.xml");
- URI += "?start=" + start + "&show=" + show;
- $.get(URI, function(data) {
- callback(data);
- });
-}
-
-function postTask(categoryName, taskName, callback) {
- var URI = escape("seam/resource/v1/auth/category/" + categoryName + "/unresolved");
- var data = '<task><name>' + taskName + '</name></task>';
- var request = $.ajax({
- type: "POST",
- url: URI,
- contentType: "application/xml",
- data: data,
- success: function() {
- callback(request.getResponseHeader('Location'));
- }
- });
-}
-
-function putTask(categoryName, taskId, taskName, taskDone, callback) {
- var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved/" : "/unresolved/") + taskId);
- var data = '<task><id>' + taskId + '</id><name>' + taskName + '</name></task>'
- $.ajax({
- type: "PUT",
- url: URI,
- contentType: "application/xml",
- data: data,
- success: function() {
- callback(data);
- }
- });
-}
-
-function deleteTask(categoryName, taskId, taskDone, callback) {
- var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved/" : "/unresolved/") + taskId);
- $.ajax({
- type: "DELETE",
- url: URI,
- success: callback
- });
-}
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/seam-tasks-client.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,77 @@
+function getCategories(callback) {
+ $.get("seam/resource/v1/auth/category", callback);
+}
+
+function putCategory(categoryName, callback) {
+ $.ajax({
+ type: "PUT",
+ url: "seam/resource/v1/auth/category/" + categoryName,
+ contentType: "application/xml",
+ success: callback
+ });
+}
+
+function deleteCategory(categoryName, callback) {
+ $.ajax({
+ type: "DELETE",
+ url: "seam/resource/v1/auth/category/" + categoryName,
+ success: callback
+ });
+}
+
+function getTask(categoryName, taskId, taskDone, callback) {
+ var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved" : "/unresolved"));
+ $.get(URI, callback);
+}
+
+function getTasksForCategory(categoryName, taskDone, callback) {
+ var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved" : "/unresolved"));
+ $.get(URI, function(data) {
+ callback(data);
+ });
+}
+
+function getResolvedTasks(username, start, show, callback) {
+ var URI = escape("seam/resource/v1/user/" + username + "/tasks/resolved.xml");
+ URI += "?start=" + start + "&show=" + show;
+ $.get(URI, function(data) {
+ callback(data);
+ });
+}
+
+function postTask(categoryName, taskName, callback) {
+ var URI = escape("seam/resource/v1/auth/category/" + categoryName + "/unresolved");
+ var data = '<task><name>' + taskName + '</name></task>';
+ var request = $.ajax({
+ type: "POST",
+ url: URI,
+ contentType: "application/xml",
+ data: data,
+ success: function() {
+ callback(request.getResponseHeader('Location'));
+ }
+ });
+}
+
+function putTask(categoryName, taskId, taskName, taskDone, callback) {
+ var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved/" : "/unresolved/") + taskId);
+ var data = '<task><id>' + taskId + '</id><name>' + taskName + '</name></task>'
+ $.ajax({
+ type: "PUT",
+ url: URI,
+ contentType: "application/xml",
+ data: data,
+ success: function() {
+ callback(data);
+ }
+ });
+}
+
+function deleteTask(categoryName, taskId, taskDone, callback) {
+ var URI = escape("seam/resource/v1/auth/category/" + categoryName + (taskDone ? "/resolved/" : "/unresolved/") + taskId);
+ $.ajax({
+ type: "DELETE",
+ url: URI,
+ success: callback
+ });
+}
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,129 +0,0 @@
-body {
- background: white url(img/bg.png) repeat scroll center;
- font-family: Verdana, Arial;
- margin: 0;
- padding: 0;
-}
-
-div.container
-{
- background: white url(img/tasks-logo.png) no-repeat left top;
- background-position:20px 20px;
- width: 666px;
- margin: 0 auto;
- padding: 0;
-}
-
-/* header */
-div.header {
- padding: 0;
- height: 140px;
-}
-
-/* image replacemement header */
-div.header h1 {
- display: none;
-}
-
-#menu {
- display: block;
- margin: 110px 0 0 100px;
- float:left;
-}
-
-#menu li
-{
- margin-left: 10px;
- margin-right: 10px;
- float:left;
- display: inline;
- font-size: 14px;
-}
-
-#menu a {
- color: #899ea6;
- text-decoration:none;
- font-weight: bold;
-}
-
-#menu a:hover {
- color:#99ccff;
- text-decoration:none;
- font-weight: bold;
-}
-
-
-/* content */
-
-hr {
- width: 626px;
- border: solid #dedede 1px;
- border-bottom: none;
-}
-
-table
-{
- border: none;
- margin: 20px;
- width: 626px;
-}
-
-#login
-{
- float: left;
- margin: 20px;
- width: 326px;
-}
-
-#login div {
- margin: 10px;
-}
-
-#login label {
- display: block;
-}
-
-#rightPanel {
- width: 270px;
- margin: 30px 30px 0px 0px;
- float: right;
- text-align: justify;
-}
-
-table td.name {
- color: #99ccff;
- font-weight: bold;
-}
-
-h2
-{
- margin: 0;
- padding:0;
- color: #899ea6;
-}
-
-#newTask, #newCategoryForm {
- margin: 10px 20px 10px 20px;
-}
-
-/* footer */
-#footer a
-{
- color: #99ccff;
- text-decoration:none;
- font-weight: bold;
-}
-
-#footer {
- width: 646px;
- height: 35px;
- text-align: center;
- margin: 0 auto;
- padding: 0;
- clear: both;
-}
-
-#footer div {
- font-size: 11px;
- margin: 0 20px 2px 0;
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/style.css 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,129 @@
+body {
+ background: white url(img/bg.png) repeat scroll center;
+ font-family: Verdana, Arial;
+ margin: 0;
+ padding: 0;
+}
+
+div.container
+{
+ background: white url(img/tasks-logo.png) no-repeat left top;
+ background-position:20px 20px;
+ width: 666px;
+ margin: 0 auto;
+ padding: 0;
+}
+
+/* header */
+div.header {
+ padding: 0;
+ height: 140px;
+}
+
+/* image replacemement header */
+div.header h1 {
+ display: none;
+}
+
+#menu {
+ display: block;
+ margin: 110px 0 0 100px;
+ float:left;
+}
+
+#menu li
+{
+ margin-left: 10px;
+ margin-right: 10px;
+ float:left;
+ display: inline;
+ font-size: 14px;
+}
+
+#menu a {
+ color: #899ea6;
+ text-decoration:none;
+ font-weight: bold;
+}
+
+#menu a:hover {
+ color:#99ccff;
+ text-decoration:none;
+ font-weight: bold;
+}
+
+
+/* content */
+
+hr {
+ width: 626px;
+ border: solid #dedede 1px;
+ border-bottom: none;
+}
+
+table
+{
+ border: none;
+ margin: 20px;
+ width: 626px;
+}
+
+#login
+{
+ float: left;
+ margin: 20px;
+ width: 326px;
+}
+
+#login div {
+ margin: 10px;
+}
+
+#login label {
+ display: block;
+}
+
+#rightPanel {
+ width: 270px;
+ margin: 30px 30px 0px 0px;
+ float: right;
+ text-align: justify;
+}
+
+table td.name {
+ color: #99ccff;
+ font-weight: bold;
+}
+
+h2
+{
+ margin: 0;
+ padding:0;
+ color: #899ea6;
+}
+
+#newTask, #newCategoryForm {
+ margin: 10px 20px 10px 20px;
+}
+
+/* footer */
+#footer a
+{
+ color: #99ccff;
+ text-decoration:none;
+ font-weight: bold;
+}
+
+#footer {
+ width: 646px;
+ height: 35px;
+ text-align: center;
+ margin: 0 auto;
+ padding: 0;
+ clear: both;
+}
+
+#footer div {
+ font-size: 11px;
+ margin: 0 20px 2px 0;
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,97 +0,0 @@
-$(document).ready(function() {
- printCategories();
- $('#editTaskSubmit').click(function() {
- var name = $('#editTaskName').val();
- var categoryName = $('#editTaskCategory').val()
- postTask(categoryName, name, function(location) {
- $('#editTaskName').val('');
- $.get(location, function(data) {
- addTask($(data).find('task'), categoryName);
- });
- });
- });
-});
-
-function showTaskEditForm(categoryName, taskId) {
- var categories = $('#editTaskCategory').clone();
- $(categories).find('[value=' + categoryName + ']').attr('selected', 'selected');
- var taskName = $('#' + taskId + " .name").text();
- var name = $('<input/>').attr('type', 'text').addClass('nameField').val(taskName);
-
- var update = $('<input/>').attr('type', 'button').attr('id', 'update').val('Update').click(function() {
- var newCategoryName = $(categories).val();
- var callback = function(data) {
- removeTaskEditForm(taskId, taskName);
- if (categoryName == newCategoryName) {
- updateTaskNameOnUI(taskId, data); // just update the name
- } else {
- $('#' + taskId).remove(); // add the task into new category
- addTask(data, newCategoryName);
- }
- }
- putTask(newCategoryName, taskId, $(name).val(), false, callback);
- });
- var form = $('<form/>').attr('id', 'updateTask').append(categories).append(name).append(update);
- $('#' + taskId + ' .name').replaceWith(form);
-}
-
-function removeTaskEditForm(taskId, taskName) {
- $('#' + taskId + ' form').replaceWith($('<span/>').addClass('name').text(taskName));
-}
-
-function printCategories() {
- getCategories(function(data) {
- $(data).find('category').each(function() {
- addCategory($(this));
- });
- });
-}
-
-function addCategory(category) {
- var categoryName = $(category).find('name').text();
- var escapedCategoryName = escape(categoryName);
- var categoryCell = $('<td/>').attr('colspan', '2').addClass('name').text(categoryName);
- var categoryRow = $('<tr/>').attr('id', categoryName).append(categoryCell);
- $('#categories tbody').append(categoryRow).appendTo('#categories');
- $('<option/>').attr('value', categoryName).text(categoryName).appendTo('#editTaskCategory');
- getTasksForCategory(categoryName, false, function(data) {
- $(data).find('task').each(function() {
- addTask($(this), categoryName);
- });
- });
-}
-
-function addTask(task, categoryName) {
- var taskId = $(task).find('id').text();
- var taskName = $(task).find('name').text();
-
- var parent = $('[id=' + categoryName + ']');
- var nameCell = $('<td/>').append($('<span/>').addClass('name').text(taskName));
- var doneButton = $('<img/>').attr('src', 'img/task-done.png').attr('title', 'Resolve this task').click(function(event) {
- event.preventDefault();
- putTask(categoryName, taskId, taskName, true, function() {
- $('#' + taskId).remove();
- });
- });
- var editButton = $('<img/>').attr('src', 'img/task-edit.png').attr('title', 'Edit this task').click(function(event) {
- event.preventDefault();
- if ($('#' + taskId + ' #updateTask').size() == 0) {
- showTaskEditForm(categoryName, taskId);
- } else {
- removeTaskEditForm(taskId, taskName);
- }
- });
- var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this task').click(function(event) {
- event.preventDefault();
- deleteTask(categoryName, taskId, false, function() {
- $('#' + taskId).remove();
- });
- });
- var buttonCell = $('<td/>').append(doneButton).append(editButton).append(deleteButton);
- $('<tr/>').attr('id', taskId).append(buttonCell).append(nameCell).insertAfter('[id=' + categoryName + ']');
-}
-
-function updateTaskNameOnUI(taskId, task) {
- var taskName = $(task).find('name').text();
- $('#' + taskId + " .name").text(taskName);
-}
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.js 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,97 @@
+$(document).ready(function() {
+ printCategories();
+ $('#editTaskSubmit').click(function() {
+ var name = $('#editTaskName').val();
+ var categoryName = $('#editTaskCategory').val()
+ postTask(categoryName, name, function(location) {
+ $('#editTaskName').val('');
+ $.get(location, function(data) {
+ addTask($(data).find('task'), categoryName);
+ });
+ });
+ });
+});
+
+function showTaskEditForm(categoryName, taskId) {
+ var categories = $('#editTaskCategory').clone();
+ $(categories).find('[value=' + categoryName + ']').attr('selected', 'selected');
+ var taskName = $('#' + taskId + " .name").text();
+ var name = $('<input/>').attr('type', 'text').addClass('nameField').val(taskName);
+
+ var update = $('<input/>').attr('type', 'button').attr('id', 'update').val('Update').click(function() {
+ var newCategoryName = $(categories).val();
+ var callback = function(data) {
+ removeTaskEditForm(taskId, taskName);
+ if (categoryName == newCategoryName) {
+ updateTaskNameOnUI(taskId, data); // just update the name
+ } else {
+ $('#' + taskId).remove(); // add the task into new category
+ addTask(data, newCategoryName);
+ }
+ }
+ putTask(newCategoryName, taskId, $(name).val(), false, callback);
+ });
+ var form = $('<form/>').attr('id', 'updateTask').append(categories).append(name).append(update);
+ $('#' + taskId + ' .name').replaceWith(form);
+}
+
+function removeTaskEditForm(taskId, taskName) {
+ $('#' + taskId + ' form').replaceWith($('<span/>').addClass('name').text(taskName));
+}
+
+function printCategories() {
+ getCategories(function(data) {
+ $(data).find('category').each(function() {
+ addCategory($(this));
+ });
+ });
+}
+
+function addCategory(category) {
+ var categoryName = $(category).find('name').text();
+ var escapedCategoryName = escape(categoryName);
+ var categoryCell = $('<td/>').attr('colspan', '2').addClass('name').text(categoryName);
+ var categoryRow = $('<tr/>').attr('id', categoryName).append(categoryCell);
+ $('#categories tbody').append(categoryRow).appendTo('#categories');
+ $('<option/>').attr('value', categoryName).text(categoryName).appendTo('#editTaskCategory');
+ getTasksForCategory(categoryName, false, function(data) {
+ $(data).find('task').each(function() {
+ addTask($(this), categoryName);
+ });
+ });
+}
+
+function addTask(task, categoryName) {
+ var taskId = $(task).find('id').text();
+ var taskName = $(task).find('name').text();
+
+ var parent = $('[id=' + categoryName + ']');
+ var nameCell = $('<td/>').append($('<span/>').addClass('name').text(taskName));
+ var doneButton = $('<img/>').attr('src', 'img/task-done.png').attr('title', 'Resolve this task').click(function(event) {
+ event.preventDefault();
+ putTask(categoryName, taskId, taskName, true, function() {
+ $('#' + taskId).remove();
+ });
+ });
+ var editButton = $('<img/>').attr('src', 'img/task-edit.png').attr('title', 'Edit this task').click(function(event) {
+ event.preventDefault();
+ if ($('#' + taskId + ' #updateTask').size() == 0) {
+ showTaskEditForm(categoryName, taskId);
+ } else {
+ removeTaskEditForm(taskId, taskName);
+ }
+ });
+ var deleteButton = $('<img/>').attr('src', 'img/task-delete.png').attr('title', 'Delete this task').click(function(event) {
+ event.preventDefault();
+ deleteTask(categoryName, taskId, false, function() {
+ $('#' + taskId).remove();
+ });
+ });
+ var buttonCell = $('<td/>').append(doneButton).append(editButton).append(deleteButton);
+ $('<tr/>').attr('id', taskId).append(buttonCell).append(nameCell).insertAfter('[id=' + categoryName + ']');
+}
+
+function updateTaskNameOnUI(taskId, task) {
+ var taskName = $(task).find('name').text();
+ $('#' + taskId + " .name").text(taskName);
+}
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,29 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- template="template.xhtml">
-
- <ui:define name="head">
- <script src="tasks.js" type="text/javascript" />
- </ui:define>
-
- <ui:define name="body">
- <table id="categories">
- <thead>
- <tr>
- <td colspan="2"><h2>Yet, unresolved tasks.</h2></td>
- </tr>
- </thead>
- <tbody/>
- </table>
- <hr/>
- <form id="newTask">
- <h2>Create new task</h2>
- <select id="editTaskCategory" /> <input id="editTaskName" type="text" />
- <input id="editTaskSubmit" type="button" value="Create" />
- </form>
- </ui:define>
-</ui:composition>
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/tasks.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ template="template.xhtml">
+
+ <ui:define name="head">
+ <script src="tasks.js" type="text/javascript" />
+ </ui:define>
+
+ <ui:define name="body">
+ <table id="categories">
+ <thead>
+ <tr>
+ <td colspan="2"><h2>Yet, unresolved tasks.</h2></td>
+ </tr>
+ </thead>
+ <tbody/>
+ </table>
+ <hr/>
+ <form id="newTask">
+ <h2>Create new task</h2>
+ <select id="editTaskCategory" /> <input id="editTaskName" type="text" />
+ <input id="editTaskSubmit" type="button" value="Create" />
+ </form>
+ </ui:define>
+</ui:composition>
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,43 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<f:view xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:s="http://jboss.com/products/seam/taglib" contentType="text/html">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Seam Tasks</title>
- <script src="jquery-1.3.2.min.js" type="text/javascript" />
- <script src="seam-tasks-client.js" type="text/javascript" />
- <link href="style.css" rel="stylesheet" type="text/css" />
- <ui:insert name="head" />
- </head>
- <body >
- <div class="container">
- <div class="header">
- <h1>Seam Tasks</h1>
- <s:div rendered="#{identity.loggedIn}">
- <ul id="menu">
- <li><a href="tasks.seam">Tasks</a></li>
- <li><a href="categories.seam">Categories</a></li>
- <li><a href="resolved.seam">Resolved tasks</a></li>
- <li>
- <s:link id="menuLogoutId" action="#{identity.logout}" value="Logout" propagation="none" />
- </li>
- <li>Logged as: <h:outputText id="username" value="#{credentials.username}" /></li>
- </ul>
- </s:div>
- </div>
- <div id="content">
- <ui:insert name="body" />
- </div>
- <div id="footer">
- <hr/>
- <div>Powered by Seam 2.1, RESTEasy, Hibernate, Facelets and jQuery. Find more at <span><a href="http://seamframework.org">seamframework.org</a></span></div>
- </div>
- </div>
- </body>
- </html>
-</f:view>
Copied: branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml (from rev 11220, branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml)
===================================================================
--- branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml (rev 0)
+++ branches/enterprise/JBPAPP_5_0/examples/tasks/view/template.xhtml 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<f:view xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:s="http://jboss.com/products/seam/taglib" contentType="text/html">
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Seam Tasks</title>
+ <script src="jquery-1.3.2.min.js" type="text/javascript" />
+ <script src="seam-tasks-client.js" type="text/javascript" />
+ <link href="style.css" rel="stylesheet" type="text/css" />
+ <ui:insert name="head" />
+ </head>
+ <body >
+ <div class="container">
+ <div class="header">
+ <h1>Seam Tasks</h1>
+ <s:div rendered="#{identity.loggedIn}">
+ <ul id="menu">
+ <li><a href="tasks.seam">Tasks</a></li>
+ <li><a href="categories.seam">Categories</a></li>
+ <li><a href="resolved.seam">Resolved tasks</a></li>
+ <li>
+ <s:link id="menuLogoutId" action="#{identity.logout}" value="Logout" propagation="none" />
+ </li>
+ <li>Logged as: <h:outputText id="username" value="#{credentials.username}" /></li>
+ </ul>
+ </s:div>
+ </div>
+ <div id="content">
+ <ui:insert name="body" />
+ </div>
+ <div id="footer">
+ <hr/>
+ <div>Powered by Seam 2.2, RESTEasy, Hibernate, Facelets and jQuery. Find more at <span><a href="http://seamframework.org">seamframework.org</a></span></div>
+ </div>
+ </div>
+ </body>
+ </html>
+</f:view>
Added: branches/enterprise/JBPAPP_5_0/jbpm-jpdl-3.2.5.SP5.pom
===================================================================
--- branches/enterprise/JBPAPP_5_0/jbpm-jpdl-3.2.5.SP5.pom (rev 0)
+++ branches/enterprise/JBPAPP_5_0/jbpm-jpdl-3.2.5.SP5.pom 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ====================================================================== -->
+<!-- -->
+<!-- JBoss, the OpenSource J2EE webOS -->
+<!-- -->
+<!-- Distributable under LGPL license. -->
+<!-- See terms of license at http://www.gnu.org. -->
+<!-- -->
+<!-- ====================================================================== -->
+
+<!-- $Id: pom.xml 4375 2009-04-01 14:13:28Z alex.guizar at jboss.com $ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>JBoss jBPM3 - Core</name>
+ <groupId>org.jbpm.jbpm3</groupId>
+ <artifactId>jbpm-jpdl</artifactId>
+ <packaging>jar</packaging>
+
+ <!-- Parent -->
+ <parent>
+ <groupId>org.jbpm.jbpm3</groupId>
+ <artifactId>jbpm</artifactId>
+ <version>3.2.5.SP5</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <!-- Properties -->
+ <properties>
+ <surefire.jvm.args>-Xmx512m</surefire.jvm.args>
+ </properties>
+
+ <!-- Dependencies -->
+ <dependencies>
+ <!-- jBPM Dependencies -->
+ <dependency>
+ <groupId>bsh</groupId>
+ <artifactId>bsh</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <exclusions>
+ <exclusion>
+ <artifactId>xml-apis</artifactId>
+ <groupId>xml-apis</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ant</groupId>
+ <artifactId>ant</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-core</artifactId>
+ <optional>true</optinal>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ </dependency>
+
+ <!-- Test Dependencies -->
+ <dependency>
+ <groupId>dumbster</groupId>
+ <artifactId>dumbster</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Remove this static dependency -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <!-- Plugins -->
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <finalName>${project.build.finalName}</finalName>
+ <appendAssemblyId>true</appendAssemblyId>
+ <descriptors>
+ <descriptor>scripts/assembly-config.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <showDeprecation>false</showDeprecation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>hibernate.*</exclude>
+ <exclude>jbpm.cfg.xml</exclude>
+ <exclude>jbpm-*-ds.xml</exclude>
+ <exclude>jbpm.mail.templates.xml</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <property name="database" value="${database}" />
+ <ant antfile="scripts/antrun-jbpm-config.xml" target="concat" />
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>${surefire.jvm.args}</argLine>
+ <systemProperties>
+ <property>
+ <name>log4j.output.dir</name>
+ <value>${basedir}/target</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <!-- Profiles -->
+ <profiles>
+
+ <!--
+ Name: soa
+ Descr: Customizations for the SOA build
+ -->
+ <profile>
+ <id>soa</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <property name="database" value="${database}" />
+ <ant antfile="scripts/antrun-jbpm-config.xml" target="concat" />
+ <ant antfile="scripts/antrun-jbpm-config.xml" target="jbpm-cfg-xml-soa" />
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: no-database
+ Descr: Setup the default database
+ -->
+ <profile>
+ <id>no-database</id>
+ <activation>
+ <property>
+ <name>!database</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: hsqldb
+ Descr: Hypersonic Database Setup
+ -->
+ <profile>
+ <id>hsqldb</id>
+ <activation>
+ <property>
+ <name>database</name>
+ <value>hsqldb</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: mysql
+ Descr: MySQL Database Setup
+ -->
+ <profile>
+ <id>mysql</id>
+ <activation>
+ <property>
+ <name>database</name>
+ <value>mysql</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: postgresql
+ Descr: PostgreSQL Database Setup
+ -->
+ <profile>
+ <id>postgresql</id>
+ <activation>
+ <property>
+ <name>database</name>
+ <value>postgresql</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: sybase
+ Descr: Sybase Database Setup
+ -->
+ <profile>
+ <id>sybase</id>
+ <activation>
+ <property>
+ <name>database</name>
+ <value>sybase</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <!--
+ Name: oracle
+ Descr: Oracle Database Setup
+ -->
+ <profile>
+ <id>oracle</id>
+ <activation>
+ <property>
+ <name>database</name>
+ <value>oracle</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+</project>
Modified: branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-ear-war.list
===================================================================
--- branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-ear-war.list 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-ear-war.list 2010-01-13 16:19:37 UTC (rev 11952)
@@ -5,7 +5,6 @@
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-resteasy.jar
-jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
jxl.jar
Modified: branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-war.list
===================================================================
--- branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-war.list 2010-01-13 14:27:46 UTC (rev 11951)
+++ branches/enterprise/JBPAPP_5_0/seam-gen/build-scripts/deployed-jars-war.list 2010-01-13 16:19:37 UTC (rev 11952)
@@ -16,7 +16,6 @@
jboss-seam-pdf.jar
jboss-seam-resteasy.jar
jboss-seam-remoting.jar
-jboss-seam-rss.jar
jboss-seam-ui.jar
jbpm-jpdl.jar
jsf-facelets.jar
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy)
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF)
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1 +0,0 @@
-org.jboss.seam.deployment.annotationTypes=javax.ws.rs.ext.Provider:javax.ws.rs.Path
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/META-INF/seam-deployment.properties 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1 @@
+org.jboss.seam.deployment.annotationTypes=javax.ws.rs.ext.Provider:javax.ws.rs.Path
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org)
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss)
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam)
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy)
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,166 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-
-/**
- * Resource class used by ResourceHome and ResourceQuery components. Contains
- * information about path, media types and entity class the component operates
- * on.
- *
- * @author Jozef Hartinger
- * @param <T> entity class
- */
-public abstract class AbstractResource<T>
-{
-
- @Context
- private HttpHeaders httpHeaders;
-
- private String path = null;
- private MediaType[] mediaTypes = null;
- private Class entityClass = null;
-
- public AbstractResource()
- {
- mediaTypes = new MediaType[]{MediaType.APPLICATION_XML_TYPE};
- }
-
- public String[] getMediaTypes()
- {
- String[] mediaTypes = new String[this.mediaTypes.length];
- for (int i = 0; i < mediaTypes.length; i++)
- {
- mediaTypes[i] = this.mediaTypes[i].toString();
- }
- return mediaTypes;
- }
-
- public void setMediaTypes(String[] mediaTypes)
- {
- this.mediaTypes = new MediaType[mediaTypes.length];
- for (int i = 0; i < mediaTypes.length; i++)
- {
- this.mediaTypes[i] = MediaType.valueOf(mediaTypes[i]);
- }
- }
-
- public void setEntityClass(Class entityClass)
- {
- this.entityClass = entityClass;
- }
-
- /**
- * Retrieve entity class. If not set, type parameters of a superclass are
- * examined.
- *
- * @return entity class
- */
- public Class<T> getEntityClass()
- {
- if (entityClass == null)
- {
- Type superclass = this.getClass().getGenericSuperclass();
- if (superclass instanceof ParameterizedType)
- {
- ParameterizedType parameterizedSuperclass = (ParameterizedType) superclass;
- if (parameterizedSuperclass.getActualTypeArguments().length > 0)
- {
- return (Class) parameterizedSuperclass.getActualTypeArguments()[0];
- }
- }
- throw new RuntimeException("Unable to determine entity class.");
- }
- else
- {
- return entityClass;
- }
- }
-
- /**
- * Retrieve a suffix of this resource's URI. See {@link #setPath(String path)}
- *
- * @return path
- * @see javax.ws.rs.Path
- */
- public String getPath()
- {
- return path;
- }
-
- /**
- * Set the path this resource will operate on. This method is intended to be
- * used only by Seam to create a resource configured in component descriptor.
- * To specify the path in other cases, use @Path annotation. See
- *
- * @param path
- */
- public void setPath(String path)
- {
- this.path = path;
- }
-
- /**
- * Select a media type that will be used for marshalling entity. Media type
- * is selected from the intersection of media types supported by this
- * resource and media types accepted by client.
- *
- * @return selected media type, returns null if no suitable media type is
- * found
- */
- protected MediaType selectResponseMediaType()
- {
- for (MediaType acceptedMediaType : httpHeaders.getAcceptableMediaTypes())
- {
- for (MediaType availableMediaType : mediaTypes)
- {
- if (acceptedMediaType.isCompatible(availableMediaType))
- return availableMediaType;
- }
- }
- return null;
- }
-
- /**
- * Check if media type passed as parameter is supported by this resource.
- *
- * @param mediaType
- * @return true if and only if the media type is accepted by this resource
- */
- public boolean isMediaTypeCompatible(MediaType mediaType)
- {
- for (MediaType availableMediaType : mediaTypes)
- {
- if (availableMediaType.isCompatible(mediaType))
- {
- return true;
- }
- }
- return false;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/AbstractResource.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,166 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+
+/**
+ * Resource class used by ResourceHome and ResourceQuery components. Contains
+ * information about path, media types and entity class the component operates
+ * on.
+ *
+ * @author Jozef Hartinger
+ * @param <T> entity class
+ */
+public abstract class AbstractResource<T>
+{
+
+ @Context
+ private HttpHeaders httpHeaders;
+
+ private String path = null;
+ private MediaType[] mediaTypes = null;
+ private Class entityClass = null;
+
+ public AbstractResource()
+ {
+ mediaTypes = new MediaType[]{MediaType.APPLICATION_XML_TYPE};
+ }
+
+ public String[] getMediaTypes()
+ {
+ String[] mediaTypes = new String[this.mediaTypes.length];
+ for (int i = 0; i < mediaTypes.length; i++)
+ {
+ mediaTypes[i] = this.mediaTypes[i].toString();
+ }
+ return mediaTypes;
+ }
+
+ public void setMediaTypes(String[] mediaTypes)
+ {
+ this.mediaTypes = new MediaType[mediaTypes.length];
+ for (int i = 0; i < mediaTypes.length; i++)
+ {
+ this.mediaTypes[i] = MediaType.valueOf(mediaTypes[i]);
+ }
+ }
+
+ public void setEntityClass(Class entityClass)
+ {
+ this.entityClass = entityClass;
+ }
+
+ /**
+ * Retrieve entity class. If not set, type parameters of a superclass are
+ * examined.
+ *
+ * @return entity class
+ */
+ public Class<T> getEntityClass()
+ {
+ if (entityClass == null)
+ {
+ Type superclass = this.getClass().getGenericSuperclass();
+ if (superclass instanceof ParameterizedType)
+ {
+ ParameterizedType parameterizedSuperclass = (ParameterizedType) superclass;
+ if (parameterizedSuperclass.getActualTypeArguments().length > 0)
+ {
+ return (Class) parameterizedSuperclass.getActualTypeArguments()[0];
+ }
+ }
+ throw new RuntimeException("Unable to determine entity class.");
+ }
+ else
+ {
+ return entityClass;
+ }
+ }
+
+ /**
+ * Retrieve a suffix of this resource's URI. See {@link #setPath(String path)}
+ *
+ * @return path
+ * @see javax.ws.rs.Path
+ */
+ public String getPath()
+ {
+ return path;
+ }
+
+ /**
+ * Set the path this resource will operate on. This method is intended to be
+ * used only by Seam to create a resource configured in component descriptor.
+ * To specify the path in other cases, use @Path annotation. See
+ *
+ * @param path
+ */
+ public void setPath(String path)
+ {
+ this.path = path;
+ }
+
+ /**
+ * Select a media type that will be used for marshalling entity. Media type
+ * is selected from the intersection of media types supported by this
+ * resource and media types accepted by client.
+ *
+ * @return selected media type, returns null if no suitable media type is
+ * found
+ */
+ protected MediaType selectResponseMediaType()
+ {
+ for (MediaType acceptedMediaType : httpHeaders.getAcceptableMediaTypes())
+ {
+ for (MediaType availableMediaType : mediaTypes)
+ {
+ if (acceptedMediaType.isCompatible(availableMediaType))
+ return availableMediaType;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Check if media type passed as parameter is supported by this resource.
+ *
+ * @param mediaType
+ * @return true if and only if the media type is accepted by this resource
+ */
+ public boolean isMediaTypeCompatible(MediaType mediaType)
+ {
+ for (MediaType availableMediaType : mediaTypes)
+ {
+ if (availableMediaType.isCompatible(mediaType))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,237 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.Component;
-import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.Install;
-
-import javax.ws.rs.core.MediaType;
-import java.util.*;
-
-/**
- * RESTEasy and JAX-RS configuration, override in components.xml to
- * customize RESTful request processing and RESTEasy settings.
- *
- * @author Christian Bauer
- */
- at Name("org.jboss.seam.resteasy.application")
- at Scope(ScopeType.APPLICATION)
- at Install(precedence = Install.BUILT_IN)
- at AutoCreate
-public class Application extends javax.ws.rs.core.Application
-{
-
- final private Map<Class<?>, Set<Component>> providerClasses = new HashMap<Class<?>, Set<Component>>();
- final private Map<Class<?>, Set<Component>> resourceClasses = new HashMap<Class<?>, Set<Component>>();
-
- private List<String> providerClassNames = new ArrayList<String>();
- private List<String> resourceClassNames = new ArrayList<String>();
-
- private Map<String, String> mediaTypeMappings = new HashMap<String, String>();
- private Map<String, String> languageMappings = new HashMap<String, String>();
-
- private boolean scanProviders = true;
- private boolean scanResources = true;
- private boolean useBuiltinProviders = true;
- private boolean destroySessionAfterRequest = true;
-
- private String resourcePathPrefix = "/rest";
- private boolean stripSeamResourcePath = true;
-
- public Application()
- {
- super();
- }
-
- public Set<Class<?>> getProviderClasses()
- {
- return providerClasses.keySet();
- }
-
- @Override
- public Set<Class<?>> getClasses()
- {
- return resourceClasses.keySet();
- }
-
- public void addProviderClass(Class<?> clazz)
- {
- providerClasses.put(clazz, null);
- }
-
- public void addProviderClass(Class<?> clazz, Component component)
- {
- Set<Component> components = providerClasses.get(clazz);
- if (components == null)
- {
- components = new HashSet<Component>();
- providerClasses.put(clazz, components);
- }
- components.add(component);
- }
-
- public void removeProviderClass(Class<?> clazz)
- {
- providerClasses.remove(clazz);
- }
-
- public void addResourceClass(Class<?> clazz)
- {
- resourceClasses.put(clazz, null);
- }
-
- public void addResourceClass(Class<?> clazz, Set<Component> newComponents)
- {
- Set<Component> components = resourceClasses.get(clazz);
- if (components == null)
- {
- components = new HashSet<Component>();
- resourceClasses.put(clazz, components);
- }
- components.addAll(newComponents);
- }
-
- public void removeResourceClass(Class<?> clazz)
- {
- resourceClasses.remove(clazz);
- }
-
- public Set<Component> getProviderClassComponent(Class clazz)
- {
- return providerClasses.get(clazz) != null ? providerClasses.get(clazz) : null;
- }
-
- public Set<Component> getResourceClassComponent(Class clazz)
- {
- return resourceClasses.get(clazz) != null ? resourceClasses.get(clazz) : null;
- }
-
- public Map<String, MediaType> getMediaTypeMappings()
- {
- Map<String, MediaType> extMap = new HashMap<String, MediaType>();
- for (String ext : mediaTypeMappings.keySet())
- {
- String value = mediaTypeMappings.get(ext);
- extMap.put(ext, MediaType.valueOf(value));
- }
- return extMap;
- }
-
- public void setMediaTypeMappings(Map<String, String> mediaTypeMappings)
- {
- this.mediaTypeMappings = mediaTypeMappings;
- }
-
- public Map<String, String> getLanguageMappings()
- {
- return languageMappings;
- }
-
- public void setLanguageMappings(Map<String, String> languageMappings)
- {
- this.languageMappings = languageMappings;
- }
-
- public List<String> getProviderClassNames()
- {
- return providerClassNames;
- }
-
- public void setProviderClassNames(List<String> providerClassNames)
- {
- this.providerClassNames = providerClassNames;
- }
-
- public List<String> getResourceClassNames()
- {
- return resourceClassNames;
- }
-
- public void setResourceClassNames(List<String> resourceClassNames)
- {
- this.resourceClassNames = resourceClassNames;
- }
-
- public boolean isScanProviders()
- {
- return scanProviders;
- }
-
- public void setScanProviders(boolean scanProviders)
- {
- this.scanProviders = scanProviders;
- }
-
- public boolean isScanResources()
- {
- return scanResources;
- }
-
- public void setScanResources(boolean scanResources)
- {
- this.scanResources = scanResources;
- }
-
- public boolean isUseBuiltinProviders()
- {
- return useBuiltinProviders;
- }
-
- public void setUseBuiltinProviders(boolean useBuiltinProviders)
- {
- this.useBuiltinProviders = useBuiltinProviders;
- }
-
- public boolean isDestroySessionAfterRequest()
- {
- return destroySessionAfterRequest;
- }
-
- public void setDestroySessionAfterRequest(boolean destroySessionAfterRequest)
- {
- this.destroySessionAfterRequest = destroySessionAfterRequest;
- }
-
- public String getResourcePathPrefix()
- {
- return resourcePathPrefix;
- }
-
- public void setResourcePathPrefix(String resourcePathPrefix)
- {
- this.resourcePathPrefix = resourcePathPrefix;
- }
-
- public boolean isStripSeamResourcePath()
- {
- return stripSeamResourcePath;
- }
-
- public void setStripSeamResourcePath(boolean stripSeamResourcePath)
- {
- this.stripSeamResourcePath = stripSeamResourcePath;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/Application.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,237 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Install;
+
+import javax.ws.rs.core.MediaType;
+import java.util.*;
+
+/**
+ * RESTEasy and JAX-RS configuration, override in components.xml to
+ * customize RESTful request processing and RESTEasy settings.
+ *
+ * @author Christian Bauer
+ */
+ at Name("org.jboss.seam.resteasy.application")
+ at Scope(ScopeType.APPLICATION)
+ at Install(precedence = Install.BUILT_IN)
+ at AutoCreate
+public class Application extends javax.ws.rs.core.Application
+{
+
+ final private Map<Class<?>, Set<Component>> providerClasses = new HashMap<Class<?>, Set<Component>>();
+ final private Map<Class<?>, Set<Component>> resourceClasses = new HashMap<Class<?>, Set<Component>>();
+
+ private List<String> providerClassNames = new ArrayList<String>();
+ private List<String> resourceClassNames = new ArrayList<String>();
+
+ private Map<String, String> mediaTypeMappings = new HashMap<String, String>();
+ private Map<String, String> languageMappings = new HashMap<String, String>();
+
+ private boolean scanProviders = true;
+ private boolean scanResources = true;
+ private boolean useBuiltinProviders = true;
+ private boolean destroySessionAfterRequest = true;
+
+ private String resourcePathPrefix = "/rest";
+ private boolean stripSeamResourcePath = true;
+
+ public Application()
+ {
+ super();
+ }
+
+ public Set<Class<?>> getProviderClasses()
+ {
+ return providerClasses.keySet();
+ }
+
+ @Override
+ public Set<Class<?>> getClasses()
+ {
+ return resourceClasses.keySet();
+ }
+
+ public void addProviderClass(Class<?> clazz)
+ {
+ providerClasses.put(clazz, null);
+ }
+
+ public void addProviderClass(Class<?> clazz, Component component)
+ {
+ Set<Component> components = providerClasses.get(clazz);
+ if (components == null)
+ {
+ components = new HashSet<Component>();
+ providerClasses.put(clazz, components);
+ }
+ components.add(component);
+ }
+
+ public void removeProviderClass(Class<?> clazz)
+ {
+ providerClasses.remove(clazz);
+ }
+
+ public void addResourceClass(Class<?> clazz)
+ {
+ resourceClasses.put(clazz, null);
+ }
+
+ public void addResourceClass(Class<?> clazz, Set<Component> newComponents)
+ {
+ Set<Component> components = resourceClasses.get(clazz);
+ if (components == null)
+ {
+ components = new HashSet<Component>();
+ resourceClasses.put(clazz, components);
+ }
+ components.addAll(newComponents);
+ }
+
+ public void removeResourceClass(Class<?> clazz)
+ {
+ resourceClasses.remove(clazz);
+ }
+
+ public Set<Component> getProviderClassComponent(Class clazz)
+ {
+ return providerClasses.get(clazz) != null ? providerClasses.get(clazz) : null;
+ }
+
+ public Set<Component> getResourceClassComponent(Class clazz)
+ {
+ return resourceClasses.get(clazz) != null ? resourceClasses.get(clazz) : null;
+ }
+
+ public Map<String, MediaType> getMediaTypeMappings()
+ {
+ Map<String, MediaType> extMap = new HashMap<String, MediaType>();
+ for (String ext : mediaTypeMappings.keySet())
+ {
+ String value = mediaTypeMappings.get(ext);
+ extMap.put(ext, MediaType.valueOf(value));
+ }
+ return extMap;
+ }
+
+ public void setMediaTypeMappings(Map<String, String> mediaTypeMappings)
+ {
+ this.mediaTypeMappings = mediaTypeMappings;
+ }
+
+ public Map<String, String> getLanguageMappings()
+ {
+ return languageMappings;
+ }
+
+ public void setLanguageMappings(Map<String, String> languageMappings)
+ {
+ this.languageMappings = languageMappings;
+ }
+
+ public List<String> getProviderClassNames()
+ {
+ return providerClassNames;
+ }
+
+ public void setProviderClassNames(List<String> providerClassNames)
+ {
+ this.providerClassNames = providerClassNames;
+ }
+
+ public List<String> getResourceClassNames()
+ {
+ return resourceClassNames;
+ }
+
+ public void setResourceClassNames(List<String> resourceClassNames)
+ {
+ this.resourceClassNames = resourceClassNames;
+ }
+
+ public boolean isScanProviders()
+ {
+ return scanProviders;
+ }
+
+ public void setScanProviders(boolean scanProviders)
+ {
+ this.scanProviders = scanProviders;
+ }
+
+ public boolean isScanResources()
+ {
+ return scanResources;
+ }
+
+ public void setScanResources(boolean scanResources)
+ {
+ this.scanResources = scanResources;
+ }
+
+ public boolean isUseBuiltinProviders()
+ {
+ return useBuiltinProviders;
+ }
+
+ public void setUseBuiltinProviders(boolean useBuiltinProviders)
+ {
+ this.useBuiltinProviders = useBuiltinProviders;
+ }
+
+ public boolean isDestroySessionAfterRequest()
+ {
+ return destroySessionAfterRequest;
+ }
+
+ public void setDestroySessionAfterRequest(boolean destroySessionAfterRequest)
+ {
+ this.destroySessionAfterRequest = destroySessionAfterRequest;
+ }
+
+ public String getResourcePathPrefix()
+ {
+ return resourcePathPrefix;
+ }
+
+ public void setResourcePathPrefix(String resourcePathPrefix)
+ {
+ this.resourcePathPrefix = resourcePathPrefix;
+ }
+
+ public boolean isStripSeamResourcePath()
+ {
+ return stripSeamResourcePath;
+ }
+
+ public void setStripSeamResourcePath(boolean stripSeamResourcePath)
+ {
+ this.stripSeamResourcePath = stripSeamResourcePath;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,164 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.seam.framework.EntityHome;
-import org.jboss.seam.framework.HibernateEntityHome;
-import org.jboss.seam.framework.Home;
-
-/**
- * This class provides an unified interface for accessing EntityHome and
- * HibernateEntityHome instances.
- *
- * @author Jozef Hartinger
- * @see org.jboss.seam.framework.EntityHome
- * @see org.jboss.seam.framework.HibernateEntityHome
- */
-public class EntityHomeWrapper<T>
-{
- private Home<?, T> home = null;
- private boolean hibernate;
-
- /**
- * EntityHome or HibernateEntityHome instance is expected.
- */
- public EntityHomeWrapper(Home<?, T> entityHome)
- {
- if (entityHome instanceof EntityHome)
- {
- hibernate = false;
- }
- else if (entityHome instanceof HibernateEntityHome)
- {
- hibernate = true;
- }
- else
- {
- throw new IllegalArgumentException("You must use either EntityHome or HibernateEntityHome instance.");
- }
- this.home = entityHome;
- }
-
- public Object getId()
- {
- return home.getId();
- }
-
- public void setId(Object id)
- {
- home.setId(id);
- }
-
- public T getInstance()
- {
- return home.getInstance();
- }
-
- public void setInstance(T instance)
- {
- home.setInstance(instance);
- }
-
- public T find()
- {
- if (hibernate)
- {
- return getHibernateEntityHome().find();
- }
- else
- {
- return getEntityHome().find();
- }
- }
-
- public void persist()
- {
- if (hibernate)
- {
- getHibernateEntityHome().persist();
- }
- else
- {
- getEntityHome().persist();
- }
- }
-
- public void remove()
- {
- if (hibernate)
- {
- getHibernateEntityHome().remove();
- }
- else
- {
- getEntityHome().remove();
- }
- }
-
- /**
- * Merge the state of the given entity with the current persistence context.
- */
- public void merge(T object)
- {
- if (hibernate)
- {
- getHibernateEntityHome().getSession().merge(object);
- getHibernateEntityHome().update();
- }
- else
- {
- getEntityHome().getEntityManager().merge(object);
- getEntityHome().update();
- }
- }
-
- public Class<T> getEntityClass()
- {
- return home.getEntityClass();
- }
-
- private EntityHome<T> getEntityHome()
- {
- return (EntityHome<T>) home;
- }
-
- private HibernateEntityHome<T> getHibernateEntityHome()
- {
- return (HibernateEntityHome<T>) home;
- }
-
- /**
- * Return the underlying EntityHome or HibernateEntityHome instance.
- */
- public Home<?, T> unwrap()
- {
- if (hibernate)
- {
- return getHibernateEntityHome();
- }
- else
- {
- return getEntityHome();
- }
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/EntityHomeWrapper.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.framework.HibernateEntityHome;
+import org.jboss.seam.framework.Home;
+
+/**
+ * This class provides an unified interface for accessing EntityHome and
+ * HibernateEntityHome instances.
+ *
+ * @author Jozef Hartinger
+ * @see org.jboss.seam.framework.EntityHome
+ * @see org.jboss.seam.framework.HibernateEntityHome
+ */
+public class EntityHomeWrapper<T>
+{
+ private Home<?, T> home = null;
+ private boolean hibernate;
+
+ /**
+ * EntityHome or HibernateEntityHome instance is expected.
+ */
+ public EntityHomeWrapper(Home<?, T> entityHome)
+ {
+ if (entityHome instanceof EntityHome)
+ {
+ hibernate = false;
+ }
+ else if (entityHome instanceof HibernateEntityHome)
+ {
+ hibernate = true;
+ }
+ else
+ {
+ throw new IllegalArgumentException("You must use either EntityHome or HibernateEntityHome instance.");
+ }
+ this.home = entityHome;
+ }
+
+ public Object getId()
+ {
+ return home.getId();
+ }
+
+ public void setId(Object id)
+ {
+ home.setId(id);
+ }
+
+ public T getInstance()
+ {
+ return home.getInstance();
+ }
+
+ public void setInstance(T instance)
+ {
+ home.setInstance(instance);
+ }
+
+ public T find()
+ {
+ if (hibernate)
+ {
+ return getHibernateEntityHome().find();
+ }
+ else
+ {
+ return getEntityHome().find();
+ }
+ }
+
+ public void persist()
+ {
+ if (hibernate)
+ {
+ getHibernateEntityHome().persist();
+ }
+ else
+ {
+ getEntityHome().persist();
+ }
+ }
+
+ public void remove()
+ {
+ if (hibernate)
+ {
+ getHibernateEntityHome().remove();
+ }
+ else
+ {
+ getEntityHome().remove();
+ }
+ }
+
+ /**
+ * Merge the state of the given entity with the current persistence context.
+ */
+ public void merge(T object)
+ {
+ if (hibernate)
+ {
+ getHibernateEntityHome().getSession().merge(object);
+ getHibernateEntityHome().update();
+ }
+ else
+ {
+ getEntityHome().getEntityManager().merge(object);
+ getEntityHome().update();
+ }
+ }
+
+ public Class<T> getEntityClass()
+ {
+ return home.getEntityClass();
+ }
+
+ private EntityHome<T> getEntityHome()
+ {
+ return (EntityHome<T>) home;
+ }
+
+ private HibernateEntityHome<T> getHibernateEntityHome()
+ {
+ return (HibernateEntityHome<T>) home;
+ }
+
+ /**
+ * Return the underlying EntityHome or HibernateEntityHome instance.
+ */
+ public Home<?, T> unwrap()
+ {
+ if (hibernate)
+ {
+ return getHibernateEntityHome();
+ }
+ else
+ {
+ return getEntityHome();
+ }
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,372 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import java.io.InputStream;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.net.URI;
-
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.GenericEntity;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-import javax.ws.rs.ext.MessageBodyReader;
-
-import org.jboss.resteasy.core.Headers;
-import org.jboss.resteasy.core.StringParameterInjector;
-import org.jboss.seam.Entity;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.framework.Home;
-
-import static javax.ws.rs.core.Response.Status.UNSUPPORTED_MEDIA_TYPE;
-import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
-
-/**
- * This component exposes EntityHome and HibernateEntityHome components as a
- * REST resource.
- *
- * @author Jozef Hartinger
- * @param <T> Entity class
- * @param <T2> Entity id class
- */
-// Empty @Path because it's ignored by second-stage bootstrap if not subclassed or in components.xml
-// but we need it as a marker so we'll find components.xml declarations during first stage of bootstrap.
- at Path("")
-public class ResourceHome<T, T2> extends AbstractResource<T>
-{
- private EntityHomeWrapper<T> entityHome = null;
-
- @Context
- private UriInfo uriInfo;
- @Context
- private Headers headers;
- @HeaderParam("Content-Type")
- private MediaType requestContentType;
-
- private Class entityIdClass = null;
- private boolean readonly;
-
- /**
- * Called at component instantiation. EntityHome component must be set in
- * order for component to be created.
- */
- @Create
- public void create()
- {
- setEntityHome(getEntityHome());
- if (entityHome == null)
- {
- throw new IllegalStateException("entityHome is not set");
- }
- }
-
- /**
- * Called by RESTEasy when HTTP GET request is received. String form of
- * entity identifier is passed as a parameter. Returns a response containing
- * database entity.
- *
- * @param rawId String form of entity identifier
- * @return response
- * @see #getEntity
- */
- @Path("/{id}")
- @GET
- public Response getResource(@PathParam("id") String rawId)
- {
- MediaType selectedMediaType = selectResponseMediaType();
- if (selectedMediaType == null)
- {
- return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
- }
-
- T2 id = unmarshallId(rawId);
- T entity = getEntity(id);
-
- return Response.ok(new GenericEntity(entity, getEntityClass())
- {
- }, selectedMediaType).build();
- }
-
- /**
- * Retrieve an entity identified by id parameter.
- *
- * @param id entity identifier
- * @return entity database entity
- */
- public T getEntity(T2 id)
- {
- entityHome.setId(id);
- return entityHome.find();
-
- }
-
- /**
- * Called by RESTEasy when HTTP POST request is received. Persists received
- * entity and returns 201 HTTP status code with location header set to new
- * URI if operation succeeds.
- *
- * @param messageBody HTTP request body
- * @return response
- * @see #createEntity
- */
- @POST
- public Response createResource(InputStream messageBody)
- {
- if (readonly)
- {
- return Response.status(405).build();
- }
-
- // check if we accept this content type
- if (!isMediaTypeCompatible(requestContentType))
- {
- return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
- }
-
- T entity = unmarshallEntity(messageBody);
-
- T2 id = createEntity(entity);
-
- URI uri = uriInfo.getAbsolutePathBuilder().path(id.toString()).build();
- return Response.created(uri).build();
- }
-
- /**
- * Store entity passed as a parameter in the database.
- *
- * @param entity Object to be persisted
- * @return id identifier assigned to the entity
- */
- public T2 createEntity(T entity)
- {
- entityHome.setInstance(entity);
- entityHome.persist();
- return (T2) entityHome.getId();
- }
-
- /**
- * Called by RESTEasy when HTTP PUT request is received. Merges the state of
- * the database entity with the received representation.
- *
- * @param rawId String form of entity identifier
- * @param messageBody HTTP request body
- * @return response
- * @see #updateEntity
- */
- @Path("/{id}")
- @PUT
- public Response updateResource(@PathParam("id") String rawId, InputStream messageBody)
- {
- if (readonly)
- {
- return Response.status(405).build();
- }
-
- // check if we accept this content type
- if (!isMediaTypeCompatible(requestContentType))
- {
- return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
- }
-
- T entity = unmarshallEntity(messageBody);
- T2 id = unmarshallId(rawId);
-
- // check representation id - we don't allow renaming
- Object storedId = Entity.forBean(entity).getIdentifier(entity);
- if (!id.equals(storedId))
- {
- return Response.status(BAD_REQUEST).build();
- }
-
- updateEntity(entity, id);
- return Response.noContent().build();
- }
-
- /**
- * Merge the state of the database entity with the entity passed as a
- * parameter. Override to customize the update strategy - for instance to
- * update specific fields only instead of a full merge.
- *
- * @param entity
- */
- public void updateEntity(T entity, T2 id)
- {
- entityHome.merge(entity);
- }
-
- /**
- * Called by RESTEasy when HTTP DELETE request is received. Deletes a
- * database entity.
- *
- * @param rawId String form of entity identifier
- * @return response
- * @see #deleteEntity
- */
- @Path("/{id}")
- @DELETE
- public Response deleteResource(@PathParam("id") String rawId)
- {
- if (readonly)
- {
- return Response.status(405).build();
- }
-
- T2 id = unmarshallId(rawId);
- deleteEntity(id);
- return Response.noContent().build();
- }
-
- /**
- * Delete database entity.
- *
- * @param id entity identifier
- */
- public void deleteEntity(T2 id)
- {
- getEntity(id);
- entityHome.remove();
- }
-
- /**
- * Convert HTTP request body into entity class instance.
- *
- * @param is HTTP request body
- * @return entity
- */
- private T unmarshallEntity(InputStream is)
- {
- Class<T> entityClass = getEntityClass();
- MessageBodyReader<T> reader = SeamResteasyProviderFactory.getInstance().getMessageBodyReader(entityClass, entityClass, entityClass.getAnnotations(), requestContentType);
- if (reader == null)
- {
- throw new RuntimeException("Unable to find MessageBodyReader for content type " + requestContentType);
- }
- T entity;
- try
- {
- entity = reader.readFrom(entityClass, entityClass, entityClass.getAnnotations(), requestContentType, headers, is);
- }
- catch (Exception e)
- {
- throw new RuntimeException("Unable to unmarshall request body");
- }
- return entity;
- }
-
- /**
- * Converts String form of entity identifier to it's natural type.
- *
- * @param id String form of entity identifier
- * @return entity identifier
- */
- private T2 unmarshallId(String id)
- {
- StringParameterInjector injector = new StringParameterInjector(getEntityIdClass(), getEntityIdClass(), "id", PathParam.class, null, null, SeamResteasyProviderFactory.getInstance());
- return (T2) injector.extractValue(id);
- }
-
- /**
- * EntityHome component getter. Override this method to set the EntityHome
- * this resource will operate on. You can use either EntityHome or
- * HibernateEntityHome instance.
- *
- * @return entity home
- */
- public Home<?, T> getEntityHome()
- {
- return (entityHome == null) ? null : entityHome.unwrap();
- }
-
- /**
- * EntityHome component setter
- *
- * @param entityHome
- */
- public void setEntityHome(Home<?, T> entityHome)
- {
- this.entityHome = new EntityHomeWrapper<T>(entityHome);
- }
-
- @Override
- public Class<T> getEntityClass()
- {
- return entityHome.getEntityClass();
- }
-
- public boolean isReadonly()
- {
- return readonly;
- }
-
- /**
- * If set to read-only mode, this resource will only response to GET
- * requests. HTTP 415 status code (method not allowed) will returned in all
- * other cases.
- *
- * @param readonly
- */
- public void setReadonly(boolean readonly)
- {
- this.readonly = readonly;
- }
-
- /**
- * Retrieve entity identifier's class. If not set, type parameters of a
- * superclass are examined.
- *
- * @return class of entity identifier
- */
- public Class getEntityIdClass()
- {
- if (entityIdClass == null)
- {
- Type superclass = this.getClass().getGenericSuperclass();
- if (superclass instanceof ParameterizedType)
- {
- ParameterizedType parameterizedSuperclass = (ParameterizedType) superclass;
- if (parameterizedSuperclass.getActualTypeArguments().length == 2)
- {
- return (Class) parameterizedSuperclass.getActualTypeArguments()[1];
- }
- }
- throw new RuntimeException("Unable to determine entity id class.");
- }
- else
- {
- return entityIdClass;
- }
- }
-
- public void setEntityIdClass(Class entityIdClass)
- {
- this.entityIdClass = entityIdClass;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceHome.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,391 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import java.io.InputStream;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.annotation.Annotation;
+import java.net.URI;
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.ext.MessageBodyReader;
+
+import org.jboss.resteasy.core.Headers;
+import org.jboss.resteasy.core.StringParameterInjector;
+import org.jboss.seam.Entity;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.framework.Home;
+
+import static javax.ws.rs.core.Response.Status.UNSUPPORTED_MEDIA_TYPE;
+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+
+/**
+ * This component exposes EntityHome and HibernateEntityHome components as a
+ * REST resource.
+ *
+ * @author Jozef Hartinger
+ * @param <T> Entity class
+ * @param <T2> Entity id class
+ */
+// Empty @Path because it's ignored by second-stage bootstrap if not subclassed or in components.xml
+// but we need it as a marker so we'll find components.xml declarations during first stage of bootstrap.
+ at Path("")
+public class ResourceHome<T, T2> extends AbstractResource<T>
+{
+ private EntityHomeWrapper<T> entityHome = null;
+
+ @Context
+ private UriInfo uriInfo;
+ @Context
+ private Headers headers;
+ @HeaderParam("Content-Type")
+ private MediaType requestContentType;
+
+ private Class entityIdClass = null;
+ private boolean readonly;
+
+ private static final PathParamAnnotation pathParamAnnotation = new PathParamAnnotation();
+
+ /**
+ * Called at component instantiation. EntityHome component must be set in
+ * order for component to be created.
+ */
+ @Create
+ public void create()
+ {
+ setEntityHome(getEntityHome());
+ if (entityHome == null)
+ {
+ throw new IllegalStateException("entityHome is not set");
+ }
+ }
+
+ /**
+ * Called by RESTEasy when HTTP GET request is received. String form of
+ * entity identifier is passed as a parameter. Returns a response containing
+ * database entity.
+ *
+ * @param rawId String form of entity identifier
+ * @return response
+ * @see #getEntity
+ */
+ @Path("/{id}")
+ @GET
+ public Response getResource(@PathParam("id") String rawId)
+ {
+ MediaType selectedMediaType = selectResponseMediaType();
+ if (selectedMediaType == null)
+ {
+ return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
+ }
+
+ T2 id = unmarshallId(rawId);
+ T entity = getEntity(id);
+
+ return Response.ok(new GenericEntity(entity, getEntityClass())
+ {
+ }, selectedMediaType).build();
+ }
+
+ /**
+ * Retrieve an entity identified by id parameter.
+ *
+ * @param id entity identifier
+ * @return entity database entity
+ */
+ public T getEntity(T2 id)
+ {
+ entityHome.setId(id);
+ return entityHome.find();
+
+ }
+
+ /**
+ * Called by RESTEasy when HTTP POST request is received. Persists received
+ * entity and returns 201 HTTP status code with location header set to new
+ * URI if operation succeeds.
+ *
+ * @param messageBody HTTP request body
+ * @return response
+ * @see #createEntity
+ */
+ @POST
+ public Response createResource(InputStream messageBody)
+ {
+ if (readonly)
+ {
+ return Response.status(405).build();
+ }
+
+ // check if we accept this content type
+ if (!isMediaTypeCompatible(requestContentType))
+ {
+ return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
+ }
+
+ T entity = unmarshallEntity(messageBody);
+
+ T2 id = createEntity(entity);
+
+ URI uri = uriInfo.getAbsolutePathBuilder().path(id.toString()).build();
+ return Response.created(uri).build();
+ }
+
+ /**
+ * Store entity passed as a parameter in the database.
+ *
+ * @param entity Object to be persisted
+ * @return id identifier assigned to the entity
+ */
+ public T2 createEntity(T entity)
+ {
+ entityHome.setInstance(entity);
+ entityHome.persist();
+ return (T2) entityHome.getId();
+ }
+
+ /**
+ * Called by RESTEasy when HTTP PUT request is received. Merges the state of
+ * the database entity with the received representation.
+ *
+ * @param rawId String form of entity identifier
+ * @param messageBody HTTP request body
+ * @return response
+ * @see #updateEntity
+ */
+ @Path("/{id}")
+ @PUT
+ public Response updateResource(@PathParam("id") String rawId, InputStream messageBody)
+ {
+ if (readonly)
+ {
+ return Response.status(405).build();
+ }
+
+ // check if we accept this content type
+ if (!isMediaTypeCompatible(requestContentType))
+ {
+ return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
+ }
+
+ T entity = unmarshallEntity(messageBody);
+ T2 id = unmarshallId(rawId);
+
+ // check representation id - we don't allow renaming
+ Object storedId = Entity.forBean(entity).getIdentifier(entity);
+ if (!id.equals(storedId))
+ {
+ return Response.status(BAD_REQUEST).build();
+ }
+
+ updateEntity(entity, id);
+ return Response.noContent().build();
+ }
+
+ /**
+ * Merge the state of the database entity with the entity passed as a
+ * parameter. Override to customize the update strategy - for instance to
+ * update specific fields only instead of a full merge.
+ *
+ * @param entity
+ */
+ public void updateEntity(T entity, T2 id)
+ {
+ entityHome.merge(entity);
+ }
+
+ /**
+ * Called by RESTEasy when HTTP DELETE request is received. Deletes a
+ * database entity.
+ *
+ * @param rawId String form of entity identifier
+ * @return response
+ * @see #deleteEntity
+ */
+ @Path("/{id}")
+ @DELETE
+ public Response deleteResource(@PathParam("id") String rawId)
+ {
+ if (readonly)
+ {
+ return Response.status(405).build();
+ }
+
+ T2 id = unmarshallId(rawId);
+ deleteEntity(id);
+ return Response.noContent().build();
+ }
+
+ /**
+ * Delete database entity.
+ *
+ * @param id entity identifier
+ */
+ public void deleteEntity(T2 id)
+ {
+ getEntity(id);
+ entityHome.remove();
+ }
+
+ /**
+ * Convert HTTP request body into entity class instance.
+ *
+ * @param is HTTP request body
+ * @return entity
+ */
+ private T unmarshallEntity(InputStream is)
+ {
+ Class<T> entityClass = getEntityClass();
+ MessageBodyReader<T> reader = SeamResteasyProviderFactory.getInstance().getMessageBodyReader(entityClass, entityClass, entityClass.getAnnotations(), requestContentType);
+ if (reader == null)
+ {
+ throw new RuntimeException("Unable to find MessageBodyReader for content type " + requestContentType);
+ }
+ T entity;
+ try
+ {
+ entity = reader.readFrom(entityClass, entityClass, entityClass.getAnnotations(), requestContentType, headers, is);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Unable to unmarshall request body");
+ }
+ return entity;
+ }
+
+ /**
+ * Converts String form of entity identifier to it's natural type.
+ *
+ * @param id String form of entity identifier
+ * @return entity identifier
+ */
+ private T2 unmarshallId(String id)
+ {
+ StringParameterInjector injector = new StringParameterInjector(getEntityIdClass(), getEntityIdClass(), "id", PathParam.class, null, null, new Annotation[] {pathParamAnnotation}, SeamResteasyProviderFactory.getInstance());
+ return (T2) injector.extractValue(id);
+ }
+
+ /**
+ * EntityHome component getter. Override this method to set the EntityHome
+ * this resource will operate on. You can use either EntityHome or
+ * HibernateEntityHome instance.
+ *
+ * @return entity home
+ */
+ public Home<?, T> getEntityHome()
+ {
+ return (entityHome == null) ? null : entityHome.unwrap();
+ }
+
+ /**
+ * EntityHome component setter
+ *
+ * @param entityHome
+ */
+ public void setEntityHome(Home<?, T> entityHome)
+ {
+ this.entityHome = new EntityHomeWrapper<T>(entityHome);
+ }
+
+ @Override
+ public Class<T> getEntityClass()
+ {
+ return entityHome.getEntityClass();
+ }
+
+ public boolean isReadonly()
+ {
+ return readonly;
+ }
+
+ /**
+ * If set to read-only mode, this resource will only response to GET
+ * requests. HTTP 415 status code (method not allowed) will returned in all
+ * other cases.
+ *
+ * @param readonly
+ */
+ public void setReadonly(boolean readonly)
+ {
+ this.readonly = readonly;
+ }
+
+ /**
+ * Retrieve entity identifier's class. If not set, type parameters of a
+ * superclass are examined.
+ *
+ * @return class of entity identifier
+ */
+ public Class getEntityIdClass()
+ {
+ if (entityIdClass == null)
+ {
+ Type superclass = this.getClass().getGenericSuperclass();
+ if (superclass instanceof ParameterizedType)
+ {
+ ParameterizedType parameterizedSuperclass = (ParameterizedType) superclass;
+ if (parameterizedSuperclass.getActualTypeArguments().length == 2)
+ {
+ return (Class) parameterizedSuperclass.getActualTypeArguments()[1];
+ }
+ }
+ throw new RuntimeException("Unable to determine entity id class.");
+ }
+ else
+ {
+ return entityIdClass;
+ }
+ }
+
+ public void setEntityIdClass(Class entityIdClass)
+ {
+ this.entityIdClass = entityIdClass;
+ }
+
+ /**
+ * Annotation implementation (@PathParam("id")) for providing RESTEasy with metadata.
+ */
+ static class PathParamAnnotation implements PathParam {
+
+ public String value()
+ {
+ return "id";
+ }
+
+ public Class<? extends Annotation> annotationType()
+ {
+ return PathParam.class;
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,160 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.List;
-
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.GenericEntity;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.jboss.resteasy.annotations.providers.jaxb.Wrapped;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.framework.EntityQuery;
-import org.jboss.seam.framework.Query;
-
-import static javax.ws.rs.core.Response.Status.UNSUPPORTED_MEDIA_TYPE;
-import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
-
-/**
- * This component exposes EntityQuery component as a REST resource responding to
- * HTTP GET request.
- *
- * @author Jozef Hartinger
- * @param <T> entity type
- */
-// Empty @Path because it's ignored by second-stage bootstrap if not subclassed or in components.xml
-// but we need it as a marker so we'll find components.xml declarations during first stage of bootstrap.
- at Path("")
-public class ResourceQuery<T> extends AbstractResource<T>
-{
-
- private Query<?, T> entityQuery = null;
-
- /**
- * Called at component instantiation.
- */
- @Create
- public void create()
- {
- this.entityQuery = getEntityQuery();
- if (entityQuery == null)
- {
- this.entityQuery = createEntityQuery();
- }
- }
-
- /**
- * Called by RESTEasy to respond for an HTTP GET request. Retrieves a list of
- * entities matching criteria set by query parameters from database and
- * returns it wrapped in Response instance.
- *
- * @param start first entity in the list
- * @param show maximum size of the list
- * @return representation of a list of database entries
- * @see #getEntityList
- */
- @GET
- @Wrapped
- public Response getResourceList(@QueryParam("start") @DefaultValue("0") int start, @QueryParam("show") @DefaultValue("25") int show)
- {
- MediaType selectedMediaType = selectResponseMediaType();
- if (selectedMediaType == null)
- {
- return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
- }
-
- if ((start < 0) || (show < 0))
- {
- return Response.status(BAD_REQUEST).build();
- }
-
- final List<T> result = getEntityList(start, show);
- // create a proper response type
- Type responseType = new ParameterizedType()
- {
-
- public Type getRawType()
- {
- return result.getClass();
- }
-
- public Type getOwnerType()
- {
- return null;
- }
-
- public Type[] getActualTypeArguments()
- {
- return new Type[]{getEntityClass()};
- }
- };
- return Response.ok(new GenericEntity(result, responseType)
- {
- }, selectedMediaType).build();
- }
-
- /**
- * Retrieve a list of database entities.
- *
- * @param start first entity in the list
- * @param show maximum size of the list, 0 for unlimited
- * @return list of database entries
- */
- public List<T> getEntityList(int start, int show)
- {
- entityQuery.setFirstResult(start);
- if (show > 0) // set 0 for unlimited
- {
- entityQuery.setMaxResults(show);
- }
- return entityQuery.getResultList();
- }
-
- /**
- * EntityQuery getter
- *
- * @return EntityQuery instance
- */
- public Query<?, T> getEntityQuery()
- {
- return entityQuery;
- }
-
- public void setEntityQuery(Query<?, T> query)
- {
- this.entityQuery = query;
- }
-
- public Query<?, T> createEntityQuery()
- {
- Query<?, T> entityQuery = new EntityQuery<T>();
- entityQuery.setEjbql("select entity from " + getEntityClass().getName() + " entity");
- return entityQuery;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResourceQuery.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,160 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.List;
+
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Wrapped;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.framework.EntityQuery;
+import org.jboss.seam.framework.Query;
+
+import static javax.ws.rs.core.Response.Status.UNSUPPORTED_MEDIA_TYPE;
+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+
+/**
+ * This component exposes EntityQuery component as a REST resource responding to
+ * HTTP GET request.
+ *
+ * @author Jozef Hartinger
+ * @param <T> entity type
+ */
+// Empty @Path because it's ignored by second-stage bootstrap if not subclassed or in components.xml
+// but we need it as a marker so we'll find components.xml declarations during first stage of bootstrap.
+ at Path("")
+public class ResourceQuery<T> extends AbstractResource<T>
+{
+
+ private Query<?, T> entityQuery = null;
+
+ /**
+ * Called at component instantiation.
+ */
+ @Create
+ public void create()
+ {
+ this.entityQuery = getEntityQuery();
+ if (entityQuery == null)
+ {
+ this.entityQuery = createEntityQuery();
+ }
+ }
+
+ /**
+ * Called by RESTEasy to respond for an HTTP GET request. Retrieves a list of
+ * entities matching criteria set by query parameters from database and
+ * returns it wrapped in Response instance.
+ *
+ * @param start first entity in the list
+ * @param show maximum size of the list
+ * @return representation of a list of database entries
+ * @see #getEntityList
+ */
+ @GET
+ @Wrapped
+ public Response getResourceList(@QueryParam("start") @DefaultValue("0") int start, @QueryParam("show") @DefaultValue("25") int show)
+ {
+ MediaType selectedMediaType = selectResponseMediaType();
+ if (selectedMediaType == null)
+ {
+ return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
+ }
+
+ if ((start < 0) || (show < 0))
+ {
+ return Response.status(BAD_REQUEST).build();
+ }
+
+ final List<T> result = getEntityList(start, show);
+ // create a proper response type
+ Type responseType = new ParameterizedType()
+ {
+
+ public Type getRawType()
+ {
+ return result.getClass();
+ }
+
+ public Type getOwnerType()
+ {
+ return null;
+ }
+
+ public Type[] getActualTypeArguments()
+ {
+ return new Type[]{getEntityClass()};
+ }
+ };
+ return Response.ok(new GenericEntity(result, responseType)
+ {
+ }, selectedMediaType).build();
+ }
+
+ /**
+ * Retrieve a list of database entities.
+ *
+ * @param start first entity in the list
+ * @param show maximum size of the list, 0 for unlimited
+ * @return list of database entries
+ */
+ public List<T> getEntityList(int start, int show)
+ {
+ entityQuery.setFirstResult(start);
+ if (show > 0) // set 0 for unlimited
+ {
+ entityQuery.setMaxResults(show);
+ }
+ return entityQuery.getResultList();
+ }
+
+ /**
+ * EntityQuery getter
+ *
+ * @return EntityQuery instance
+ */
+ public Query<?, T> getEntityQuery()
+ {
+ return entityQuery;
+ }
+
+ public void setEntityQuery(Query<?, T> query)
+ {
+ this.entityQuery = query;
+ }
+
+ public Query<?, T> createEntityQuery()
+ {
+ Query<?, T> entityQuery = new EntityQuery<T>();
+ entityQuery.setEjbql("select entity from " + getEntityClass().getName() + " entity");
+ return entityQuery;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,531 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.resteasy.core.Dispatcher;
-import org.jboss.resteasy.core.SynchronousDispatcher;
-import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
-import org.jboss.resteasy.plugins.providers.RegisterBuiltin;
-import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory;
-import org.jboss.resteasy.spi.ResourceFactory;
-import org.jboss.resteasy.spi.StringConverter;
-import org.jboss.seam.Component;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.Seam;
-import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.Factory;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.JndiName;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.Startup;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.core.Init;
-import org.jboss.seam.deployment.AnnotationDeploymentHandler;
-import org.jboss.seam.deployment.DeploymentStrategy;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.util.EJB;
-import org.jboss.seam.util.Reflections;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Detects (through scanning and configuration) JAX-RS resources and providers, then
- * registers them with RESTEasy.
- * <p>
- * This class is a factory for <tt>org.jboss.seam.resteasy.dispatcher</tt> and it has been
- * designed for extension. Alternatively, you can ignore what this class is doing and provide a
- * different <tt>org.jboss.seam.resteasy.dispatcher</tt> yourself without extending this class.
- * </p>
- * <p>
- * The main methods of this class are <tt>registerProviders()</tt> and <tt>registerResources()</tt>.
- * These methods call out to the individual fine-grained registration procedures, which you can override
- * if a different registration strategy for a particular type/component is desired.
- * </p>
- *
- * @author Christian Bauer
- */
- at Name("org.jboss.seam.resteasy.bootstrap")
- at Scope(ScopeType.APPLICATION)
- at Startup
- at AutoCreate
- at Install(classDependencies = "org.jboss.resteasy.spi.ResteasyProviderFactory")
-public class ResteasyBootstrap
-{
-
- @Logger
- Log log;
-
- @In
- protected Application application;
-
- // The job of this class is to initialize and configure the RESTEasy Dispatcher instance
- protected Dispatcher dispatcher;
-
- @Factory("org.jboss.seam.resteasy.dispatcher")
- public Dispatcher getDispatcher()
- {
- return dispatcher;
- }
-
- @Create
- public void init()
- {
- log.info("bootstrapping JAX-RS application");
-
- // Custom ResteasyProviderFactory that understands Seam component lookup at runtime
- SeamResteasyProviderFactory providerFactory = createProviderFactory();
- dispatcher = createDispatcher(providerFactory);
- initDispatcher();
-
- // Always use the "deployment sensitive" factory - that means it is handled through ThreadLocal, not static
- // TODO: How does that actually work? It's never used because the dispatcher is created with the original one
- SeamResteasyProviderFactory.setInstance(new ThreadLocalResteasyProviderFactory(providerFactory));
-
- // Seam can scan the classes for us, we just have to list them in META-INF/seam-deployment.properties
- DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
- AnnotationDeploymentHandler handler =
- (AnnotationDeploymentHandler) deployment.getDeploymentHandlers().get(AnnotationDeploymentHandler.NAME);
-
- Collection<Class<?>> providers = findProviders(handler);
- Collection<Class<?>> resources = findResources(handler);
- Collection<Component> seamComponents = findSeamComponents();
-
- registerProviders(seamComponents, providers);
- registerResources(seamComponents, resources);
- }
-
- protected SeamResteasyProviderFactory createProviderFactory()
- {
- return new SeamResteasyProviderFactory();
- }
-
- protected Dispatcher createDispatcher(SeamResteasyProviderFactory providerFactory)
- {
- return new SynchronousDispatcher(providerFactory);
- }
-
- protected void initDispatcher()
- {
- getDispatcher().setLanguageMappings(application.getLanguageMappings());
- getDispatcher().setMediaTypeMappings(application.getMediaTypeMappings());
- }
-
- protected Collection<Class<?>> findProviders(AnnotationDeploymentHandler handler)
- {
- return findTypes(
- handler,
- application.isScanProviders(),
- javax.ws.rs.ext.Provider.class.getName(),
- application.getProviderClassNames()
- );
- }
-
- protected Collection<Class<?>> findResources(AnnotationDeploymentHandler handler)
- {
- return findTypes(
- handler,
- application.isScanResources(),
- javax.ws.rs.Path.class.getName(),
- application.getResourceClassNames()
- );
- }
-
- protected Collection<Class<?>> findTypes(AnnotationDeploymentHandler handler, boolean scanClasspathForAnnotations,
- String annotationFQName, Collection<String> includeTypeNames)
- {
-
- Collection<Class<?>> types = new HashSet();
-
- if (scanClasspathForAnnotations)
- {
- Collection<Class<?>> annotatedTypes = handler.getClassMap().get(annotationFQName);
- if (annotatedTypes != null) types.addAll(annotatedTypes);
- }
-
- try
- {
- for (String s : new HashSet<String>(includeTypeNames))
- {
- types.add(Reflections.classForName(s));
- }
- }
- catch (ClassNotFoundException ex)
- {
- log.error("error loading JAX-RS type: " + ex.getMessage(), ex);
- }
-
- return types;
- }
-
-
- protected Collection<Component> findSeamComponents()
- {
- // Iterate through all variables in the application context that end with ".component"
- log.debug("discovering all Seam components");
- Collection<Component> seamComponents = new HashSet();
- String[] applicationContextNames = Contexts.getApplicationContext().getNames();
- for (String applicationContextName : applicationContextNames)
- {
- if (applicationContextName.endsWith(".component"))
- {
- Component seamComponent =
- (Component) Component.getInstance(applicationContextName, ScopeType.APPLICATION);
- seamComponents.add(seamComponent);
- }
- }
- return seamComponents;
- }
-
-
- protected void registerProviders(Collection<Component> seamComponents, Collection<Class<?>> providerClasses)
- {
-
- // RESTEasy built-in providers first
- if (application.isUseBuiltinProviders())
- {
- log.info("registering built-in RESTEasy providers");
- RegisterBuiltin.register(getDispatcher().getProviderFactory());
- }
-
- Set<Class> handledProviders = new HashSet(); // Stuff we don't want to examine twice
-
- for (Component seamComponent : seamComponents)
- {
- // The component can have one (not many) @Provider annotated business interface
- Class providerInterface = getAnnotatedInterface(javax.ws.rs.ext.Provider.class, seamComponent);
-
- // How we register it depends on the component type
- switch (seamComponent.getType())
- {
-
- // TODO: We don't support EJB Seam components as providers
-
- case JAVA_BEAN:
-
- // We are only interested in components that have a @Provider annotation on iface or bean
- if (providerInterface == null
- && !seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.ext.Provider.class))
- {
- break;
- }
-
- // They also have to be in the right scope, otherwise we can't handle their lifecylce (yet)
- switch (seamComponent.getScope())
- {
- case APPLICATION:
-
- // StringConverter is a special case
- if (StringConverter.class.isAssignableFrom(seamComponent.getBeanClass()))
- {
- getDispatcher().getProviderFactory().addStringConverter(
- (StringConverter) Component.getInstance(seamComponent.getName())
- );
- }
- else
- {
- registerSeamComponentProvider(seamComponent);
- }
- break;
-
- default:
- throw new RuntimeException(
- "Provider Seam component '" + seamComponent.getName() + "' must be scoped " +
- "APPLICATION"
- );
- }
- break;
- }
-
- // We simply add everything we have seen so far... it's not really necessary but it doesn't hurt (does it?)
- handledProviders.add(seamComponent.getBeanClass());
- handledProviders.addAll(seamComponent.getBusinessInterfaces());
- }
-
- for (Class<?> providerClass : providerClasses)
- {
-
- // An @Provider annotated type may:
-
- // - have been already handled as a Seam component in the previous routine
- if (handledProviders.contains(providerClass)) continue;
-
- // - be a RESTEasy built-in provider
- if (providerClass.getName().startsWith("org.jboss.resteasy.plugins.providers")) continue;
-
- // - be an interface, which we don't care about if we don't have an implementation
- if (providerClass.isInterface()) continue;
-
- // - be just plain RESTEasy, no Seam component lookup or lifecycle
- if (StringConverter.class.isAssignableFrom(providerClass))
- {
- log.debug("registering provider as RESTEasy StringConverter: {0}", providerClass);
- getDispatcher().getProviderFactory().addStringConverter((Class<? extends StringConverter>) providerClass);
- }
- else
- {
- log.debug("registering provider as plain JAX-RS type: {0}", providerClass);
- getDispatcher().getProviderFactory().registerProvider(providerClass);
- }
- }
- }
-
- protected void registerResources(Collection<Component> seamComponents, Collection<Class<?>> resourceClasses)
- {
-
- Set<Class> handledResources = new HashSet(); // Stuff we don't want to examine twice
-
- for (Component seamComponent : seamComponents)
- {
-
- // A bean class of type (not subtypes) ResourceHome or ResourceQuery annotated with @Path, then
- // it's a Seam component resource we need to register with getPath() on the instance, it has been
- // configured in components.xml
- if (seamComponent.getBeanClass().equals(ResourceHome.class) ||
- seamComponent.getBeanClass().equals(ResourceQuery.class))
- {
- registerHomeQueryResources(seamComponent);
- handledResources.add(ResourceHome.class);
- handledResources.add(ResourceQuery.class);
- continue;
- }
-
- // The component can have one (not many) @Path annotated business interface
- Class resourceInterface = getAnnotatedInterface(javax.ws.rs.Path.class, seamComponent);
-
- // How we register it depends on the component type
- switch (seamComponent.getType())
- {
- case STATELESS_SESSION_BEAN:
- // EJB seam component resources must be @Path annotated on one of their business interfaces
- if (resourceInterface != null)
- {
- // TODO: Do we have to consider the scope? It should be stateless, right?
- registerInterfaceSeamComponentResource(seamComponent, resourceInterface);
- }
- break;
- case STATEFUL_SESSION_BEAN:
- // EJB seam component resources must be @Path annotated on one of their business interfaces
- if (resourceInterface != null)
- {
- log.error("Not implemented: Stateful EJB Seam component resource: " + seamComponent);
- // TODO: registerStatefulEJBSeamComponentResource(seamComponent);
- }
- break;
- case JAVA_BEAN:
-
- // We are only interested in components that have a @Path annotation on iface or bean
- if (resourceInterface == null
- && !seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.Path.class))
- {
- break;
- }
-
- // They also have to be in the right scope, otherwise we can't handle their lifecylce (yet)
- switch (seamComponent.getScope())
- {
- case EVENT:
- case APPLICATION:
- case STATELESS:
- case SESSION:
- if (resourceInterface != null)
- {
- registerInterfaceSeamComponentResource(seamComponent, resourceInterface);
- }
- else if (seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.Path.class))
- {
- registerSeamComponentResource(seamComponent);
- }
- break;
- default:
- throw new RuntimeException(
- "Resource Seam component '" + seamComponent.getName() + "' must be scoped either " +
- "EVENT, APPLICATION, STATELESS, or SESSION"
- );
- }
- break;
- }
-
- // We simply add everything we have seen so far... it's not really necessary but it doesn't hurt (does it?)
- handledResources.add(seamComponent.getBeanClass());
- handledResources.addAll(seamComponent.getBusinessInterfaces());
-
- }
-
- for (Class<?> resourceClass : resourceClasses)
- {
- // An @Path annotated type may:
-
- // - have been already handled as a Seam component in the previous routine
- if (handledResources.contains(resourceClass)) continue;
-
- // - be an interface, which we don't care about if we don't have an implementation
- if (resourceClass.isInterface()) continue;
-
- // - be a @Stateless EJB implementation class that was listed in components.xml
- if (resourceClass.isAnnotationPresent(EJB.STATELESS))
- {
- registerStatelessEJBResource(resourceClass);
- }
- // - be a @Stateful EJB implementation class that was listed in components.xml
- else if (resourceClass.isAnnotationPresent(EJB.STATEFUL))
- {
- throw new RuntimeException(
- "Only stateless EJBs can be JAX-RS resources, remove from configuration: " + resourceClass.getName()
- );
- }
- else
- {
- // - just be a regular JAX-RS lifecycle instance that can created/destroyed by RESTEasy
- registerPlainResource(resourceClass);
- }
- }
-
- }
-
- protected void registerHomeQueryResources(Component seamComponent)
- {
- // We can always instantiate this safely here because it can't have dependencies!
- AbstractResource instance = (AbstractResource) seamComponent.newInstance();
- String path = instance.getPath();
- if (instance.getPath() != null)
- {
- log.debug(
- "registering resource, configured ResourceHome/Query on path {1}, as Seam component: {0}",
- seamComponent.getName(),
- path
- );
-
- ResourceFactory factory = new SeamResteasyResourceFactory(
- seamComponent.getBeanClass(),
- seamComponent,
- getDispatcher().getProviderFactory()
- );
-
- getDispatcher().getRegistry().addResourceFactory(factory, path);
- }
- else
- {
- log.error("Unable to register {0} resource on null path, check components.xml", seamComponent.getName());
- }
- }
-
- protected void registerSeamComponentResource(Component seamComponent)
- {
- log.debug("registering resource as Seam component: {0}", seamComponent.getName());
-
- ResourceFactory factory = new SeamResteasyResourceFactory(
- seamComponent.getBeanClass(),
- seamComponent,
- getDispatcher().getProviderFactory()
- );
-
- getDispatcher().getRegistry().addResourceFactory(factory);
- }
-
- protected void registerInterfaceSeamComponentResource(Component seamComponent, Class resourceInterface)
- {
- log.debug(
- "registering resource, annotated interface {1}, as Seam component: {0}",
- seamComponent.getName(),
- resourceInterface.getName()
- );
-
- ResourceFactory factory = new SeamResteasyResourceFactory(
- resourceInterface,
- seamComponent,
- getDispatcher().getProviderFactory()
- );
-
- getDispatcher().getRegistry().addResourceFactory(factory);
- }
-
- protected void registerStatelessEJBResource(Class ejbImplementationClass)
- {
- String jndiName = getJndiName(ejbImplementationClass);
-
- log.debug(
- "registering resource, stateless EJB implementation {1}, as RESTEasy JNDI resource name: {0}",
- jndiName,
- ejbImplementationClass.getName()
- );
- getDispatcher().getRegistry().addJndiResource(jndiName);
- }
-
- protected void registerPlainResource(Class plainResourceClass)
- {
- log.debug("registering resource, event-scoped JAX-RS lifecycle: {0}", plainResourceClass.getName());
- getDispatcher().getRegistry().addResourceFactory(new POJOResourceFactory(plainResourceClass));
- }
-
- protected void registerSeamComponentProvider(Component seamComponent)
- {
- log.debug("registering provider as Seam component: {0}", seamComponent.getName());
- getDispatcher().getProviderFactory().registerProviderInstance(
- Component.getInstance(seamComponent.getName())
- );
- }
-
- protected Class getAnnotatedInterface(Class<? extends Annotation> annotation, Component seamComponent)
- {
- Class resourceInterface = null;
- for (Class anInterface : seamComponent.getBusinessInterfaces())
- {
- if (anInterface.isAnnotationPresent(annotation))
- {
- if (resourceInterface != null)
- {
- throw new IllegalStateException("Only one business interface can be annotated " + annotation + ": " + seamComponent);
- }
- resourceInterface = anInterface;
- }
- }
- return resourceInterface;
- }
-
- protected String getJndiName(Class<?> beanClass)
- {
- if (beanClass.isAnnotationPresent(JndiName.class))
- {
- return beanClass.getAnnotation(JndiName.class).value();
- }
- else
- {
- String jndiPattern = Init.instance().getJndiPattern();
- if (jndiPattern == null)
- {
- throw new IllegalArgumentException(
- "You must specify org.jboss.seam.core.init.jndiPattern or use @JndiName: " + beanClass.getName()
- );
- }
- return jndiPattern.replace("#{ejbName}", Seam.getEjbName(beanClass));
- }
- }
-
-
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,540 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.resteasy.core.Dispatcher;
+import org.jboss.resteasy.core.SynchronousDispatcher;
+import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
+import org.jboss.resteasy.plugins.providers.RegisterBuiltin;
+import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory;
+import org.jboss.resteasy.spi.ResourceFactory;
+import org.jboss.resteasy.spi.StringConverter;
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.Seam;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.JndiName;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Init;
+import org.jboss.seam.deployment.AnnotationDeploymentHandler;
+import org.jboss.seam.deployment.DeploymentStrategy;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.util.EJB;
+import org.jboss.seam.util.Reflections;
+import static org.jboss.seam.annotations.Install.BUILT_IN;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Detects (through scanning and configuration) JAX-RS resources and providers, then
+ * registers them with RESTEasy.
+ * <p>
+ * This class is a factory for <tt>org.jboss.seam.resteasy.dispatcher</tt> and it has been
+ * designed for extension. Alternatively, you can ignore what this class is doing and provide a
+ * different <tt>org.jboss.seam.resteasy.dispatcher</tt> yourself without extending this class.
+ * </p>
+ * <p>
+ * The main methods of this class are <tt>registerProviders()</tt> and <tt>registerResources()</tt>.
+ * These methods call out to the individual fine-grained registration procedures, which you can override
+ * if a different registration strategy for a particular type/component is desired.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+ at Name("org.jboss.seam.resteasy.bootstrap")
+ at Scope(ScopeType.APPLICATION)
+ at Startup
+ at AutoCreate
+ at Install(precedence = BUILT_IN, classDependencies = "org.jboss.resteasy.spi.ResteasyProviderFactory")
+public class ResteasyBootstrap
+{
+
+ @Logger
+ Log log;
+
+ @In
+ protected Application application;
+
+ // The job of this class is to initialize and configure the RESTEasy Dispatcher instance
+ protected Dispatcher dispatcher;
+
+ @Factory("org.jboss.seam.resteasy.dispatcher")
+ public Dispatcher getDispatcher()
+ {
+ return dispatcher;
+ }
+
+ @Create
+ public void init()
+ {
+ log.info("bootstrapping JAX-RS application");
+
+ // Custom ResteasyProviderFactory that understands Seam component lookup at runtime
+ SeamResteasyProviderFactory providerFactory = createProviderFactory();
+ dispatcher = createDispatcher(providerFactory);
+ initDispatcher();
+
+ // Always use the "deployment sensitive" factory - that means it is handled through ThreadLocal, not static
+ // TODO: How does that actually work? It's never used because the dispatcher is created with the original one
+ SeamResteasyProviderFactory.setInstance(new ThreadLocalResteasyProviderFactory(providerFactory));
+
+ // Seam can scan the classes for us, we just have to list them in META-INF/seam-deployment.properties
+ DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
+ AnnotationDeploymentHandler handler =
+ (AnnotationDeploymentHandler) deployment.getDeploymentHandlers().get(AnnotationDeploymentHandler.NAME);
+
+ Collection<Class<?>> providers = findProviders(handler);
+ Collection<Class<?>> resources = findResources(handler);
+ Collection<Component> seamComponents = findSeamComponents();
+
+ registerProviders(seamComponents, providers);
+ registerResources(seamComponents, resources);
+ }
+
+ protected SeamResteasyProviderFactory createProviderFactory()
+ {
+ return new SeamResteasyProviderFactory();
+ }
+
+ protected Dispatcher createDispatcher(SeamResteasyProviderFactory providerFactory)
+ {
+ return new SynchronousDispatcher(providerFactory);
+ }
+
+ protected void initDispatcher()
+ {
+ getDispatcher().setLanguageMappings(application.getLanguageMappings());
+ getDispatcher().setMediaTypeMappings(application.getMediaTypeMappings());
+ }
+
+ protected Collection<Class<?>> findProviders(AnnotationDeploymentHandler handler)
+ {
+ return findTypes(
+ handler,
+ application.isScanProviders(),
+ javax.ws.rs.ext.Provider.class.getName(),
+ application.getProviderClassNames()
+ );
+ }
+
+ protected Collection<Class<?>> findResources(AnnotationDeploymentHandler handler)
+ {
+ return findTypes(
+ handler,
+ application.isScanResources(),
+ javax.ws.rs.Path.class.getName(),
+ application.getResourceClassNames()
+ );
+ }
+
+ protected Collection<Class<?>> findTypes(AnnotationDeploymentHandler handler, boolean scanClasspathForAnnotations,
+ String annotationFQName, Collection<String> includeTypeNames)
+ {
+
+ Collection<Class<?>> types = new HashSet();
+
+ if (scanClasspathForAnnotations)
+ {
+ Collection<Class<?>> annotatedTypes = handler.getClassMap().get(annotationFQName);
+ if (annotatedTypes != null) types.addAll(annotatedTypes);
+ }
+
+ try
+ {
+ for (String s : new HashSet<String>(includeTypeNames))
+ {
+ types.add(Reflections.classForName(s));
+ }
+ }
+ catch (ClassNotFoundException ex)
+ {
+ log.error("error loading JAX-RS type: " + ex.getMessage(), ex);
+ }
+
+ return types;
+ }
+
+
+ protected Collection<Component> findSeamComponents()
+ {
+ // Iterate through all variables in the application context that end with ".component"
+ log.debug("discovering all Seam components");
+ Collection<Component> seamComponents = new HashSet();
+ String[] applicationContextNames = Contexts.getApplicationContext().getNames();
+ for (String applicationContextName : applicationContextNames)
+ {
+ if (applicationContextName.endsWith(".component"))
+ {
+ Component seamComponent =
+ (Component) Component.getInstance(applicationContextName, ScopeType.APPLICATION);
+ seamComponents.add(seamComponent);
+ }
+ }
+ return seamComponents;
+ }
+
+
+ protected void registerProviders(Collection<Component> seamComponents, Collection<Class<?>> providerClasses)
+ {
+
+ // RESTEasy built-in providers first
+ if (application.isUseBuiltinProviders())
+ {
+ log.info("registering built-in RESTEasy providers");
+ RegisterBuiltin.register(getDispatcher().getProviderFactory());
+ }
+
+ Set<Class> handledProviders = new HashSet(); // Stuff we don't want to examine twice
+
+ /* TODO: Retracted due to missing RESTEasy SPI for external provider metadata, see https://jira.jboss.org/jira/browse/JBSEAM-4247
+ for (Component seamComponent : seamComponents)
+ {
+ // The component can have one (not many) @Provider annotated business interface
+ Class providerInterface = getAnnotatedInterface(javax.ws.rs.ext.Provider.class, seamComponent);
+
+ // How we register it depends on the component type
+ switch (seamComponent.getType())
+ {
+
+ // TODO: We don't support EJB Seam components as providers
+
+ case JAVA_BEAN:
+
+ // We are only interested in components that have a @Provider annotation on iface or bean
+ if (providerInterface == null
+ && !seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.ext.Provider.class))
+ {
+ break;
+ }
+
+ // They also have to be in the right scope, otherwise we can't handle their lifecylce (yet)
+ switch (seamComponent.getScope())
+ {
+ case APPLICATION:
+
+ // StringConverter is a special case
+ if (StringConverter.class.isAssignableFrom(seamComponent.getBeanClass()))
+ {
+ getDispatcher().getProviderFactory().addStringConverter(
+ (StringConverter) Component.getInstance(seamComponent.getName())
+ );
+ }
+ else
+ {
+ registerSeamComponentProvider(seamComponent);
+ }
+ break;
+
+ default:
+ throw new RuntimeException(
+ "Provider Seam component '" + seamComponent.getName() + "' must be scoped " +
+ "APPLICATION"
+ );
+ }
+ break;
+ }
+
+ // We simply add everything we have seen so far... it's not really necessary but it doesn't hurt (does it?)
+ handledProviders.add(seamComponent.getBeanClass());
+ handledProviders.addAll(seamComponent.getBusinessInterfaces());
+ }
+ */
+
+ for (Class<?> providerClass : providerClasses)
+ {
+
+ // An @Provider annotated type may:
+
+ // - have been already handled as a Seam component in the previous routine
+ if (handledProviders.contains(providerClass)) continue;
+
+ // - be a RESTEasy built-in provider
+ if (providerClass.getName().startsWith("org.jboss.resteasy.plugins.providers")) continue;
+
+ // - be an interface, which we don't care about if we don't have an implementation
+ if (providerClass.isInterface()) continue;
+
+ // - be just plain RESTEasy, no Seam component lookup or lifecycle
+ if (StringConverter.class.isAssignableFrom(providerClass))
+ {
+ log.debug("registering provider as RESTEasy StringConverter: {0}", providerClass);
+ getDispatcher().getProviderFactory().addStringConverter((Class<? extends StringConverter>) providerClass);
+ }
+ else
+ {
+ log.debug("registering provider as plain JAX-RS type: {0}", providerClass);
+ getDispatcher().getProviderFactory().registerProvider(providerClass);
+ }
+ }
+ }
+
+ protected void registerResources(Collection<Component> seamComponents, Collection<Class<?>> resourceClasses)
+ {
+
+ Set<Class> handledResources = new HashSet(); // Stuff we don't want to examine twice
+ // These classes themselves should not be registered at all
+ // Configured ResourceHome and ResourceQuery components will be registered later
+ handledResources.add(ResourceHome.class);
+ handledResources.add(ResourceQuery.class);
+
+ for (Component seamComponent : seamComponents)
+ {
+
+ // A bean class of type (not subtypes) ResourceHome or ResourceQuery annotated with @Path, then
+ // it's a Seam component resource we need to register with getPath() on the instance, it has been
+ // configured in components.xml
+ if (seamComponent.getBeanClass().equals(ResourceHome.class) ||
+ seamComponent.getBeanClass().equals(ResourceQuery.class))
+ {
+ registerHomeQueryResources(seamComponent);
+ continue;
+ }
+
+ // The component can have one (not many) @Path annotated business interface
+ Class resourceInterface = getAnnotatedInterface(javax.ws.rs.Path.class, seamComponent);
+
+ // How we register it depends on the component type
+ switch (seamComponent.getType())
+ {
+ case STATELESS_SESSION_BEAN:
+ // EJB seam component resources must be @Path annotated on one of their business interfaces
+ if (resourceInterface != null)
+ {
+ // TODO: Do we have to consider the scope? It should be stateless, right?
+ registerInterfaceSeamComponentResource(seamComponent, resourceInterface);
+ }
+ break;
+ case STATEFUL_SESSION_BEAN:
+ // EJB seam component resources must be @Path annotated on one of their business interfaces
+ if (resourceInterface != null)
+ {
+ log.error("Not implemented: Stateful EJB Seam component resource: " + seamComponent);
+ // TODO: registerStatefulEJBSeamComponentResource(seamComponent);
+ }
+ break;
+ case JAVA_BEAN:
+
+ // We are only interested in components that have a @Path annotation on iface or bean
+ if (resourceInterface == null
+ && !seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.Path.class))
+ {
+ break;
+ }
+
+ // They also have to be in the right scope, otherwise we can't handle their lifecylce (yet)
+ switch (seamComponent.getScope())
+ {
+ case EVENT:
+ case APPLICATION:
+ case STATELESS:
+ case SESSION:
+ if (resourceInterface != null)
+ {
+ registerInterfaceSeamComponentResource(seamComponent, resourceInterface);
+ }
+ else if (seamComponent.getBeanClass().isAnnotationPresent(javax.ws.rs.Path.class))
+ {
+ registerSeamComponentResource(seamComponent);
+ }
+ break;
+ default:
+ throw new RuntimeException(
+ "Resource Seam component '" + seamComponent.getName() + "' must be scoped either " +
+ "EVENT, APPLICATION, STATELESS, or SESSION"
+ );
+ }
+ break;
+ }
+
+ // We simply add everything we have seen so far... it's not really necessary but it doesn't hurt (does it?)
+ handledResources.add(seamComponent.getBeanClass());
+ handledResources.addAll(seamComponent.getBusinessInterfaces());
+
+ }
+
+ for (Class<?> resourceClass : resourceClasses)
+ {
+ // An @Path annotated type may:
+
+ // - have been already handled as a Seam component in the previous routine
+ if (handledResources.contains(resourceClass)) continue;
+
+ // - be an interface, which we don't care about if we don't have an implementation
+ if (resourceClass.isInterface()) continue;
+
+ // - be a @Stateless EJB implementation class that was listed in components.xml
+ if (resourceClass.isAnnotationPresent(EJB.STATELESS))
+ {
+ registerStatelessEJBResource(resourceClass);
+ }
+ // - be a @Stateful EJB implementation class that was listed in components.xml
+ else if (resourceClass.isAnnotationPresent(EJB.STATEFUL))
+ {
+ throw new RuntimeException(
+ "Only stateless EJBs can be JAX-RS resources, remove from configuration: " + resourceClass.getName()
+ );
+ }
+ else
+ {
+ // - just be a regular JAX-RS lifecycle instance that can created/destroyed by RESTEasy
+ registerPlainResource(resourceClass);
+ }
+ }
+
+ }
+
+ protected void registerHomeQueryResources(Component seamComponent)
+ {
+ // We can always instantiate this safely here because it can't have dependencies!
+ AbstractResource instance = (AbstractResource) seamComponent.newInstance();
+ String path = instance.getPath();
+ if (path != null)
+ {
+ if (!path.startsWith("/")) {
+ path = "/" + path;
+ }
+
+ log.debug(
+ "registering resource, configured ResourceHome/Query on path {1}, as Seam component: {0}",
+ seamComponent.getName(),
+ path
+ );
+
+ ResourceFactory factory = new SeamResteasyResourceFactory(
+ seamComponent.getBeanClass(),
+ seamComponent,
+ getDispatcher().getProviderFactory()
+ );
+
+ getDispatcher().getRegistry().addResourceFactory(factory, path);
+ }
+ else
+ {
+ log.error("Unable to register {0} resource on null path, check components.xml", seamComponent.getName());
+ }
+ }
+
+ protected void registerSeamComponentResource(Component seamComponent)
+ {
+ log.debug("registering resource as Seam component: {0}", seamComponent.getName());
+
+ ResourceFactory factory = new SeamResteasyResourceFactory(
+ seamComponent.getBeanClass(),
+ seamComponent,
+ getDispatcher().getProviderFactory()
+ );
+
+ getDispatcher().getRegistry().addResourceFactory(factory);
+ }
+
+ protected void registerInterfaceSeamComponentResource(Component seamComponent, Class resourceInterface)
+ {
+ log.debug(
+ "registering resource, annotated interface {1}, as Seam component: {0}",
+ seamComponent.getName(),
+ resourceInterface.getName()
+ );
+
+ ResourceFactory factory = new SeamResteasyResourceFactory(
+ resourceInterface,
+ seamComponent,
+ getDispatcher().getProviderFactory()
+ );
+
+ getDispatcher().getRegistry().addResourceFactory(factory);
+ }
+
+ protected void registerStatelessEJBResource(Class ejbImplementationClass)
+ {
+ String jndiName = getJndiName(ejbImplementationClass);
+
+ log.debug(
+ "registering resource, stateless EJB implementation {1}, as RESTEasy JNDI resource name: {0}",
+ jndiName,
+ ejbImplementationClass.getName()
+ );
+ getDispatcher().getRegistry().addJndiResource(jndiName);
+ }
+
+ protected void registerPlainResource(Class plainResourceClass)
+ {
+ log.debug("registering resource, event-scoped JAX-RS lifecycle: {0}", plainResourceClass.getName());
+ getDispatcher().getRegistry().addResourceFactory(new POJOResourceFactory(plainResourceClass));
+ }
+
+ protected void registerSeamComponentProvider(Component seamComponent)
+ {
+ log.debug("registering provider as Seam component: {0}", seamComponent.getName());
+ getDispatcher().getProviderFactory().registerProviderInstance(
+ Component.getInstance(seamComponent.getName())
+ );
+ }
+
+ protected Class getAnnotatedInterface(Class<? extends Annotation> annotation, Component seamComponent)
+ {
+ Class resourceInterface = null;
+ for (Class anInterface : seamComponent.getBusinessInterfaces())
+ {
+ if (anInterface.isAnnotationPresent(annotation))
+ {
+ if (resourceInterface != null)
+ {
+ throw new IllegalStateException("Only one business interface can be annotated " + annotation + ": " + seamComponent);
+ }
+ resourceInterface = anInterface;
+ }
+ }
+ return resourceInterface;
+ }
+
+ protected String getJndiName(Class<?> beanClass)
+ {
+ if (beanClass.isAnnotationPresent(JndiName.class))
+ {
+ return beanClass.getAnnotation(JndiName.class).value();
+ }
+ else
+ {
+ String jndiPattern = Init.instance().getJndiPattern();
+ if (jndiPattern == null)
+ {
+ throw new IllegalArgumentException(
+ "You must specify org.jboss.seam.core.init.jndiPattern or use @JndiName: " + beanClass.getName()
+ );
+ }
+ return jndiPattern.replace("#{ejbName}", Seam.getEjbName(beanClass));
+ }
+ }
+
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,66 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.resteasy.spi.HttpRequest;
-import org.jboss.resteasy.spi.HttpResponse;
-import org.jboss.resteasy.spi.PropertyInjector;
-import org.jboss.seam.Component;
-import org.jboss.seam.annotations.intercept.Interceptor;
-import org.jboss.seam.intercept.AbstractInterceptor;
-import org.jboss.seam.intercept.InvocationContext;
-
-/**
- * Runs after Seam injection and provides JAX RS @Context handling, required for
- * field injection on the actual bean (not proxy) instance.
- *
- * @author Christian Bauer
- */
- at Interceptor(stateless = true)
-public class ResteasyContextInjectionInterceptor extends AbstractInterceptor
-{
-
- public static final String RE_HTTP_REQUEST_VAR = "org.jboss.resteasy.spi.HttpRequest";
- public static final String RE_HTTP_RESPONSE_VAR = "org.jboss.resteasy.spi.HttpResponse";
-
- private final PropertyInjector propertyInjector;
-
- public ResteasyContextInjectionInterceptor(PropertyInjector propertyInjector)
- {
- this.propertyInjector = propertyInjector;
- }
-
- public Object aroundInvoke(InvocationContext ic) throws Exception
- {
- HttpRequest request = (HttpRequest) Component.getInstance(RE_HTTP_REQUEST_VAR);
- HttpResponse response = (HttpResponse) Component.getInstance(RE_HTTP_RESPONSE_VAR);
-
- propertyInjector.inject(request, response, ic.getTarget());
-
- return ic.proceed();
- }
-
- public boolean isInterceptorEnabled()
- {
- return true;
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyContextInjectionInterceptor.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.resteasy.spi.HttpRequest;
+import org.jboss.resteasy.spi.HttpResponse;
+import org.jboss.resteasy.spi.PropertyInjector;
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.intercept.Interceptor;
+import org.jboss.seam.intercept.AbstractInterceptor;
+import org.jboss.seam.intercept.InvocationContext;
+
+/**
+ * Runs after Seam injection and provides JAX RS @Context handling, required for
+ * field injection on the actual bean (not proxy) instance.
+ *
+ * @author Christian Bauer
+ */
+ at Interceptor(stateless = true)
+public class ResteasyContextInjectionInterceptor extends AbstractInterceptor
+{
+
+ public static final String RE_HTTP_REQUEST_VAR = "org.jboss.resteasy.spi.HttpRequest";
+ public static final String RE_HTTP_RESPONSE_VAR = "org.jboss.resteasy.spi.HttpResponse";
+
+ private final PropertyInjector propertyInjector;
+
+ public ResteasyContextInjectionInterceptor(PropertyInjector propertyInjector)
+ {
+ this.propertyInjector = propertyInjector;
+ }
+
+ public Object aroundInvoke(InvocationContext ic) throws Exception
+ {
+ HttpRequest request = (HttpRequest) Component.getInstance(RE_HTTP_REQUEST_VAR);
+ HttpResponse response = (HttpResponse) Component.getInstance(RE_HTTP_RESPONSE_VAR);
+
+ propertyInjector.inject(request, response, ic.getTarget());
+
+ return ic.proceed();
+ }
+
+ public boolean isInterceptorEnabled()
+ {
+ return true;
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,214 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.seam.Component;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.servlet.ContextualHttpServletRequest;
-import org.jboss.seam.web.AbstractResource;
-import org.jboss.seam.web.Session;
-import org.jboss.resteasy.core.SynchronousDispatcher;
-import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
-import org.jboss.resteasy.core.Dispatcher;
-import org.jboss.resteasy.plugins.server.servlet.HttpServletInputMessage;
-import org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper;
-import org.jboss.resteasy.plugins.server.servlet.ServletSecurityContext;
-import org.jboss.resteasy.plugins.server.servlet.ServletUtil;
-import org.jboss.resteasy.specimpl.PathSegmentImpl;
-import org.jboss.resteasy.specimpl.UriBuilderImpl;
-import org.jboss.resteasy.specimpl.UriInfoImpl;
-import org.jboss.resteasy.spi.HttpRequest;
-import org.jboss.resteasy.spi.HttpResponse;
-import org.jboss.resteasy.util.PathHelper;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.SecurityContext;
-import javax.ws.rs.core.UriBuilder;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.List;
-
-/**
- * Accepts incoming HTTP requests through the <tt>SeamResourceServlet</tt> and
- * dispatches the call to RESTEasy. Wraps the call in Seam contexts.
- *
- * @author Christian Bauer
- */
- at Scope(ScopeType.APPLICATION)
- at Name("org.jboss.seam.resteasy.resourceAdapter")
- at BypassInterceptors
-public class ResteasyResourceAdapter extends AbstractResource
-{
-
- @Logger
- Log log;
-
- protected Dispatcher dispatcher;
- protected Application application;
-
- @Create
- public void init()
- {
- // No injection, so lookup on first request
- dispatcher = (Dispatcher) Component.getInstance("org.jboss.seam.resteasy.dispatcher");
- application = (Application) Component.getInstance(Application.class);
- if (dispatcher == null) {
- throw new IllegalStateException(
- "ReasteasyDispatcher not available, make sure RESTEasy and all required JARs are on your classpath"
- );
- }
- }
-
- @Override
- public String getResourcePath()
- {
- return application.getResourcePathPrefix();
- }
-
- @Override
- public void getResource(final HttpServletRequest request, final HttpServletResponse response)
- throws ServletException, IOException
- {
-
- try
- {
- log.debug("processing REST request");
-
- // TODO: As far as I can tell from tracing RE code: All this thread-local stuff has no effect because
- // the "default" provider factory is always used. But we do it anyway, just to mimic the servlet handler
- // in RE...
-
- // Wrap in RESTEasy thread-local factory handling
- ThreadLocalResteasyProviderFactory.push(dispatcher.getProviderFactory());
-
- // Wrap in RESTEasy contexts (this also puts stuff in a thread-local)
- SeamResteasyProviderFactory.pushContext(HttpServletRequest.class, request);
- SeamResteasyProviderFactory.pushContext(HttpServletResponse.class, response);
- SeamResteasyProviderFactory.pushContext(SecurityContext.class, new ServletSecurityContext(request));
-
- // Wrap in Seam contexts
- new ContextualHttpServletRequest(request)
- {
- @Override
- public void process() throws ServletException, IOException
- {
-
- HttpHeaders headers = ServletUtil.extractHttpHeaders(request);
- UriInfoImpl uriInfo = extractUriInfo(request);
-
- HttpResponse theResponse = new HttpServletResponseWrapper(
- response,
- dispatcher.getProviderFactory()
- );
-
- // TODO: This requires a SynchronousDispatcher
- HttpRequest in = new HttpServletInputMessage(
- request,
- theResponse,
- headers,
- uriInfo,
- request.getMethod().toUpperCase(),
- (SynchronousDispatcher) dispatcher
- );
-
- dispatcher.invoke(in, theResponse);
-
- // Prevent anemic sessions clog up the server
- if (request.getSession().isNew()
- && application.isDestroySessionAfterRequest()
- && !Session.instance().isInvalid())
- {
- log.debug("Destroying HttpSession after REST request");
- Session.instance().invalidate();
- }
- }
- }.run();
-
- }
- finally
- {
- // Clean up the thread-locals
- SeamResteasyProviderFactory.clearContextData();
- ThreadLocalResteasyProviderFactory.pop();
- log.debug("completed processing of REST request");
- }
- }
-
- // Replaces the static ServletUtil.extractUriInfo(), removes the Seam-related sub-path
- protected UriInfoImpl extractUriInfo(HttpServletRequest request)
- {
- String contextPath = request.getContextPath();
- URI absolutePath;
- try
- {
- URL absolute = new URL(request.getRequestURL().toString());
-
- UriBuilderImpl builder = new UriBuilderImpl();
- builder.scheme(absolute.getProtocol());
- builder.host(absolute.getHost());
- builder.port(absolute.getPort());
- builder.path(absolute.getPath());
- builder.replaceQuery(absolute.getQuery());
- absolutePath = builder.build();
- }
- catch (MalformedURLException e)
- {
- throw new RuntimeException(e);
- }
-
- String path = PathHelper.getEncodedPathInfo(absolutePath.getRawPath(), contextPath);
-
- if (application.isStripSeamResourcePath())
- {
- log.debug("removing SeamResourceServlet url-pattern and dispatcher prefix from request path");
- path = path.substring(path.indexOf(getResourcePath()) + getResourcePath().length());
- }
-
- List<PathSegment> pathSegments = PathSegmentImpl.parseSegments(path);
- URI baseURI = absolutePath;
- if (!path.trim().equals(""))
- {
- String tmpContextPath = contextPath;
- if (!tmpContextPath.endsWith("/")) tmpContextPath += "/";
- baseURI = UriBuilder.fromUri(absolutePath).replacePath(tmpContextPath).build();
- }
-
- log.debug("UriInfo, absolute URI : " + absolutePath);
- log.debug("UriInfo, base URI : " + baseURI);
- log.debug("UriInfo, relative path/@Path: " + path);
- log.debug("UriInfo, query string : " + request.getQueryString());
-
- return new UriInfoImpl(absolutePath, baseURI, path, request.getQueryString(), pathSegments);
- }
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/ResteasyResourceAdapter.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,199 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.servlet.ContextualHttpServletRequest;
+import org.jboss.seam.web.AbstractResource;
+import org.jboss.seam.web.Session;
+import org.jboss.resteasy.core.SynchronousDispatcher;
+import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
+import org.jboss.resteasy.core.Dispatcher;
+import org.jboss.resteasy.plugins.server.servlet.HttpServletInputMessage;
+import org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper;
+import org.jboss.resteasy.plugins.server.servlet.ServletSecurityContext;
+import org.jboss.resteasy.plugins.server.servlet.ServletUtil;
+import org.jboss.resteasy.specimpl.PathSegmentImpl;
+import org.jboss.resteasy.specimpl.UriBuilderImpl;
+import org.jboss.resteasy.specimpl.UriInfoImpl;
+import org.jboss.resteasy.spi.HttpRequest;
+import org.jboss.resteasy.spi.HttpResponse;
+import org.jboss.resteasy.util.PathHelper;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.PathSegment;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.List;
+
+/**
+ * Accepts incoming HTTP requests through the <tt>SeamResourceServlet</tt> and
+ * dispatches the call to RESTEasy. Wraps the call in Seam contexts.
+ *
+ * @author Christian Bauer
+ */
+ at Scope(ScopeType.APPLICATION)
+ at Name("org.jboss.seam.resteasy.resourceAdapter")
+ at BypassInterceptors
+public class ResteasyResourceAdapter extends AbstractResource
+{
+
+ @Logger
+ Log log;
+
+ protected Dispatcher dispatcher;
+ protected Application application;
+
+ @Create
+ public void init()
+ {
+ // No injection, so lookup on first request
+ dispatcher = (Dispatcher) Component.getInstance("org.jboss.seam.resteasy.dispatcher");
+ application = (Application) Component.getInstance(Application.class);
+ if (dispatcher == null)
+ {
+ throw new IllegalStateException(
+ "ReasteasyDispatcher not available, make sure RESTEasy and all required JARs are on your classpath"
+ );
+ }
+ }
+
+ @Override
+ public String getResourcePath()
+ {
+ return application.getResourcePathPrefix();
+ }
+
+ @Override
+ public void getResource(final HttpServletRequest request, final HttpServletResponse response)
+ throws ServletException, IOException
+ {
+
+ try
+ {
+ log.debug("processing REST request");
+
+ // TODO: As far as I can tell from tracing RE code: All this thread-local stuff has no effect because
+ // the "default" provider factory is always used. But we do it anyway, just to mimic the servlet handler
+ // in RE...
+
+ // Wrap in RESTEasy thread-local factory handling
+ ThreadLocalResteasyProviderFactory.push(dispatcher.getProviderFactory());
+
+ // Wrap in RESTEasy contexts (this also puts stuff in a thread-local)
+ SeamResteasyProviderFactory.pushContext(HttpServletRequest.class, request);
+ SeamResteasyProviderFactory.pushContext(HttpServletResponse.class, response);
+ SeamResteasyProviderFactory.pushContext(SecurityContext.class, new ServletSecurityContext(request));
+
+ // Wrap in Seam contexts
+ new ContextualHttpServletRequest(request)
+ {
+ @Override
+ public void process() throws ServletException, IOException
+ {
+
+ HttpHeaders headers = ServletUtil.extractHttpHeaders(request);
+ UriInfoImpl uriInfo = extractUriInfo(request, application.getResourcePathPrefix());
+
+ HttpResponse theResponse = new HttpServletResponseWrapper(
+ response,
+ dispatcher.getProviderFactory()
+ );
+
+ // TODO: This requires a SynchronousDispatcher
+ HttpRequest in = new HttpServletInputMessage(
+ request,
+ theResponse,
+ headers,
+ uriInfo,
+ request.getMethod().toUpperCase(),
+ (SynchronousDispatcher) dispatcher
+ );
+
+ dispatcher.invoke(in, theResponse);
+
+ // Prevent anemic sessions clog up the server
+ if (request.getSession().isNew()
+ && application.isDestroySessionAfterRequest()
+ && !Session.instance().isInvalid())
+ {
+ log.debug("Destroying HttpSession after REST request");
+ Session.instance().invalidate();
+ }
+ }
+ }.run();
+
+ }
+ finally
+ {
+ // Clean up the thread-locals
+ SeamResteasyProviderFactory.clearContextData();
+ ThreadLocalResteasyProviderFactory.pop();
+ log.debug("completed processing of REST request");
+ }
+ }
+
+ protected UriInfoImpl extractUriInfo(HttpServletRequest request, String pathPrefix)
+ {
+ try
+ {
+ // Append a slash if there isn't one
+ if (!pathPrefix.startsWith("/")) {
+ pathPrefix = "/" + pathPrefix;
+ }
+
+ // Get the full path of the current request
+ URL requestURL = new URL(request.getRequestURL().toString());
+ String requestPath = requestURL.getPath();
+
+ // Find the 'servlet mapping prefix' for RESTEasy (in our case: /seam/resource/rest)
+ String mappingPrefix =
+ requestPath.substring(0, requestPath.indexOf(pathPrefix)+pathPrefix.length());
+
+ // Still is /<context>/seam/resource/rest, so cut off the context
+ mappingPrefix = mappingPrefix.substring(request.getContextPath().length());
+
+ log.debug("Using request mapping prefix: " + mappingPrefix);
+
+ // This is the prefix used by RESTEasy to resolve resources and generate URIs with
+ return ServletUtil.extractUriInfo(request, mappingPrefix);
+ }
+ catch (MalformedURLException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,46 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.resteasy.spi.ResteasyProviderFactory;
-
-/**
- * TODO: We need to significantly extend and change that class so we can lookup provider instances
- * through Seam at runtime. The original class has only been designed for registration of "singleton"
- * providers during startup. See comment about the TL handling in ResteasyResourceAdapter.java.
- *
- * @author Christian Bauer
- */
-public class SeamResteasyProviderFactory extends ResteasyProviderFactory
-{
-
- public static void setInstance(ResteasyProviderFactory factory)
- {
- ResteasyProviderFactory.setInstance(factory);
- }
-
- public static ResteasyProviderFactory getInstance()
- {
- return ResteasyProviderFactory.getInstance();
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyProviderFactory.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,46 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+
+/**
+ * TODO: We need to significantly extend and change that class so we can lookup provider instances
+ * through Seam at runtime. The original class has only been designed for registration of "singleton"
+ * providers during startup. See comment about the TL handling in ResteasyResourceAdapter.java.
+ *
+ * @author Christian Bauer
+ */
+public class SeamResteasyProviderFactory extends ResteasyProviderFactory
+{
+
+ public static void setInstance(ResteasyProviderFactory factory)
+ {
+ ResteasyProviderFactory.setInstance(factory);
+ }
+
+ public static ResteasyProviderFactory getInstance()
+ {
+ return ResteasyProviderFactory.getInstance();
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,94 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.resteasy;
-
-import org.jboss.resteasy.spi.ResourceFactory;
-import org.jboss.resteasy.spi.InjectorFactory;
-import org.jboss.resteasy.spi.HttpRequest;
-import org.jboss.resteasy.spi.HttpResponse;
-import org.jboss.resteasy.spi.ResteasyProviderFactory;
-import org.jboss.resteasy.core.PropertyInjectorImpl;
-
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.Component;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.log.Logging;
-
-/**
- * Looks up Seam component in Seam contexts when a JAX-RS resource is requested.
- *
- * @author Christian Bauer
- */
-public class SeamResteasyResourceFactory implements ResourceFactory
-{
- Log log = Logging.getLog(SeamResteasyResourceFactory.class);
-
- private final Class<?> resourceType;
- private final Component seamComponent;
- private final ResteasyProviderFactory providerFactory;
-
- public SeamResteasyResourceFactory(Class<?> resourceType, Component seamComponent, ResteasyProviderFactory providerFactory)
- {
- this.resourceType = resourceType;
- this.seamComponent = seamComponent;
- this.providerFactory = providerFactory;
- }
-
- public Class<?> getScannableClass()
- {
- return resourceType;
- }
-
- public void registered(InjectorFactory factory)
- {
- // Wrap the Resteasy PropertyInjectorImpl in a Seam interceptor (for @Context injection)
- seamComponent.addInterceptor(
- new ResteasyContextInjectionInterceptor(
- new PropertyInjectorImpl(getScannableClass(), providerFactory)
- )
- );
-
- // NOTE: Adding an interceptor to Component at this stage means that the interceptor is
- // always executed last in the chain. The sorting of interceptors of a Component occurs
- // only when the Component metadata is instantiated. This is OK in this case, as the
- // JAX RS @Context injection can occur last after all other interceptors executed.
-
- }
-
- public Object createResource(HttpRequest request, HttpResponse response, InjectorFactory factory)
- {
- // Push this onto event context so we have it available in ResteasyContextInjectionInterceptor
- Contexts.getEventContext().set(ResteasyContextInjectionInterceptor.RE_HTTP_REQUEST_VAR, request);
- Contexts.getEventContext().set(ResteasyContextInjectionInterceptor.RE_HTTP_RESPONSE_VAR, response);
- log.debug("creating RESTEasy resource instance by looking up Seam component: " + seamComponent.getName());
- return Component.getInstance(seamComponent.getName());
- }
-
- public void requestFinished(HttpRequest request, HttpResponse response, Object resource)
- {
- }
-
- public void unregistered()
- {
- }
-
-}
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/SeamResteasyResourceFactory.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,94 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.resteasy;
+
+import org.jboss.resteasy.spi.ResourceFactory;
+import org.jboss.resteasy.spi.InjectorFactory;
+import org.jboss.resteasy.spi.HttpRequest;
+import org.jboss.resteasy.spi.HttpResponse;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+import org.jboss.resteasy.core.PropertyInjectorImpl;
+
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.Component;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.log.Logging;
+
+/**
+ * Looks up Seam component in Seam contexts when a JAX-RS resource is requested.
+ *
+ * @author Christian Bauer
+ */
+public class SeamResteasyResourceFactory implements ResourceFactory
+{
+ Log log = Logging.getLog(SeamResteasyResourceFactory.class);
+
+ private final Class<?> resourceType;
+ private final Component seamComponent;
+ private final ResteasyProviderFactory providerFactory;
+
+ public SeamResteasyResourceFactory(Class<?> resourceType, Component seamComponent, ResteasyProviderFactory providerFactory)
+ {
+ this.resourceType = resourceType;
+ this.seamComponent = seamComponent;
+ this.providerFactory = providerFactory;
+ }
+
+ public Class<?> getScannableClass()
+ {
+ return resourceType;
+ }
+
+ public void registered(InjectorFactory factory)
+ {
+ // Wrap the Resteasy PropertyInjectorImpl in a Seam interceptor (for @Context injection)
+ seamComponent.addInterceptor(
+ new ResteasyContextInjectionInterceptor(
+ new PropertyInjectorImpl(getScannableClass(), providerFactory)
+ )
+ );
+
+ // NOTE: Adding an interceptor to Component at this stage means that the interceptor is
+ // always executed last in the chain. The sorting of interceptors of a Component occurs
+ // only when the Component metadata is instantiated. This is OK in this case, as the
+ // JAX RS @Context injection can occur last after all other interceptors executed.
+
+ }
+
+ public Object createResource(HttpRequest request, HttpResponse response, InjectorFactory factory)
+ {
+ // Push this onto event context so we have it available in ResteasyContextInjectionInterceptor
+ Contexts.getEventContext().set(ResteasyContextInjectionInterceptor.RE_HTTP_REQUEST_VAR, request);
+ Contexts.getEventContext().set(ResteasyContextInjectionInterceptor.RE_HTTP_RESPONSE_VAR, response);
+ log.debug("creating RESTEasy resource instance by looking up Seam component: " + seamComponent.getName());
+ return Component.getInstance(seamComponent.getName());
+ }
+
+ public void requestFinished(HttpRequest request, HttpResponse response, Object resource)
+ {
+ }
+
+ public void unregistered()
+ {
+ }
+
+}
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,4 +0,0 @@
- at Namespace("http://jboss.com/products/seam/resteasy")
-package org.jboss.seam.resteasy;
-
-import org.jboss.seam.annotations.Namespace;
\ No newline at end of file
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/package-info.java 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,4 @@
+ at Namespace("http://jboss.com/products/seam/resteasy")
+package org.jboss.seam.resteasy;
+
+import org.jboss.seam.annotations.Namespace;
\ No newline at end of file
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd 2009-06-29 14:23:44 UTC (rev 11220)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd 2010-01-13 16:19:37 UTC (rev 11952)
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
- targetNamespace="http://jboss.com/products/seam/resteasy" xmlns:resteasy="http://jboss.com/products/seam/resteasy"
- xmlns:components="http://jboss.com/products/seam/components" attributeFormDefault="unqualified">
-
- <xs:import namespace="http://jboss.com/products/seam/components" schemaLocation="components-2.2.xsd"/>
-
- <xs:element name="application">
- <xs:annotation>
- <xs:documentation>
- An implementation of JAX-RS Application with additional properties for RESTEasy.
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="1"
- name="provider-class-names" type="components:multiValuedProperty">
- <xs:annotation>
- <xs:documentation>
- List of provider classes.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element minOccurs="0" maxOccurs="1"
- name="resource-class-names" type="components:multiValuedProperty">
- <xs:annotation>
- <xs:documentation>
- List of resource classes.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element minOccurs="0" maxOccurs="1"
- name="media-type-mappings" type="components:mapProperty">
- <xs:annotation>
- <xs:documentation>
- Maps media type URI extensions to Accept header, see RESTEasy documentation and JAX-RS (JSR 311).
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element minOccurs="0" maxOccurs="1"
- name="language-mappings" type="components:mapProperty">
- <xs:annotation>
- <xs:documentation>
- Maps language URI extension to Accept header, see RESTEasy documentation and JAX-RS (JSR 311).
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- <xs:attributeGroup ref="components:attlist.component"/>
- <xs:attributeGroup ref="resteasy:attlist.application"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="resource-home">
- <xs:annotation>
- <xs:documentation>
- Allows you to expose an entity home component as a
- REST resource.
- </xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="1" name="media-types" type="components:multiValuedProperty"/>
- </xs:sequence>
- <xs:attributeGroup ref="components:attlist.component" />
- <xs:attributeGroup ref="resteasy:attlist.resourceHome" />
- <xs:attributeGroup ref="resteasy:attlist.abstractResource" />
- </xs:complexType>
- </xs:element>
-
- <xs:element name="resource-query">
- <xs:annotation>
- <xs:documentation>
- Allows you to expose an entity query component as a
- REST resource.
- </xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="1" name="media-types" type="components:multiValuedProperty"/>
- </xs:sequence>
- <xs:attributeGroup ref="components:attlist.component" />
- <xs:attributeGroup ref="resteasy:attlist.resourceQuery" />
- <xs:attributeGroup ref="resteasy:attlist.abstractResource" />
- </xs:complexType>
- </xs:element>
-
- <xs:attributeGroup name="attlist.application">
- <xs:attribute name="scan-providers" type="components:boolean">
- <xs:annotation>
- <xs:documentation>
- Enable automatic discovery of classes annoated with JAX-RS @Provider, defaults to 'true'.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="scan-resources" type="components:boolean">
- <xs:annotation>
- <xs:documentation>
- Enable automatic discovery of classes annoated with JAX-RS @Path, defaults to 'true'.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="use-builtin-providers" type="components:boolean">
- <xs:annotation>
- <xs:documentation>
- Enable RESTEasy built-in providers, defaults to 'true'.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="destroy-session-after-request" type="components:boolean">
- <xs:annotation>
- <xs:documentation>
- Destroy the HttpSession after a REST request if it was created for that request (it is a
- new session), defaults to 'true'.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="resource-path-prefix" type="components:string">
- <xs:annotation>
- <xs:documentation>
- Append this prefix to any request path, after the SeamResourceServlet
- url-pattern prefix (configured in web.xml). Defaults to "/rest".
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="strip-seam-resource-path" type="components:boolean">
- <xs:annotation>
- <xs:documentation>
- Remove the "/<url-pattern-of-seam-resource-servlet>/<resource-path-prefix>" part
- of the request path before the request is mapped to a @Path resource. If disabled,
- all @Path definitions must use the full prefix of the SeamResourceServlet as
- mapped with the url-pattern in web.xml, plus the resourcePathPrefix.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:attributeGroup name="attlist.abstractResource">
- <xs:attribute name="path" type="xs:string" use="required" >
- <xs:annotation>
- <xs:documentation>
- Location of the resource. For example /user
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="media-types" type="xs:string">
- <xs:annotation>
- <xs:documentation>
- Media type this resource will operate on. Defaults to application/xml.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:attributeGroup name="attlist.resourceHome">
- <xs:attribute name="entity-id-class" type="xs:string"
- use="required">
- <xs:annotation>
- <xs:documentation>
- Entity identifier class.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="entity-home" type="components:elType"
- use="required">
- <xs:annotation>
- <xs:documentation>
- EntityHome component that will be used for operating database.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="readonly" type="xs:boolean" default="false">
- <xs:annotation>
- <xs:documentation>
- Disable "write" operations on this resource. Resource will only allow GET
- method.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:attributeGroup name="attlist.resourceQuery">
- <xs:attribute name="entity-class" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>
- Entity class.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="entity-query" type="components:elType">
- <xs:annotation>
- <xs:documentation>
- EntityQuery component that will be used for
- listing operation (GET on path). If not set, it will be created
- automatically.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:attributeGroup>
-</xs:schema>
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd)
===================================================================
--- branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd (rev 0)
+++ branches/enterprise/JBPAPP_5_0/src/resteasy/org/jboss/seam/resteasy/resteasy-2.2.xsd 2010-01-13 16:19:37 UTC (rev 11952)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+ targetNamespace="http://jboss.com/products/seam/resteasy" xmlns:resteasy="http://jboss.com/products/seam/resteasy"
+ xmlns:components="http://jboss.com/products/seam/components" attributeFormDefault="unqualified">
+
+ <xs:import namespace="http://jboss.com/products/seam/components" schemaLocation="components-2.2.xsd"/>
+
+ <xs:element name="application">
+ <xs:annotation>
+ <xs:documentation>
+ An implementation of JAX-RS Application with additional properties for RESTEasy.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1"
+ name="provider-class-names" type="components:multiValuedProperty">
+ <xs:annotation>
+ <xs:documentation>
+ List of provider classes.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element minOccurs="0" maxOccurs="1"
+ name="resource-class-names" type="components:multiValuedProperty">
+ <xs:annotation>
+ <xs:documentation>
+ List of resource classes.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element minOccurs="0" maxOccurs="1"
+ name="media-type-mappings" type="components:mapProperty">
+ <xs:annotation>
+ <xs:documentation>
+ Maps media type URI extensions to Accept header, see RESTEasy documentation and JAX-RS (JSR 311).
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element minOccurs="0" maxOccurs="1"
+ name="language-mappings" type="components:mapProperty">
+ <xs:annotation>
+ <xs:documentation>
+ Maps language URI extension to Accept header, see RESTEasy documentation and JAX-RS (JSR 311).
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ </xs:sequence>
+ <xs:attributeGroup ref="components:attlist.component"/>
+ <xs:attributeGroup ref="resteasy:attlist.application"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="resource-home">
+ <xs:annotation>
+ <xs:documentation>
+ Allows you to expose an entity home component as a
+ REST resource.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="media-types" type="components:multiValuedProperty"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="components:attlist.component" />
+ <xs:attributeGroup ref="resteasy:attlist.resourceHome" />
+ <xs:attributeGroup ref="resteasy:attlist.abstractResource" />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="resource-query">
+ <xs:annotation>
+ <xs:documentation>
+ Allows you to expose an entity query component as a
+ REST resource.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="media-types" type="components:multiValuedProperty"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="components:attlist.component" />
+ <xs:attributeGroup ref="resteasy:attlist.resourceQuery" />
+ <xs:attributeGroup ref="resteasy:attlist.abstractResource" />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:attributeGroup name="attlist.application">
+ <xs:attribute name="scan-providers" type="components:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ Enable automatic discovery of classes annoated with JAX-RS @Provider, defaults to 'true'.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="scan-resources" type="components:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ Enable automatic discovery of classes annoated with JAX-RS @Path, defaults to 'true'.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="use-builtin-providers" type="components:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ Enable RESTEasy built-in providers, defaults to 'true'.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="destroy-session-after-request" type="components:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ Destroy the HttpSession after a REST request if it was created for that request (it is a
+ new session), defaults to 'true'.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="resource-path-prefix" type="components:string">
+ <xs:annotation>
+ <xs:documentation>
+ Append this prefix to any request path, after the SeamResourceServlet
+ url-pattern prefix (configured in web.xml). Defaults to "/rest".
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="strip-seam-resource-path" type="components:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ (DEPRECATED) Has no effect, remove from configuration.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attlist.abstractResource">
+ <xs:attribute name="path" type="xs:string" use="required" >
+ <xs:annotation>
+ <xs:documentation>
+ Location of the resource. For example /user
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="media-types" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>
+ Media type this resource will operate on. Defaults to application/xml.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attlist.resourceHome">
+ <xs:attribute name="entity-id-class" type="xs:string"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Entity identifier class.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="entity-home" type="components:elType"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ EntityHome component that will be used for operating database.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="readonly" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>
+ Disable "write" operations on this resource. Resource will only allow GET
+ method.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attlist.resourceQuery">
+ <xs:attribute name="entity-class" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Entity class.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="entity-query" type="components:elType">
+ <xs:annotation>
+ <xs:documentation>
+ EntityQuery component that will be used for
+ listing operation (GET on path). If not set, it will be created
+ automatically.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:attributeGroup>
+</xs:schema>
Deleted: branches/enterprise/JBPAPP_5_0/src/resteasy/seam.properties
===================================================================
Copied: branches/enterprise/JBPAPP_5_0/src/resteasy/seam.properties (from rev 11220, branches/enterprise/JBPAPP_5_0/src/resteasy/seam.properties)
===================================================================
More information about the seam-commits
mailing list