<component name="org.collectionspace.collectionspace_core.coreTypes">
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
<schema name="collectionspace_core" prefix="collectionspace_core" src="schemas/collectionspace_core.xsd"/>
+ <schema name="subitem" prefix="subitem" src="schemas/subitem.xsd"/>
</extension>
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
<doctype name="CollectionSpace_Core" extends="Document">
<schema name="collectionspace_core"/>
</doctype>
</extension>
+ <extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
+ <doctype name="Subitem" extends="Document">
+ <schema name="common"/>
+ <schema name="dublincore"/>
+ <schema name="collectionspace_core"/>
+ <schema name="subitem"/>
+ </doctype>
+ </extension>
</component>
</subtypes>
</type>
</extension>
+ <extension target="org.nuxeo.ecm.platform.types.TypeService" point="types">
+ <type id="Subitem" coretype="Subitem">
+ <label>org.collectionspace.subitem</label>
+ <!--icon>/icons/file.gif</icon-->
+ <default-view>view_documents</default-view>
+
+ <layouts mode="any">
+ <layout>heading</layout>
+ <layout>subitem</layout>
+ </layouts>
+ </type>
+
+ <type id="Folder" coretype="Folder">
+ <subtypes>
+ <type>Subitem</type>
+ </subtypes>
+ </type>
+
+ <type id="Workspace" coretype="Workspace">
+ <subtypes>
+ <type>Subitem</type>
+ </subtypes>
+ </type>
+ </extension>
</component>
</layout>
</extension>
+
+ <extension target="org.nuxeo.ecm.platform.forms.layout.WebLayoutManager"
+ point="layouts">
+
+ <layout name="subitem">
+ <templates>
+ <template mode="any">/layouts/layout_default_template.xhtml</template>
+ </templates>
+ <rows>
+ <row><widget>owner</widget></row>
+ <row><widget>isPrimary</widget></row>
+ <row><widget>order</widget></row>
+ </rows>
+
+ <widget name="owner" type="text">
+ <labels>
+ <label mode="any">owner</label>
+ </labels>
+ <translated>true</translated>
+ <fields>
+ <field schema="subitem">owner</field>
+ </fields>
+ <properties widgetMode="edit">
+ <property name="styleClass">dataInputText</property>
+ </properties>
+ </widget>
+
+ <widget name="isPrimary" type="text">
+ <labels>
+ <label mode="any">isPrimary</label>
+ </labels>
+ <translated>true</translated>
+ <fields>
+ <field schema="subitem">isPrimary</field>
+ </fields>
+ <properties widgetMode="edit">
+ <property name="styleClass">dataInputText</property>
+ </properties>
+ </widget>
+
+ <widget name="order" type="text">
+ <labels>
+ <label mode="any">order</label>
+ </labels>
+ <translated>true</translated>
+ <fields>
+ <field schema="subitem">order</field>
+ </fields>
+ <properties widgetMode="edit">
+ <property name="styleClass">dataInputText</property>
+ </properties>
+ </widget>
+
+ </layout>
+ </extension>
+
</component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+\r
+<!--\r
+ Older (?) CollectionObject Core Schema for Nuxeo EP\r
+\r
+ $LastChangedRevision: 2099 $\r
+ $LastChangedDate: 2010-05-14 17:24:06 -0700 (Fri, 14 May 2010) $\r
+-->\r
+\r
+<xs:schema \r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:ns="http://collectionspace.org/subitem/"\r
+ xmlns="http://collectionspace.org/subitem/"\r
+ targetNamespace="http://collectionspace.org/subitem/"\r
+ version="0.1">\r
+\r
+ <!-- SubItem Common Information Group -->\r
+ <!-- owner is the csid of the owning LocationAuthority -->\r
+ <xs:element name="owner" type="xs:string" />\r
+ <xs:element name="isPrimary" type="xs:boolean"/>\r
+ <xs:element name="order" type="xs:unsignedInt"/>\r
+</xs:schema>\r
<artifactId>org.collectionspace.services.collectionobject.service</artifactId>\r
<version>${project.version}</version>\r
</dependency>\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.service</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency>\r
<dependency>\r
<groupId>org.collectionspace.services</groupId>\r
<artifactId>org.collectionspace.services.id.service</artifactId>\r
import org.collectionspace.services.account.AccountResource;
import org.collectionspace.services.collectionobject.CollectionObjectResource;
import org.collectionspace.services.id.IDResource;
+import org.collectionspace.services.note.NoteResource;
import org.collectionspace.services.intake.IntakeResource;
import org.collectionspace.services.loanin.LoaninResource;
import org.collectionspace.services.loanout.LoanoutResource;
singletons.add(new PermissionResource());
singletons.add(new CollectionObjectResource());
singletons.add(new IDResource());
+ singletons.add(new NoteResource());
singletons.add(new IntakeResource());
singletons.add(new LoaninResource());
singletons.add(new LoanoutResource());
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>a4017e3d-1eef-42b1-bdb7-8443d681707c</permissionId>
+ <permissionId>c254348f-e5d0-4db9-8634-ed0b47887826</permissionId>
<resourceName>collectionobjects</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>66d54998-a1a1-4c64-9728-2b6d8b9b61df</permissionId>
+ <permissionId>964b5187-fda0-4e2d-8873-0c235acf1796</permissionId>
<resourceName>intakes</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>07e47d8a-1aa6-440b-b30b-a2d42d8023a1</permissionId>
+ <permissionId>e1eff972-65f0-4213-9d91-e5eaad58fd5d</permissionId>
<resourceName>loansin</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>476a773b-83ad-4383-8761-c92930bf527c</permissionId>
+ <permissionId>ded1f92e-6b57-43ee-bc94-19e32bae9822</permissionId>
<resourceName>loansout</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>b0144782-e289-4847-bb67-e9b5c0412887</permissionId>
+ <permissionId>428a7c8c-a3cf-4616-a439-65ce41566fba</permissionId>
<resourceName>movements</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>8cc25692-4d52-40e2-afbc-b95a79db3b0a</permissionId>
+ <permissionId>e2189ea7-1710-443a-a2a9-0c3d8ee256b1</permissionId>
<resourceName>vocabularies</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>d2f87bd9-9ea6-4b39-aebe-6a0fc6d96594</permissionId>
+ <permissionId>9d132fbd-0f5a-42cb-bae3-117b2f71dff8</permissionId>
<resourceName>vocabularyitems</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>80e32ee8-4740-4b48-a3ba-aec706172146</permissionId>
+ <permissionId>293a5a44-4e91-4bee-b85e-ceacd6e213bb</permissionId>
<resourceName>orgauthorities</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>49167e68-8001-45b4-abef-c042032e488e</permissionId>
+ <permissionId>c1a81f3f-e95d-4e04-bbdd-54b9f5c8ff86</permissionId>
<resourceName>organizations</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>3c69a90d-35b9-4bc0-9360-46977368f86f</permissionId>
+ <permissionId>986a2192-13cf-4985-a1ce-bf38337a1d2c</permissionId>
<resourceName>personauthorities</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>3cd1d1b5-1d7b-4795-9e74-26511325720f</permissionId>
+ <permissionId>a82b6feb-6dce-4029-9046-f2830f8b64fc</permissionId>
<resourceName>persons</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>0ec19a72-a210-44b9-a10e-817fea57276f</permissionId>
+ <permissionId>314b45b4-b3d0-4b0c-bd9b-c9d4f41bf963</permissionId>
+ <resourceName>locationauthorities</resourceName>
+ </permission>
+ <role>
+ <roleId>1</roleId>
+ <roleName>ROLE_ADMINISTRATOR</roleName>
+ </role>
+ </permissionRole>
+ <permissionRole>
+ <subject>ROLE</subject>
+ <permission>
+ <permissionId>fd66abf5-6022-4e21-8f83-750ba5dc79be</permissionId>
+ <resourceName>locations</resourceName>
+ </permission>
+ <role>
+ <roleId>1</roleId>
+ <roleName>ROLE_ADMINISTRATOR</roleName>
+ </role>
+ </permissionRole>
+ <permissionRole>
+ <subject>ROLE</subject>
+ <permission>
+ <permissionId>10b20df4-d9bc-4b51-88bb-9051342c05c9</permissionId>
<resourceName>acquisitions</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>808c7f90-16a1-42a6-a24b-06327728b2e4</permissionId>
+ <permissionId>0f606175-cf1f-4c8b-9216-8fac556db213</permissionId>
<resourceName>relations</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>5840f553-3fa1-4254-8442-7f4e76dfbd08</permissionId>
+ <permissionId>2537caa4-4859-43f4-a92b-630b38336f62</permissionId>
<resourceName>accounts</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>fc89633a-56c6-4d20-9022-dbf7919afe0c</permissionId>
+ <permissionId>a1c13748-f404-4a72-a7b2-e0599316828c</permissionId>
<resourceName>dimensions</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>f0806b7f-5dca-4aed-bae9-b25fba378f95</permissionId>
+ <permissionId>ab6d047b-a685-4f7d-b708-846a155f1fea</permissionId>
<resourceName>contacts</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>173a185c-b2d6-4fae-8c33-89b2e34dbeea</permissionId>
+ <permissionId>d5f1cb1e-1aa7-48a2-a32b-4b9cca3b3169</permissionId>
+ <resourceName>notes</resourceName>
+ </permission>
+ <role>
+ <roleId>1</roleId>
+ <roleName>ROLE_ADMINISTRATOR</roleName>
+ </role>
+ </permissionRole>
+ <permissionRole>
+ <subject>ROLE</subject>
+ <permission>
+ <permissionId>eea3a150-0eb7-4061-937d-d35fbe11f55a</permissionId>
<resourceName>authorization/roles</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>d82cdea5-6643-4aac-a94b-5b5808a6d0e8</permissionId>
+ <permissionId>d694674b-fe0c-4769-8615-9e7f482bbbdc</permissionId>
<resourceName>authorization/permissions</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>9955709b-267a-4da1-a569-76a2520af6e7</permissionId>
+ <permissionId>d712beb5-bd4c-435f-a631-ab5eccae0462</permissionId>
<resourceName>authorization/permroles</resourceName>
</permission>
<role>
<permissionRole>
<subject>ROLE</subject>
<permission>
- <permissionId>8c816fa9-d1df-4c8c-95a0-7972d214ae09</permissionId>
+ <permissionId>85a25c1b-0cb7-4df1-a447-eee665e693f9</permissionId>
<resourceName>accounts/accountroles</resourceName>
</permission>
<role>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:permissions_list xmlns:ns2="http://collectionspace.org/services/authorization">
- <permission csid="a4017e3d-1eef-42b1-bdb7-8443d681707c">
+ <permission csid="c254348f-e5d0-4db9-8634-ed0b47887826">
<resourceName>collectionobjects</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="66d54998-a1a1-4c64-9728-2b6d8b9b61df">
+ <permission csid="964b5187-fda0-4e2d-8873-0c235acf1796">
<resourceName>intakes</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="07e47d8a-1aa6-440b-b30b-a2d42d8023a1">
+ <permission csid="e1eff972-65f0-4213-9d91-e5eaad58fd5d">
<resourceName>loansin</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="476a773b-83ad-4383-8761-c92930bf527c">
+ <permission csid="ded1f92e-6b57-43ee-bc94-19e32bae9822">
<resourceName>loansout</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="b0144782-e289-4847-bb67-e9b5c0412887">
+ <permission csid="428a7c8c-a3cf-4616-a439-65ce41566fba">
<resourceName>movements</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="8cc25692-4d52-40e2-afbc-b95a79db3b0a">
+ <permission csid="e2189ea7-1710-443a-a2a9-0c3d8ee256b1">
<resourceName>vocabularies</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="d2f87bd9-9ea6-4b39-aebe-6a0fc6d96594">
+ <permission csid="9d132fbd-0f5a-42cb-bae3-117b2f71dff8">
<resourceName>vocabularyitems</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="80e32ee8-4740-4b48-a3ba-aec706172146">
+ <permission csid="293a5a44-4e91-4bee-b85e-ceacd6e213bb">
<resourceName>orgauthorities</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="49167e68-8001-45b4-abef-c042032e488e">
+ <permission csid="c1a81f3f-e95d-4e04-bbdd-54b9f5c8ff86">
<resourceName>organizations</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="3c69a90d-35b9-4bc0-9360-46977368f86f">
+ <permission csid="986a2192-13cf-4985-a1ce-bf38337a1d2c">
<resourceName>personauthorities</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="3cd1d1b5-1d7b-4795-9e74-26511325720f">
+ <permission csid="a82b6feb-6dce-4029-9046-f2830f8b64fc">
<resourceName>persons</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="0ec19a72-a210-44b9-a10e-817fea57276f">
+ <permission csid="314b45b4-b3d0-4b0c-bd9b-c9d4f41bf963">
+ <resourceName>locationauthorities</resourceName>
+ <action>
+ <name>CREATE</name>
+ </action>
+ <action>
+ <name>READ</name>
+ </action>
+ <action>
+ <name>UPDATE</name>
+ </action>
+ <action>
+ <name>DELETE</name>
+ </action>
+ <action>
+ <name>SEARCH</name>
+ </action>
+ <effect>PERMIT</effect>
+ <tenant_id>1</tenant_id>
+ </permission>
+ <permission csid="fd66abf5-6022-4e21-8f83-750ba5dc79be">
+ <resourceName>locations</resourceName>
+ <action>
+ <name>CREATE</name>
+ </action>
+ <action>
+ <name>READ</name>
+ </action>
+ <action>
+ <name>UPDATE</name>
+ </action>
+ <action>
+ <name>DELETE</name>
+ </action>
+ <action>
+ <name>SEARCH</name>
+ </action>
+ <effect>PERMIT</effect>
+ <tenant_id>1</tenant_id>
+ </permission>
+ <permission csid="10b20df4-d9bc-4b51-88bb-9051342c05c9">
<resourceName>acquisitions</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="808c7f90-16a1-42a6-a24b-06327728b2e4">
+ <permission csid="0f606175-cf1f-4c8b-9216-8fac556db213">
<resourceName>relations</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="5840f553-3fa1-4254-8442-7f4e76dfbd08">
+ <permission csid="2537caa4-4859-43f4-a92b-630b38336f62">
<resourceName>accounts</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="fc89633a-56c6-4d20-9022-dbf7919afe0c">
+ <permission csid="a1c13748-f404-4a72-a7b2-e0599316828c">
<resourceName>dimensions</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="f0806b7f-5dca-4aed-bae9-b25fba378f95">
+ <permission csid="ab6d047b-a685-4f7d-b708-846a155f1fea">
<resourceName>contacts</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="173a185c-b2d6-4fae-8c33-89b2e34dbeea">
+ <permission csid="d5f1cb1e-1aa7-48a2-a32b-4b9cca3b3169">
+ <resourceName>notes</resourceName>
+ <action>
+ <name>CREATE</name>
+ </action>
+ <action>
+ <name>READ</name>
+ </action>
+ <action>
+ <name>UPDATE</name>
+ </action>
+ <action>
+ <name>DELETE</name>
+ </action>
+ <action>
+ <name>SEARCH</name>
+ </action>
+ <effect>PERMIT</effect>
+ <tenant_id>1</tenant_id>
+ </permission>
+ <permission csid="eea3a150-0eb7-4061-937d-d35fbe11f55a">
<resourceName>authorization/roles</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="d82cdea5-6643-4aac-a94b-5b5808a6d0e8">
+ <permission csid="d694674b-fe0c-4769-8615-9e7f482bbbdc">
<resourceName>authorization/permissions</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="9955709b-267a-4da1-a569-76a2520af6e7">
+ <permission csid="d712beb5-bd4c-435f-a631-ab5eccae0462">
<resourceName>authorization/permroles</resourceName>
<action>
<name>CREATE</name>
<effect>PERMIT</effect>
<tenant_id>1</tenant_id>
</permission>
- <permission csid="8c816fa9-d1df-4c8c-95a0-7972d214ae09">
+ <permission csid="85a25c1b-0cb7-4df1-a447-eee665e693f9">
<resourceName>accounts/accountroles</resourceName>
<action>
<name>CREATE</name>
<ant antfile="account/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="relation/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="id/build.xml" target="deploy" inheritAll="false"/>\r
+ <ant antfile="note/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="collectionobject/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="intake/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="loanin/build.xml" target="deploy" inheritAll="false"/>\r
<ant antfile="loanin/build.xml" target="undeploy" inheritAll="false"/>\r
<ant antfile="intake/build.xml" target="undeploy" inheritAll="false"/>\r
<ant antfile="collectionobject/build.xml" target="undeploy" inheritAll="false"/>\r
+ <ant antfile="note/build.xml" target="undeploy" inheritAll="false"/>\r
<ant antfile="id/build.xml" target="undeploy" inheritAll="false"/>\r
<ant antfile="relation/build.xml" target="undeploy" inheritAll="false"/>\r
<ant antfile="account/build.xml" target="undeploy" inheritAll="false"/>\r
</service:object>
</tenant:serviceBindings>
<!-- end contact service meta-data -->
+ <!-- begin note service meta-data -->
+ <tenant:serviceBindings name="Notes" version="0.1">
+ <service:repositoryClient xmlns:service='http://collectionspace.org/services/common/service'>
+ nuxeo-java
+ </service:repositoryClient>
+ <service:documentHandler xmlns:service='http://collectionspace.org/services/common/service'>
+ org.collectionspace.services.note.nuxeo.NoteDocumentModelHandler
+ </service:documentHandler>
+ <service:object name="CSNote" version="0.1"
+ xmlns:service='http://collectionspace.org/services/common/service'>
+ <service:part id="0" control_group="Managed"
+ versionable="true" auditable="false"
+ label="notes-system" updated="" order="0">
+ <service:content contentType="application/xml">
+ <service:xmlContent
+ namespaceURI="http://collectionspace.org/services/common/system"
+ schemaLocation="http://collectionspace.org/services/common/system http://collectionspace.org/services/common/system/system-response.xsd">
+ </service:xmlContent>
+ </service:content>
+ </service:part>
+ <service:part id="1" control_group="Managed"
+ versionable="true" auditable="false"
+ label="notes_common" updated="" order="1">
+ <service:content contentType="application/xml">
+ <service:xmlContent
+ namespaceURI="http://collectionspace.org/services/note"
+ schemaLocation="http://collectionspace.org/services/note http://services.collectionspace.org/note/notes_common.xsd">
+ </service:xmlContent>
+ </service:content>
+ </service:part>
+ </service:object>
+ </tenant:serviceBindings>
+ <!-- end note service meta-data -->
<!-- begin role service meta-data -->
<tenant:serviceBindings name="authorization/roles" version="0.1">
<service:documentHandler xmlns:service='http://collectionspace.org/services/common/service'>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2009 University of California at Berkeley
+ Licensed under the Educational Community License (ECL), Version 2.0.
+ You may not use this file except in compliance with this License.
+
+ You may obtain a copy of the ECL 2.0 License at
+ https://source.collectionspace.org/collection-space/LICENSE.txt
+
+ Document : subitem.xsd
+ Revision : $LastChangedRevision: 1292 $
+ Created on : $LastChangedDate: 2010-01-29 14:55:28 -0800 (Fri, 29 Jan 2010) $
+ Author : $LastChangedBy: $
+ Description: Subitem has the basic information that all sub-resource items
+ have, including links to the parent, order, and primary markers.
+-->
+<xs:schema
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://collectionspace.org/services/common/subitem"
+ targetNamespace="http://collectionspace.org/services/common/subitem"
+ version="0.1"
+ >
+
+ <xs:element name="subitem" >
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="owner" type="xs:string" />
+ <xs:element name="isPrimary" type="xs:boolean" />
+ <xs:element name="order" type="xs:unsignedInt" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>org.collectionspace.services.note</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon Dec 28 10:23:41 PST 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>org.collectionspace.services.note.3rdparty</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon Dec 28 10:23:45 PST 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+\r
+<project name="note.3rdparty" default="package" basedir=".">\r
+ <description>\r
+ note service 3rdparty\r
+ </description>\r
+ <!-- set global properties for this build -->\r
+ <property name="services.trunk" value="../../.."/>\r
+ <property file="${services.trunk}/build.properties" />\r
+ <property name="mvn.opts" value="" />\r
+ <property name="src" location="src"/>\r
+\r
+ <condition property="osfamily-unix">\r
+ <os family="unix" />\r
+ </condition>\r
+ <condition property="osfamily-windows">\r
+ <os family="windows" />\r
+ </condition>\r
+\r
+ <target name="init" >\r
+ <!-- Create the time stamp -->\r
+ <tstamp/>\r
+ </target>\r
+\r
+ <target name="package" depends="package-unix,package-windows"\r
+ description="Package CollectionSpace Services" />\r
+ <target name="package-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="package-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="install" depends="install-unix,install-windows"\r
+ description="Install" />\r
+ <target name="install-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="install-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ \r
+ <target name="clean" depends="clean-unix,clean-windows"\r
+ description="Delete target directories" >\r
+ <delete dir="${build}"/>\r
+ </target>\r
+ <target name="clean-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="clean-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="test" depends="test-unix,test-windows" description="Run tests" />\r
+ <target name="test-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="test-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="deploy" depends="install"\r
+ description="deploy note in ${jboss.server.nuxeo}">\r
+ <ant antfile="nuxeo-platform-cs-note/build.xml" target="deploy" inheritall="false"/>\r
+ </target>\r
+\r
+ <target name="undeploy"\r
+ description="undeploy note from ${jboss.server.nuxeo}">\r
+ <ant antfile="nuxeo-platform-cs-note/build.xml" target="undeploy" inheritall="false"/>\r
+ </target>\r
+\r
+ <target name="dist"\r
+ description="generate distribution for note" depends="package">\r
+ <ant antfile="nuxeo-platform-cs-note/build.xml" target="dist" inheritall="false"/>\r
+ </target>\r
+\r
+\r
+</project>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<projectDescription>\r
+ <name>org.collectionspace.services.note.3rdparty.nuxeo</name>\r
+ <comment>Note Nuxeo Document Type</comment>\r
+ <projects/>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon May 24 11:37:38 PDT 2010\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+\r
+<project name="nuxeo-platform-cs-note" default="package" basedir=".">\r
+ <description>\r
+ note nuxeo document type\r
+ </description>\r
+ <!-- set global properties for this build -->\r
+ <property name="services.trunk" value="../../../.."/>\r
+ <!-- environment should be declared before reading build.properties -->\r
+ <property environment="env" />\r
+ <property file="${services.trunk}/build.properties" />\r
+ <property name="mvn.opts" value="" />\r
+ <property name="src" location="src"/>\r
+ <property name="build" location="build"/>\r
+ <property name="dist" location="dist"/>\r
+ <property name="nuxeo.note.jar"\r
+ value="org.collectionspace.services.note.3rdparty.nuxeo-${cspace.release}.jar"/>\r
+ <property name="nuxeo.note.jars.all"\r
+ value="org.collectionspace.services.note.3rdparty.nuxeo-*.jar"/>\r
+\r
+ <condition property="osfamily-unix">\r
+ <os family="unix" />\r
+ </condition>\r
+ <condition property="osfamily-windows">\r
+ <os family="windows" />\r
+ </condition>\r
+\r
+ <target name="init" >\r
+ <!-- Create the time stamp -->\r
+ <tstamp/>\r
+ </target>\r
+\r
+ <target name="package" depends="package-unix,package-windows"\r
+ description="Package CollectionSpace Services" />\r
+ <target name="package-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="package-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="install" depends="install-unix,install-windows"\r
+ description="Install" />\r
+ <target name="install-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="install-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="clean" depends="clean-unix,clean-windows"\r
+ description="Delete target directories" >\r
+ <delete dir="${build}"/>\r
+ </target>\r
+ <target name="clean-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="clean-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="test" depends="test-unix,test-windows" description="Run tests" />\r
+ <target name="test-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="test-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="deploy" depends="install"\r
+ description="deploy note doctype in ${jboss.server.nuxeo}">\r
+ <copy file="${basedir}/target/${nuxeo.note.jar}"\r
+ todir="${jboss.deploy.nuxeo.plugins}"/>\r
+ </target>\r
+\r
+ <target name="undeploy"\r
+ description="undeploy note doctype from ${jboss.server.nuxeo}">\r
+ <delete>\r
+ <fileset dir="${jboss.deploy.nuxeo.plugins}">\r
+ <include name="${nuxeo.note.jars.all}"/>\r
+ </fileset>\r
+ <!-- Legacy deployment location through release 0.6 -->\r
+ <fileset dir="${jboss.deploy.nuxeo.system}">\r
+ <include name="${nuxeo.note.jars.all}"/>\r
+ </fileset>\r
+ </delete>\r
+ </target>\r
+\r
+ <target name="dist"\r
+ description="generate distribution for note doctype" depends="package">\r
+ <copy todir="${services.trunk}/${dist.deploy.nuxeo.plugins}">\r
+ <fileset file="${basedir}/target/${nuxeo.note.jar}"/>\r
+ </copy>\r
+ </target>\r
+\r
+</project>\r
+\r
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+ <parent>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.3rdparty</artifactId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+ \r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.3rdparty.nuxeo</artifactId>\r
+ <name>services.note.3rdparty.nuxeo</name>\r
+ <packaging>jar</packaging>\r
+ <description>\r
+ note Nuxeo Document Type\r
+ </description>\r
+ \r
+ <build>\r
+ <plugins>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-jar-plugin</artifactId>\r
+ <configuration>\r
+ <archive>\r
+ <manifestFile> src/main/resources/META-INF/MANIFEST.MF </manifestFile>\r
+ <manifestEntries>\r
+ <Bundle-Version>${eclipseVersion}</Bundle-Version>\r
+ <Bundle-ManifestVersion>2</Bundle-ManifestVersion>\r
+ </manifestEntries>\r
+ </archive>\r
+ </configuration>\r
+ </plugin>\r
+ </plugins>\r
+ </build>\r
+ \r
+</project>\r
--- /dev/null
+Manifest-Version: 1.0 \r
+Bundle-ManifestVersion: 1 \r
+Bundle-Name: NuxeoCS\r
+Bundle-SymbolicName: org.collectionspace.note;singleton:=true \r
+Bundle-Version: 1.0.0\r
+Bundle-Localization: plugin\r
+Bundle-Vendor: Nuxeo \r
+Require-Bundle: org.nuxeo.runtime, \r
+ org.nuxeo.ecm.core.api, \r
+ org.nuxeo.ecm.core,\r
+ org.nuxeo.ecm.core.api,\r
+ org.nuxeo.ecm.platform.types.api,\r
+ org.nuxeo.ecm.platform.versioning.api,\r
+ org.nuxeo.ecm.platform.ui,\r
+ org.nuxeo.ecm.platform.forms.layout.client,\r
+ org.nuxeo.ecm.platform.publishing.api,\r
+ org.nuxeo.ecm.platform.ws \r
+Provide-Package: org.collectionspace.note\r
+Nuxeo-Component: OSGI-INF/core-types-contrib.xml,\r
+ OSGI-INF/ecm-types-contrib.xml,\r
+ OSGI-INF/layouts-contrib.xml\r
+\r
--- /dev/null
+<?xml version="1.0"?>\r
+<component name="org.collectionspace.note.coreTypes">\r
+ <extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">\r
+ <schema name="notes_common" prefix="notes_common" src="schemas/notes_common.xsd"/>\r
+ </extension>\r
+ <extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">\r
+ <doctype name="CSNote" extends="Document">\r
+ <schema name="common"/>\r
+ <schema name="dublincore"/>\r
+ <schema name="collectionspace_core"/>\r
+ <schema name="subitem"/>\r
+ <schema name="notes_common"/>\r
+ </doctype>\r
+ </extension>\r
+</component>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<fragment>\r
+\r
+ <extension target="application#MODULE">\r
+ <module>\r
+ <ejb>${bundle.fileName}</ejb>\r
+ </module>\r
+\r
+ <module>\r
+ <web>\r
+ <web-uri>nuxeo.war</web-uri>\r
+ <context-root>/nuxeo</context-root>\r
+ </web>\r
+ </module>\r
+ </extension>\r
+\r
+ <!-- uncomment that to enable tomcat based auth\r
+ <extension target="web#LOGIN-CONFIG">\r
+ <login-config>\r
+ <auth-method>FORM</auth-method>\r
+ <realm-name>nuxeo.ecm</realm-name>\r
+ <form-login-config>\r
+ <form-login-page>/login.jsp</form-login-page>\r
+ <form-error-page>/login.jsp?loginFailed=true</form-error-page>\r
+ </form-login-config>\r
+ </login-config>\r
+ </extension>\r
+ -->\r
+\r
+ <extension target="web#FILTER-MAPPING">\r
+\r
+ <!-- Seam Context Filter is declared in org.nuxeo.ecm.platform.ui.web\r
+ deployment fragment -->\r
+\r
+ <filter-mapping>\r
+ <filter-name>Seam Context Filter</filter-name>\r
+ <url-pattern>/ws/FileManageWS</url-pattern>\r
+ </filter-mapping>\r
+\r
+ <filter-mapping>\r
+ <filter-name>Seam Context Filter</filter-name>\r
+ <url-pattern>/DocumentManagerWS</url-pattern>\r
+ </filter-mapping>\r
+ </extension>\r
+\r
+ <extension target="web#SERVLET">\r
+ </extension>\r
+\r
+ <extension target="web#SERVLET-MAPPING">\r
+ </extension>\r
+\r
+ <extension target="pages#PAGES">\r
+ <!-- This calls a method which load the Workspace logo -->\r
+ <page view-id="/showLogo.xhtml" action="#{logoHelper.getLogo}"/>\r
+\r
+ <!-- Bind URL to the Document URL resolver-->\r
+ <page view-id="/getDocument.xhtml"\r
+ action="#{navigationContext.navigateToURL}">\r
+ </page>\r
+\r
+ <page view-id="/nxliveedit.xhtml" action="#{liveEditHelper.getBootstrap()}"/>\r
+\r
+ <!-- Bind URL to the Parallele conversation Document URL resolver-->\r
+ <page view-id="/parallele.xhtml"\r
+ action="#{paralleleNavigationHelper.navigateToURL}">\r
+ </page>\r
+\r
+ <!-- Post login and 'home' view handler -->\r
+ <page view-id="/nxstartup.xhtml"\r
+ action="#{startupHelper.initDomainAndFindStartupPage('Default domain', 'view')}"/>\r
+\r
+ <!-- To redirect to the user dashboard instead, use instead:\r
+\r
+ <page view-id="/nxstartup.xhtml"\r
+ action="#{startupHelper.initDomainAndFindStartupPage('Default domain', 'user_dashboard')}" />\r
+ -->\r
+\r
+ <!-- config for workspace management\r
+ = give a description for each viewId\r
+ -->\r
+\r
+ <page view-id="/view_domains.xhtml">\r
+ #{currentServerLocation.name}/#{currentTabAction.label}\r
+ </page>\r
+\r
+ <page view-id="/select_document_type.faces.xhtml">\r
+ Create new document in #{currentDocument.name}\r
+ </page>\r
+\r
+ <page view-id="/create_document.faces.xhtml">\r
+ Create new document in #{currentDocument.name}\r
+ </page>\r
+\r
+ <page view-id="/user_dashboard.xhtml">\r
+ breadcrumb=command.user_dashboard\r
+ </page>\r
+\r
+ <page view-id="/view_users.xhtml">\r
+ breadcrumb=command.manageMembers\r
+ </page>\r
+\r
+ <page view-id="/view_many_users.xhtml">\r
+ breadcrumb=command.manageMembers\r
+ </page>\r
+\r
+ <page view-id="/view_vocabularies.xhtml">\r
+ breadcrumb=title.vocabularies\r
+ </page>\r
+\r
+ <page view-id="/search/search_form.xhtml">\r
+ breadcrumb=command.advancedSearch\r
+ </page>\r
+ </extension>\r
+\r
+ <extension target="faces-config#APPLICATION">\r
+ <locale-config>\r
+ <default-locale>en</default-locale>\r
+ <supported-locale>en_GB</supported-locale>\r
+ <supported-locale>en_US</supported-locale>\r
+ <supported-locale>fr</supported-locale>\r
+ <supported-locale>de</supported-locale>\r
+ <supported-locale>es</supported-locale>\r
+ <supported-locale>it</supported-locale>\r
+ <supported-locale>ar</supported-locale>\r
+ <supported-locale>ru</supported-locale>\r
+ <supported-locale>ja</supported-locale>\r
+ <supported-locale>vn</supported-locale>\r
+ </locale-config>\r
+\r
+ <message-bundle>messages</message-bundle>\r
+ </extension>\r
+\r
+ <extension target="components#PAGEFLOW">\r
+ <value>config/addWorkspace.jpdl.xml</value>\r
+ </extension>\r
+\r
+ <extension target="faces-config#NAVIGATION">\r
+ <!-- generic pages -->\r
+ <navigation-case>\r
+ <from-outcome>generic_error_page</from-outcome>\r
+ <to-view-id>/generic_error_page.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>generic_message_page</from-outcome>\r
+ <to-view-id>/generic_message_page.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>home</from-outcome>\r
+ <to-view-id>/nxstartup.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>user_login</from-outcome>\r
+ <to-view-id>/login.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>user_logout</from-outcome>\r
+ <to-view-id>/logout.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_servers</from-outcome>\r
+ <to-view-id>/view_servers.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- pages for document actions -->\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_domains</from-outcome>\r
+ <to-view-id>/view_domains.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>select_document_type</from-outcome>\r
+ <to-view-id>/select_document_type.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>create_document</from-outcome>\r
+ <to-view-id>/create_document.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>edit_document</from-outcome>\r
+ <to-view-id>/edit_document.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_documents</from-outcome>\r
+ <to-view-id>/view_documents.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>create_file</from-outcome>\r
+ <to-view-id>/create_file.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>create_workspace_wizard</from-outcome>\r
+ <to-view-id>/createWorkspaceWizard.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>send_email</from-outcome>\r
+ <to-view-id>/document_email.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- AT: BBB, use view_documents instead -->\r
+ <navigation-case>\r
+ <from-outcome>view_workspaces</from-outcome>\r
+ <to-view-id>/view_workspaces.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- AT: BBB, use create_document instead -->\r
+ <navigation-case>\r
+ <from-outcome>create_domain</from-outcome>\r
+ <to-view-id>/create_domain.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- AT: BBB, use edit_document instead -->\r
+ <navigation-case>\r
+ <from-outcome>edit_domain</from-outcome>\r
+ <to-view-id>/edit_domain.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- AT: BBB, use create_document instead -->\r
+ <navigation-case>\r
+ <from-outcome>create_workspace</from-outcome>\r
+ <to-view-id>/create_workspace.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- AT: BBB, use edit_document instead -->\r
+ <navigation-case>\r
+ <from-outcome>edit_workspace</from-outcome>\r
+ <to-view-id>/edit_workspace.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- users ang groups -->\r
+\r
+ <navigation-case>\r
+ <from-outcome>members_management</from-outcome>\r
+ <to-view-id>/members_management.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_users</from-outcome>\r
+ <to-view-id>/view_users.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_many_users</from-outcome>\r
+ <to-view-id>/view_many_users.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>edit_user</from-outcome>\r
+ <to-view-id>/edit_user.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>edit_user_password</from-outcome>\r
+ <to-view-id>/edit_user_password.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_user</from-outcome>\r
+ <to-view-id>/view_user.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>create_user</from-outcome>\r
+ <to-view-id>/create_user.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_groups</from-outcome>\r
+ <to-view-id>/view_groups.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_group</from-outcome>\r
+ <to-view-id>/view_group.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>edit_group</from-outcome>\r
+ <to-view-id>/edit_group.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>create_group</from-outcome>\r
+ <to-view-id>/create_group.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_vocabularies</from-outcome>\r
+ <to-view-id>/view_vocabularies.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>view_vocabulary</from-outcome>\r
+ <to-view-id>/view_vocabulary.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- search -->\r
+\r
+ <navigation-case>\r
+ <from-outcome>search_form</from-outcome>\r
+ <to-view-id>/search/search_form.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>search_results_nxql</from-outcome>\r
+ <to-view-id>/search/search_results_nxql.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>search_results_advanced</from-outcome>\r
+ <to-view-id>\r
+ /search/search_results_advanced.xhtml\r
+ </to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>search_results_simple</from-outcome>\r
+ <to-view-id>/search/search_results_simple.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <!-- miscellaneaous -->\r
+\r
+ <navigation-case>\r
+ <from-outcome>clipboard</from-outcome>\r
+ <to-view-id>/incl/clipboard.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>user_dashboard</from-outcome>\r
+ <to-view-id>/user_dashboard.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>select_workspace_template</from-outcome>\r
+ <to-view-id>/select_workspace_template.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>pdf_generation_error</from-outcome>\r
+ <to-view-id>/pdf_generation_error.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>mass_edit</from-outcome>\r
+ <to-view-id>/massedit_documents.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+\r
+ <navigation-case>\r
+ <from-outcome>mass_edit_confirm</from-outcome>\r
+ <to-view-id>/massedit_documents_preview.xhtml</to-view-id>\r
+ <redirect/>\r
+ </navigation-case>\r
+ </extension>\r
+\r
+</fragment>\r
+\r
--- /dev/null
+<?xml version="1.0"?>\r
+<component name="org.collectionspace.note.ecm.types">\r
+ <extension target="org.nuxeo.ecm.platform.types.TypeService" point="types">\r
+ <type id="CSNote" coretype="CSNote">\r
+ <label>org.collectionspace.note</label>\r
+ <!--icon>/icons/file.gif</icon-->\r
+ <default-view>view_documents</default-view>\r
+\r
+ <layouts mode="any">\r
+ <layout>heading</layout>\r
+ <layout>collectionspace_core</layout>\r
+ <layout>subitem</layout>\r
+ <layout>cs_note</layout>\r
+ </layouts> \r
+ </type>\r
+\r
+ <type id="Folder" coretype="Folder">\r
+ <subtypes>\r
+ <type>Note</type>\r
+ </subtypes>\r
+ </type>\r
+ \r
+ <type id="Workspace" coretype="Workspace">\r
+ <subtypes>\r
+ <type>Note</type>\r
+ </subtypes>\r
+ </type>\r
+\r
+ </extension>\r
+</component>\r
--- /dev/null
+<?xml version="1.0"?>\r
+\r
+<component name="org.collectionspace.note.layouts.webapp">\r
+\r
+ <extension target="org.nuxeo.ecm.platform.forms.layout.WebLayoutManager"\r
+ point="layouts">\r
+\r
+ <layout name="cs_note">\r
+\r
+ <templates>\r
+ <template mode="any">/layouts/layout_default_template.xhtml</template>\r
+ </templates>\r
+ <rows>\r
+ <row><widget>content</widget></row>\r
+ <row><widget>author</widget></row>\r
+ <row><widget>date</widget></row>\r
+ </rows>\r
+\r
+ <widget name="content" type="text">\r
+ <labels>\r
+ <label mode="any">content</label>\r
+ </labels>\r
+ <translated>true</translated>\r
+ <fields>\r
+ <field schema="notes_common">content</field>\r
+ </fields>\r
+ <properties widgetMode="edit">\r
+ <property name="styleClass">dataInputText</property>\r
+ </properties>\r
+ </widget>\r
+\r
+ <widget name="author" type="text">\r
+ <labels>\r
+ <label mode="any">author</label>\r
+ </labels>\r
+ <translated>true</translated>\r
+ <fields>\r
+ <field schema="notes_common">author</field>\r
+ </fields>\r
+ <properties widgetMode="edit">\r
+ <property name="styleClass">dataInputText</property>\r
+ </properties>\r
+ </widget>\r
+\r
+ <widget name="date" type="text">\r
+ <labels>\r
+ <label mode="any">date</label>\r
+ </labels>\r
+ <translated>true</translated>\r
+ <fields>\r
+ <field schema="notes_common">date</field>\r
+ </fields>\r
+ <properties widgetMode="edit">\r
+ <property name="styleClass">dataInputText</property>\r
+ </properties>\r
+ </widget>\r
+\r
+ \r
+ </layout>\r
+ </extension>\r
+</component>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+\r
+<!--\r
+ Contact schema (XSD)\r
+ \r
+ Entity : Note\r
+ Part : Common\r
+ Used for: Nuxeo EP core document type\r
+\r
+ $LastChangedRevision: 1409 $\r
+ $LastChangedDate: 2010-02-22 21:34:53 -0800 (Mon, 22 Feb 2010) $\r
+-->\r
+\r
+<xs:schema \r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:ns="http://collectionspace.org/note/"\r
+ xmlns="http://collectionspace.org/note/"\r
+ targetNamespace="http://collectionspace.org/note/"\r
+ version="0.1">\r
+\r
+ <!-- Subitem info is in a general schema -->\r
+ <xs:element name="content" type="xs:string" />\r
+ <xs:element name="author" type="xs:string" />\r
+ <xs:element name="date" type="xs:string" />\r
+ \r
+</xs:schema>\r
--- /dev/null
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+ <parent>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note</artifactId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+\r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.3rdparty</artifactId>\r
+ <name>services.note.3rdparty</name>\r
+ <packaging>pom</packaging>\r
+ <description>\r
+ 3rd party build for note service\r
+ </description>\r
+\r
+ <modules>\r
+ <module>nuxeo-platform-cs-note</module>\r
+ </modules>\r
+</project>\r
--- /dev/null
+\r
+<project name="note" default="package" basedir=".">\r
+ <description>\r
+ note service\r
+ </description>\r
+ <!-- set global properties for this build -->\r
+ <property name="services.trunk" value="../.."/>\r
+ <property file="${services.trunk}/build.properties" />\r
+ <property name="mvn.opts" value="" />\r
+ <property name="src" location="src"/>\r
+\r
+ <condition property="osfamily-unix">\r
+ <os family="unix" />\r
+ </condition>\r
+ <condition property="osfamily-windows">\r
+ <os family="windows" />\r
+ </condition>\r
+\r
+ <target name="package" depends="package-unix,package-windows"\r
+ description="Package CollectionSpace Services" />\r
+ \r
+ <target name="package-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ \r
+ <target name="package-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="package" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+\r
+ <target name="install" depends="install-unix,install-windows"\r
+ description="Install" />\r
+ <target name="install-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="install-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="install" />\r
+ <arg value="-Dmaven.test.skip=true" />\r
+ <arg value="-f" />\r
+ <arg value="${basedir}/pom.xml" />\r
+ <arg value="-N" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="clean" depends="clean-unix,clean-windows"\r
+ description="Delete target directories" >\r
+ <delete dir="${build}"/>\r
+ </target>\r
+ <target name="clean-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="clean-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="clean" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="test" depends="test-unix,test-windows" description="Run tests" />\r
+ <target name="test-unix" if="osfamily-unix">\r
+ <exec executable="mvn" failonerror="true">\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+ <target name="test-windows" if="osfamily-windows">\r
+ <exec executable="cmd" failonerror="true">\r
+ <arg value="/c" />\r
+ <arg value="mvn.bat" />\r
+ <arg value="test" />\r
+ <arg value="${mvn.opts}" />\r
+ </exec>\r
+ </target>\r
+\r
+ <target name="deploy" depends="install"\r
+ description="deploy note service">\r
+ <ant antfile="3rdparty/build.xml" target="deploy" inheritall="false"/>\r
+ </target>\r
+\r
+ <target name="undeploy"\r
+ description="undeploy note service">\r
+ <ant antfile="3rdparty/build.xml" target="undeploy" inheritall="false"/>\r
+ </target>\r
+\r
+ <target name="dist" depends="package"\r
+ description="distribute note service">\r
+ <ant antfile="3rdparty/build.xml" target="dist" inheritall="false"/>\r
+ </target>\r
+\r
+</project>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>\r
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<projectDescription>\r
+ <name>org.collectionspace.services.note.client</name>\r
+ <comment/>\r
+ <projects>\r
+ <project>org.collectionspace.services.common</project>\r
+ <project>org.collectionspace.services.client</project>\r
+ <project>org.collectionspace.services.note.jaxb</project>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon May 24 11:37:38 PDT 2010\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+ <parent>\r
+ <artifactId>org.collectionspace.services.note</artifactId>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+\r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.client</artifactId>\r
+ <name>services.note.client</name>\r
+ \r
+ <dependencies>\r
+ <!-- keep slf4j dependencies on the top -->\r
+ <dependency>\r
+ <groupId>org.slf4j</groupId>\r
+ <artifactId>slf4j-api</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.slf4j</groupId>\r
+ <artifactId>slf4j-log4j12</artifactId>\r
+ </dependency>\r
+ <!-- CollectionSpace dependencies -->\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.jaxb</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.client</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency>\r
+ <!-- External dependencies -->\r
+ <dependency>\r
+ <groupId>org.testng</groupId>\r
+ <artifactId>testng</artifactId>\r
+ <version>5.6</version>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-jaxrs</artifactId>\r
+ <!-- filter out unwanted jars -->\r
+ <exclusions>\r
+ <exclusion>\r
+ <groupId>tjws</groupId>\r
+ <artifactId>webserver</artifactId>\r
+ </exclusion>\r
+ </exclusions>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-jaxb-provider</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-multipart-provider</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>commons-httpclient</groupId>\r
+ <artifactId>commons-httpclient</artifactId>\r
+ <version>3.1</version>\r
+ </dependency>\r
+ </dependencies>\r
+ \r
+ <build>\r
+ <finalName>collectionspace-services-note-client</finalName>\r
+ </build>\r
+</project>\r
+\r
--- /dev/null
+/** \r
+ * This document is a part of the source code and related artifacts\r
+ * for CollectionSpace, an open source collections management system\r
+ * for museums and related institutions:\r
+ *\r
+ * http://www.collectionspace.org\r
+ * http://wiki.collectionspace.org\r
+ *\r
+ * Copyright (c) 2009 Regents of the University of California\r
+ *\r
+ * Licensed under the Educational Community License (ECL), Version 2.0.\r
+ * You may not use this file except in compliance with this License.\r
+ *\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+ */\r
+package org.collectionspace.services.client;\r
+\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.collectionspace.services.note.NotesCommonList;\r
+\r
+import org.jboss.resteasy.client.ProxyFactory;\r
+import org.jboss.resteasy.plugins.providers.RegisterBuiltin;\r
+import org.jboss.resteasy.client.ClientResponse;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartInput;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;\r
+import org.jboss.resteasy.spi.ResteasyProviderFactory;\r
+\r
+/**\r
+ * NoteClient.java\r
+ *\r
+ * $LastChangedRevision: $\r
+ * $LastChangedDate: $\r
+ */\r
+ \r
+public class NoteClient extends AbstractServiceClientImpl {\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.client.BaseServiceClient#getServicePathComponent()\r
+ */\r
+ public String getServicePathComponent() {\r
+ return "notes";\r
+ }\r
+\r
+ /**\r
+ *\r
+ */\r
+// private static final NoteClient instance = new NoteClient();\r
+ \r
+ /**\r
+ *\r
+ */\r
+ private NoteProxy noteProxy;\r
+\r
+ /**\r
+ *\r
+ * Default constructor for NoteClient class.\r
+ *\r
+ */\r
+ public NoteClient() {\r
+ ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance();\r
+ RegisterBuiltin.register(factory);\r
+ setProxy();\r
+ }\r
+\r
+ @Override\r
+ public CollectionSpaceProxy getProxy() {\r
+ return this.noteProxy;\r
+ }\r
+ \r
+ /**\r
+ * allow to reset proxy as per security needs\r
+ */\r
+ public void setProxy() {\r
+ if (useAuth()) {\r
+ noteProxy = ProxyFactory.create(NoteProxy.class,\r
+ getBaseURL(), getHttpClient());\r
+ } else {\r
+ noteProxy = ProxyFactory.create(NoteProxy.class,\r
+ getBaseURL());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * FIXME Comment this\r
+ *\r
+ * @return\r
+ */\r
+// public static NoteClient getInstance() {\r
+// return instance;\r
+// }\r
+\r
+ /**\r
+ * @return\r
+ * @see org.collectionspace.services.client.Note#getNote()\r
+ */\r
+ public ClientResponse<NotesCommonList> readList() {\r
+ return noteProxy.readList();\r
+ }\r
+\r
+ /**\r
+ * @param csid\r
+ * @return\r
+ * @see org.collectionspace.services.client.Note#getNote(java.lang.String)\r
+ */\r
+\r
+ public ClientResponse<MultipartInput> read(String csid) {\r
+ return noteProxy.read(csid);\r
+ }\r
+\r
+ /**\r
+ * @param note\r
+ * @return\r
+ * @see org.collectionspace.services.client.Note#createNote(org.collectionspace.services.Note)\r
+ */\r
+ public ClientResponse<Response> create(MultipartOutput multipart) {\r
+ return noteProxy.create(multipart);\r
+ }\r
+\r
+ /**\r
+ * @param csid\r
+ * @param note\r
+ * @return\r
+ * @see org.collectionspace.services.client.Note#updateNote(java.lang.Long, org.collectionspace.services.Note)\r
+ */\r
+ public ClientResponse<MultipartInput> update(String csid, MultipartOutput multipart) {\r
+ return noteProxy.update(csid, multipart);\r
+\r
+ }\r
+\r
+ /**\r
+ * @param csid\r
+ * @return\r
+ * @see org.collectionspace.services.client.Note#deleteNote(java.lang.Long)\r
+ */\r
+ public ClientResponse<Response> delete(String csid) {\r
+ return noteProxy.delete(csid);\r
+ }\r
+}\r
--- /dev/null
+package org.collectionspace.services.client;\r
+\r
+import javax.ws.rs.core.MediaType;\r
+\r
+import org.collectionspace.services.client.NoteClient;\r
+import org.collectionspace.services.note.NotesCommon;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;\r
+import org.jboss.resteasy.plugins.providers.multipart.OutputPart;\r
+\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public class NoteClientUtils {\r
+\r
+ private static final Logger logger =\r
+ LoggerFactory.getLogger(NoteClientUtils.class);\r
+\r
+ public static MultipartOutput createNoteInstance(\r
+ String owner, String identifier, String headerLabel) {\r
+ return createNoteInstance(\r
+ owner,\r
+ false, 0,\r
+ "content-" + identifier,\r
+ "author-" + identifier,\r
+ "date-" + identifier,\r
+ headerLabel);\r
+ }\r
+\r
+ public static MultipartOutput createNoteInstance(\r
+ String owner, boolean isPrimary, int order,\r
+ String content, String author, String date, String headerLabel) {\r
+ NotesCommon note = new NotesCommon();\r
+ note.setOwner(owner);\r
+ note.setIsPrimary(isPrimary);\r
+ note.setOrder(order);\r
+ note.setContent(content);\r
+ note.setAuthor(author);\r
+ note.setDate(date);\r
+ MultipartOutput multipart = new MultipartOutput();\r
+ OutputPart commonPart =\r
+ multipart.addPart(note, MediaType.APPLICATION_XML_TYPE);\r
+ NoteClient client = new NoteClient();\r
+ commonPart.getHeaders().add("label", headerLabel);\r
+\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug("to be created, note common");\r
+ // logger.debug(objectAsXmlString(note, NotesCommon.class));\r
+ }\r
+\r
+ return multipart;\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package org.collectionspace.services.client;\r
+\r
+import javax.ws.rs.Consumes;\r
+import javax.ws.rs.DELETE;\r
+import javax.ws.rs.GET;\r
+import javax.ws.rs.POST;\r
+import javax.ws.rs.PUT;\r
+import javax.ws.rs.Path;\r
+import javax.ws.rs.PathParam;\r
+import javax.ws.rs.Produces;\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.collectionspace.services.note.NotesCommonList;\r
+import org.jboss.resteasy.client.ClientResponse;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartInput;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;\r
+\r
+/**\r
+ * @version $Revision:$\r
+ */\r
+@Path("/notes/")\r
+@Produces({"multipart/mixed"})\r
+@Consumes({"multipart/mixed"})\r
+public interface NoteProxy extends CollectionSpaceProxy {\r
+\r
+ @GET\r
+ @Produces({"application/xml"})\r
+ ClientResponse<NotesCommonList> readList();\r
+\r
+ //(C)reate\r
+ @POST\r
+ ClientResponse<Response> create(MultipartOutput multipart);\r
+\r
+ //(R)ead\r
+ @GET\r
+ @Path("/{csid}")\r
+ ClientResponse<MultipartInput> read(@PathParam("csid") String csid);\r
+\r
+ //(U)pdate\r
+ @PUT\r
+ @Path("/{csid}")\r
+ ClientResponse<MultipartInput> update(@PathParam("csid") String csid, MultipartOutput multipart);\r
+\r
+ //(D)elete\r
+ @DELETE\r
+ @Path("/{csid}")\r
+ ClientResponse<Response> delete(@PathParam("csid") String csid);\r
+}\r
--- /dev/null
+/**\r
+ * This document is a part of the source code and related artifacts\r
+ * for CollectionSpace, an open source collections management system\r
+ * for museums and related institutions:\r
+ *\r
+ * http://www.collectionspace.org\r
+ * http://wiki.collectionspace.org\r
+ *\r
+ * Copyright © 2009 Regents of the University of California\r
+ *\r
+ * Licensed under the Educational Community License (ECL), Version 2.0.\r
+ * You may not use this file except in compliance with this License.\r
+ *\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.collectionspace.services.client.test;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import javax.ws.rs.core.MediaType;\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.collectionspace.services.client.CollectionSpaceClient;\r
+import org.collectionspace.services.client.NoteClient;\r
+import org.collectionspace.services.client.NoteClientUtils;\r
+import org.collectionspace.services.note.NotesCommon;\r
+import org.collectionspace.services.note.NotesCommonList;\r
+import org.collectionspace.services.jaxb.AbstractCommonList;\r
+\r
+import org.jboss.resteasy.client.ClientResponse;\r
+\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartInput;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;\r
+import org.jboss.resteasy.plugins.providers.multipart.OutputPart;\r
+import org.testng.Assert;\r
+import org.testng.annotations.AfterClass;\r
+import org.testng.annotations.Test;\r
+\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * NoteServiceTest, carries out tests against a\r
+ * deployed and running Note Service.\r
+ *\r
+ * $LastChangedRevision: 917 $\r
+ * $LastChangedDate: 2009-11-06 12:20:28 -0800 (Fri, 06 Nov 2009) $\r
+ */\r
+public class NoteServiceTest extends AbstractServiceTestImpl {\r
+\r
+ private final Logger logger =\r
+ LoggerFactory.getLogger(NoteServiceTest.class);\r
+\r
+ // Instance variables specific to this test.\r
+ final String SERVICE_PATH_COMPONENT = "notes";\r
+ private String knownResourceId = null;\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.client.test.BaseServiceTest#getClientInstance()\r
+ */\r
+ @Override\r
+ protected CollectionSpaceClient getClientInstance() {\r
+ return new NoteClient();\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.client.test.BaseServiceTest#getAbstractCommonList(org.jboss.resteasy.client.ClientResponse)\r
+ */\r
+ @Override\r
+ protected AbstractCommonList getAbstractCommonList(\r
+ ClientResponse<AbstractCommonList> response) {\r
+ return response.getEntity(NotesCommonList.class);\r
+ }\r
+\r
+ // ---------------------------------------------------------------\r
+ // CRUD tests : CREATE tests\r
+ // ---------------------------------------------------------------\r
+ // Success outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class)\r
+ public void create(String testName) throws Exception {\r
+\r
+ // Perform setup, such as initializing the type of service request\r
+ // (e.g. CREATE, DELETE), its valid and expected status codes, and\r
+ // its associated HTTP method name (e.g. POST, DELETE).\r
+ setupCreate(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ String identifier = createIdentifier();\r
+ MultipartOutput multipart =\r
+ NoteClientUtils.createNoteInstance("owner"+identifier, identifier, \r
+ client.getCommonPartName());\r
+ ClientResponse<Response> res = client.create(multipart);\r
+\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ //\r
+ // Specifically:\r
+ // Does it fall within the set of valid status codes?\r
+ // Does it exactly match the expected status code?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+\r
+ // Store the ID returned from the first resource created\r
+ // for additional tests below.\r
+ if (knownResourceId == null){\r
+ knownResourceId = extractId(res);\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug(testName + ": knownResourceId=" + knownResourceId);\r
+ }\r
+ }\r
+\r
+ // Store the IDs from every resource created by tests,\r
+ // so they can be deleted after tests have been run.\r
+ allResourceIdsCreated.add(extractId(res));\r
+ }\r
+\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"create"})\r
+ public void createList(String testName) throws Exception {\r
+ for(int i = 0; i < 3; i++){\r
+ create(testName);\r
+ }\r
+ }\r
+\r
+ // Failure outcomes\r
+ // Placeholders until the three tests below can be uncommented.\r
+ // See Issue CSPACE-401.\r
+ @Override\r
+ public void createWithEmptyEntityBody(String testName) throws Exception {\r
+ //Should this really be empty?\r
+ }\r
+\r
+ @Override\r
+ public void createWithMalformedXml(String testName) throws Exception {\r
+ //Should this really be empty??\r
+ }\r
+\r
+ @Override\r
+ public void createWithWrongXmlSchema(String testName) throws Exception {\r
+ //Should this really be empty??\r
+ }\r
+\r
+\r
+ // ---------------------------------------------------------------\r
+ // CRUD tests : READ tests\r
+ // ---------------------------------------------------------------\r
+ // Success outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"create"})\r
+ public void read(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupRead(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<MultipartInput> res = client.read(knownResourceId);\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+\r
+ MultipartInput input = (MultipartInput) res.getEntity();\r
+ NotesCommon note = (NotesCommon) extractPart(input,\r
+ client.getCommonPartName(), NotesCommon.class);\r
+ Assert.assertNotNull(note);\r
+ }\r
+\r
+ // Failure outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"read"})\r
+ public void readNonExistent(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupReadNonExistent(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<MultipartInput> res = client.read(NON_EXISTENT_ID);\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+ }\r
+\r
+ // ---------------------------------------------------------------\r
+ // CRUD tests : READ_LIST tests\r
+ // ---------------------------------------------------------------\r
+ // Success outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"read"})\r
+ public void readList(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupReadList(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<NotesCommonList> res = client.readList();\r
+ NotesCommonList list = res.getEntity();\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+\r
+ // Optionally output additional data about list members for debugging.\r
+ boolean iterateThroughList = false;\r
+ if(iterateThroughList && logger.isDebugEnabled()){\r
+ List<NotesCommonList.NoteListItem> items =\r
+ list.getNoteListItem();\r
+ int i = 0;\r
+ for(NotesCommonList.NoteListItem item : items){\r
+ logger.debug(testName + ": list-item[" + i + "] csid=" +\r
+ item.getCsid());\r
+ logger.debug(testName + ": list-item[" + i + "] content=" +\r
+ item.getContent());\r
+ logger.debug(testName + ": list-item[" + i + "] URI=" +\r
+ item.getUri());\r
+ i++;\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ // Failure outcomes\r
+ // None at present.\r
+ // ---------------------------------------------------------------\r
+ // CRUD tests : UPDATE tests\r
+ // ---------------------------------------------------------------\r
+ // Success outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"read"})\r
+ public void update(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupUpdate(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<MultipartInput> res =\r
+ client.read(knownResourceId);\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": read status = " + res.getStatus());\r
+ }\r
+ Assert.assertEquals(res.getStatus(), EXPECTED_STATUS_CODE);\r
+\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug("got object to update with ID: " + knownResourceId);\r
+ }\r
+ MultipartInput input = (MultipartInput) res.getEntity();\r
+ NotesCommon note = (NotesCommon) extractPart(input,\r
+ client.getCommonPartName(), NotesCommon.class);\r
+ Assert.assertNotNull(note);\r
+\r
+ // Update the content of this resource.\r
+ note.setContent("updated-" + note.getContent());\r
+ note.setAuthor("updated-" + note.getAuthor());\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug("to be updated object");\r
+ logger.debug(objectAsXmlString(note, NotesCommon.class));\r
+ }\r
+ // Submit the request to the service and store the response.\r
+ MultipartOutput output = new MultipartOutput();\r
+ OutputPart commonPart = output.addPart(note, MediaType.APPLICATION_XML_TYPE);\r
+ commonPart.getHeaders().add("label", client.getCommonPartName());\r
+\r
+ res = client.update(knownResourceId, output);\r
+ int statusCode = res.getStatus();\r
+ // Check the status code of the response: does it match the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+\r
+\r
+ input = (MultipartInput) res.getEntity();\r
+ NotesCommon updatedNote =\r
+ (NotesCommon) extractPart(input,\r
+ client.getCommonPartName(), NotesCommon.class);\r
+ Assert.assertNotNull(updatedNote);\r
+\r
+ Assert.assertEquals(updatedNote.getContent(),\r
+ note.getContent(),\r
+ "Data in updated object did not match submitted data.");\r
+\r
+ }\r
+\r
+ // Failure outcomes\r
+ // Placeholders until the three tests below can be uncommented.\r
+ // See Issue CSPACE-401.\r
+ @Override\r
+ public void updateWithEmptyEntityBody(String testName) throws Exception {\r
+ //Should this really be empty??\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#updateWithMalformedXml(java.lang.String)\r
+ */\r
+ @Override\r
+ public void updateWithMalformedXml(String testName) throws Exception {\r
+ //Should this really be empty??\r
+ }\r
+\r
+ @Override\r
+ public void updateWithWrongXmlSchema(String testName) throws Exception {\r
+ //Should this really be empty??\r
+ }\r
+\r
+\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"update", "testSubmitRequest"})\r
+ public void updateNonExistent(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupUpdateNonExistent(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ // Note: The ID used in this 'create' call may be arbitrary.\r
+ // The only relevant ID may be the one used in update(), below.\r
+ NoteClient client = new NoteClient();\r
+ MultipartOutput multipart =\r
+ NoteClientUtils.createNoteInstance(NON_EXISTENT_ID, NON_EXISTENT_ID, client.getCommonPartName());\r
+ ClientResponse<MultipartInput> res =\r
+ client.update(NON_EXISTENT_ID, multipart);\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+ }\r
+\r
+ // ---------------------------------------------------------------\r
+ // CRUD tests : DELETE tests\r
+ // ---------------------------------------------------------------\r
+ // Success outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"create", "readList", "testSubmitRequest", "update"})\r
+ public void delete(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupDelete(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<Response> res = client.delete(knownResourceId);\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+ }\r
+\r
+ // Failure outcomes\r
+ @Override\r
+ @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,\r
+ dependsOnMethods = {"delete"})\r
+ public void deleteNonExistent(String testName) throws Exception {\r
+\r
+ // Perform setup.\r
+ setupDeleteNonExistent(testName);\r
+\r
+ // Submit the request to the service and store the response.\r
+ NoteClient client = new NoteClient();\r
+ ClientResponse<Response> res = client.delete(NON_EXISTENT_ID);\r
+ int statusCode = res.getStatus();\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug(testName + ": status = " + statusCode);\r
+ }\r
+ Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),\r
+ invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);\r
+ }\r
+\r
+ // ---------------------------------------------------------------\r
+ // Utility tests : tests of code used in tests above\r
+ // ---------------------------------------------------------------\r
+ /**\r
+ * Tests the code for manually submitting data that is used by several\r
+ * of the methods above.\r
+ */\r
+ @Test(dependsOnMethods = {"create", "read"})\r
+ public void testSubmitRequest() {\r
+\r
+ // Expected status code: 200 OK\r
+ final int EXPECTED_STATUS = Response.Status.OK.getStatusCode();\r
+\r
+ // Submit the request to the service and store the response.\r
+ String method = ServiceRequestType.READ.httpMethodName();\r
+ String url = getResourceURL(knownResourceId);\r
+ int statusCode = submitRequest(method, url);\r
+\r
+ // Check the status code of the response: does it match\r
+ // the expected response(s)?\r
+ if(logger.isDebugEnabled()){\r
+ logger.debug("testSubmitRequest: url=" + url +\r
+ " status=" + statusCode);\r
+ }\r
+ Assert.assertEquals(statusCode, EXPECTED_STATUS);\r
+\r
+ }\r
+\r
+ // ---------------------------------------------------------------\r
+ // Utility methods used by tests above\r
+ // ---------------------------------------------------------------\r
+ @Override\r
+ public String getServicePathComponent() {\r
+ return SERVICE_PATH_COMPONENT;\r
+ }\r
+}\r
--- /dev/null
+log4j.rootLogger=debug, stdout, R\r
+\r
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
+\r
+# Pattern to output the caller's file name and line number.\r
+log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] [%c:%L] %m%n\r
+\r
+log4j.appender.R=org.apache.log4j.RollingFileAppender\r
+log4j.appender.R.File=target/test-client.log\r
+\r
+log4j.appender.R.MaxFileSize=100KB\r
+# Keep one backup file\r
+log4j.appender.R.MaxBackupIndex=1\r
+\r
+log4j.appender.R.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.R.layout.ConversionPattern=%d %-5p [%t] [%c:%L] %m%n\r
+\r
+#packages\r
+log4j.logger.org.collectionspace=DEBUG\r
+log4j.logger.org.apache=INFO\r
+log4j.logger.httpclient=INFO\r
+log4j.logger.org.jboss.resteasy=INFO\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>\r
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<projectDescription>\r
+ <name>org.collectionspace.services.note.jaxb</name>\r
+ <comment/>\r
+ <projects/>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon Dec 28 10:23:42 PST 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+ <parent>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note</artifactId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+ \r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.jaxb</artifactId>\r
+ <name>services.note.jaxb</name>\r
+ \r
+ <dependencies>\r
+ <dependency>\r
+ <groupId>com.sun.xml.bind</groupId>\r
+ <artifactId>jaxb-impl</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jvnet.jaxb2-commons</groupId>\r
+ <artifactId>property-listener-injector</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jvnet.jaxb2_commons</groupId>\r
+ <artifactId>runtime</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.jaxb</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency> \r
+ </dependencies>\r
+ \r
+ <build>\r
+ <finalName>collectionspace-services-note-jaxb</finalName>\r
+ <defaultGoal>install</defaultGoal>\r
+ <plugins>\r
+ <plugin>\r
+ <groupId>org.jvnet.jaxb2.maven2</groupId>\r
+ <artifactId>maven-jaxb2-plugin</artifactId> \r
+ </plugin>\r
+ </plugins>\r
+ </build>\r
+</project>\r
+\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package org.collectionspace.services.note;\r
+\r
+/**\r
+ *\r
+ */\r
+public interface NoteJAXBSchema {\r
+ final static String NOTES_COMMON = "notes_common";\r
+ final static String CSID = "csid";\r
+ final static String OWNER = "owner";\r
+ final static String IS_PRIMARY ="isPrimary";\r
+ final static String ORDER = "order";\r
+ final static String CONTENT = "content";\r
+ final static String AUTHOR = "author";\r
+ final static String DATE = "date";\r
+}\r
+\r
+\r
--- /dev/null
+package org.collectionspace.services.note;\r
+\r
+public interface NoteListItemJAXBSchema {\r
+ final static String CONTENT = "content";\r
+ final static String CSID = "csid";\r
+ final static String URI = "url";\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+\r
+<!--\r
+ Contact schema (XSD)\r
+ \r
+ Entity : Contact\r
+ Part : Common\r
+ Used for: JAXB binding between XML and Java objects\r
+\r
+ $LastChangedRevision: 1929 $\r
+ $LastChangedDate: 2010-04-28 01:50:27 -0700 (Wed, 28 Apr 2010) $\r
+-->\r
+\r
+<xs:schema \r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"\r
+ jaxb:version="1.0" elementFormDefault="unqualified"\r
+ xmlns:ns="http://collectionspace.org/services/note"\r
+ xmlns="http://collectionspace.org/services/note"\r
+ targetNamespace="http://collectionspace.org/services/note"\r
+ version="0.1"\r
+>\r
+\r
+<!--\r
+ Avoid XmlRootElement nightmare:\r
+ See http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html\r
+-->\r
+<!-- See http://wiki.collectionspace.org/display/collectionspace/Contact+Schema --> \r
+ \r
+ <!-- This is the base class for subitems -->\r
+ <xs:complexType name="subitem">\r
+ <xs:annotation>\r
+ <xs:appinfo>\r
+ <jaxb:class ref="org.collectionspace.services.common.subitem.Subitem"/>\r
+ </xs:appinfo>\r
+ </xs:annotation>\r
+ </xs:complexType>\r
+ \r
+ <xs:element name="notes_common">\r
+ <xs:complexType>\r
+ <xs:complexContent>\r
+ <xs:extension base="subitem"> \r
+ <xs:sequence>\r
+ <xs:element name="content" type="xs:string" />\r
+ <xs:element name="author" type="xs:string" />\r
+ <xs:element name="date" type="xs:string" />\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent> \r
+ </xs:complexType>\r
+ </xs:element>\r
+ \r
+ <!-- This is the base class for subitems -->\r
+ <xs:complexType name="abstractCommonList">\r
+ <xs:annotation>\r
+ <xs:appinfo>\r
+ <jaxb:class ref="org.collectionspace.services.jaxb.AbstractCommonList"/>\r
+ </xs:appinfo>\r
+ </xs:annotation>\r
+ </xs:complexType>\r
+ \r
+ <!-- note records, as in Nuxeo repository -->\r
+ <xs:element name="notes-common-list">\r
+ <xs:complexType>\r
+ <xs:complexContent>\r
+ <xs:extension base="abstractCommonList"> \r
+ <xs:sequence>\r
+ <xs:element name="note-list-item" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="content" type="xs:string"\r
+ minOccurs="1" />\r
+ <!-- uri to retrive note details -->\r
+ <xs:element name="uri" type="xs:anyURI"\r
+ minOccurs="1" />\r
+ <xs:element name="csid" type="xs:string"\r
+ minOccurs="1" />\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent> \r
+ </xs:complexType>\r
+ </xs:element>\r
+ \r
+</xs:schema>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!-- A comment. -->\r
+<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">\r
+ <parent>\r
+ <artifactId>org.collectionspace.services.main</artifactId>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+ \r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note</artifactId>\r
+ <name>services.note</name>\r
+ <packaging>pom</packaging>\r
+\r
+ <modules>\r
+ <module>jaxb</module>\r
+ <module>service</module>\r
+ <module>3rdparty</module>\r
+ <module>client</module>\r
+ </modules>\r
+\r
+</project>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>\r
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>\r
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>
\ No newline at end of file
--- /dev/null
+<projectDescription>\r
+ <name>org.collectionspace.services.note.service</name>\r
+ <comment/>\r
+ <projects>\r
+ <project>org.collectionspace.services.note.jaxb</project>\r
+ <project>org.collectionspace.services.common</project>\r
+ <project>org.collectionspace.services.jaxb</project>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.maven.ide.eclipse.maven2Builder</name>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Mon Dec 28 10:23:43 PST 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+#Mon Dec 28 10:22:09 PST 2009\r
+activeProfiles=\r
+eclipse.preferences.version=1\r
+fullBuildGoals=process-test-resources\r
+includeModules=false\r
+resolveWorkspaceProjects=true\r
+resourceFilterGoals=process-resources resources\:testResources\r
+skipCompilerPlugin=true\r
+version=1\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<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">\r
+ <parent>\r
+ <artifactId>org.collectionspace.services.note</artifactId>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <version>0.7-SNAPSHOT</version>\r
+ </parent>\r
+ \r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.service</artifactId>\r
+ <name>services.note.service</name>\r
+ <packaging>jar</packaging>\r
+\r
+ <dependencies>\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.common</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.collectionspace.services</groupId>\r
+ <artifactId>org.collectionspace.services.note.jaxb</artifactId>\r
+ <version>${project.version}</version>\r
+ </dependency>\r
+ <!-- External dependencies -->\r
+ <dependency>\r
+ <groupId>org.testng</groupId>\r
+ <artifactId>testng</artifactId>\r
+ <version>5.6</version>\r
+ </dependency> \r
+\r
+ <!-- javax -->\r
+\r
+ <dependency>\r
+ <groupId>javax.security</groupId>\r
+ <artifactId>jaas</artifactId>\r
+ <version>1.0.01</version>\r
+ <scope>provided</scope>\r
+ </dependency>\r
+\r
+ <dependency>\r
+ <groupId>dom4j</groupId>\r
+ <artifactId>dom4j</artifactId>\r
+ <version>1.6.1</version>\r
+ <scope>provided</scope>\r
+ </dependency>\r
+ \r
+ <!-- jboss -->\r
+\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-jaxrs</artifactId>\r
+ <exclusions>\r
+ <exclusion>\r
+ <groupId>tjws</groupId>\r
+ <artifactId>webserver</artifactId>\r
+ </exclusion>\r
+ </exclusions>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-jaxb-provider</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.jboss.resteasy</groupId>\r
+ <artifactId>resteasy-multipart-provider</artifactId>\r
+ </dependency>\r
+ \r
+ <!-- nuxeo -->\r
+\r
+ <dependency>\r
+ <groupId>org.nuxeo.ecm.core</groupId>\r
+ <artifactId>nuxeo-core-api</artifactId>\r
+ <version>${nuxeo.version.1.5}</version>\r
+ <exclusions>\r
+ <exclusion>\r
+ <artifactId>jboss-remoting</artifactId>\r
+ <groupId>jboss</groupId>\r
+ </exclusion>\r
+ </exclusions>\r
+ </dependency>\r
+\r
+ </dependencies>\r
+ \r
+ <build>\r
+ <finalName>collectionspace-services-note</finalName>\r
+ </build>\r
+</project>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">\r
+</profilesXml>
\ No newline at end of file
--- /dev/null
+/**\r
+ * This document is a part of the source code and related artifacts\r
+ * for CollectionSpace, an open source collections management system\r
+ * for museums and related institutions:\r
+\r
+ * http://www.collectionspace.org\r
+ * http://wiki.collectionspace.org\r
+\r
+ * Copyright 2009 Regents of the University of California\r
+\r
+ * Licensed under the Educational Community License (ECL), Version 2.0.\r
+ * You may not use this file except in compliance with this License.\r
+\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.collectionspace.services.note;\r
+\r
+import javax.ws.rs.Consumes;\r
+import javax.ws.rs.GET;\r
+import javax.ws.rs.Path;\r
+import javax.ws.rs.Produces;\r
+import javax.ws.rs.DELETE;\r
+import javax.ws.rs.POST;\r
+import javax.ws.rs.PUT;\r
+import javax.ws.rs.PathParam;\r
+import javax.ws.rs.WebApplicationException;\r
+import javax.ws.rs.core.Context;\r
+import javax.ws.rs.core.MultivaluedMap;\r
+import javax.ws.rs.core.Response;\r
+import javax.ws.rs.core.UriBuilder;\r
+import javax.ws.rs.core.UriInfo;\r
+\r
+import org.collectionspace.services.common.AbstractMultiPartCollectionSpaceResourceImpl;\r
+import org.collectionspace.services.common.ClientType;\r
+import org.collectionspace.services.common.ServiceMain;\r
+import org.collectionspace.services.common.context.ServiceContext;\r
+import org.collectionspace.services.common.document.DocumentNotFoundException;\r
+import org.collectionspace.services.common.document.DocumentHandler;\r
+\r
+\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartInput;\r
+import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;\r
+import org.jboss.resteasy.util.HttpResponseCodes;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * The Class NoteResource.\r
+ */\r
+@Path("/notes")\r
+@Consumes("multipart/mixed")\r
+@Produces("multipart/mixed")\r
+public class NoteResource extends \r
+ AbstractMultiPartCollectionSpaceResourceImpl {\r
+\r
+ /** The Constant serviceName. */\r
+ private final static String serviceName = "notes";\r
+ \r
+ /** The logger. */\r
+ final Logger logger = LoggerFactory.getLogger(NoteResource.class);\r
+ //FIXME retrieve client type from configuration\r
+ /** The Constant CLIENT_TYPE. */\r
+ final static ClientType CLIENT_TYPE = ServiceMain.getInstance().getClientType();\r
+\r
+ /**\r
+ * Instantiates a new note resource.\r
+ */\r
+ public NoteResource() {\r
+ // do nothing\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.common.AbstractCollectionSpaceResourceImpl#getVersionString()\r
+ */\r
+ @Override\r
+ protected String getVersionString() {\r
+ /** The last change revision. */\r
+ final String lastChangeRevision = "$LastChangedRevision: 1982 $";\r
+ return lastChangeRevision;\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.common.AbstractCollectionSpaceResourceImpl#getServiceName()\r
+ */\r
+ @Override\r
+ public String getServiceName() {\r
+ return serviceName;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.common.CollectionSpaceResource#getCommonPartClass()\r
+ */\r
+ @Override\r
+ public Class<NotesCommon> getCommonPartClass() {\r
+ return NotesCommon.class;\r
+ }\r
+ \r
+\r
+ /**\r
+ * Creates the note.\r
+ * \r
+ * @param input the input\r
+ * \r
+ * @return the response\r
+ */\r
+ @POST\r
+ public Response createNote(MultipartInput input) {\r
+ try {\r
+ ServiceContext<MultipartInput, MultipartOutput> ctx = createServiceContext(input);\r
+ DocumentHandler handler = createDocumentHandler(ctx);\r
+ String csid = getRepositoryClient(ctx).create(ctx, handler);\r
+ UriBuilder path = UriBuilder.fromResource(NoteResource.class);\r
+ path.path("" + csid);\r
+ Response response = Response.created(path.build()).build();\r
+ return response;\r
+ } catch (Exception e) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Caught exception in createNote", e);\r
+ }\r
+ Response response = Response.status(\r
+ Response.Status.INTERNAL_SERVER_ERROR).entity("Create failed").type("text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Gets the note.\r
+ * \r
+ * @param csid the csid\r
+ * \r
+ * @return the note\r
+ */\r
+ @GET\r
+ @Path("{csid}")\r
+ public MultipartOutput getNote(\r
+ @PathParam("csid") String csid) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("getNote with csid=" + csid);\r
+ }\r
+ if (csid == null || "".equals(csid)) {\r
+ logger.error("getNote: missing csid!");\r
+ Response response = Response.status(Response.Status.BAD_REQUEST).entity(\r
+ "Get failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ MultipartOutput result = null;\r
+ try {\r
+ ServiceContext<MultipartInput, MultipartOutput> ctx = createServiceContext();\r
+ DocumentHandler handler = createDocumentHandler(ctx);\r
+ getRepositoryClient(ctx).get(ctx, csid, handler);\r
+ result = (MultipartOutput) ctx.getOutput();\r
+ } catch (DocumentNotFoundException dnfe) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("getNote", dnfe);\r
+ }\r
+ Response response = Response.status(Response.Status.NOT_FOUND).entity(\r
+ "Get failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ } catch (Exception e) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("getNote", e);\r
+ }\r
+ Response response = Response.status(\r
+ Response.Status.INTERNAL_SERVER_ERROR).entity("Get failed").type("text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ if (result == null) {\r
+ Response response = Response.status(Response.Status.NOT_FOUND).entity(\r
+ "Get failed, the requested Note CSID:" + csid + ": was not found.").type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * Gets the note list.\r
+ * \r
+ * @param ui the ui\r
+ * \r
+ * @return the note list\r
+ */\r
+ @GET\r
+ @Produces("application/xml")\r
+ public NotesCommonList getNoteList(@Context UriInfo ui) {\r
+ MultivaluedMap<String, String> queryParams = ui.getQueryParameters();\r
+ NotesCommonList noteObjectList = new NotesCommonList();\r
+ try {\r
+ ServiceContext<MultipartInput, MultipartOutput> ctx = createServiceContext(queryParams);\r
+ DocumentHandler handler = createDocumentHandler(ctx);\r
+ getRepositoryClient(ctx).getFiltered(ctx, handler);\r
+ noteObjectList = (NotesCommonList) handler.getCommonPartList();\r
+ } catch (Exception e) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Caught exception in getNoteList", e);\r
+ }\r
+ Response response = Response.status(\r
+ Response.Status.INTERNAL_SERVER_ERROR).entity("Index failed").type("text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ return noteObjectList;\r
+ }\r
+\r
+ /**\r
+ * Update note.\r
+ * \r
+ * @param csid the csid\r
+ * @param theUpdate the the update\r
+ * \r
+ * @return the multipart output\r
+ */\r
+ @PUT\r
+ @Path("{csid}")\r
+ public MultipartOutput updateNote(\r
+ @PathParam("csid") String csid,\r
+ MultipartInput theUpdate) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("updateNote with csid=" + csid);\r
+ }\r
+ if (csid == null || "".equals(csid)) {\r
+ logger.error("updateNote: missing csid!");\r
+ Response response = Response.status(Response.Status.BAD_REQUEST).entity(\r
+ "update failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ MultipartOutput result = null;\r
+ try {\r
+ ServiceContext<MultipartInput, MultipartOutput> ctx = createServiceContext(theUpdate);\r
+ DocumentHandler handler = createDocumentHandler(ctx);\r
+ getRepositoryClient(ctx).update(ctx, csid, handler);\r
+ result = (MultipartOutput) ctx.getOutput();\r
+ } catch (DocumentNotFoundException dnfe) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Caught exception in updateNote", dnfe);\r
+ }\r
+ Response response = Response.status(Response.Status.NOT_FOUND).entity(\r
+ "Update failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ } catch (Exception e) {\r
+ Response response = Response.status(\r
+ Response.Status.INTERNAL_SERVER_ERROR).entity("Update failed").type("text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * Delete note.\r
+ * \r
+ * @param csid the csid\r
+ * \r
+ * @return the response\r
+ */\r
+ @DELETE\r
+ @Path("{csid}")\r
+ public Response deleteNote(@PathParam("csid") String csid) {\r
+\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("deleteNote with csid=" + csid);\r
+ }\r
+ if (csid == null || "".equals(csid)) {\r
+ logger.error("deleteNote: missing csid!");\r
+ Response response = Response.status(Response.Status.BAD_REQUEST).entity(\r
+ "Delete failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+ try {\r
+ ServiceContext<MultipartInput, MultipartOutput> ctx = createServiceContext();\r
+ getRepositoryClient(ctx).delete(ctx, csid);\r
+ return Response.status(HttpResponseCodes.SC_OK).build();\r
+ } catch (DocumentNotFoundException dnfe) {\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Caught exception in deleteNote", dnfe);\r
+ }\r
+ Response response = Response.status(Response.Status.NOT_FOUND).entity(\r
+ "Delete failed on Note csid=" + csid).type(\r
+ "text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ } catch (Exception e) {\r
+ Response response = Response.status(\r
+ Response.Status.INTERNAL_SERVER_ERROR).entity("Delete failed").type("text/plain").build();\r
+ throw new WebApplicationException(response);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+/**\r
+ * This document is a part of the source code and related artifacts\r
+ * for CollectionSpace, an open source collections management system\r
+ * for museums and related institutions:\r
+\r
+ * http://www.collectionspace.org\r
+ * http://wiki.collectionspace.org\r
+\r
+ * Copyright 2009 University of California at Berkeley\r
+\r
+ * Licensed under the Educational Community License (ECL), Version 2.0.\r
+ * You may not use this file except in compliance with this License.\r
+\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.collectionspace.services.note.nuxeo;\r
+\r
+/**\r
+ * NoteConstants, stores constants related to Note documents \r
+ *\r
+ */\r
+public class NoteConstants {\r
+\r
+ public final static String NUXEO_DOCTYPE = "Note";\r
+ public final static String NUXEO_SCHEMA_NAME = "note";\r
+ public final static String NUXEO_DC_TITLE = "CollectionSpace-Note";\r
+}\r
--- /dev/null
+/**\r
+ * This document is a part of the source code and related artifacts\r
+ * for CollectionSpace, an open source collections management system\r
+ * for museums and related institutions:\r
+\r
+ * http://www.collectionspace.org\r
+ * http://wiki.collectionspace.org\r
+\r
+ * Copyright 2009 Regents of the University of California\r
+\r
+ * Licensed under the Educational Community License (ECL), Version 2.0.\r
+ * You may not use this file except in compliance with this License.\r
+\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.collectionspace.services.note.nuxeo;\r
+\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.collectionspace.services.note.NoteJAXBSchema;\r
+import org.collectionspace.services.common.document.DocumentHandler.Action;\r
+import org.collectionspace.services.common.document.DocumentWrapper;\r
+import org.collectionspace.services.note.NotesCommon;\r
+import org.collectionspace.services.note.NotesCommonList;\r
+import org.collectionspace.services.note.NotesCommonList.NoteListItem;\r
+\r
+import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;\r
+import org.collectionspace.services.nuxeo.client.java.RemoteSubItemDocumentModelHandlerImpl;\r
+import org.collectionspace.services.nuxeo.util.NuxeoUtils;\r
+import org.nuxeo.ecm.core.api.DocumentModel;\r
+import org.nuxeo.ecm.core.api.DocumentModelList;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * The Class NoteDocumentModelHandler.\r
+ */\r
+public class NoteDocumentModelHandler\r
+ extends RemoteSubItemDocumentModelHandlerImpl<NotesCommon, NotesCommonList> {\r
+\r
+ /** The logger. */\r
+ private final Logger logger = LoggerFactory.getLogger(NoteDocumentModelHandler.class);\r
+ \r
+ /** The note. */\r
+ private NotesCommon note;\r
+ \r
+ /** The note list. */\r
+ private NotesCommonList noteList;\r
+\r
+ /** The owner. */\r
+ private String owner;\r
+\r
+ /**\r
+ * Gets the owner.\r
+ *\r
+ * @return the owner\r
+ */\r
+ public String getOwner() {\r
+ return owner;\r
+ }\r
+\r
+ /**\r
+ * Sets the owner.\r
+ *\r
+ * @param owner the new owner\r
+ */\r
+ public void setInAuthority(String owner) {\r
+ this.owner = owner;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#getCommonPart()\r
+ */\r
+ @Override\r
+ public NotesCommon getCommonPart() {\r
+ return note;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#setCommonPart(java.lang.Object)\r
+ */\r
+ @Override\r
+ public void setCommonPart(NotesCommon note) {\r
+ this.note = note;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#getCommonPartList()\r
+ */\r
+ @Override\r
+ public NotesCommonList getCommonPartList() {\r
+ return noteList;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#setCommonPartList(java.lang.Object)\r
+ */\r
+ @Override\r
+ public void setCommonPartList(NotesCommonList noteList) {\r
+ this.noteList = noteList;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPart(org.collectionspace.services.common.document.DocumentWrapper)\r
+ */\r
+ @Override\r
+ public NotesCommon extractCommonPart(DocumentWrapper<DocumentModel> wrapDoc)\r
+ throws Exception {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#fillCommonPart(java.lang.Object, org.collectionspace.services.common.document.DocumentWrapper)\r
+ */\r
+ @Override\r
+ public void fillCommonPart(NotesCommon noteObject, DocumentWrapper<DocumentModel> wrapDoc) throws Exception {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPartList(org.collectionspace.services.common.document.DocumentWrapper)\r
+ */\r
+ @Override\r
+ public NotesCommonList extractCommonPartList(DocumentWrapper<DocumentModelList> wrapDoc) throws Exception {\r
+ NotesCommonList coList = extractPagingInfo(new NotesCommonList(), wrapDoc);\r
+ List<NotesCommonList.NoteListItem> list = coList.getNoteListItem();\r
+ Iterator<DocumentModel> iter = wrapDoc.getWrappedObject().iterator();\r
+ while(iter.hasNext()){\r
+ DocumentModel docModel = iter.next();\r
+ NoteListItem clistItem = new NoteListItem();\r
+ clistItem.setContent((String) docModel.getProperty(getServiceContext().getCommonPartLabel(),\r
+ NoteJAXBSchema.CONTENT));\r
+ String id = NuxeoUtils.extractId(docModel.getPathAsString());\r
+ clistItem.setUri(getServiceContextPath() + id);\r
+ clistItem.setCsid(id);\r
+ list.add(clistItem);\r
+ }\r
+\r
+ return coList;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.collectionspace.services.common.document.AbstractMultipartDocumentHandlerImpl#getQProperty(java.lang.String)\r
+ */\r
+ @Override\r
+ public String getQProperty(String prop) {\r
+ return NoteConstants.NUXEO_SCHEMA_NAME + ":" + prop;\r
+ }\r
+}\r
+\r
--- /dev/null
+package org.collectionspace.services.test;\r
+\r
+\r
+/**\r
+ * NoteServiceTest\r
+ * \r
+ * @version $Revision:$\r
+ */\r
+public class NoteServiceTest {\r
+ //empty\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">\r
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">\r
+\r
+ <appender name="console" class="org.apache.log4j.ConsoleAppender">\r
+ <param name="Target" value="System.out" />\r
+ <layout class="org.apache.log4j.TTCCLayout">\r
+ <param name="DateFormat" value="ISO8601" />\r
+ </layout>\r
+ </appender>\r
+\r
+\r
+ <appender name="unit-tests"\r
+ class="org.apache.log4j.RollingFileAppender">\r
+ <param name="File" value="./target/unit-tests.log" />\r
+ <param name="MaxFileSize" value="10240KB" />\r
+ <param name="MaxBackupIndex" value="6" />\r
+ <layout class="org.apache.log4j.TTCCLayout">\r
+ <param name="DateFormat" value="ISO8601" />\r
+ </layout>\r
+ </appender>\r
+\r
+ <logger name="org.apache.commons.httpclient" additivity="false">\r
+ <level value="warn" />\r
+ <appender-ref ref="console" />\r
+ <appender-ref ref="unit-tests" />\r
+ </logger>\r
+\r
+ <logger name="httpclient.wire" additivity="false">\r
+ <level value="info" />\r
+ <appender-ref ref="console" />\r
+ <appender-ref ref="unit-tests" />\r
+ </logger>\r
+\r
+ <root>\r
+ <priority value="debug" />\r
+ <appender-ref ref="console" />\r
+ <appender-ref ref="unit-tests" />\r
+ </root>\r
+\r
+</log4j:configuration>\r
+\r
+\r
+\r
+\r
<module>client</module>
<module>jaxb</module>
<module>common</module>
+ <module>note</module>
<module>authorization-mgt</module> <!-- relies on authorization -->
<module>common-test</module>
<module>account</module> <!-- relies on authorization-mgt.client -->
</dependency>
</dependencies>
</dependencyManagement>
-</project>
\ No newline at end of file
+</project>