Author: buildbot
Date: Fri Aug  5 12:39:52 2016
New Revision: 994540

Log:
Staging update by buildbot for chemistry

Modified:
    websites/staging/chemistry/trunk/content/   (props changed)
    websites/staging/chemistry/trunk/content/docs/cmis-samples/404.html
    websites/staging/chemistry/trunk/content/docs/cmis-samples/about/index.html
    websites/staging/chemistry/trunk/content/docs/cmis-samples/css/chemistry.css
    websites/staging/chemistry/trunk/content/docs/cmis-samples/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/mkdocs/search_index.json
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/access-control/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/allowable-actions/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/capabilities/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/changelog/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/content/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-objects/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-session/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/delete-objects/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/exceptions/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/extensions/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/lists/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/move-objects/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/operation-context/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/properties/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/queries/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retention/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retrieve-objects/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/types/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/update-objects/index.html
    
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/versions/index.html

Propchange: websites/staging/chemistry/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Aug  5 12:39:52 2016
@@ -1 +1 @@
-1751941
+1755310

Modified: websites/staging/chemistry/trunk/content/docs/cmis-samples/404.html
==============================================================================
--- websites/staging/chemistry/trunk/content/docs/cmis-samples/404.html 
(original)
+++ websites/staging/chemistry/trunk/content/docs/cmis-samples/404.html Fri Aug 
 5 12:39:52 2016
@@ -225,6 +225,12 @@
 </li>
 
                         
+                            
+<li >
+    <a href="samples/retention/index.html">Retention and Holds</a>
+</li>
+
+                        
                         </ul>
                     </li>
                 
@@ -326,4 +332,4 @@
     </body>
 
 </html>
-<!-- last update: 2016-06-24 10:25:43.943537 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.583795 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/about/index.html
==============================================================================
--- websites/staging/chemistry/trunk/content/docs/cmis-samples/about/index.html 
(original)
+++ websites/staging/chemistry/trunk/content/docs/cmis-samples/about/index.html 
Fri Aug  5 12:39:52 2016
@@ -342,4 +342,4 @@ Content Management Interoperability Serv
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.189989 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.221993 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/css/chemistry.css
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/css/chemistry.css 
(original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/css/chemistry.css 
Fri Aug  5 12:39:52 2016
@@ -18,7 +18,7 @@
 
 
 .cmis {
-    color: white;   
+    color: white;
     background-color: #c17702;
     border-color: #935b01;
     font-size: 0.8em;
@@ -26,11 +26,12 @@
     padding-right: 10px;
     border-style: solid;
     border-width: 1px;
-    border-radius: 5px;    
+    border-radius: 5px;
+    white-space: nowrap;
 }
 
 .spec {
-    color: white;   
+    color: white;
     background-color: #008cba;
     border-color: #0079a1;
     font-size: 0.8em;
@@ -38,7 +39,8 @@
     padding-right: 10px;
     border-style: solid;
     border-width: 1px;
-    border-radius: 5px; 
+    border-radius: 5px;
+    white-space: nowrap;
 }
 
 .admonition {

Modified: websites/staging/chemistry/trunk/content/docs/cmis-samples/index.html
==============================================================================
--- websites/staging/chemistry/trunk/content/docs/cmis-samples/index.html 
(original)
+++ websites/staging/chemistry/trunk/content/docs/cmis-samples/index.html Fri 
Aug  5 12:39:52 2016
@@ -414,4 +414,4 @@ For new projects it is recommend to use
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.652720 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.676945 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/mkdocs/search_index.json
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/mkdocs/search_index.json
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/mkdocs/search_index.json
 Fri Aug  5 12:39:52 2016
@@ -467,7 +467,7 @@
         }, 
         {
             "location": "/samples/content/index.html", 
-            "text": "Working with Content\n\n\nCMIS 1.0\n\n\nCMIS 
1.1\n\n\nSpec 2.1.4.2\n\n\nContent Streams\n\n\nContent Stream objects are used 
to send and fetch content. They contain a file name, a \nMIME type\n, the 
stream length, and the stream.\n\n\nIn some cases, the stream length is unknown 
(\nnull\n). OpenCMIS and PortCMIS don\u2019t rely on it and your application 
shouldn\nt either. \n\n\nYou can create content stream objects manually or 
implement the interface yourself, but OpenCMIS and PortCMIS provide some 
convenience methods for this.\n\n\nOpenCMIS (Java)\n\n\n// create a simple 
ContentStream object\nContentStream cs1 = 
session.getObjectFactory().createContentStream(filename, length, mimeType, 
stream);\n\n// create a ContentStream object from a byte array\nContentStream 
cs2 = ContentStreamUtils.createByteArrayContentStream(filename, bytes, 
mimeType);\n\n// create a ContentStream object from a string\nContentStream cs3 
= ContentStreamUtils.createTextContentStream(filena
 me, content);\n\n// create a ContentStream object from file\nContentStream cs4 
= ContentStreamUtils.createFileContentStream(file);\n\n\n\n\nPortCMIS 
(C#)\n\n\n// create a simple IContentStream object\nIContentStream cs1 = 
Session.ObjectFactory.CreateContentStream(filename, length, mimeType, 
stream);\n\n// create a IContentStream object from a byte array\nIContentStream 
cs2 = ContentStreamUtils.CreateByteArrayContentStream(filename, bytes, 
mimeType);\n\n// create a IContentStream object from a string\nIContentStream 
cs3 = ContentStreamUtils.CreateTextContentStream(filename, 
content);\n\n\n\n\nMIME Types\n\n\nWhen you create a new document or update the 
content of a document, you have to provide a MIME type.\nIf you don\nt know the 
MIME type, use \napplication/octet-stream\n.\n\n\nOpenCMIS can guess the MIME 
type based on the file extension.\nIf you need a more thorough MIME type 
detection, have a look at \nApache Tika\n.\n\n\nOpenCMIS (Java)\n\n\nString 
mimeType = MimeTypes.getMIMETy
 pe(\ntxt\n); // MIME type for a .txt file\n\n\n\n\nFor .Net 4.5+ you can use 
\nSystem.Web.MimeMapping.GetMimeMapping\n.\n\n\nPortCMIS (C#)\n\n\nstring 
mimeType = MimeMapping.GetMimeMapping(\ntext.txt\n);\n\n\n\n\nGetting 
Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nThe code snippets below show how to 
get the content of document.\n\n\n\n\nNote\n\n\nCMIS differentiates between 
documents with no content and documents with a content of 0 bytes.\n\nIf a 
document has no content, \ngetContentStream()\n returns \nnull\n. If a document 
has a 0 byte content, \ngetContentStream()\n returns a content stream object 
with an empty stream.\n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\nContentStream contentStream = document.getContentStream();\nInputStream 
stream = contentStream.getStream();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument 
document = ...\nIContentStream contentStream = 
document.GetContentStream();\nStream stream = 
contentStream.Stream;\n\n\n\n\nGetting Partial Content\n\n\nCMIS 1.0\n\n\nC
 MIS 1.1\n\n\nIt\ns also possible to get only a part of the 
content.\n\n\nOpenCMIS (Java)\n\n\nDocument document = ...\n\n// skip the first 
100 bytes\n// use null to start from the beginning\nBigInteger offset = 
BigInteger.valueOf(100);\n\n// only read 200 bytes\n// use null to read to the 
end of the stream\nBigInteger length = BigInteger.valueOf(200); 
\n\nContentStream contentStream = document.getContentStream(offset, 
length);\nInputStream stream = contentStream.getStream();\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\n// skip the first 100 bytes\n// use null 
to start from the beginning\nlong? offset = 100;\n\n// only read 200 bytes\n// 
use null to read to the end of the stream\nlong? length = 
200;\n\nIContentStream contentStream = document.GetContentStream(offset, 
length);\nStream stream = contentStream.Stream;\n\n\n\n\nUpdating 
Content\n\n\nOverwriting Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nOpenCMIS 
(Java)\n\n\nDocument document = ...\n\nContentStream contentStream = 
 ...\n\ndocument.setContentStream(contentStream, true);\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\nIContentStream contentStream = 
...\n\ndocument.SetContentStream(contentStream, true);\n\n\n\n\nDeleting 
Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\n\n\nWarning\n\n\nSome repositories  
don\nt support documents without content. Check the \nrepository capabilities\n 
if that\ns the case or check the\n\nAllowable Actions\n of the 
document.\n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\ndocument.deleteContentStream();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument 
document = ...\ndocument.DeleteContentStream();\n\n\n\n\nAppending 
Content\n\n\nCMIS 1.1\n\n\n\n\nWarning\n\n\nNot all repositories support 
appending content. It is not possible to discover wheter a repository supports 
it or not.\nIf you append content be prepared to catch a \nnotSupported\n 
exception. \n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\n\nContentStream contentStream = ...\nboolean isLastChunk = true; //
  indicates that this is the last part of the content 
\n\ndocument.appendContentStream(contentStream, isLastChunk);\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\nIContentStream contentStream = ...\nbool 
isLastChunk = true; // indicates that this is the last part of the content 
\n\ndocument.AppendContentStream(contentStream, isLastChunk);\n\n\n\n\nWorking 
with Renditions\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nSpec 2.1.4.2\n\n\nRenditions 
are alternative versions of a document. For example, a rendition could be a PDF 
of an Office document. Thumbnails are a special kind of renditions and could 
also exist for non-document objects.\n\nCMIS only supports server managed 
renditions. A CMIS client cannot upload, modify, or delete a 
rendition.\n\n\nGetting the List of Renditions\n\n\n\n\nNote\n\n\nThe list of 
renditions is only available if it has been requested with an \nOperation 
Context\n.\n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = ...\n\nfor 
(Rendition rendition: document.getRen
 ditions()) {\n    System.out.println(rendition.getTitle() + \n: \n + 
rendition.getStreamId());\n}\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument document = 
...\n\nforeach (IRendition rendition in folder.Renditions) {\n    
Console.WriteLine(rendition.Title + \n: \n + 
rendition.StreamId);\n}\n\n\n\n\nGetting Rendition Content\n\n\nThe rendition 
content can be retrieved either for an Rendition object (see above) or directly 
from the document with a stream ID.\n\n\nOpenCMIS (Java)\n\n\nDocument document 
= ...\nRendition rendition = ...\n\nContentStream cs1 = 
document.getContentStream(rendition.getStreamId());\n\nContentStream cs2 = 
rendition.getContentStream();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument document = 
...\nIRendition rendition = ...\n\nIContentStream cs1 = 
document.GetContentStream(rendition.StreamId);\n\nIContentStream cs2 = 
rendition.GetContentStream();", 
+            "text": "Working with Content\n\n\nCMIS 1.0\n\n\nCMIS 
1.1\n\n\nSpec 2.1.4.2\n\n\nContent Streams\n\n\nContent Stream objects are used 
to send and fetch content. They contain a file name, a \nMIME type\n, the 
stream length, and the stream.\n\n\nIn some cases, the stream length is unknown 
(\nnull\n). OpenCMIS and PortCMIS don\u2019t rely on it and your application 
shouldn\nt either. \n\n\nYou can create content stream objects manually or 
implement the interface yourself, but OpenCMIS and PortCMIS provide some 
convenience methods for this.\n\n\nOpenCMIS (Java)\n\n\n// create a simple 
ContentStream object\nContentStream cs1 = 
session.getObjectFactory().createContentStream(filename, length, mimeType, 
stream);\n\n// create a ContentStream object from a byte array\nContentStream 
cs2 = ContentStreamUtils.createByteArrayContentStream(filename, bytes, 
mimeType);\n\n// create a ContentStream object from a string\nContentStream cs3 
= ContentStreamUtils.createTextContentStream(filena
 me, content);\n\n// create a ContentStream object from file\nContentStream cs4 
= ContentStreamUtils.createFileContentStream(file);\n\n\n\n\nPortCMIS 
(C#)\n\n\n// create a simple IContentStream object\nIContentStream cs1 = 
Session.ObjectFactory.CreateContentStream(filename, length, mimeType, 
stream);\n\n// create a IContentStream object from a byte array\nIContentStream 
cs2 = ContentStreamUtils.CreateByteArrayContentStream(filename, bytes, 
mimeType);\n\n// create a IContentStream object from a string\nIContentStream 
cs3 = ContentStreamUtils.CreateTextContentStream(filename, 
content);\n\n\n\n\nMIME Types\n\n\nWhen you create a new document or update the 
content of a document, you have to provide a MIME type.\nIf you don\nt know the 
MIME type, use \napplication/octet-stream\n.\n\n\nOpenCMIS can guess the MIME 
type based on the file extension.\nIf you need a more thorough MIME type 
detection, have a look at \nApache Tika\n.\n\n\nOpenCMIS (Java)\n\n\nString 
mimeType = MimeTypes.getMIMETy
 pe(\ntxt\n); // MIME type for a .txt file\n\n\n\n\nFor .Net 4.5+ you can use 
\nSystem.Web.MimeMapping.GetMimeMapping\n.\n\n\nPortCMIS (C#)\n\n\nstring 
mimeType = MimeMapping.GetMimeMapping(\ntext.txt\n);\n\n\n\n\nGetting 
Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nThe code snippets below show how to 
get the content of document.\n\n\n\n\nNote\n\n\nCMIS differentiates between 
documents with no content and documents with a content of 0 bytes.\n\nIf a 
document has no content, \ngetContentStream()\n returns \nnull\n. If a document 
has a 0 byte content, \ngetContentStream()\n returns a content stream object 
with an empty stream.\n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\nContentStream contentStream = document.getContentStream();\nInputStream 
stream = contentStream.getStream();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument 
document = ...\nIContentStream contentStream = 
document.GetContentStream();\nStream stream = 
contentStream.Stream;\n\n\n\n\nGetting Partial Content\n\n\nCMIS 1.0\n\n\nC
 MIS 1.1\n\n\nIt\ns also possible to get only a part of the 
content.\n\n\nOpenCMIS (Java)\n\n\nDocument document = ...\n\n// skip the first 
100 bytes\n// use null to start from the beginning\nBigInteger offset = 
BigInteger.valueOf(100);\n\n// only read 200 bytes\n// use null to read to the 
end of the stream\nBigInteger length = BigInteger.valueOf(200); 
\n\nContentStream contentStream = document.getContentStream(offset, 
length);\nInputStream stream = contentStream.getStream();\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\n// skip the first 100 bytes\n// use null 
to start from the beginning\nlong? offset = 100;\n\n// only read 200 bytes\n// 
use null to read to the end of the stream\nlong? length = 
200;\n\nIContentStream contentStream = document.GetContentStream(offset, 
length);\nStream stream = contentStream.Stream;\n\n\n\n\nGetting a Content 
URL\n\n\nThe AtomPub Binding and the Browser Binding can provide a URL to the 
content of a document. Depending on the repository and th
 e binding, the server might not return the content but an error message 
because this URL does not include authentication data. A user may have to 
re-authenticate to get the content.\n\n\nOpenCMIS (Java)\n\n\nDocument document 
= ...\n\nString link = document.getContentUrl();\n\n\n\n\nUpdating 
Content\n\n\nOverwriting Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nOpenCMIS 
(Java)\n\n\nDocument document = ...\n\nContentStream contentStream = 
...\n\ndocument.setContentStream(contentStream, true);\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\nIContentStream contentStream = 
...\n\ndocument.SetContentStream(contentStream, true);\n\n\n\n\nDeleting 
Content\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\n\n\nWarning\n\n\nSome repositories  
don\nt support documents without content. Check the \nrepository capabilities\n 
if that\ns the case or check the\n\nAllowable Actions\n of the 
document.\n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\ndocument.deleteContentStream();\n\n\n\n\nPortCMIS (C#)\n\n\n
 IDocument document = ...\ndocument.DeleteContentStream();\n\n\n\n\nAppending 
Content\n\n\nCMIS 1.1\n\n\n\n\nWarning\n\n\nNot all repositories support 
appending content. It is not possible to discover wheter a repository supports 
it or not.\nIf you append content be prepared to catch a \nnotSupported\n 
exception. \n\n\n\n\nOpenCMIS (Java)\n\n\nDocument document = 
...\n\nContentStream contentStream = ...\nboolean isLastChunk = true; // 
indicates that this is the last part of the content 
\n\ndocument.appendContentStream(contentStream, isLastChunk);\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDocument document = ...\n\nIContentStream contentStream = ...\nbool 
isLastChunk = true; // indicates that this is the last part of the content 
\n\ndocument.AppendContentStream(contentStream, isLastChunk);\n\n\n\n\nWorking 
with Renditions\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nSpec 2.1.4.2\n\n\nRenditions 
are alternative versions of a document. For example, a rendition could be a PDF 
of an Office document. Thumbnails ar
 e a special kind of renditions and could also exist for non-document 
objects.\n\nCMIS only supports server managed renditions. A CMIS client cannot 
upload, modify, or delete a rendition.\n\n\nGetting the List of 
Renditions\n\n\n\n\nNote\n\n\nThe list of renditions is only available if it 
has been requested with an \nOperation Context\n.\n\n\n\n\nOpenCMIS 
(Java)\n\n\nDocument document = ...\n\nfor (Rendition rendition: 
document.getRenditions()) {\n    System.out.println(rendition.getTitle() + \n: 
\n + rendition.getStreamId());\n}\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument 
document = ...\n\nforeach (IRendition rendition in folder.Renditions) {\n    
Console.WriteLine(rendition.Title + \n: \n + 
rendition.StreamId);\n}\n\n\n\n\nGetting Rendition Content\n\n\nThe rendition 
content can be retrieved either for an Rendition object (see above) or directly 
from the document with a stream ID.\n\n\nOpenCMIS (Java)\n\n\nDocument document 
= ...\nRendition rendition = ...\n\nContentStream cs1 = document
 .getContentStream(rendition.getStreamId());\n\nContentStream cs2 = 
rendition.getContentStream();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument document = 
...\nIRendition rendition = ...\n\nIContentStream cs1 = 
document.GetContentStream(rendition.StreamId);\n\nIContentStream cs2 = 
rendition.GetContentStream();", 
             "title": "Working with Content"
         }, 
         {
@@ -496,6 +496,11 @@
             "title": "Getting Partial Content"
         }, 
         {
+            "location": "/samples/content/index.html#getting-a-content-url", 
+            "text": "The AtomPub Binding and the Browser Binding can provide a 
URL to the content of a document. Depending on the repository and the binding, 
the server might not return the content but an error message because this URL 
does not include authentication data. A user may have to re-authenticate to get 
the content.  OpenCMIS (Java)  Document document = ...\n\nString link = 
document.getContentUrl();", 
+            "title": "Getting a Content URL"
+        }, 
+        {
             "location": "/samples/content/index.html#updating-content", 
             "text": "", 
             "title": "Updating Content"
@@ -572,7 +577,7 @@
         }, 
         {
             "location": "/samples/properties/index.html", 
-            "text": "Working with Properties and Secondary Types\n\n\nData 
Types\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nThe table below shows how the CMIS data 
types are mapped to Java and C# data types.\n\n\n\n\n\n\n\n\nCMIS Data 
Type\n\n\nOpenCMIS (Java)\n\n\nPortCMIS 
(C#)\n\n\n\n\n\n\n\n\n\n\nstring\n\n\nString\n\n\nstring\n\n\n\n\n\n\nboolean\n\n\nboolean\n\n\nbool\n\n\n\n\n\n\ndecimal\n\n\nBigDecimal\n,
 float, double, byte, short, int, long\n\n\ndecimal\n, float, 
double\n\n\n\n\n\n\ninteger\n\n\nBigInteger\n, byte, short, int, 
long\n\n\nBigInteger\n, sbyte, byte, short, ushort, int, uint, 
long\n\n\n\n\n\n\ndatetime\n\n\nGregorianCalendar\n, 
Date\n\n\nDateTime\n\n\n\n\n\n\nuri\n\n\nString\n\n\nstring\n\n\n\n\n\n\nid\n\n\nString\n\n\nstring\n\n\n\n\n\n\nhtml\n\n\nString\n\n\nstring\n\n\n\n\n\n\n\n\nSecondary
 Types\n\n\nCMIS 1.1\n\n\nSpec 2.1.19", 
+            "text": "Working with Properties and Secondary Types\n\n\nData 
Types\n\n\nCMIS 1.0\n\n\nCMIS 1.1\n\n\nThe table below shows how the CMIS data 
types are mapped to Java and C# data types.\nMulti-value property values are 
set and returned as lists of these data types.\n\n\n\n\n\n\n\n\nCMIS Data 
Type\n\n\nOpenCMIS (Java)\n\n\nPortCMIS 
(C#)\n\n\n\n\n\n\n\n\n\n\nstring\n\n\nString\n\n\nstring\n\n\n\n\n\n\nboolean\n\n\nBoolean\n\n\nbool\n\n\n\n\n\n\ndecimal\n\n\nBigDecimal\n,
 float, double, byte, short, int, long\n\n\ndecimal\n, float, 
double\n\n\n\n\n\n\ninteger\n\n\nBigInteger\n, byte, short, int, 
long\n\n\nBigInteger\n, sbyte, byte, short, ushort, int, uint, 
long\n\n\n\n\n\n\ndatetime\n\n\nGregorianCalendar\n, 
Date\n\n\nDateTime\n\n\n\n\n\n\nuri\n\n\nString\n\n\nstring\n\n\n\n\n\n\nid\n\n\nString\n\n\nstring\n\n\n\n\n\n\nhtml\n\n\nString\n\n\nstring\n\n\n\n\n\n\n\n\nProperties\n\n\nRetrieving
 Properties\n\n\n\n\nNote\n\n\nOnly the properties that have been requested are 
avai
 lable. Use an \nOperation Context\n to define, which properties should be 
provided by the repository.\n\n\n\n\nThe value of a property that is not set, 
has not been provided by the repository, or of a property that does not exits 
is \nnull\n.\n\n\nOpenCMIS (Java)\n\n\nDocument doc = ...\n\n// properties 
defined in the CMIS specification have getters (here are just a few 
examples)\nString id = doc.getId();\nString name = doc.getName();\nString 
creator = doc.getCreatedBy();\nGregorianCalendar lastModification = 
doc.getLastModificationDate();\n\n\n// all property values can be accessed by 
their property ID\nString name2 = 
doc.getPropertyValue(\ncmis:name\n);\nBigInteger projectNumber = 
doc.getPropertyValue(\nproject:number\n);\n\n// multi value property values are 
always returned as lists\nList\nString\n colors = 
doc.getPropertyValue(\nproject:colors\n);\n\n\n// there is detailed information 
about a property available for generic clients\nProperty\nString\n nameProp = 
doc.getProperty(\
 ncmis:name\n);\nPropertyType namePropType = nameProp.getType();\nboolean 
nameMultiValued = nameProp.isMultiValued();\nString name3 = 
nameProp.getValue();\n\nProperty\nBoolean\n lightsProp = 
doc.getProperty(\nlights:on\n);\nPropertyType lightsPropType = 
lightsProp.getType();\nboolean lightsMultiValued = 
lightsProp.isMultiValued();\nBoolean lightsValue = 
lightsProp.getValue();\n\n\n\n\nPortCMIS (C#)\n\n\nIDocument doc = ...\n\n// 
properties defined in the CMIS specification have getters (here are just a few 
examples)\nstring id = doc.Id;\nstring name = doc.Name;\nstring creator = 
doc.CreatedBy;\nDateTime? lastModification = doc.LastModificationDate;\n\n// 
all property values can be accessed by their property ID\nstring name2 = 
doc.GetPropertyAsStringValue(\ncmis:name\n);\nBigInteger projectNumber = 
(BigInteger)doc.GetPropertyValue(\nproject:number\n);\n\n// multi value 
property values are always returned as lists\nIList\nstring\n colors = 
(IList\nstring\n)doc.GetPropertyValue(\nprojec
 t:colors\n);\n\n// there is detailed information about a property available 
for generic clients\nIProperty nameProp = doc[\ncmis:name\n];\nPropertyType? 
namePropType = nameProp.PropertyType;\nbool nameMultiValued = 
nameProp.IsMultiValued;\nstring name3 = (string)nameProp.Value;\n\nIProperty 
lightsProp = doc[\nlights:on\n];\nPropertyType? lightsPropType = 
lightsProp.PropertyType;\nbool lightsMultiValued = 
lightsProp.IsMultiValued;\nbool? lightsValue = 
(bool?)lightsProp.Value;\n\n\n\n\n\nSetting Properties\n\n\nBefore OpenCMIS or 
PortCMIS sends properties to a repository, it checks the type definition 
whether the properties exist or not, if the data types match, and if 
multi-value properties contain \nnull\n values. If it detects a problem, it 
throws an exception before it sends anything to the repository.\n\n\nIf a 
property cannot be set, for example because it is a read-only property, 
OpenCMIS or PortCMIS silently filters out the property. The value is not sent 
to the repository.\n\
 n\nOpenCMIS (Java)\n\n\nMap\nString, Object\n properties = new 
HashMap\nString, Object\n();\n\n// adding single value 
properties\nproperties.put(PropertyIds.NAME, 
\nthe-tower\n);\nproperties.put(\nproject:number\n, 
1234);\nproperties.put(\nproject:now\n, new 
GregorianCalendar());\nproperties.put(\nproject:onTime\n, 
true);\nproperties.put(\nproject:budget\n, new 
BigDecimal(\n654321.98\n));\n\n// adding a multi value property\nList\nString\n 
colors = new 
ArrayList\nString\n();\ncolors.add(\nred\n);\ncolors.add(\ngreen\n);\ncolors.add(\nblue\n);\n\nproperties.put(\nproject:colors\n,
 colors); \n\n// unsetting a property\nproperties.put(\nproject:something\n, 
null);\n\n// call create... or update...\n\n\n\n\nPortCMIS 
(C#)\n\n\nIDictionary\nstring, object\n properties = new Dictionary\nstring, 
object\n();\n\n// adding single value properties\nproperties[PropertyIds.Name] 
= \nthe-tower\n;\nproperties[\nproject:number\n] = 
1234;\nproperties[\nproject:now\n] = DateTime.Now;\nproperties[\npro
 ject:onTime\n] = true;\nproperties[\nproject:budget\n] = 654321.98M;\n\n// 
adding a multi value property\nIList\nstring\n colors = new 
List\nstring\n();\ncolors.Add(\nred\n);\ncolors.Add(\ngreen\n);\ncolors.Add(\nblue\n);\n\nproperties[\nproject:colors\n]
 = colors; \n\n// unsetting a property\nproperties[\nproject:something\n] = 
null;\n\n// call Create... or Update...\n\n\n\n\nSecondary Types\n\n\nCMIS 
1.1\n\n\nSpec 2.1.19\n\n\nSecondary types can be added during creation of an 
object and later added and removed by updating its properties.\n\n\nIn general, 
secondary types can be added and removed at any time.\nBut a repository may 
have rules and constraints that prevents a client from making those 
changes.\n\n\nSetting Secondary Types\n\n\nOpenCMIS (Java)\n\n\nFolder parent = 
...\n\nMap\nString, Object\n properties = new HashMap\nString, 
Object\n();\n\n// set standard CMIS 
properties\nproperties.put(PropertyIds.NAME, 
\nMyNewDocument\n);\nproperties.put(PropertyIds.OBJECT_TYPE_ID, \n
 cmis:document\n);\n\n// add two secondary types\nList\nString\n secondaryTypes 
= new 
ArrayList\nString\n();\nsecondaryTypes.add(\ncustom:classifictaion\n);\nsecondaryTypes.add(\ncustom:draft\n);\n\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
 secondaryTypes);\n\n// set secondary type 
properties\nproperties.put(\nclassifictaion\n, 
\nconfidential\n);\nproperties.put(\ndraftState\n, \nearly\n);\n\nContentStream 
contentStream = ...\n\n// create the document\nDocument newDoc = 
parent.createDocument(properties, contentStream, 
VersioningState.NONE);\n\n\n\n\nPortCMIS (C#)\n\n\nIFolder parent = 
...\n\nIDictionary\nstring, object\n properties = new Dictionary\nstring, 
object\n();\n\n// set standard CMIS properties\nproperties[PropertyIds.Name] = 
\nMyNewDocument\n;\nproperties[PropertyIds.ObjectTypeId] = 
\ncmis:document\n;\n\n// add two secondary types\nIList\nstring\n 
secondaryTypes = new 
List\nstring\n();\nsecondaryTypes.Add(\ncustom:classifictaion\n);\nsecondaryTypes.Add(\ncustom:
 draft\n);\n\nproperties[PropertyIds.SecondaryObjectTypeIds] = 
secondaryTypes;\n\n// set secondary type 
properties\nproperties[\nclassifictaion\n] = 
\nconfidential\n;\nproperties[\ndraftState\n] = \nearly\n;\n\nContentStream 
contentStream = ...\n\n// create the document\nIDocument newDoc = 
parent.CreateDocument(properties, contentStream, 
VersioningState.None);\n\n\n\n\nAdding Secondary Types\n\n\nOpenCMIS 
(Java)\n\n\nCmisObject cmisObject = ...\n\n// get current list of secondary 
types\nList\nString\n secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);\nif 
(secondaryTypes == null) {\n    secondaryTypes = new 
ArrayList\nString\n();\n}\n\nMap\nString, Object\n properties = new 
HashMap\nString, Object\n();\n\n// add the new secondary 
type\nsecondaryTypes.add(\ncustom:classifictaion\n);\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
 secondaryTypes);\n\n// set secondary type 
property\nproperties.put(\nclassifictaion\n, \npublic\n);\n\n// 
update\ncmisObjec
 t.updateProperties(properties);\n\n\n\n\n\nPortCMIS (C#)\n\n\nICmisObject 
cmisObject = ...\n\n// get current list of secondary types\nIList\nstring\n 
secondaryTypes = 
(IList\nstring\n)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);\nif 
(secondaryTypes == null) {\n    secondaryTypes = new 
List\nstring\n();\n}\n\nIDictonary\nstring, object\n properties = new 
Dictonary\nstring, object\n();\n\n// add the new secondary 
type\nsecondaryTypes.Add(\ncustom:classifictaion\n);\nproperties[PropertyIds.SecondaryObjectTypeIds]
 = secondaryTypes;\n\n// set secondary type 
property\nproperties[\nclassifictaion\n] = \npublic\n;\n\n// 
update\ncmisObject.UpdateProperties(properties);\n\n\n\n\nRemoving Secondary 
Types\n\n\nOpenCMIS (Java)\n\n\nCmisObject cmisObject = ...\n\n// get the 
current list of secondary types\nList\nString\n secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);\nif 
(secondaryTypes == null || !secondaryTypes.contains(\ncustom:classifictaion\n)) 
{\n
     // there is nothing to remove\n    return;\n}\n\nMap\nString, Object\n 
properties = new HashMap\nString, Object\n();\n\n// remove the new secondary 
type\nsecondaryTypes.remove(\ncustom:classifictaion\n);\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
 secondaryTypes);\n\n// 
update\ncmisObject.updateProperties(properties);\n\n\n\n\nPortCMIS 
(C#)\n\n\nICmisObject cmisObject = ...\n\n// get current list of secondary 
types\nIList\nstring\n secondaryTypes = 
(IList\nstring\n)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);\nif 
(secondaryTypes == null || !secondaryTypes.Contains(\ncustom:classifictaion\n)) 
{\n    // there is nothing to remove\n    return;\n}\n\nIDictionary\nstring, 
object\n properties = new Dictionary\nstring, object\n();\n\n// remove the 
secondary 
type\nsecondaryTypes.Remove(\ncustom:classifictaion\n);\nproperties[PropertyIds.SecondaryObjectTypeIds]
 = secondaryTypes;\n\n// update\ncmisObject.UpdateProperties(properties);", 
             "title": "Working with Properties and Secondary Types"
         }, 
         {
@@ -582,15 +587,45 @@
         }, 
         {
             "location": "/samples/properties/index.html#data-types", 
-            "text": "CMIS 1.0  CMIS 1.1  The table below shows how the CMIS 
data types are mapped to Java and C# data types.     CMIS Data Type  OpenCMIS 
(Java)  PortCMIS (C#)      string  String  string    boolean  boolean  bool    
decimal  BigDecimal , float, double, byte, short, int, long  decimal , float, 
double    integer  BigInteger , byte, short, int, long  BigInteger , sbyte, 
byte, short, ushort, int, uint, long    datetime  GregorianCalendar , Date  
DateTime    uri  String  string    id  String  string    html  String  string", 
+            "text": "CMIS 1.0  CMIS 1.1  The table below shows how the CMIS 
data types are mapped to Java and C# data types.\nMulti-value property values 
are set and returned as lists of these data types.     CMIS Data Type  OpenCMIS 
(Java)  PortCMIS (C#)      string  String  string    boolean  Boolean  bool    
decimal  BigDecimal , float, double, byte, short, int, long  decimal , float, 
double    integer  BigInteger , byte, short, int, long  BigInteger , sbyte, 
byte, short, ushort, int, uint, long    datetime  GregorianCalendar , Date  
DateTime    uri  String  string    id  String  string    html  String  string", 
             "title": "Data Types"
         }, 
         {
+            "location": "/samples/properties/index.html#properties", 
+            "text": "", 
+            "title": "Properties"
+        }, 
+        {
+            "location": 
"/samples/properties/index.html#retrieving-properties", 
+            "text": "Note  Only the properties that have been requested are 
available. Use an  Operation Context  to define, which properties should be 
provided by the repository.   The value of a property that is not set, has not 
been provided by the repository, or of a property that does not exits is  null 
.  OpenCMIS (Java)  Document doc = ...\n\n// properties defined in the CMIS 
specification have getters (here are just a few examples)\nString id = 
doc.getId();\nString name = doc.getName();\nString creator = 
doc.getCreatedBy();\nGregorianCalendar lastModification = 
doc.getLastModificationDate();\n\n\n// all property values can be accessed by 
their property ID\nString name2 = doc.getPropertyValue( cmis:name 
);\nBigInteger projectNumber = doc.getPropertyValue( project:number );\n\n// 
multi value property values are always returned as lists\nList String  colors = 
doc.getPropertyValue( project:colors );\n\n\n// there is detailed information 
about a property available for generic cli
 ents\nProperty String  nameProp = doc.getProperty( cmis:name );\nPropertyType 
namePropType = nameProp.getType();\nboolean nameMultiValued = 
nameProp.isMultiValued();\nString name3 = nameProp.getValue();\n\nProperty 
Boolean  lightsProp = doc.getProperty( lights:on );\nPropertyType 
lightsPropType = lightsProp.getType();\nboolean lightsMultiValued = 
lightsProp.isMultiValued();\nBoolean lightsValue = lightsProp.getValue();  
PortCMIS (C#)  IDocument doc = ...\n\n// properties defined in the CMIS 
specification have getters (here are just a few examples)\nstring id = 
doc.Id;\nstring name = doc.Name;\nstring creator = doc.CreatedBy;\nDateTime? 
lastModification = doc.LastModificationDate;\n\n// all property values can be 
accessed by their property ID\nstring name2 = doc.GetPropertyAsStringValue( 
cmis:name );\nBigInteger projectNumber = (BigInteger)doc.GetPropertyValue( 
project:number );\n\n// multi value property values are always returned as 
lists\nIList string  colors = (IList string )doc.
 GetPropertyValue( project:colors );\n\n// there is detailed information about 
a property available for generic clients\nIProperty nameProp = doc[ cmis:name 
];\nPropertyType? namePropType = nameProp.PropertyType;\nbool nameMultiValued = 
nameProp.IsMultiValued;\nstring name3 = (string)nameProp.Value;\n\nIProperty 
lightsProp = doc[ lights:on ];\nPropertyType? lightsPropType = 
lightsProp.PropertyType;\nbool lightsMultiValued = 
lightsProp.IsMultiValued;\nbool? lightsValue = (bool?)lightsProp.Value;", 
+            "title": "Retrieving Properties"
+        }, 
+        {
+            "location": "/samples/properties/index.html#setting-properties", 
+            "text": "Before OpenCMIS or PortCMIS sends properties to a 
repository, it checks the type definition whether the properties exist or not, 
if the data types match, and if multi-value properties contain  null  values. 
If it detects a problem, it throws an exception before it sends anything to the 
repository.  If a property cannot be set, for example because it is a read-only 
property, OpenCMIS or PortCMIS silently filters out the property. The value is 
not sent to the repository.  OpenCMIS (Java)  Map String, Object  properties = 
new HashMap String, Object ();\n\n// adding single value 
properties\nproperties.put(PropertyIds.NAME,  the-tower );\nproperties.put( 
project:number , 1234);\nproperties.put( project:now , new 
GregorianCalendar());\nproperties.put( project:onTime , true);\nproperties.put( 
project:budget , new BigDecimal( 654321.98 ));\n\n// adding a multi value 
property\nList String  colors = new ArrayList String ();\ncolors.add( red 
);\ncolors.add( green );\ncolor
 s.add( blue );\n\nproperties.put( project:colors , colors); \n\n// unsetting a 
property\nproperties.put( project:something , null);\n\n// call create... or 
update...  PortCMIS (C#)  IDictionary string, object  properties = new 
Dictionary string, object ();\n\n// adding single value 
properties\nproperties[PropertyIds.Name] =  the-tower ;\nproperties[ 
project:number ] = 1234;\nproperties[ project:now ] = 
DateTime.Now;\nproperties[ project:onTime ] = true;\nproperties[ project:budget 
] = 654321.98M;\n\n// adding a multi value property\nIList string  colors = new 
List string ();\ncolors.Add( red );\ncolors.Add( green );\ncolors.Add( blue 
);\n\nproperties[ project:colors ] = colors; \n\n// unsetting a 
property\nproperties[ project:something ] = null;\n\n// call Create... or 
Update...", 
+            "title": "Setting Properties"
+        }, 
+        {
             "location": "/samples/properties/index.html#secondary-types", 
-            "text": "CMIS 1.1  Spec 2.1.19", 
+            "text": "CMIS 1.1  Spec 2.1.19  Secondary types can be added 
during creation of an object and later added and removed by updating its 
properties.  In general, secondary types can be added and removed at any 
time.\nBut a repository may have rules and constraints that prevents a client 
from making those changes.", 
             "title": "Secondary Types"
         }, 
         {
+            "location": 
"/samples/properties/index.html#setting-secondary-types", 
+            "text": "OpenCMIS (Java)  Folder parent = ...\n\nMap String, 
Object  properties = new HashMap String, Object ();\n\n// set standard CMIS 
properties\nproperties.put(PropertyIds.NAME,  MyNewDocument 
);\nproperties.put(PropertyIds.OBJECT_TYPE_ID,  cmis:document );\n\n// add two 
secondary types\nList String  secondaryTypes = new ArrayList String 
();\nsecondaryTypes.add( custom:classifictaion );\nsecondaryTypes.add( 
custom:draft );\n\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, 
secondaryTypes);\n\n// set secondary type properties\nproperties.put( 
classifictaion ,  confidential );\nproperties.put( draftState ,  early 
);\n\nContentStream contentStream = ...\n\n// create the document\nDocument 
newDoc = parent.createDocument(properties, contentStream, 
VersioningState.NONE);  PortCMIS (C#)  IFolder parent = ...\n\nIDictionary 
string, object  properties = new Dictionary string, object ();\n\n// set 
standard CMIS properties\nproperties[PropertyIds.Name] =  MyNewDocument ;\
 nproperties[PropertyIds.ObjectTypeId] =  cmis:document ;\n\n// add two 
secondary types\nIList string  secondaryTypes = new List string 
();\nsecondaryTypes.Add( custom:classifictaion );\nsecondaryTypes.Add( 
custom:draft );\n\nproperties[PropertyIds.SecondaryObjectTypeIds] = 
secondaryTypes;\n\n// set secondary type properties\nproperties[ classifictaion 
] =  confidential ;\nproperties[ draftState ] =  early ;\n\nContentStream 
contentStream = ...\n\n// create the document\nIDocument newDoc = 
parent.CreateDocument(properties, contentStream, VersioningState.None);", 
+            "title": "Setting Secondary Types"
+        }, 
+        {
+            "location": 
"/samples/properties/index.html#adding-secondary-types", 
+            "text": "OpenCMIS (Java)  CmisObject cmisObject = ...\n\n// get 
current list of secondary types\nList String  secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);\nif 
(secondaryTypes == null) {\n    secondaryTypes = new ArrayList String 
();\n}\n\nMap String, Object  properties = new HashMap String, Object ();\n\n// 
add the new secondary type\nsecondaryTypes.add( custom:classifictaion 
);\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, 
secondaryTypes);\n\n// set secondary type property\nproperties.put( 
classifictaion ,  public );\n\n// 
update\ncmisObject.updateProperties(properties);  PortCMIS (C#)  ICmisObject 
cmisObject = ...\n\n// get current list of secondary types\nIList string  
secondaryTypes = (IList string 
)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);\nif (secondaryTypes 
== null) {\n    secondaryTypes = new List string ();\n}\n\nIDictonary string, 
object  properties = new Dictonary string, object ();\n\n// add the new se
 condary type\nsecondaryTypes.Add( custom:classifictaion 
);\nproperties[PropertyIds.SecondaryObjectTypeIds] = secondaryTypes;\n\n// set 
secondary type property\nproperties[ classifictaion ] =  public ;\n\n// 
update\ncmisObject.UpdateProperties(properties);", 
+            "title": "Adding Secondary Types"
+        }, 
+        {
+            "location": 
"/samples/properties/index.html#removing-secondary-types", 
+            "text": "OpenCMIS (Java)  CmisObject cmisObject = ...\n\n// get 
the current list of secondary types\nList String  secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);\nif 
(secondaryTypes == null || !secondaryTypes.contains( custom:classifictaion )) 
{\n    // there is nothing to remove\n    return;\n}\n\nMap String, Object  
properties = new HashMap String, Object ();\n\n// remove the new secondary 
type\nsecondaryTypes.remove( custom:classifictaion 
);\nproperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, 
secondaryTypes);\n\n// update\ncmisObject.updateProperties(properties);  
PortCMIS (C#)  ICmisObject cmisObject = ...\n\n// get current list of secondary 
types\nIList string  secondaryTypes = (IList string 
)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);\nif (secondaryTypes 
== null || !secondaryTypes.Contains( custom:classifictaion )) {\n    // there 
is nothing to remove\n    return;\n}\n\nIDictionary string, object  properties 
= new Dict
 ionary string, object ();\n\n// remove the secondary 
type\nsecondaryTypes.Remove( custom:classifictaion 
);\nproperties[PropertyIds.SecondaryObjectTypeIds] = secondaryTypes;\n\n// 
update\ncmisObject.UpdateProperties(properties);", 
+            "title": "Removing Secondary Types"
+        }, 
+        {
             "location": "/samples/operation-context/index.html", 
             "text": "Understanding the Operation Context\n\n\nThe amount of 
metadata and associated information retrieved during an OpenCMIS or PortCMIS 
operation could be large, so certain methods return a sensible subset of the 
information by default, and provide additional methods that take an 
OperationContext. An OperationContext allows you to tune the amount of 
information returned by setting property filters, rendition filters, or by 
setting flags to include path segments, ACLs, Allowable Actions, Policies, and 
Relationships. The OperationContext is also used to control paging and caching 
in an operation.\n\n\nProperty Filter\n\n\nSpec 2.2.1.2.1\n\n\nThe property 
filter defines which properties the repository must return. Only select the 
properties you really need to keep the transferred data as small as possible. 
The repository may return more properties than specified.\n\n\n\n\nQuery 
Names\n\n\nThe property filter is a collection of query names, not property 
IDs. The query n
 ames and property IDs of all properties defined in the CMIS specifation are 
same and therefore interchangeable. That might not be the case for custom 
types. \n\n\n\n\n\n\nMinimal Property Filter\n\n\nOpenCMIS and PortCMIS need at 
least the properties \ncmis:objectId\n, \ncmis:baseTypeId\n, and 
\ncmis:objectTypeId\n to create objects.\nThe default operation context 
implementation adds these properties automatically if they are missing in the 
property filter.\n\n\n\n\nOpenCMIS (Java)\n\n\nOperationContext oc = 
...\noc.setFilterString(\ncmis:objectId,cmis:name,cmis:createdBy\n);\n\n\n\n\nPortCMIS
 (C#)\n\n\nIOperationContext oc = ...\noc.FilterString = 
\ncmis:objectId,cmis:name,cmis:createdBy\n;\n\n\n\n\nAllowable 
Actions\n\n\nSpec 2.2.1.2.6\n\n\nCalculating the Allowable Actions of an object 
can be very expensive for a repository. Don\nt request them if you don\nt need 
them.\n\n\nOpenCMIS (Java)\n\n\nOperationContext oc = 
...\noc.setIncludeAllowableActions(false); // don't request Allo
 wable Actions\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = 
...\noc.IncludeAllowableActions = false; // don't request Allowable 
Actions\n\n\n\n\nACLs\n\n\nSpec 2.2.1.2.5\n\n\nOpenCMIS 
(Java)\n\n\nOperationContext oc = ...\noc.setIncludeAcls(true); // request 
ACLs\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = ...\noc.IncludeAcls = 
true; // request ACLs\n\n\n\n\nRelationships\n\n\nSpec 2.2.1.2.2\n\n\nOpenCMIS 
(Java)\n\n\nOperationContext oc = 
...\noc.setIncludeRelationships(IncludeRelationships.BOTH); // request source 
and target relationships\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = 
...\noc.IncludeRelationships = IncludeRelationships.Both; // request source and 
target relationships\n\n\n\n\nPolicies\n\n\nSpec 2.2.1.2.3\n\n\nOpenCMIS 
(Java)\n\n\nOperationContext oc = ...\noc.setIncludePolicies(true); // request 
policies\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = 
...\noc.IncludePolicies = true; // request policies\n\n\n\n\nRendition 
Filter\n\n\nSpec 2.2.1.2.
 4\n\n\nThe rendition filter defines which rendition details should be returned 
by the repository. This filter is a comma separated list of rendition kinds 
(e.g. \ncmis:thumbnail\n) and MIME types. \n\n\nOpenCMIS 
(Java)\n\n\nOperationContext oc = 
...\noc.setRenditionFilterString(\ncmis:thumbnail,image/*\n);\n\n\n\n\nPortCMIS 
(C#)\n\n\nIOperationContext oc = ...\noc.RenditionFilterString = 
\ncmis:thumbnail,image/*\n;\n\n\n\n\nRendition filer examples:\n\n\n\n\n*\n 
(include all renditions)\n\n\ncmis:thumbnail\n (include only 
thumbnails)\n\n\nimage/*\n (include all image 
renditions)\n\n\napplication/pdf,application/x-shockwave-flash\n (include web 
ready renditions)\n\n\ncmis:none\n (exclude all renditions)\n\n\n\n\nOrder 
By\n\n\nSpec 2.2.1.2.7\n\n\nThe list of objects returned by \ngetChildren\n, 
\ngetCheckedOutDocs\n, and \nqueryObjects\n can be ordered. This is a comma 
separated list of query names, followed by an optional ascending modifier 
\nASC\n or descending modifier \nDESC\n for
  each query name. If the modifier is not stated, \nASC\n is 
assumed.\n\n\n\n\nQuery Names\n\n\nSimilar to the property filter this is a 
collection of query names, not property IDs.\n\n\n\n\nOpenCMIS 
(Java)\n\n\nOperationContext oc = ...\noc.setOrderBy(\ncmis:createdBy 
DESC,cmis:name ASC\n);\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = 
...\noc.OrderBy(\ncmis:createdBy DESC,cmis:name 
ASC\n);\n\n\n\n\nCaching\n\n\nAll objects retrieved by \ngetObject\n and 
\ngetObjectByPath\n are cached by default. If caching is turned off by an 
Operation Context, objects are not looked up in the cache and are not put into 
the cache. The methods getObject and getObjectByPath make a round-trip to the 
repository and get up-to-date data.\n\n\nSee also the section about the 
\nobject cache\n.\n\n\nOpenCMIS (Java)\n\n\nOperationContext oc = 
...\noc.setCacheEnabled(false); // no caching please\n\n\n\n\nPortCMIS 
(C#)\n\n\nIOperationContext oc = ...\noc.CacheEnabled = false; // no caching 
please\n\n\n\n\n
 Creating Operation Context Objects\n\n\nOpenCMIS (Java)\n\n\n// create the 
default operation context\nOperationContext oc1 = 
session.createOperationContext();\n\n// create an operation context that 
selects nothing except the provided properties\nOperationContext oc2 = 
OperationContextUtils.createMinimumOperationContext(\ncmis:objectId\n, 
\ncmis:name\n, \ncmis:createdBy\n);\n\n// create an operation context that 
selects everything\nOperationContext oc3 = 
OperationContextUtils.createMaximumOperationContext();\n\n\n\n\nPortCMIS 
(C#)\n\n\n// create the default operation context\nIOperationContext oc1 = 
Session.CreateOperationContext();\n\n// create an operation context that 
selects nothing except the provided properties\nIOperationContext oc2 = 
OperationContextUtils.CreateMinimumOperationContext(\ncmis:objectId\n, 
\ncmis:name\n, \ncmis:createdBy\n);\n\n// create an operation context that 
selects everything\nIOperationContext oc3 = 
OperationContextUtils.CreateMaximumOperationContext();\n
 \n\n\n\nUsing an Operation Context\n\n\nMany methods that retrieve objects or 
data accept an Operation Context object as an additional parameter.\nIf no 
Operation Context object is provided, a default Operation Context object 
defines what should be requested.\n\n\nOpenCMIS (Java)\n\n\nOperationContext oc 
= ...\n\nCmisObject cmisObject1 = session.getObject(id, oc);\nCmisObject 
cmisObject2 = session.getObjectByPath(path, oc);\nItemIterable\nCmisObject\n 
children = folder.getChildren(oc);\nList\nDocument\n versions = 
doc.getAllVersions(oc);\n\n\n\n\nPortCMIS (C#)\n\n\nIOperationContext oc = 
...\n\nICmisObject cmisObject1 = session.GetObject(id, oc);\nICmisObject 
cmisObject2 = session.GetObjectByPath(path, 
oc);\nIItemEnumerable\nICmisObject\n children = 
folder.GetChildren(oc);\nIList\nIDocument\n versions = 
doc.GetAllVersions(oc);", 
             "title": "Understanding the Operation Context"

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/access-control/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/access-control/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/access-control/index.html
 Fri Aug  5 12:39:52 2016
@@ -346,4 +346,4 @@
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.159912 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.187503 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/allowable-actions/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/allowable-actions/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/allowable-actions/index.html
 Fri Aug  5 12:39:52 2016
@@ -356,4 +356,4 @@ if (cmisObject.HasAllowableAction(PortCM
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.143206 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.173607 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/capabilities/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/capabilities/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/capabilities/index.html
 Fri Aug  5 12:39:52 2016
@@ -383,4 +383,4 @@ boolean supportsUnfiling = Boolean.TRUE.
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.719605 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.740466 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/changelog/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/changelog/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/changelog/index.html
 Fri Aug  5 12:39:52 2016
@@ -352,4 +352,4 @@ if (events != null &amp;&amp; events.get
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.126765 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.157522 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/content/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/content/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/content/index.html
 Fri Aug  5 12:39:52 2016
@@ -289,6 +289,8 @@
             
                 <li class="third-level"><a 
href="#getting-partial-content">Getting Partial Content</a></li>
             
+                <li class="third-level"><a 
href="#getting-a-content-url">Getting a Content URL</a></li>
+            
         
             <li class="second-level"><a href="#updating-content">Updating 
Content</a></li>
             
@@ -413,6 +415,14 @@ IContentStream contentStream = document.
 Stream stream = contentStream.Stream;
 </code></pre>
 
+<h3 id="getting-a-content-url">Getting a Content URL</h3>
+<p>The AtomPub Binding and the Browser Binding can provide a URL to the 
content of a document. Depending on the repository and the binding, the server 
might not return the content but an error message because this URL does not 
include authentication data. A user may have to re-authenticate to get the 
content.</p>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">Document document = ...
+
+String link = document.getContentUrl();
+</code></pre>
+
 <h2 id="updating-content">Updating Content</h2>
 <h3 id="overwriting-content">Overwriting Content</h3>
 <p><span class="cmis">CMIS 1.0</span>
@@ -571,4 +581,4 @@ IContentStream cs2 = rendition.GetConten
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.957864 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.970377 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-objects/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-objects/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-objects/index.html
 Fri Aug  5 12:39:52 2016
@@ -566,4 +566,4 @@ ObjectId newFolderId = session.createFol
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.846266 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.862163 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-session/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-session/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/create-session/index.html
 Fri Aug  5 12:39:52 2016
@@ -502,4 +502,4 @@ ISession session = factory.GetRepositori
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.695828 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.719226 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/delete-objects/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/delete-objects/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/delete-objects/index.html
 Fri Aug  5 12:39:52 2016
@@ -403,4 +403,4 @@ folder.DeleteTree(true, UnfileObject.Del
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.915902 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.929551 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/exceptions/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/exceptions/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/exceptions/index.html
 Fri Aug  5 12:39:52 2016
@@ -429,4 +429,4 @@ is not allowed for documents of that typ
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.768746 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.791938 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/extensions/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/extensions/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/extensions/index.html
 Fri Aug  5 12:39:52 2016
@@ -372,4 +372,4 @@ if (extensions != null) {
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.095607 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.125794 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/lists/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/lists/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/lists/index.html
 Fri Aug  5 12:39:52 2016
@@ -383,4 +383,4 @@ IItemEnumerable&lt;Something&gt; skipAnd
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.079866 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.110707 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/move-objects/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/move-objects/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/move-objects/index.html
 Fri Aug  5 12:39:52 2016
@@ -393,4 +393,4 @@ doc.RemoveFromFolder(folder);
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.893686 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.907502 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/operation-context/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/operation-context/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/operation-context/index.html
 Fri Aug  5 12:39:52 2016
@@ -530,4 +530,4 @@ IList&lt;IDocument&gt; versions = doc.Ge
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.057701 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.090368 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/properties/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/properties/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/properties/index.html
 Fri Aug  5 12:39:52 2016
@@ -282,8 +282,21 @@
             <li class="second-level"><a href="#data-types">Data Types</a></li>
             
         
+            <li class="second-level"><a href="#properties">Properties</a></li>
+            
+                <li class="third-level"><a 
href="#retrieving-properties">Retrieving Properties</a></li>
+            
+                <li class="third-level"><a href="#setting-properties">Setting 
Properties</a></li>
+            
+        
             <li class="second-level"><a href="#secondary-types">Secondary 
Types</a></li>
             
+                <li class="third-level"><a 
href="#setting-secondary-types">Setting Secondary Types</a></li>
+            
+                <li class="third-level"><a 
href="#adding-secondary-types">Adding Secondary Types</a></li>
+            
+                <li class="third-level"><a 
href="#removing-secondary-types">Removing Secondary Types</a></li>
+            
         
     
     </ul>
@@ -294,7 +307,8 @@
 <h2 id="data-types">Data Types</h2>
 <p><span class="cmis">CMIS 1.0</span>
 <span class="cmis">CMIS 1.1</span></p>
-<p>The table below shows how the CMIS data types are mapped to Java and C# 
data types.</p>
+<p>The table below shows how the CMIS data types are mapped to Java and C# 
data types.
+Multi-value property values are set and returned as lists of these data 
types.</p>
 <table>
 <thead>
 <tr>
@@ -311,7 +325,7 @@
 </tr>
 <tr>
 <td><strong>boolean</strong></td>
-<td><strong>boolean</strong></td>
+<td><strong>Boolean</strong></td>
 <td><strong>bool</strong></td>
 </tr>
 <tr>
@@ -346,9 +360,268 @@
 </tr>
 </tbody>
 </table>
+<h2 id="properties">Properties</h2>
+<h3 id="retrieving-properties">Retrieving Properties</h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Only the properties that have been requested are available. Use an <a 
href="../operation-context/index.html#property-filter">Operation Context</a> to 
define, which properties should be provided by the repository.</p>
+</div>
+<p>The value of a property that is not set, has not been provided by the 
repository, or of a property that does not exits is <code>null</code>.</p>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">Document doc = ...
+
+// properties defined in the CMIS specification have getters (here are just a 
few examples)
+String id = doc.getId();
+String name = doc.getName();
+String creator = doc.getCreatedBy();
+GregorianCalendar lastModification = doc.getLastModificationDate();
+
+
+// all property values can be accessed by their property ID
+String name2 = doc.getPropertyValue(&quot;cmis:name&quot;);
+BigInteger projectNumber = doc.getPropertyValue(&quot;project:number&quot;);
+
+// multi value property values are always returned as lists
+List&lt;String&gt; colors = doc.getPropertyValue(&quot;project:colors&quot;);
+
+
+// there is detailed information about a property available for generic clients
+Property&lt;String&gt; nameProp = doc.getProperty(&quot;cmis:name&quot;);
+PropertyType namePropType = nameProp.getType();
+boolean nameMultiValued = nameProp.isMultiValued();
+String name3 = nameProp.getValue();
+
+Property&lt;Boolean&gt; lightsProp = doc.getProperty(&quot;lights:on&quot;);
+PropertyType lightsPropType = lightsProp.getType();
+boolean lightsMultiValued = lightsProp.isMultiValued();
+Boolean lightsValue = lightsProp.getValue();
+</code></pre>
+
+<p class="portcmis">PortCMIS (C#)</p>
+<pre><code class="csharp">IDocument doc = ...
+
+// properties defined in the CMIS specification have getters (here are just a 
few examples)
+string id = doc.Id;
+string name = doc.Name;
+string creator = doc.CreatedBy;
+DateTime? lastModification = doc.LastModificationDate;
+
+// all property values can be accessed by their property ID
+string name2 = doc.GetPropertyAsStringValue(&quot;cmis:name&quot;);
+BigInteger projectNumber = 
(BigInteger)doc.GetPropertyValue(&quot;project:number&quot;);
+
+// multi value property values are always returned as lists
+IList&lt;string&gt; colors = 
(IList&lt;string&gt;)doc.GetPropertyValue(&quot;project:colors&quot;);
+
+// there is detailed information about a property available for generic clients
+IProperty nameProp = doc[&quot;cmis:name&quot;];
+PropertyType? namePropType = nameProp.PropertyType;
+bool nameMultiValued = nameProp.IsMultiValued;
+string name3 = (string)nameProp.Value;
+
+IProperty lightsProp = doc[&quot;lights:on&quot;];
+PropertyType? lightsPropType = lightsProp.PropertyType;
+bool lightsMultiValued = lightsProp.IsMultiValued;
+bool? lightsValue = (bool?)lightsProp.Value;
+
+</code></pre>
+
+<h3 id="setting-properties">Setting Properties</h3>
+<p>Before OpenCMIS or PortCMIS sends properties to a repository, it checks the 
type definition whether the properties exist or not, if the data types match, 
and if multi-value properties contain <code>null</code> values. If it detects a 
problem, it throws an exception before it sends anything to the repository.</p>
+<p>If a property cannot be set, for example because it is a read-only 
property, OpenCMIS or PortCMIS silently filters out the property. The value is 
not sent to the repository.</p>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">Map&lt;String, Object&gt; properties = new 
HashMap&lt;String, Object&gt;();
+
+// adding single value properties
+properties.put(PropertyIds.NAME, &quot;the-tower&quot;);
+properties.put(&quot;project:number&quot;, 1234);
+properties.put(&quot;project:now&quot;, new GregorianCalendar());
+properties.put(&quot;project:onTime&quot;, true);
+properties.put(&quot;project:budget&quot;, new 
BigDecimal(&quot;654321.98&quot;));
+
+// adding a multi value property
+List&lt;String&gt; colors = new ArrayList&lt;String&gt;();
+colors.add(&quot;red&quot;);
+colors.add(&quot;green&quot;);
+colors.add(&quot;blue&quot;);
+
+properties.put(&quot;project:colors&quot;, colors); 
+
+// unsetting a property
+properties.put(&quot;project:something&quot;, null);
+
+// call create... or update...
+</code></pre>
+
+<p class="portcmis">PortCMIS (C#)</p>
+<pre><code class="csharp">IDictionary&lt;string, object&gt; properties = new 
Dictionary&lt;string, object&gt;();
+
+// adding single value properties
+properties[PropertyIds.Name] = &quot;the-tower&quot;;
+properties[&quot;project:number&quot;] = 1234;
+properties[&quot;project:now&quot;] = DateTime.Now;
+properties[&quot;project:onTime&quot;] = true;
+properties[&quot;project:budget&quot;] = 654321.98M;
+
+// adding a multi value property
+IList&lt;string&gt; colors = new List&lt;string&gt;();
+colors.Add(&quot;red&quot;);
+colors.Add(&quot;green&quot;);
+colors.Add(&quot;blue&quot;);
+
+properties[&quot;project:colors&quot;] = colors; 
+
+// unsetting a property
+properties[&quot;project:something&quot;] = null;
+
+// call Create... or Update...
+</code></pre>
+
 <h2 id="secondary-types">Secondary Types</h2>
 <p><span class="cmis">CMIS 1.1</span>
-<span class="spec">Spec 2.1.19</span></p></div>
+<span class="spec">Spec 2.1.19</span></p>
+<p>Secondary types can be added during creation of an object and later added 
and removed by updating its properties.</p>
+<p>In general, secondary types can be added and removed at any time.
+But a repository may have rules and constraints that prevents a client from 
making those changes.</p>
+<h3 id="setting-secondary-types">Setting Secondary Types</h3>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">Folder parent = ...
+
+Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
+
+// set standard CMIS properties
+properties.put(PropertyIds.NAME, &quot;MyNewDocument&quot;);
+properties.put(PropertyIds.OBJECT_TYPE_ID, &quot;cmis:document&quot;);
+
+// add two secondary types
+List&lt;String&gt; secondaryTypes = new ArrayList&lt;String&gt;();
+secondaryTypes.add(&quot;custom:classifictaion&quot;);
+secondaryTypes.add(&quot;custom:draft&quot;);
+
+properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypes);
+
+// set secondary type properties
+properties.put(&quot;classifictaion&quot;, &quot;confidential&quot;);
+properties.put(&quot;draftState&quot;, &quot;early&quot;);
+
+ContentStream contentStream = ...
+
+// create the document
+Document newDoc = parent.createDocument(properties, contentStream, 
VersioningState.NONE);
+</code></pre>
+
+<p class="portcmis">PortCMIS (C#)</p>
+<pre><code class="csharp">IFolder parent = ...
+
+IDictionary&lt;string, object&gt; properties = new Dictionary&lt;string, 
object&gt;();
+
+// set standard CMIS properties
+properties[PropertyIds.Name] = &quot;MyNewDocument&quot;;
+properties[PropertyIds.ObjectTypeId] = &quot;cmis:document&quot;;
+
+// add two secondary types
+IList&lt;string&gt; secondaryTypes = new List&lt;string&gt;();
+secondaryTypes.Add(&quot;custom:classifictaion&quot;);
+secondaryTypes.Add(&quot;custom:draft&quot;);
+
+properties[PropertyIds.SecondaryObjectTypeIds] = secondaryTypes;
+
+// set secondary type properties
+properties[&quot;classifictaion&quot;] = &quot;confidential&quot;;
+properties[&quot;draftState&quot;] = &quot;early&quot;;
+
+ContentStream contentStream = ...
+
+// create the document
+IDocument newDoc = parent.CreateDocument(properties, contentStream, 
VersioningState.None);
+</code></pre>
+
+<h3 id="adding-secondary-types">Adding Secondary Types</h3>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">CmisObject cmisObject = ...
+
+// get current list of secondary types
+List&lt;String&gt; secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+if (secondaryTypes == null) {
+    secondaryTypes = new ArrayList&lt;String&gt;();
+}
+
+Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
+
+// add the new secondary type
+secondaryTypes.add(&quot;custom:classifictaion&quot;);
+properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypes);
+
+// set secondary type property
+properties.put(&quot;classifictaion&quot;, &quot;public&quot;);
+
+// update
+cmisObject.updateProperties(properties);
+
+</code></pre>
+
+<p class="portcmis">PortCMIS (C#)</p>
+<pre><code class="csharp">ICmisObject cmisObject = ...
+
+// get current list of secondary types
+IList&lt;string&gt; secondaryTypes = 
(IList&lt;string&gt;)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);
+if (secondaryTypes == null) {
+    secondaryTypes = new List&lt;string&gt;();
+}
+
+IDictonary&lt;string, object&gt; properties = new Dictonary&lt;string, 
object&gt;();
+
+// add the new secondary type
+secondaryTypes.Add(&quot;custom:classifictaion&quot;);
+properties[PropertyIds.SecondaryObjectTypeIds] = secondaryTypes;
+
+// set secondary type property
+properties[&quot;classifictaion&quot;] = &quot;public&quot;;
+
+// update
+cmisObject.UpdateProperties(properties);
+</code></pre>
+
+<h3 id="removing-secondary-types">Removing Secondary Types</h3>
+<p class="opencmis">OpenCMIS (Java)</p>
+<pre><code class="java">CmisObject cmisObject = ...
+
+// get the current list of secondary types
+List&lt;String&gt; secondaryTypes = 
doc.getPropertyValue(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+if (secondaryTypes == null || 
!secondaryTypes.contains(&quot;custom:classifictaion&quot;)) {
+    // there is nothing to remove
+    return;
+}
+
+Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
+
+// remove the new secondary type
+secondaryTypes.remove(&quot;custom:classifictaion&quot;);
+properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypes);
+
+// update
+cmisObject.updateProperties(properties);
+</code></pre>
+
+<p class="portcmis">PortCMIS (C#)</p>
+<pre><code class="csharp">ICmisObject cmisObject = ...
+
+// get current list of secondary types
+IList&lt;string&gt; secondaryTypes = 
(IList&lt;string&gt;)doc.GetPropertyValue(PropertyIds.SecondaryObjectTypeIds);
+if (secondaryTypes == null || 
!secondaryTypes.Contains(&quot;custom:classifictaion&quot;)) {
+    // there is nothing to remove
+    return;
+}
+
+IDictionary&lt;string, object&gt; properties = new Dictionary&lt;string, 
object&gt;();
+
+// remove the secondary type
+secondaryTypes.Remove(&quot;custom:classifictaion&quot;);
+properties[PropertyIds.SecondaryObjectTypeIds] = secondaryTypes;
+
+// update
+cmisObject.UpdateProperties(properties);
+</code></pre></div>
         
     </div>
 
@@ -398,4 +671,4 @@
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.017344 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.047021 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/queries/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/queries/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/queries/index.html
 Fri Aug  5 12:39:52 2016
@@ -398,4 +398,4 @@ ItemIterable&lt;QueryResult&gt; results
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.112078 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.143083 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retention/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retention/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retention/index.html
 Fri Aug  5 12:39:52 2016
@@ -347,4 +347,4 @@
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:05.174412 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.202881 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retrieve-objects/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retrieve-objects/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/retrieve-objects/index.html
 Fri Aug  5 12:39:52 2016
@@ -503,4 +503,4 @@ ICmisObject cmisObject = Session.GetObje
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.805419 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.823095 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/types/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/types/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/types/index.html
 Fri Aug  5 12:39:52 2016
@@ -451,4 +451,4 @@ IObjectType updatedType = session.Update
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.743168 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.765465 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/update-objects/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/update-objects/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/update-objects/index.html
 Fri Aug  5 12:39:52 2016
@@ -418,4 +418,4 @@ List&lt;BulkUpdateObjectIdAndChangeToken
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.873054 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:10.885852 -->
\ No newline at end of file

Modified: 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/versions/index.html
==============================================================================
--- 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/versions/index.html
 (original)
+++ 
websites/staging/chemistry/trunk/content/docs/cmis-samples/samples/versions/index.html
 Fri Aug  5 12:39:52 2016
@@ -484,4 +484,4 @@ IObjectId newVersionId = pwc.CheckIn(tru
     </body>
 
 </html>
-<!-- last update: 2016-07-08 16:12:04.993067 -->
\ No newline at end of file
+<!-- last update: 2016-08-05 12:35:11.004872 -->
\ No newline at end of file


Reply via email to