From 5918a8bf9cf10ee7daf2d6f2e0eff91cc59d4899 Mon Sep 17 00:00:00 2001 From: Richard Millet Date: Tue, 30 Jun 2009 02:42:22 +0000 Subject: [PATCH] CSPACE-210: Checking in a buildable set of sources for the Intake service. This set of sources is not retrofitted for Nuxeo Java API. --- services/intake/.classpath | 6 + services/intake/.project | 23 + .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 8 + services/intake/3rdparty/.classpath | 6 + services/intake/3rdparty/.project | 23 + .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 8 + .../nuxeo-platform-cs-intake/.classpath | 8 + .../nuxeo-platform-cs-intake/.project | 23 + .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 8 + .../nuxeo-platform-cs-intake/build.properties | 15 + .../nuxeo-platform-cs-intake/build.xml | 14 + .../3rdparty/nuxeo-platform-cs-intake/pom.xml | 35 ++ .../src/main/resources/META-INF/MANIFEST.MF | 22 + .../resources/OSGI-INF/core-types-contrib.xml | 12 + .../OSGI-INF/deployment-fragment.xml | 408 ++++++++++++++++++ .../resources/OSGI-INF/ecm-types-contrib.xml | 28 ++ .../resources/OSGI-INF/layouts-contrib.xml | 157 +++++++ .../src/main/resources/schemas/intake.xsd | 77 ++++ services/intake/3rdparty/pom.xml | 20 + services/intake/client/.classpath | 10 + services/intake/client/.project | 23 + .../.settings/org.eclipse.jdt.core.prefs | 12 + .../.settings/org.maven.ide.eclipse.prefs | 8 + services/intake/client/pom.xml | 87 ++++ .../services/client/IntakeClient.java | 94 ++++ .../services/client/IntakeProxy.java | 46 ++ .../client/test/IntakeServiceTest.java | 150 +++++++ .../client/src/test/resources/log4j.xml | 45 ++ .../intake/client/temp-testng-customsuite.xml | 8 + services/intake/jaxb/.classpath | 9 + services/intake/jaxb/.project | 23 + .../jaxb/.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 8 + services/intake/jaxb/pom.xml | 104 +++++ .../services/IntakeJAXBSchema.java | 23 + .../services/IntakeListItemJAXBSchema.java | 7 + .../intake/jaxb/src/main/resources/intake.xsd | 111 +++++ services/intake/pom.xml | 62 +++ services/intake/service/.classpath | 10 + services/intake/service/.project | 23 + .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 8 + services/intake/service/pom.xml | 135 ++++++ .../services/IntakeResource.java | 275 ++++++++++++ .../services/IntakeService.java | 38 ++ .../services/IntakeServiceNuxeoImpl.java | 206 +++++++++ .../services/test/IntakeServiceTest.java | 13 + .../service/src/test/resources/log4j.xml | 45 ++ 51 files changed, 2509 insertions(+) create mode 100644 services/intake/.classpath create mode 100644 services/intake/.project create mode 100644 services/intake/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/3rdparty/.classpath create mode 100644 services/intake/3rdparty/.project create mode 100644 services/intake/3rdparty/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/3rdparty/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/.classpath create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/.project create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/build.properties create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/build.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/pom.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/META-INF/MANIFEST.MF create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/core-types-contrib.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/deployment-fragment.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/ecm-types-contrib.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/layouts-contrib.xml create mode 100644 services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/schemas/intake.xsd create mode 100644 services/intake/3rdparty/pom.xml create mode 100644 services/intake/client/.classpath create mode 100644 services/intake/client/.project create mode 100644 services/intake/client/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/client/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/client/pom.xml create mode 100644 services/intake/client/src/main/java/org/collectionspace/services/client/IntakeClient.java create mode 100644 services/intake/client/src/main/java/org/collectionspace/services/client/IntakeProxy.java create mode 100644 services/intake/client/src/test/java/org/collectionspace/services/client/test/IntakeServiceTest.java create mode 100644 services/intake/client/src/test/resources/log4j.xml create mode 100644 services/intake/client/temp-testng-customsuite.xml create mode 100644 services/intake/jaxb/.classpath create mode 100644 services/intake/jaxb/.project create mode 100644 services/intake/jaxb/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/jaxb/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/jaxb/pom.xml create mode 100644 services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeJAXBSchema.java create mode 100644 services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeListItemJAXBSchema.java create mode 100644 services/intake/jaxb/src/main/resources/intake.xsd create mode 100644 services/intake/pom.xml create mode 100644 services/intake/service/.classpath create mode 100644 services/intake/service/.project create mode 100644 services/intake/service/.settings/org.eclipse.jdt.core.prefs create mode 100644 services/intake/service/.settings/org.maven.ide.eclipse.prefs create mode 100644 services/intake/service/pom.xml create mode 100644 services/intake/service/src/main/java/org/collectionspace/services/IntakeResource.java create mode 100644 services/intake/service/src/main/java/org/collectionspace/services/IntakeService.java create mode 100644 services/intake/service/src/main/java/org/collectionspace/services/IntakeServiceNuxeoImpl.java create mode 100644 services/intake/service/src/test/java/org/collectionspace/services/test/IntakeServiceTest.java create mode 100644 services/intake/service/src/test/resources/log4j.xml diff --git a/services/intake/.classpath b/services/intake/.classpath new file mode 100644 index 000000000..cad20f7d9 --- /dev/null +++ b/services/intake/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/services/intake/.project b/services/intake/.project new file mode 100644 index 000000000..7b134fd48 --- /dev/null +++ b/services/intake/.project @@ -0,0 +1,23 @@ + + + collectionobject-service + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/services/intake/.settings/org.eclipse.jdt.core.prefs b/services/intake/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..dac55b069 --- /dev/null +++ b/services/intake/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Thu Apr 30 16:21:29 PDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/services/intake/.settings/org.maven.ide.eclipse.prefs b/services/intake/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..aa95f8a57 --- /dev/null +++ b/services/intake/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Thu Apr 30 16:20:57 PDT 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/3rdparty/.classpath b/services/intake/3rdparty/.classpath new file mode 100644 index 000000000..cad20f7d9 --- /dev/null +++ b/services/intake/3rdparty/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/services/intake/3rdparty/.project b/services/intake/3rdparty/.project new file mode 100644 index 000000000..5fe78e8aa --- /dev/null +++ b/services/intake/3rdparty/.project @@ -0,0 +1,23 @@ + + + org.collectionspace.services.intake.3rdparty + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/services/intake/3rdparty/.settings/org.eclipse.jdt.core.prefs b/services/intake/3rdparty/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..b81e78bb3 --- /dev/null +++ b/services/intake/3rdparty/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Mon Jun 29 14:28:26 PDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/services/intake/3rdparty/.settings/org.maven.ide.eclipse.prefs b/services/intake/3rdparty/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..0f12a7ea5 --- /dev/null +++ b/services/intake/3rdparty/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Mon Jun 29 14:27:15 PDT 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/.classpath b/services/intake/3rdparty/nuxeo-platform-cs-intake/.classpath new file mode 100644 index 000000000..68e178d98 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/.project b/services/intake/3rdparty/nuxeo-platform-cs-intake/.project new file mode 100644 index 000000000..8388db443 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/.project @@ -0,0 +1,23 @@ + + + nuxeo-platform-collectionspace + Nuxeo Enterprise Platform: CS extensions + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.eclipse.jdt.core.prefs b/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..3a8859d98 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Wed Apr 08 13:25:44 PDT 2009 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.maven.ide.eclipse.prefs b/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..f18b0e3ae --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Wed Apr 08 13:24:46 PDT 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/build.properties b/services/intake/3rdparty/nuxeo-platform-cs-intake/build.properties new file mode 100644 index 000000000..c26799aa9 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/build.properties @@ -0,0 +1,15 @@ +# Example for Windows +jboss.dir=c:/dev/jboss-4.2.3.GA +# Example for Unix +#jboss.dir=/opt/jboss + +# Which JBoss server config to use +jboss.config=default + +# nuxeo deployment +jboss.nuxeo.ear.dir=${jboss.dir}/server/${jboss.config}/deploy/nuxeo.ear + + +# additional command line parameters for mvn commands +# e.g. to work offline: +#mvn.opts=-o diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/build.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/build.xml new file mode 100644 index 000000000..d4e3b266c --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/build.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/pom.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/pom.xml new file mode 100644 index 000000000..39dcdf8ef --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + + org.nuxeo.ecm.platform + nuxeo-platform-parent + 5.2-SNAPSHOT + + + nuxeo-platform-cs-intake + jar + nuxeo-platform-cs-intake + + Intake Nuxeo Document Type + + + 5.2-SNAPSHOT + 1.5-SNAPSHOT + + + + org.nuxeo.ecm.core + nuxeo-core-schema + ${nuxeo.version.1.5} + + + org.nuxeo.ecm.platform + nuxeo-platform-types-core + ${nuxeo.version.5.2} + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/META-INF/MANIFEST.MF b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 000000000..653a89146 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,22 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 1 +Bundle-Name: NuxeoCS +Bundle-SymbolicName: org.collectionspace.intake;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Localization: plugin +Bundle-Vendor: Nuxeo +Require-Bundle: org.nuxeo.runtime, + org.nuxeo.ecm.core.api, + org.nuxeo.ecm.core, + org.nuxeo.ecm.core.api, + org.nuxeo.ecm.platform.types.api, + org.nuxeo.ecm.platform.versioning.api, + org.nuxeo.ecm.platform.ui, + org.nuxeo.ecm.platform.forms.layout.client, + org.nuxeo.ecm.platform.publishing.api, + org.nuxeo.ecm.platform.ws +Provide-Package: org.collectionspace.intake +Nuxeo-Component: OSGI-INF/core-types-contrib.xml, + OSGI-INF/ecm-types-contrib.xml, + OSGI-INF/layouts-contrib.xml + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/core-types-contrib.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/core-types-contrib.xml new file mode 100644 index 000000000..6cb388f9e --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/core-types-contrib.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/deployment-fragment.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/deployment-fragment.xml new file mode 100644 index 000000000..88b94ffd1 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/deployment-fragment.xml @@ -0,0 +1,408 @@ + + + + + + ${bundle.fileName} + + + + + nuxeo.war + /nuxeo + + + + + + + + + + + + Seam Context Filter + /ws/FileManageWS + + + + Seam Context Filter + /DocumentManagerWS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #{currentServerLocation.name}/#{currentTabAction.label} + + + + Create new document in #{currentDocument.name} + + + + Create new document in #{currentDocument.name} + + + + breadcrumb=command.user_dashboard + + + + breadcrumb=command.manageMembers + + + + breadcrumb=command.manageMembers + + + + breadcrumb=title.vocabularies + + + + breadcrumb=command.advancedSearch + + + + + + en + en_GB + en_US + fr + de + es + it + ar + ru + ja + vn + + + messages + + + + config/addWorkspace.jpdl.xml + + + + + + generic_error_page + /generic_error_page.xhtml + + + + + generic_message_page + /generic_message_page.xhtml + + + + + home + /nxstartup.xhtml + + + + + user_login + /login.xhtml + + + + + user_logout + /logout.xhtml + + + + + view_servers + /view_servers.xhtml + + + + + + + view_domains + /view_domains.xhtml + + + + + select_document_type + /select_document_type.xhtml + + + + + create_document + /create_document.xhtml + + + + + edit_document + /edit_document.xhtml + + + + + view_documents + /view_documents.xhtml + + + + + create_file + /create_file.xhtml + + + + + create_workspace_wizard + /createWorkspaceWizard.xhtml + + + + + send_email + /document_email.xhtml + + + + + + view_workspaces + /view_workspaces.xhtml + + + + + + create_domain + /create_domain.xhtml + + + + + + edit_domain + /edit_domain.xhtml + + + + + + create_workspace + /create_workspace.xhtml + + + + + + edit_workspace + /edit_workspace.xhtml + + + + + + + members_management + /members_management.xhtml + + + + + view_users + /view_users.xhtml + + + + + view_many_users + /view_many_users.xhtml + + + + + edit_user + /edit_user.xhtml + + + + + edit_user_password + /edit_user_password.xhtml + + + + + view_user + /view_user.xhtml + + + + + create_user + /create_user.xhtml + + + + + view_groups + /view_groups.xhtml + + + + + view_group + /view_group.xhtml + + + + + edit_group + /edit_group.xhtml + + + + + create_group + /create_group.xhtml + + + + + view_vocabularies + /view_vocabularies.xhtml + + + + + view_vocabulary + /view_vocabulary.xhtml + + + + + + + search_form + /search/search_form.xhtml + + + + + search_results_nxql + /search/search_results_nxql.xhtml + + + + + search_results_advanced + + /search/search_results_advanced.xhtml + + + + + + search_results_simple + /search/search_results_simple.xhtml + + + + + + + clipboard + /incl/clipboard.xhtml + + + + + user_dashboard + /user_dashboard.xhtml + + + + + select_workspace_template + /select_workspace_template.xhtml + + + + + pdf_generation_error + /pdf_generation_error.xhtml + + + + + mass_edit + /massedit_documents.xhtml + + + + + mass_edit_confirm + /massedit_documents_preview.xhtml + + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/ecm-types-contrib.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/ecm-types-contrib.xml new file mode 100644 index 000000000..39d792cc3 --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/ecm-types-contrib.xml @@ -0,0 +1,28 @@ + + + + + + + view_documents + + + heading + intake + + + + + + Intake + + + + + + Intake + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/layouts-contrib.xml b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/layouts-contrib.xml new file mode 100644 index 000000000..a651ba18d --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/OSGI-INF/layouts-contrib.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + currentOwner + depositor + depositorsRequirements + entryDate + entryMethod + entryNote + entryNumber + entryReason + packingNote + returnDate + + + + + + + true + + currentOwner + + + dataInputText + + + + + + + + true + + depositor + + + dataInputText + + + + + + + + true + + depositorsRequirements + + + dataInputText + + + + + + + + true + + entryDate + + + dataInputText + + + + + + + + true + + entryMethod + + + dataInputText + + + + + + + + true + + entryNote + + + dataInputText + + + + + + + + true + + entryNumber + + + dataInputText + + + + + + + + true + + entryReason + + + dataInputText + + + + + + + + true + + packingNote + + + dataInputText + + + + + + + + true + + returnDate + + + dataInputText + + + + + + diff --git a/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/schemas/intake.xsd b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/schemas/intake.xsd new file mode 100644 index 000000000..b7c7d9f1c --- /dev/null +++ b/services/intake/3rdparty/nuxeo-platform-cs-intake/src/main/resources/schemas/intake.xsd @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/intake/3rdparty/pom.xml b/services/intake/3rdparty/pom.xml new file mode 100644 index 000000000..1d2e1b106 --- /dev/null +++ b/services/intake/3rdparty/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + + org.collectionspace.services.intake + org.collectionspace.services + 1.0 + + + org.collectionspace.services.intake.3rdparty + pom + services.intake.3rdparty + + 3rd party build for intake service + + + diff --git a/services/intake/client/.classpath b/services/intake/client/.classpath new file mode 100644 index 000000000..96f09f11f --- /dev/null +++ b/services/intake/client/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/services/intake/client/.project b/services/intake/client/.project new file mode 100644 index 000000000..f44220ec1 --- /dev/null +++ b/services/intake/client/.project @@ -0,0 +1,23 @@ + + + javaee-addressbook-client + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/services/intake/client/.settings/org.eclipse.jdt.core.prefs b/services/intake/client/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..8a8650d9d --- /dev/null +++ b/services/intake/client/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +#Thu Mar 26 13:03:04 PDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/services/intake/client/.settings/org.maven.ide.eclipse.prefs b/services/intake/client/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..c6e4123cd --- /dev/null +++ b/services/intake/client/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Thu Feb 26 16:30:28 PST 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/client/pom.xml b/services/intake/client/pom.xml new file mode 100644 index 000000000..3a5b3072d --- /dev/null +++ b/services/intake/client/pom.xml @@ -0,0 +1,87 @@ + + + + + org.collectionspace.services.intake + org.collectionspace.services + 1.0 + + + 4.0.0 + org.collectionspace.services + org.collectionspace.services.intake.client + 1.0 + services.intake.client + + + + org.collectionspace.services + org.collectionspace.services.intake.jaxb + 1.0 + + + org.collectionspace.services + org.collectionspace.services.client + 1.0 + + + + org.testng + testng + 5.6 + + + org.slf4j + slf4j-api + 1.5.2 + + + org.slf4j + slf4j-log4j12 + 1.5.2 + + + org.jboss.resteasy + resteasy-jaxrs + 1.0.2.GA + + + + tjws + webserver + + + + + org.jboss.resteasy + resteasy-jaxb-provider + 1.0.2.GA + + + org.jboss.resteasy + resteasy-multipart-provider + 1.0.2.GA + + + commons-httpclient + commons-httpclient + 3.1 + + + + + collectionspace-services-intake-client + + + maven-compiler-plugin + 2.0.2 + + 1.5 + 1.5 + + + + + diff --git a/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeClient.java b/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeClient.java new file mode 100644 index 000000000..cdc28e903 --- /dev/null +++ b/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeClient.java @@ -0,0 +1,94 @@ +package org.collectionspace.services.client; + +import javax.ws.rs.core.Response; + +import org.collectionspace.services.intake.Intake; +import org.collectionspace.services.intake.IntakeList; + +import org.jboss.resteasy.client.ProxyFactory; +import org.jboss.resteasy.plugins.providers.RegisterBuiltin; +import org.jboss.resteasy.client.ClientResponse; +import org.jboss.resteasy.spi.ResteasyProviderFactory; + +/** + * A IntakeClient. + + * @version $Revision:$ + */ +public class IntakeClient extends CollectionSpaceClient { + + + /** + * + */ + private static final IntakeClient instance = new IntakeClient(); + /** + * + */ + private IntakeProxy intakeProxy; + + /** + * + * Default constructor for IntakeClient class. + * + */ + private IntakeClient() { + ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance(); + RegisterBuiltin.register(factory); + intakeProxy = ProxyFactory.create(IntakeProxy.class, getBaseURL()); + } + + /** + * FIXME Comment this + * + * @return + */ + public static IntakeClient getInstance() { + return instance; + } + + /** + * @return + * @see org.collectionspace.hello.client.IntakeProxy#getIntake() + */ + public ClientResponse getIntakeList() { + return intakeProxy.getIntakeList(); + } + + /** + * @param csid + * @return + * @see org.collectionspace.hello.client.IntakeProxy#getIntake(java.lang.String) + */ + public ClientResponse getIntake(String csid) { + return intakeProxy.getIntake(csid); + } + + /** + * @param intake + * @return + * @see org.collectionspace.hello.client.IntakeProxy#createIntake(org.collectionspace.hello.Intake) + */ + public ClientResponse createIntake(Intake intake) { + return intakeProxy.createIntake(intake); + } + + /** + * @param csid + * @param intake + * @return + * @see org.collectionspace.hello.client.IntakeProxy#updateIntake(java.lang.Long, org.collectionspace.hello.Intake) + */ + public ClientResponse updateIntake(String csid, Intake intake) { + return intakeProxy.updateIntake(csid, intake); + } + + /** + * @param csid + * @return + * @see org.collectionspace.hello.client.IntakeProxy#deleteIntake(java.lang.Long) + */ + public ClientResponse deleteIntake(String csid) { + return intakeProxy.deleteIntake(csid); + } +} diff --git a/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeProxy.java b/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeProxy.java new file mode 100644 index 000000000..7a5abee4c --- /dev/null +++ b/services/intake/client/src/main/java/org/collectionspace/services/client/IntakeProxy.java @@ -0,0 +1,46 @@ +package org.collectionspace.services.client; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +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 org.collectionspace.services.intake.Intake; +import org.collectionspace.services.intake.IntakeList; +import org.jboss.resteasy.client.ClientResponse; + +/** + * @version $Revision:$ + */ +@Path("/intakes/") +@Produces({"application/xml"}) +@Consumes({"application/xml"}) +public interface IntakeProxy { + + @GET + ClientResponse getIntakeList(); + + //(C)reate + @POST + ClientResponse createIntake(Intake co); + + //(R)ead + @GET + @Path("/{csid}") + ClientResponse getIntake(@PathParam("csid") String csid); + + //(U)pdate + @PUT + @Path("/{csid}") + ClientResponse updateIntake(@PathParam("csid") String csid, Intake co); + + //(D)elete + @DELETE + @Path("/{csid}") + ClientResponse deleteIntake(@PathParam("csid") String csid); +} \ No newline at end of file diff --git a/services/intake/client/src/test/java/org/collectionspace/services/client/test/IntakeServiceTest.java b/services/intake/client/src/test/java/org/collectionspace/services/client/test/IntakeServiceTest.java new file mode 100644 index 000000000..d3ba41381 --- /dev/null +++ b/services/intake/client/src/test/java/org/collectionspace/services/client/test/IntakeServiceTest.java @@ -0,0 +1,150 @@ +package org.collectionspace.services.client.test; + +import java.util.ArrayList; +import java.util.List; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import org.jboss.resteasy.client.ClientResponse; +import org.testng.Assert; +import org.testng.annotations.Test; + +import org.collectionspace.services.intake.Intake; +import org.collectionspace.services.intake.IntakeList; +import org.collectionspace.services.client.IntakeClient; + +/** + * A IntakeNuxeoServiceTest. + * + * @version $Revision:$ + */ +public class IntakeServiceTest { + + private IntakeClient intakeClient = IntakeClient.getInstance(); + private String updateId = null; + private String deleteId = null; + + @Test + public void createIntake() { + long identifier = this.createIdentifier(); + + Intake intake = createIntake(identifier); + ClientResponse res = intakeClient.createIntake(intake); + Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode()); + + //store updateId locally for "update" test + if (updateId == null) { + updateId = extractId(res); + } else { + deleteId = extractId(res); + System.out.println("Set deleteId: " + deleteId); + } + } + + @Test(dependsOnMethods = {"createIntake"}) + public void updateIntake() { + ClientResponse res = intakeClient.getIntake(updateId); + Intake intake = res.getEntity(); + verbose("Got Intake to update with ID: " + updateId, + intake, Intake.class); + + //intake.setCsid("updated-" + updateId); + intake.setEntryNumber("updated-" + intake.getEntryNumber()); + intake.setEntryDate("updated-" + intake.getEntryDate()); + + // make call to update service + res = intakeClient.updateIntake(updateId, intake); + + // check the response + Intake updatedIntake = res.getEntity(); + Assert.assertEquals(updatedIntake.getEntryDate(), intake.getEntryDate()); + verbose("updateIntake: ", updatedIntake, Intake.class); + + return; + } + + @Test(dependsOnMethods = {"createIntake"}) + public void createCollection() { + for (int i = 0; i < 3; i++) { + this.createIntake(); + } + } + + @Test(dependsOnMethods = {"createCollection"}) + public void getIntakeList() { + //the resource method is expected to return at least an empty list + IntakeList coList = intakeClient.getIntakeList().getEntity(); + List coItemList = coList.getIntakeListItem(); + int i = 0; + for(IntakeList.IntakeListItem pli : coItemList) { + verbose("getIntakeList: list-item[" + i + "] csid=" + pli.getCsid()); + verbose("getIntakeList: list-item[" + i + "] objectNumber=" + pli.getEntryNumber()); + verbose("getIntakeList: list-item[" + i + "] URI=" + pli.getUri()); + i++; + } + } + + @Test(dependsOnMethods = {"createCollection"}) + public void deleteIntake() { + System.out.println("Calling deleteIntake:" + deleteId); + ClientResponse res = intakeClient.deleteIntake(deleteId); + verbose("deleteIntake: csid=" + deleteId); + verbose("deleteIntake: status = " + res.getStatus()); + Assert.assertEquals(res.getStatus(), Response.Status.NO_CONTENT.getStatusCode()); + } + + private Intake createIntake(long identifier) { + Intake intake = createIntake("objectNumber-" + identifier, + "objectName-" + identifier); + + return intake; + } + + private Intake createIntake(String entryNumber, String entryDate) { + Intake intake = new Intake(); + + intake.setEntryNumber(entryNumber); + intake.setEntryDate(entryDate); + + return intake; + } + + private String extractId(ClientResponse res) { + MultivaluedMap mvm = res.getMetadata(); + String uri = (String) ((ArrayList) mvm.get("Location")).get(0); + String[] segments = uri.split("/"); + String id = segments[segments.length - 1]; + verbose("id=" + id); + return id; + } + + private void verbose(String msg) { + System.out.println("Intake Test: " + msg); + } + + private void verbose(String msg, Object o, Class clazz) { + try{ + verbose(msg); + JAXBContext jc = JAXBContext.newInstance(clazz); + Marshaller m = jc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, + Boolean.TRUE); + m.marshal(o, System.out); + }catch(Exception e){ + e.printStackTrace(); + } + } + + private void verboseMap(MultivaluedMap map) { + for(Object entry : map.entrySet()){ + MultivaluedMap.Entry mentry = (MultivaluedMap.Entry) entry; + verbose(" name=" + mentry.getKey() + " value=" + mentry.getValue()); + } + } + + private long createIdentifier() { + long identifier = System.currentTimeMillis(); + return identifier; + } +} diff --git a/services/intake/client/src/test/resources/log4j.xml b/services/intake/client/src/test/resources/log4j.xml new file mode 100644 index 000000000..52121cb83 --- /dev/null +++ b/services/intake/client/src/test/resources/log4j.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/intake/client/temp-testng-customsuite.xml b/services/intake/client/temp-testng-customsuite.xml new file mode 100644 index 000000000..9f2480621 --- /dev/null +++ b/services/intake/client/temp-testng-customsuite.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/services/intake/jaxb/.classpath b/services/intake/jaxb/.classpath new file mode 100644 index 000000000..a92b24a87 --- /dev/null +++ b/services/intake/jaxb/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/services/intake/jaxb/.project b/services/intake/jaxb/.project new file mode 100644 index 000000000..db1c789f7 --- /dev/null +++ b/services/intake/jaxb/.project @@ -0,0 +1,23 @@ + + + javaee-addressbook-jaxb + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/services/intake/jaxb/.settings/org.eclipse.jdt.core.prefs b/services/intake/jaxb/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..8780c51c5 --- /dev/null +++ b/services/intake/jaxb/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Thu Feb 26 16:32:52 PST 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/services/intake/jaxb/.settings/org.maven.ide.eclipse.prefs b/services/intake/jaxb/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..c6e4123cd --- /dev/null +++ b/services/intake/jaxb/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Thu Feb 26 16:30:28 PST 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/jaxb/pom.xml b/services/intake/jaxb/pom.xml new file mode 100644 index 000000000..59a61d8fa --- /dev/null +++ b/services/intake/jaxb/pom.xml @@ -0,0 +1,104 @@ + + + + + org.collectionspace.services.intake + org.collectionspace.services + 1.0 + + + 4.0.0 + org.collectionspace.services + org.collectionspace.services.intake.jaxb + 1.0 + services.intake.jaxb + + + + com.sun.xml.bind + jaxb-impl + 2.0.2 + + + org.jvnet.jaxb2-commons + property-listener-injector + 1.0 + + + org.jvnet.jaxb2_commons + runtime + 0.4.1.4 + + + + collectionspace-services-intake-jaxb + install + + + org.jvnet.jaxb2.maven2 + maven-jaxb2-plugin + + + + generate + + + + + + + javax.activation + activation + 1.1 + + + com.sun.xml.bind + jaxb-impl + 2.1.2 + + + + + -XtoString + -Xinject-listener-code + + + + + + + org.jvnet.jaxb2_commons + + basic + 0.4.1 + + + + org.jvnet.jaxb2-commons + + + property-listener-injector + + 1.0 + + + + + + + + maven-compiler-plugin + 2.0.2 + + 1.5 + 1.5 + + + + + diff --git a/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeJAXBSchema.java b/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeJAXBSchema.java new file mode 100644 index 000000000..def5f25ed --- /dev/null +++ b/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeJAXBSchema.java @@ -0,0 +1,23 @@ +/** + * + */ +package org.collectionspace.services; + +/** + * @author remillet + * + */ +public interface IntakeJAXBSchema { + final static String CURRENT_OWNER = "currentOwner"; + final static String DEPOSITOR = "depositor"; + final static String DEPOSITORS_REQUIREMENTS = "depositorsRequirements"; + final static String ENTRY_DATE = "entryDate"; + final static String ENTRY_METHOD = "entryMethod"; + final static String ENTRY_NOTE = "entryNote"; + final static String ENTRY_NUMBER = "entryNumber"; + final static String ENTRY_REASON = "entryReason"; + final static String PACKING_NOTE = "packingNote"; + final static String RETURN_DATE = "returnDate"; +} + + diff --git a/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeListItemJAXBSchema.java b/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeListItemJAXBSchema.java new file mode 100644 index 000000000..22fbe87a8 --- /dev/null +++ b/services/intake/jaxb/src/main/java/org/collectionspace/services/IntakeListItemJAXBSchema.java @@ -0,0 +1,7 @@ +package org.collectionspace.services; + +public interface IntakeListItemJAXBSchema { + final static String ENTRY_NUMBER = "entryNumber"; + final static String CSID = "csid"; + final static String URI = "url"; +} diff --git a/services/intake/jaxb/src/main/resources/intake.xsd b/services/intake/jaxb/src/main/resources/intake.xsd new file mode 100644 index 000000000..a65b93c3b --- /dev/null +++ b/services/intake/jaxb/src/main/resources/intake.xsd @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/intake/pom.xml b/services/intake/pom.xml new file mode 100644 index 000000000..fb3b3f3cf --- /dev/null +++ b/services/intake/pom.xml @@ -0,0 +1,62 @@ + + + + org.collectionspace.services.main + org.collectionspace.services + 1.0 + + 4.0.0 + org.collectionspace.services + 1.0 + org.collectionspace.services.intake + pom + services.intake + + + 5.2-SNAPSHOT + 1.5-SNAPSHOT + + + + jaxb + service + 3rdparty + client + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + + + + org.apache.maven.plugins + maven-site-plugin + + /usr/bin/unzip -o > err.txt + + + + org.apache.maven.plugins + maven-war-plugin + 2.0.1 + + WEB-INF/lib/*.jar + + + true + + + + + + + + + diff --git a/services/intake/service/.classpath b/services/intake/service/.classpath new file mode 100644 index 000000000..96f09f11f --- /dev/null +++ b/services/intake/service/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/services/intake/service/.project b/services/intake/service/.project new file mode 100644 index 000000000..1c6ac6d8c --- /dev/null +++ b/services/intake/service/.project @@ -0,0 +1,23 @@ + + + org.collectionspace.services.intake.service + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/services/intake/service/.settings/org.eclipse.jdt.core.prefs b/services/intake/service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..b81e78bb3 --- /dev/null +++ b/services/intake/service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Mon Jun 29 14:28:26 PDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/services/intake/service/.settings/org.maven.ide.eclipse.prefs b/services/intake/service/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..0f12a7ea5 --- /dev/null +++ b/services/intake/service/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Mon Jun 29 14:27:15 PDT 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/services/intake/service/pom.xml b/services/intake/service/pom.xml new file mode 100644 index 000000000..abc9dc16d --- /dev/null +++ b/services/intake/service/pom.xml @@ -0,0 +1,135 @@ + + + + + org.collectionspace.services.intake + org.collectionspace.services + 1.0 + + + 4.0.0 + org.collectionspace.services + org.collectionspace.services.intake.service + jar + 1.0 + services.intake.service + + + + org.collectionspace.services + org.collectionspace.services.common + 1.0 + + + org.collectionspace.services + org.collectionspace.services.intake.jaxb + 1.0 + + + + junit + junit + 4.1 + test + + + org.testng + testng + 5.6 + + + + + + + + javax.security + jaas + 1.0.01 + provided + + + + dom4j + dom4j + 1.6.1 + provided + + + + + + org.jboss.resteasy + resteasy-jaxrs + 1.0.2.GA + + + tjws + webserver + + + + + org.jboss.resteasy + resteasy-jaxb-provider + 1.0.2.GA + + + org.jboss.resteasy + resteasy-multipart-provider + 1.0.2.GA + + + + + + org.nuxeo.ecm.core + nuxeo-core-api + ${nuxeo.version.1.5} + + + jboss-remoting + jboss + + + + + + org.restlet + org.restlet + 1.0.7 + + + com.noelios.restlet + com.noelios.restlet.ext.httpclient + 1.0.7 + + + com.noelios.restlet + com.noelios.restlet + 1.0.7 + + + + + + collectionspace-services-commonobject + + + org.codehaus.mojo + jboss-maven-plugin + + ${jboss.dir} + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + + + + + diff --git a/services/intake/service/src/main/java/org/collectionspace/services/IntakeResource.java b/services/intake/service/src/main/java/org/collectionspace/services/IntakeResource.java new file mode 100644 index 000000000..906aef059 --- /dev/null +++ b/services/intake/service/src/main/java/org/collectionspace/services/IntakeResource.java @@ -0,0 +1,275 @@ +package org.collectionspace.services; + +import java.util.Iterator; +import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.PathParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriInfo; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; + +import org.collectionspace.services.IntakeService; +import org.collectionspace.services.intake.*; +import org.collectionspace.services.intake.IntakeList.*; +import org.collectionspace.services.IntakeJAXBSchema; + +import org.dom4j.Document; +import org.dom4j.Element; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Path("/intakes") +@Consumes("application/xml") +@Produces("application/xml") +public class IntakeResource { + + final Logger logger = LoggerFactory + .getLogger(IntakeResource.class); + + // This should be a DI wired by a container like Spring, Seam, or EJB3 + final static IntakeService service = new IntakeServiceNuxeoImpl(); + + public IntakeResource() { + // do nothing + } + + @GET + public IntakeList getIntakeList(@Context UriInfo ui) { + IntakeList p = new IntakeList(); + try { + Document document = service.getIntakeList(); + Element root = document.getRootElement(); + + // debug + System.err.println(document.asXML()); + + List list = p + .getIntakeListItem(); + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + // debug + System.err.println(); + element.asXML(); + + // set the Intake list item entity elements + IntakeListItem pli = new IntakeListItem(); + pli.setEntryNumber(element.attributeValue("entryNumber")); + pli.setUri(element.attributeValue("url")); + pli.setCsid(element.attributeValue("id")); + list.add(pli); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return p; + } + + @POST + public Response createIntake(Intake intake) { + + String csid = null; + try { + Document document = service.postIntake(intake); + Element root = document.getRootElement(); + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + if ("docRef".equals(element.getName())) { + csid = (String) element.getData(); + intake.setCsid(csid); + } + } + } catch (Exception e) { + Response response = Response.status(Response.Status.NOT_FOUND) + .entity("Create failed").type("text/plain").build(); + throw new WebApplicationException(response); + } + + verbose("createIntake: ", intake); + UriBuilder path = UriBuilder + .fromResource(IntakeResource.class); + path.path("" + csid); + Response response = Response.created(path.build()).build(); + + return response; + } + + @GET + @Path("{csid}") + public Intake getIntake(@PathParam("csid") String csid) { + + Intake intake = null; + try { + Document document = service.getIntake(csid); + Element root = document.getRootElement(); + intake = new Intake(); + + // TODO: recognize schema thru namespace uri + // Namespace ns = new Namespace("intake", + // "http://collectionspace.org/intake"); + + Iterator siter = root.elementIterator("schema"); + while (siter.hasNext()) { + + Element schemaElement = siter.next(); + System.err + .println("Intake.getIntake() called."); + + // TODO: recognize schema thru namespace uri + if (IntakeService.INTAKE_SCHEMA_NAME.equals(schemaElement.attribute("name") + .getValue())) { + Element ele = schemaElement + .element(IntakeJAXBSchema.CURRENT_OWNER); + if (ele != null) { + intake.setCurrentOwner((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.DEPOSITOR); + if (ele != null) { + intake.setDepositor((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.DEPOSITORS_REQUIREMENTS); + if (ele != null) { + intake.setDepositorsRequirements((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.ENTRY_DATE); + if (ele != null) { + intake.setEntryDate((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.ENTRY_METHOD); + if (ele != null) { + intake.setEntryMethod((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.ENTRY_NOTE); + if (ele != null) { + intake.setEntryNote((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.ENTRY_NUMBER); + if (ele != null) { + intake.setEntryNumber((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.ENTRY_REASON); + if (ele != null) { + intake.setEntryReason((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.PACKING_NOTE); + if (ele != null) { + intake.setPackingNote((String) ele.getData()); + } + ele = schemaElement + .element(IntakeJAXBSchema.RETURN_DATE); + if (ele != null) { + intake.setReturnDate((String) ele.getData()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + Response response = Response.status( + Response.Status.INTERNAL_SERVER_ERROR).entity("Get failed") + .type("text/plain").build(); + throw new WebApplicationException(response); + } + if (intake == null) { + Response response = Response.status(Response.Status.NOT_FOUND) + .entity( + "Get failed, the requested Intake CSID:" + + csid + ": was not found.").type( + "text/plain").build(); + throw new WebApplicationException(response); + } + verbose("getIntake: ", intake); + + return intake; + } + + @PUT + @Path("{csid}") + public Intake updateIntake( + @PathParam("csid") String csid, Intake theUpdate) { + + verbose("updateIntake with input: ", theUpdate); + + String status = null; + try { + + Document document = service.putIntake(csid, theUpdate); + Element root = document.getRootElement(); + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + if ("docRef".equals(element.getName())) { + status = (String) element.getData(); + verbose("updateIntake response: " + status); + } + } + } catch (Exception e) { + // FIXME: NOT_FOUND? + Response response = Response.status(Response.Status.NOT_FOUND) + .entity("Update failed ").type("text/plain").build(); + throw new WebApplicationException(response); + } + + return theUpdate; + } + + @DELETE + @Path("{csid}") + public void deleteIntake(@PathParam("csid") String csid) { + + verbose("deleteIntake with csid=" + csid); + try { + + Document document = service.deleteIntake(csid); + Element root = document.getRootElement(); + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + if ("docRef".equals(element.getName())) { + String status = (String) element.getData(); + verbose("deleteIntaket response: " + status); + } + } + } catch (Exception e) { + // FIXME: NOT_FOUND? + Response response = Response.status(Response.Status.NOT_FOUND) + .entity("Delete failed ").type("text/plain").build(); + throw new WebApplicationException(response); + } + + } + + private void verbose(String msg, Intake intake) { + try { + verbose(msg); + JAXBContext jc = JAXBContext.newInstance(Intake.class); + + Marshaller m = jc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + m.marshal(intake, System.out); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void verbose(String msg) { + System.out.println("IntakeResource. " + msg); + } + +} diff --git a/services/intake/service/src/main/java/org/collectionspace/services/IntakeService.java b/services/intake/service/src/main/java/org/collectionspace/services/IntakeService.java new file mode 100644 index 000000000..b972bae38 --- /dev/null +++ b/services/intake/service/src/main/java/org/collectionspace/services/IntakeService.java @@ -0,0 +1,38 @@ +/** + * + */ +package org.collectionspace.services; + +import java.io.IOException; +import org.dom4j.Document; +import org.dom4j.DocumentException; + +import org.collectionspace.services.intake.Intake; + +/** + * @author remillet + * + */ +public interface IntakeService { + + public final static String INTAKE_SCHEMA_NAME = "intake"; + + // Create + Document postIntake(Intake co) + throws DocumentException, IOException; + + // Read single object + Document getIntake(String csid) throws DocumentException, + IOException; + + // Read a list of objects + Document getIntakeList() throws DocumentException, IOException; + + // Update + Document putIntake(String csid, Intake theUpdate) + throws DocumentException, IOException; + + // Delete + Document deleteIntake(String csid) throws DocumentException, + IOException; +} diff --git a/services/intake/service/src/main/java/org/collectionspace/services/IntakeServiceNuxeoImpl.java b/services/intake/service/src/main/java/org/collectionspace/services/IntakeServiceNuxeoImpl.java new file mode 100644 index 000000000..4bc1f43c3 --- /dev/null +++ b/services/intake/service/src/main/java/org/collectionspace/services/IntakeServiceNuxeoImpl.java @@ -0,0 +1,206 @@ +/** + * + */ +package org.collectionspace.services; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.collectionspace.services.nuxeo.NuxeoRESTClient; +import org.collectionspace.services.nuxeo.CollectionSpaceServiceNuxeoImpl; +import org.collectionspace.services.intake.Intake; +import org.collectionspace.services.IntakeJAXBSchema; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.io.SAXReader; +import org.restlet.resource.Representation; + +/** + * @author remillet + * + */ +public class IntakeServiceNuxeoImpl extends + CollectionSpaceServiceNuxeoImpl implements IntakeService { + + final static String INTAKE_NUXEO_DOCTYPE = "Intake"; + final static String INTAKE_NUXEO_SCHEMA_NAME = "intake"; + final static String INTAKE_NUXEO_DC_TITLE = "CollectionSpace-Intake"; + + // replace WORKSPACE_UID for resource workspace + static String CS_INTAKE_WORKSPACE_UID = "c04210c4-9426-475f-b4ee-aa3d6aa4b97c"; + + public Document deleteIntake(String csid) + throws DocumentException, IOException { + + NuxeoRESTClient nxClient = getClient(); + List pathParams = new ArrayList(); + Map queryParams = new HashMap(); + + pathParams.add("default"); + pathParams.add(csid); + pathParams.add("deleteDocumentRestlet"); + Representation res = nxClient.get(pathParams, queryParams); + SAXReader reader = new SAXReader(); + Document document = reader.read(res.getStream()); + + return document; + } + + public Document getIntake(String csid) throws DocumentException, + IOException { + List pathParams = new ArrayList(); + Map queryParams = new HashMap(); + + pathParams.add("default"); + pathParams.add(csid); + pathParams.add("export"); + queryParams.put("format", "XML"); + + NuxeoRESTClient nxClient = getClient(); + Representation res = nxClient.get(pathParams, queryParams); + + SAXReader reader = new SAXReader(); + Document document = reader.read(res.getStream()); + + return document; + } + + public Document getIntakeList() throws DocumentException, + IOException { + Document result = null; + + NuxeoRESTClient nxClient = getClient(); + List pathParams = new ArrayList(); + Map queryParams = new HashMap(); + pathParams = Arrays.asList("default", + CS_INTAKE_WORKSPACE_UID, "browse"); + Representation res = nxClient.get(pathParams, queryParams); + SAXReader reader = new SAXReader(); + result = reader.read(res.getStream()); + + return result; + } + + public Document postIntake(Intake co) + throws DocumentException, IOException { + NuxeoRESTClient nxClient = getClient(); + + List pathParams = new ArrayList(); + Map queryParams = new HashMap(); + pathParams.add("default"); + pathParams.add(CS_INTAKE_WORKSPACE_UID); + pathParams.add("createDocument"); + queryParams.put("docType", INTAKE_NUXEO_DOCTYPE); + + // a default title for the Dublin Core schema + queryParams.put("dublincore:title", INTAKE_NUXEO_DC_TITLE); + + // Intake core values + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.CURRENT_OWNER, co + .getCurrentOwner()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.DEPOSITOR, co.getDepositor()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.DEPOSITORS_REQUIREMENTS, co + .getDepositorsRequirements()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_DATE, co.getEntryDate()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_METHOD, co + .getEntryMethod()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_NOTE, co.getEntryNote()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_NUMBER, co + .getEntryNumber()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_REASON, co.getEntryReason()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.PACKING_NOTE, co.getPackingNote()); + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.RETURN_DATE, co.getReturnDate()); + + ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); + Representation res = nxClient.post(pathParams, queryParams, bais); + + SAXReader reader = new SAXReader(); + Document document = reader.read(res.getStream()); + + return document; + } + + public Document putIntake(String csid, Intake theUpdate) + throws DocumentException, IOException { + List pathParams = new ArrayList(); + Map queryParams = new HashMap(); + pathParams.add("default"); + pathParams.add(csid); + pathParams.add("updateDocumentRestlet"); + + // todo: intelligent merge needed + if (theUpdate.getCurrentOwner() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.CURRENT_OWNER, theUpdate.getCurrentOwner()); + } + + if (theUpdate.getDepositor() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.DEPOSITOR, theUpdate.getDepositor()); + } + + if (theUpdate.getDepositorsRequirements() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.DEPOSITORS_REQUIREMENTS, theUpdate.getDepositorsRequirements()); + } + + if (theUpdate.getEntryDate() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_DATE, theUpdate.getEntryDate()); + } + + if (theUpdate.getEntryMethod() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_METHOD, theUpdate.getEntryMethod()); + } + + if (theUpdate.getEntryNote() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_NOTE, theUpdate.getEntryNote()); + } + + if (theUpdate.getEntryNumber() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_NUMBER, theUpdate.getEntryNumber()); + } + + if (theUpdate.getEntryReason() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.ENTRY_REASON, theUpdate.getEntryReason()); + } + + if (theUpdate.getPackingNote() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.PACKING_NOTE, theUpdate.getPackingNote()); + } + + if (theUpdate.getReturnDate() != null) { + queryParams.put(INTAKE_NUXEO_SCHEMA_NAME + ":" + + IntakeJAXBSchema.RETURN_DATE, theUpdate.getReturnDate()); + } + + NuxeoRESTClient nxClient = getClient(); + Representation res = nxClient.get(pathParams, queryParams); + SAXReader reader = new SAXReader(); + Document document = reader.read(res.getStream()); + + return document; + } + +} diff --git a/services/intake/service/src/test/java/org/collectionspace/services/test/IntakeServiceTest.java b/services/intake/service/src/test/java/org/collectionspace/services/test/IntakeServiceTest.java new file mode 100644 index 000000000..eb297ce65 --- /dev/null +++ b/services/intake/service/src/test/java/org/collectionspace/services/test/IntakeServiceTest.java @@ -0,0 +1,13 @@ +package org.collectionspace.services.test; + +//import org.collectionspace.services.intake.Intake; +//import org.collectionspace.services.intake.IntakeList; + +/** + * A IntakeServiceTest. + * + * @version $Revision:$ + */ +public class IntakeServiceTest { + //empty +} diff --git a/services/intake/service/src/test/resources/log4j.xml b/services/intake/service/src/test/resources/log4j.xml new file mode 100644 index 000000000..52121cb83 --- /dev/null +++ b/services/intake/service/src/test/resources/log4j.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.47.3