]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-1895 Working on the repeating sections of Location, and general support for...
authorPatrick Schmitz <pschmitz@berkeley.edu>
Tue, 25 May 2010 01:05:22 +0000 (01:05 +0000)
committerPatrick Schmitz <pschmitz@berkeley.edu>
Tue, 25 May 2010 01:05:22 +0000 (01:05 +0000)
65 files changed:
3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/OSGI-INF/core-types-contrib.xml
3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/OSGI-INF/ecm-types-contrib.xml
3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/OSGI-INF/layouts-contrib.xml
3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/schemas/subitem.xsd [new file with mode: 0644]
services/JaxRsServiceProvider/pom.xml
services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CollectionSpaceJaxRsApplication.java
services/authorization-mgt/import/src/main/resources/import-data/import-permissions-roles.xml
services/authorization-mgt/import/src/main/resources/import-data/import-permissions.xml
services/build.xml
services/common/src/main/config/services/tenant-bindings.xml
services/jaxb/src/main/resources/subitem.xsd [new file with mode: 0644]
services/note/.classpath [new file with mode: 0644]
services/note/.project [new file with mode: 0644]
services/note/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/3rdparty/.classpath [new file with mode: 0644]
services/note/3rdparty/.project [new file with mode: 0644]
services/note/3rdparty/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/3rdparty/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/3rdparty/build.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/.classpath [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/.project [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/build.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/pom.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/META-INF/MANIFEST.MF [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/core-types-contrib.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/deployment-fragment.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/ecm-types-contrib.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/layouts-contrib.xml [new file with mode: 0644]
services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/schemas/notes_common.xsd [new file with mode: 0644]
services/note/3rdparty/pom.xml [new file with mode: 0644]
services/note/build.xml [new file with mode: 0644]
services/note/client/.classpath [new file with mode: 0644]
services/note/client/.project [new file with mode: 0644]
services/note/client/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/client/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/client/pom.xml [new file with mode: 0644]
services/note/client/src/main/java/org/collectionspace/services/client/NoteClient.java [new file with mode: 0644]
services/note/client/src/main/java/org/collectionspace/services/client/NoteClientUtils.java [new file with mode: 0644]
services/note/client/src/main/java/org/collectionspace/services/client/NoteProxy.java [new file with mode: 0644]
services/note/client/src/test/java/org/collectionspace/services/client/test/NoteServiceTest.java [new file with mode: 0644]
services/note/client/src/test/resources/log4j.properties [new file with mode: 0644]
services/note/jaxb/.classpath [new file with mode: 0644]
services/note/jaxb/.project [new file with mode: 0644]
services/note/jaxb/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/jaxb/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/jaxb/pom.xml [new file with mode: 0644]
services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteJAXBSchema.java [new file with mode: 0644]
services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteListItemJAXBSchema.java [new file with mode: 0644]
services/note/jaxb/src/main/resources/notes-common.xsd [new file with mode: 0644]
services/note/pom.xml [new file with mode: 0644]
services/note/service/.classpath [new file with mode: 0644]
services/note/service/.project [new file with mode: 0644]
services/note/service/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
services/note/service/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
services/note/service/pom.xml [new file with mode: 0644]
services/note/service/profiles.xml [new file with mode: 0644]
services/note/service/src/main/java/org/collectionspace/services/note/NoteResource.java [new file with mode: 0644]
services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteConstants.java [new file with mode: 0644]
services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteDocumentModelHandler.java [new file with mode: 0644]
services/note/service/src/test/java/org/collectionspace/services/test/NoteServiceTest.java [new file with mode: 0644]
services/note/service/src/test/resources/log4j.xml [new file with mode: 0644]
services/pom.xml

index c19ad0ad2dfac2202c410381285edba77276f89d..df22ac00c0b89535ac3912ae3c220a7602c8a2e9 100644 (file)
@@ -2,6 +2,7 @@
 <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>
index 687a5a239f7f777196561cbb748d331b41e1402a..eb081760deccf5a54e93a04a0a3ca0d2e1e11d42 100644 (file)
       </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>
index 279de155309e76aa8cba8030fe3a3e05113939bf..bd77c10cbdfdc121270d3ae9a0e8dd2c32939fed 100644 (file)
 
     </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>
diff --git a/3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/schemas/subitem.xsd b/3rdparty/nuxeo/nuxeo-platform-collectionspace/src/main/resources/schemas/subitem.xsd
new file mode 100644 (file)
index 0000000..75b6087
--- /dev/null
@@ -0,0 +1,22 @@
+<?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
index 5f21896c09a37235df971f37a0760ec835de6e09..b0c8175b0762d6a44862472d83b1b6459d05dc56 100644 (file)
             <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
index b2bf8358d8ce49bda11c16cdecce06085467c07b..63d40c056c92929b4c9b12920845792ad18ad494 100644 (file)
@@ -25,6 +25,7 @@ package org.collectionspace.services.jaxrs;
 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;
@@ -68,6 +69,7 @@ public class CollectionSpaceJaxRsApplication extends Application {
         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());
index f90ba976b2bdf0768ae1447303bd369faf75008f..5b1f5fe91f6352006dd17347c68e09e21fbb063b 100644 (file)
@@ -3,7 +3,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>a4017e3d-1eef-42b1-bdb7-8443d681707c</permissionId>
+            <permissionId>c254348f-e5d0-4db9-8634-ed0b47887826</permissionId>
             <resourceName>collectionobjects</resourceName>
         </permission>
         <role>
@@ -14,7 +14,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>66d54998-a1a1-4c64-9728-2b6d8b9b61df</permissionId>
+            <permissionId>964b5187-fda0-4e2d-8873-0c235acf1796</permissionId>
             <resourceName>intakes</resourceName>
         </permission>
         <role>
@@ -25,7 +25,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>07e47d8a-1aa6-440b-b30b-a2d42d8023a1</permissionId>
+            <permissionId>e1eff972-65f0-4213-9d91-e5eaad58fd5d</permissionId>
             <resourceName>loansin</resourceName>
         </permission>
         <role>
@@ -36,7 +36,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>476a773b-83ad-4383-8761-c92930bf527c</permissionId>
+            <permissionId>ded1f92e-6b57-43ee-bc94-19e32bae9822</permissionId>
             <resourceName>loansout</resourceName>
         </permission>
         <role>
@@ -47,7 +47,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>b0144782-e289-4847-bb67-e9b5c0412887</permissionId>
+            <permissionId>428a7c8c-a3cf-4616-a439-65ce41566fba</permissionId>
             <resourceName>movements</resourceName>
         </permission>
         <role>
@@ -58,7 +58,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>8cc25692-4d52-40e2-afbc-b95a79db3b0a</permissionId>
+            <permissionId>e2189ea7-1710-443a-a2a9-0c3d8ee256b1</permissionId>
             <resourceName>vocabularies</resourceName>
         </permission>
         <role>
@@ -69,7 +69,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>d2f87bd9-9ea6-4b39-aebe-6a0fc6d96594</permissionId>
+            <permissionId>9d132fbd-0f5a-42cb-bae3-117b2f71dff8</permissionId>
             <resourceName>vocabularyitems</resourceName>
         </permission>
         <role>
@@ -80,7 +80,7 @@
     <permissionRole>
         <subject>ROLE</subject>
         <permission>
-            <permissionId>80e32ee8-4740-4b48-a3ba-aec706172146</permissionId>
+            <permissionId>293a5a44-4e91-4bee-b85e-ceacd6e213bb</permissionId>
             <resourceName>orgauthorities</resourceName>
         </permission>
         <role>
@@ -91,7 +91,7 @@
     <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>
index 22fb69b4c82ff70a2ca73ba1fbfa296486c040cc..f4b8757f0b73d24489ef0f0eaa8941649a9ea3a4 100644 (file)
@@ -1,6 +1,6 @@
 <?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>
@@ -20,7 +20,7 @@
         <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>
@@ -40,7 +40,7 @@
         <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>
@@ -60,7 +60,7 @@
         <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>
@@ -80,7 +80,7 @@
         <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>
index 01869f0023f982a30ff62affc8fef58bb0f7cbb3..649eb068dd648c0bbf2dc0cd9a8ad53522f261e9 100644 (file)
         <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
index aa1b25de47cabe67a6889403bbfde4fcd872b813..ce489d328e3c42835229fdca6ed0b8da74141702 100644 (file)
             </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'>
diff --git a/services/jaxb/src/main/resources/subitem.xsd b/services/jaxb/src/main/resources/subitem.xsd
new file mode 100644 (file)
index 0000000..e4d86a3
--- /dev/null
@@ -0,0 +1,34 @@
+<?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>
diff --git a/services/note/.classpath b/services/note/.classpath
new file mode 100644 (file)
index 0000000..0469885
--- /dev/null
@@ -0,0 +1,6 @@
+<?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
diff --git a/services/note/.project b/services/note/.project
new file mode 100644 (file)
index 0000000..0b6b693
--- /dev/null
@@ -0,0 +1,23 @@
+<?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
diff --git a/services/note/.settings/org.eclipse.jdt.core.prefs b/services/note/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..9d7c028
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/.settings/org.maven.ide.eclipse.prefs b/services/note/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/3rdparty/.classpath b/services/note/3rdparty/.classpath
new file mode 100644 (file)
index 0000000..0469885
--- /dev/null
@@ -0,0 +1,6 @@
+<?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
diff --git a/services/note/3rdparty/.project b/services/note/3rdparty/.project
new file mode 100644 (file)
index 0000000..469b6a0
--- /dev/null
@@ -0,0 +1,23 @@
+<?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
diff --git a/services/note/3rdparty/.settings/org.eclipse.jdt.core.prefs b/services/note/3rdparty/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..793c378
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/3rdparty/.settings/org.maven.ide.eclipse.prefs b/services/note/3rdparty/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/3rdparty/build.xml b/services/note/3rdparty/build.xml
new file mode 100644 (file)
index 0000000..82e8173
--- /dev/null
@@ -0,0 +1,125 @@
+\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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/.classpath b/services/note/3rdparty/nuxeo-platform-cs-note/.classpath
new file mode 100644 (file)
index 0000000..199bbbb
--- /dev/null
@@ -0,0 +1,8 @@
+<?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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/.project b/services/note/3rdparty/nuxeo-platform-cs-note/.project
new file mode 100644 (file)
index 0000000..65504f9
--- /dev/null
@@ -0,0 +1,17 @@
+<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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.eclipse.jdt.core.prefs b/services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..92296e2
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.maven.ide.eclipse.prefs b/services/note/3rdparty/nuxeo-platform-cs-note/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/build.xml b/services/note/3rdparty/nuxeo-platform-cs-note/build.xml
new file mode 100644 (file)
index 0000000..9d9262e
--- /dev/null
@@ -0,0 +1,144 @@
+\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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/pom.xml b/services/note/3rdparty/nuxeo-platform-cs-note/pom.xml
new file mode 100644 (file)
index 0000000..faef217
--- /dev/null
@@ -0,0 +1,37 @@
+<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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/META-INF/MANIFEST.MF b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..bfac8ce
--- /dev/null
@@ -0,0 +1,22 @@
+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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/core-types-contrib.xml b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/core-types-contrib.xml
new file mode 100644 (file)
index 0000000..e82f5f6
--- /dev/null
@@ -0,0 +1,15 @@
+<?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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/deployment-fragment.xml b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/deployment-fragment.xml
new file mode 100644 (file)
index 0000000..ee899e6
--- /dev/null
@@ -0,0 +1,408 @@
+<?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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/ecm-types-contrib.xml b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/ecm-types-contrib.xml
new file mode 100644 (file)
index 0000000..c175ecc
--- /dev/null
@@ -0,0 +1,30 @@
+<?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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/layouts-contrib.xml b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/OSGI-INF/layouts-contrib.xml
new file mode 100644 (file)
index 0000000..fba0576
--- /dev/null
@@ -0,0 +1,61 @@
+<?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
diff --git a/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/schemas/notes_common.xsd b/services/note/3rdparty/nuxeo-platform-cs-note/src/main/resources/schemas/notes_common.xsd
new file mode 100644 (file)
index 0000000..f12eed3
--- /dev/null
@@ -0,0 +1,26 @@
+<?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
diff --git a/services/note/3rdparty/pom.xml b/services/note/3rdparty/pom.xml
new file mode 100644 (file)
index 0000000..880dd16
--- /dev/null
@@ -0,0 +1,23 @@
+\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
diff --git a/services/note/build.xml b/services/note/build.xml
new file mode 100644 (file)
index 0000000..e7a9bd6
--- /dev/null
@@ -0,0 +1,122 @@
+\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
diff --git a/services/note/client/.classpath b/services/note/client/.classpath
new file mode 100644 (file)
index 0000000..425cd16
--- /dev/null
@@ -0,0 +1,10 @@
+<?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
diff --git a/services/note/client/.project b/services/note/client/.project
new file mode 100644 (file)
index 0000000..7dc76b0
--- /dev/null
@@ -0,0 +1,21 @@
+<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
diff --git a/services/note/client/.settings/org.eclipse.jdt.core.prefs b/services/note/client/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..92296e2
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/client/.settings/org.maven.ide.eclipse.prefs b/services/note/client/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/client/pom.xml b/services/note/client/pom.xml
new file mode 100644 (file)
index 0000000..fd94433
--- /dev/null
@@ -0,0 +1,73 @@
+<?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
diff --git a/services/note/client/src/main/java/org/collectionspace/services/client/NoteClient.java b/services/note/client/src/main/java/org/collectionspace/services/client/NoteClient.java
new file mode 100644 (file)
index 0000000..1a75b17
--- /dev/null
@@ -0,0 +1,140 @@
+/**    \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
diff --git a/services/note/client/src/main/java/org/collectionspace/services/client/NoteClientUtils.java b/services/note/client/src/main/java/org/collectionspace/services/client/NoteClientUtils.java
new file mode 100644 (file)
index 0000000..6422f8b
--- /dev/null
@@ -0,0 +1,54 @@
+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
diff --git a/services/note/client/src/main/java/org/collectionspace/services/client/NoteProxy.java b/services/note/client/src/main/java/org/collectionspace/services/client/NoteProxy.java
new file mode 100644 (file)
index 0000000..6d05d68
--- /dev/null
@@ -0,0 +1,48 @@
+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
diff --git a/services/note/client/src/test/java/org/collectionspace/services/client/test/NoteServiceTest.java b/services/note/client/src/test/java/org/collectionspace/services/client/test/NoteServiceTest.java
new file mode 100644 (file)
index 0000000..c325bae
--- /dev/null
@@ -0,0 +1,464 @@
+/**\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
diff --git a/services/note/client/src/test/resources/log4j.properties b/services/note/client/src/test/resources/log4j.properties
new file mode 100644 (file)
index 0000000..18c5103
--- /dev/null
@@ -0,0 +1,23 @@
+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
diff --git a/services/note/jaxb/.classpath b/services/note/jaxb/.classpath
new file mode 100644 (file)
index 0000000..425cd16
--- /dev/null
@@ -0,0 +1,10 @@
+<?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
diff --git a/services/note/jaxb/.project b/services/note/jaxb/.project
new file mode 100644 (file)
index 0000000..3148d11
--- /dev/null
@@ -0,0 +1,17 @@
+<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
diff --git a/services/note/jaxb/.settings/org.eclipse.jdt.core.prefs b/services/note/jaxb/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..adb6edb
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/jaxb/.settings/org.maven.ide.eclipse.prefs b/services/note/jaxb/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/jaxb/pom.xml b/services/note/jaxb/pom.xml
new file mode 100644 (file)
index 0000000..81bdf1e
--- /dev/null
@@ -0,0 +1,47 @@
+<?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
diff --git a/services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteJAXBSchema.java b/services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteJAXBSchema.java
new file mode 100644 (file)
index 0000000..5d0d6d7
--- /dev/null
@@ -0,0 +1,20 @@
+/**\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
diff --git a/services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteListItemJAXBSchema.java b/services/note/jaxb/src/main/java/org/collectionspace/services/note/NoteListItemJAXBSchema.java
new file mode 100644 (file)
index 0000000..58b8213
--- /dev/null
@@ -0,0 +1,7 @@
+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
diff --git a/services/note/jaxb/src/main/resources/notes-common.xsd b/services/note/jaxb/src/main/resources/notes-common.xsd
new file mode 100644 (file)
index 0000000..9511c6b
--- /dev/null
@@ -0,0 +1,88 @@
+<?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
diff --git a/services/note/pom.xml b/services/note/pom.xml
new file mode 100644 (file)
index 0000000..a2c412b
--- /dev/null
@@ -0,0 +1,24 @@
+<?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
diff --git a/services/note/service/.classpath b/services/note/service/.classpath
new file mode 100644 (file)
index 0000000..3a317ac
--- /dev/null
@@ -0,0 +1,10 @@
+<?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
diff --git a/services/note/service/.project b/services/note/service/.project
new file mode 100644 (file)
index 0000000..e58ed0c
--- /dev/null
@@ -0,0 +1,21 @@
+<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
diff --git a/services/note/service/.settings/org.eclipse.jdt.core.prefs b/services/note/service/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..67e7e53
--- /dev/null
@@ -0,0 +1,5 @@
+#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
diff --git a/services/note/service/.settings/org.maven.ide.eclipse.prefs b/services/note/service/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..8bf82a1
--- /dev/null
@@ -0,0 +1,9 @@
+#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
diff --git a/services/note/service/pom.xml b/services/note/service/pom.xml
new file mode 100644 (file)
index 0000000..2ad3de2
--- /dev/null
@@ -0,0 +1,90 @@
+<?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
diff --git a/services/note/service/profiles.xml b/services/note/service/profiles.xml
new file mode 100644 (file)
index 0000000..12051b8
--- /dev/null
@@ -0,0 +1,4 @@
+<?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
diff --git a/services/note/service/src/main/java/org/collectionspace/services/note/NoteResource.java b/services/note/service/src/main/java/org/collectionspace/services/note/NoteResource.java
new file mode 100644 (file)
index 0000000..08752b2
--- /dev/null
@@ -0,0 +1,299 @@
+/**\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
diff --git a/services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteConstants.java b/services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteConstants.java
new file mode 100644 (file)
index 0000000..d1bf29e
--- /dev/null
@@ -0,0 +1,35 @@
+/**\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
diff --git a/services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteDocumentModelHandler.java b/services/note/service/src/main/java/org/collectionspace/services/note/nuxeo/NoteDocumentModelHandler.java
new file mode 100644 (file)
index 0000000..8a6a12d
--- /dev/null
@@ -0,0 +1,159 @@
+/**\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
diff --git a/services/note/service/src/test/java/org/collectionspace/services/test/NoteServiceTest.java b/services/note/service/src/test/java/org/collectionspace/services/test/NoteServiceTest.java
new file mode 100644 (file)
index 0000000..a839386
--- /dev/null
@@ -0,0 +1,11 @@
+package org.collectionspace.services.test;\r
+\r
+\r
+/**\r
+ * NoteServiceTest\r
+ * \r
+ * @version $Revision:$\r
+ */\r
+public class NoteServiceTest {\r
+       //empty\r
+}\r
diff --git a/services/note/service/src/test/resources/log4j.xml b/services/note/service/src/test/resources/log4j.xml
new file mode 100644 (file)
index 0000000..6881ae6
--- /dev/null
@@ -0,0 +1,45 @@
+<?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
index 936eac0cedfd09f84a42817a792816e137f99895..1163736e4d235a7ef66405fa0e538443031d114a 100644 (file)
@@ -18,6 +18,7 @@
         <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>