<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>DocumentImpl xref</title>
<link type="text/css" rel="stylesheet" href="../../../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> * Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> * or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> * distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> * regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> * to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> * "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> * with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> * <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> * software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> * KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> * specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> * under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> */</em>
<a name="19" href="#19">19</a>  <strong class="jxr_keyword">package</strong> org.apache.chemistry.opencmis.client.runtime;
<a name="20" href="#20">20</a>  
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> java.math.BigInteger;
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.util.HashSet;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.util.List;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
<a name="27" href="#27">27</a>  
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.CmisObject;
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.Document;
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.ObjectFactory;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.ObjectId;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.ObjectType;
<a name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.OperationContext;
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.Policy;
<a name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.TransientCmisObject;
<a name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.api.TransientDocument;
<a name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.PropertyIds;
<a name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.Ace;
<a name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ContentStream;
<a name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ObjectData;
<a name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.Updatability;
<a name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.VersioningState;
<a name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
<a name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
<a name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.spi.Holder;
<a name="46" href="#46">46</a>  
<a name="47" href="#47">47</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/DocumentImpl.html">DocumentImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/AbstractFilableCmisObject.html">AbstractFilableCmisObject</a> implements Document {
<a name="48" href="#48">48</a>  
<a name="49" href="#49">49</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
<a name="50" href="#50">50</a>  
<a name="51" href="#51">51</a>      <em class="jxr_javadoccomment">/**</em>
<a name="52" href="#52">52</a>  <em class="jxr_javadoccomment">     * Constructor.</em>
<a name="53" href="#53">53</a>  <em class="jxr_javadoccomment">     */</em>
<a name="54" href="#54">54</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/DocumentImpl.html">DocumentImpl</a>(<a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/SessionImpl.html">SessionImpl</a> session, ObjectType objectType, ObjectData objectData, OperationContext context) {
<a name="55" href="#55">55</a>          initialize(session, objectType, objectData, context);
<a name="56" href="#56">56</a>      }
<a name="57" href="#57">57</a>  
<a name="58" href="#58">58</a>      @Override
<a name="59" href="#59">59</a>      <strong class="jxr_keyword">protected</strong> TransientCmisObject createTransientCmisObject() {
<a name="60" href="#60">60</a>          <a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/TransientDocumentImpl.html">TransientDocumentImpl</a> td = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/chemistry/opencmis/client/runtime/TransientDocumentImpl.html">TransientDocumentImpl</a>();
<a name="61" href="#61">61</a>          td.initialize(getSession(), <strong class="jxr_keyword">this</strong>);
<a name="62" href="#62">62</a>  
<a name="63" href="#63">63</a>          <strong class="jxr_keyword">return</strong> td;
<a name="64" href="#64">64</a>      }
<a name="65" href="#65">65</a>  
<a name="66" href="#66">66</a>      <strong class="jxr_keyword">public</strong> TransientDocument getTransientDocument() {
<a name="67" href="#67">67</a>          <strong class="jxr_keyword">return</strong> (TransientDocument) getTransientObject();
<a name="68" href="#68">68</a>      }
<a name="69" href="#69">69</a>  
<a name="70" href="#70">70</a>      <em class="jxr_comment">// properties</em>
<a name="71" href="#71">71</a>  
<a name="72" href="#72">72</a>      <strong class="jxr_keyword">public</strong> String getCheckinComment() {
<a name="73" href="#73">73</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.CHECKIN_COMMENT);
<a name="74" href="#74">74</a>      }
<a name="75" href="#75">75</a>  
<a name="76" href="#76">76</a>      <strong class="jxr_keyword">public</strong> String getVersionLabel() {
<a name="77" href="#77">77</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.VERSION_LABEL);
<a name="78" href="#78">78</a>      }
<a name="79" href="#79">79</a>  
<a name="80" href="#80">80</a>      <strong class="jxr_keyword">public</strong> String getVersionSeriesId() {
<a name="81" href="#81">81</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.VERSION_SERIES_ID);
<a name="82" href="#82">82</a>      }
<a name="83" href="#83">83</a>  
<a name="84" href="#84">84</a>      <strong class="jxr_keyword">public</strong> String getVersionSeriesCheckedOutId() {
<a name="85" href="#85">85</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
<a name="86" href="#86">86</a>      }
<a name="87" href="#87">87</a>  
<a name="88" href="#88">88</a>      <strong class="jxr_keyword">public</strong> String getVersionSeriesCheckedOutBy() {
<a name="89" href="#89">89</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
<a name="90" href="#90">90</a>      }
<a name="91" href="#91">91</a>  
<a name="92" href="#92">92</a>      <strong class="jxr_keyword">public</strong> Boolean isImmutable() {
<a name="93" href="#93">93</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.IS_IMMUTABLE);
<a name="94" href="#94">94</a>      }
<a name="95" href="#95">95</a>  
<a name="96" href="#96">96</a>      <strong class="jxr_keyword">public</strong> Boolean isLatestMajorVersion() {
<a name="97" href="#97">97</a>          <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.IS_LATEST_MAJOR_VERSION);
<a name="98" href="#98">98</a>      }
<a name="99" href="#99">99</a>  
<a name="100" href="#100">100</a>     <strong class="jxr_keyword">public</strong> Boolean isLatestVersion() {
<a name="101" href="#101">101</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.IS_LATEST_VERSION);
<a name="102" href="#102">102</a>     }
<a name="103" href="#103">103</a> 
<a name="104" href="#104">104</a>     <strong class="jxr_keyword">public</strong> Boolean isMajorVersion() {
<a name="105" href="#105">105</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.IS_MAJOR_VERSION);
<a name="106" href="#106">106</a>     }
<a name="107" href="#107">107</a> 
<a name="108" href="#108">108</a>     <strong class="jxr_keyword">public</strong> Boolean isVersionSeriesCheckedOut() {
<a name="109" href="#109">109</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
<a name="110" href="#110">110</a>     }
<a name="111" href="#111">111</a> 
<a name="112" href="#112">112</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getContentStreamLength() {
<a name="113" href="#113">113</a>         BigInteger bigInt = getPropertyValue(PropertyIds.CONTENT_STREAM_LENGTH);
<a name="114" href="#114">114</a>         <strong class="jxr_keyword">return</strong> (bigInt == <strong class="jxr_keyword">null</strong>) ? (<strong class="jxr_keyword">long</strong>) -1 : bigInt.longValue();
<a name="115" href="#115">115</a>     }
<a name="116" href="#116">116</a> 
<a name="117" href="#117">117</a>     <strong class="jxr_keyword">public</strong> String getContentStreamMimeType() {
<a name="118" href="#118">118</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE);
<a name="119" href="#119">119</a>     }
<a name="120" href="#120">120</a> 
<a name="121" href="#121">121</a>     <strong class="jxr_keyword">public</strong> String getContentStreamFileName() {
<a name="122" href="#122">122</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.CONTENT_STREAM_FILE_NAME);
<a name="123" href="#123">123</a>     }
<a name="124" href="#124">124</a> 
<a name="125" href="#125">125</a>     <strong class="jxr_keyword">public</strong> String getContentStreamId() {
<a name="126" href="#126">126</a>         <strong class="jxr_keyword">return</strong> getPropertyValue(PropertyIds.CONTENT_STREAM_ID);
<a name="127" href="#127">127</a>     }
<a name="128" href="#128">128</a> 
<a name="129" href="#129">129</a>     <em class="jxr_comment">// operations</em>
<a name="130" href="#130">130</a> 
<a name="131" href="#131">131</a>     <strong class="jxr_keyword">public</strong> Document copy(ObjectId targetFolderId, Map&lt;String, ?&gt; properties, VersioningState versioningState,
<a name="132" href="#132">132</a>             List&lt;Policy&gt; policies, List&lt;Ace&gt; addAces, List&lt;Ace&gt; removeAces, OperationContext context) {
<a name="133" href="#133">133</a> 
<a name="134" href="#134">134</a>         ObjectId newId = getSession().createDocumentFromSource(<strong class="jxr_keyword">this</strong>, properties, targetFolderId, versioningState,
<a name="135" href="#135">135</a>                 policies, addAces, removeAces);
<a name="136" href="#136">136</a> 
<a name="137" href="#137">137</a>         <em class="jxr_comment">// if no context is provided the object will not be fetched</em>
<a name="138" href="#138">138</a>         <strong class="jxr_keyword">if</strong> (context == <strong class="jxr_keyword">null</strong> || newId == <strong class="jxr_keyword">null</strong>) {
<a name="139" href="#139">139</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="140" href="#140">140</a>         }
<a name="141" href="#141">141</a>         <em class="jxr_comment">// get the new object</em>
<a name="142" href="#142">142</a>         CmisObject object = getSession().getObject(newId, context);
<a name="143" href="#143">143</a>         <strong class="jxr_keyword">if</strong> (!(object instanceof Document)) {
<a name="144" href="#144">144</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> CmisRuntimeException(<span class="jxr_string">"Newly created object is not a document! New id: "</span> + newId);
<a name="145" href="#145">145</a>         }
<a name="146" href="#146">146</a> 
<a name="147" href="#147">147</a>         <strong class="jxr_keyword">return</strong> (Document) object;
<a name="148" href="#148">148</a>     }
<a name="149" href="#149">149</a> 
<a name="150" href="#150">150</a>     <strong class="jxr_keyword">public</strong> Document copy(ObjectId targetFolderId) {
<a name="151" href="#151">151</a>         <strong class="jxr_keyword">return</strong> copy(targetFolderId, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, getSession().getDefaultContext());
<a name="152" href="#152">152</a>     }
<a name="153" href="#153">153</a> 
<a name="154" href="#154">154</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> deleteAllVersions() {
<a name="155" href="#155">155</a>         delete(<strong class="jxr_keyword">true</strong>);
<a name="156" href="#156">156</a>     }
<a name="157" href="#157">157</a> 
<a name="158" href="#158">158</a>     <em class="jxr_comment">// versioning</em>
<a name="159" href="#159">159</a> 
<a name="160" href="#160">160</a>     <strong class="jxr_keyword">public</strong> ObjectId checkOut() {
<a name="161" href="#161">161</a>         String newObjectId = <strong class="jxr_keyword">null</strong>;
<a name="162" href="#162">162</a> 
<a name="163" href="#163">163</a>         readLock();
<a name="164" href="#164">164</a>         <strong class="jxr_keyword">try</strong> {
<a name="165" href="#165">165</a>             String objectId = getObjectId();
<a name="166" href="#166">166</a>             Holder&lt;String&gt; objectIdHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(objectId);
<a name="167" href="#167">167</a> 
<a name="168" href="#168">168</a>             getBinding().getVersioningService().checkOut(getRepositoryId(), objectIdHolder, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="169" href="#169">169</a>             newObjectId = objectIdHolder.getValue();
<a name="170" href="#170">170</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="171" href="#171">171</a>             readUnlock();
<a name="172" href="#172">172</a>         }
<a name="173" href="#173">173</a> 
<a name="174" href="#174">174</a>         <strong class="jxr_keyword">if</strong> (newObjectId == <strong class="jxr_keyword">null</strong>) {
<a name="175" href="#175">175</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="176" href="#176">176</a>         }
<a name="177" href="#177">177</a> 
<a name="178" href="#178">178</a>         <strong class="jxr_keyword">return</strong> getSession().createObjectId(newObjectId);
<a name="179" href="#179">179</a>     }
<a name="180" href="#180">180</a> 
<a name="181" href="#181">181</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> cancelCheckOut() {
<a name="182" href="#182">182</a>         String objectId = getObjectId();
<a name="183" href="#183">183</a> 
<a name="184" href="#184">184</a>         getBinding().getVersioningService().cancelCheckOut(getRepositoryId(), objectId, <strong class="jxr_keyword">null</strong>);
<a name="185" href="#185">185</a>     }
<a name="186" href="#186">186</a> 
<a name="187" href="#187">187</a>     <strong class="jxr_keyword">public</strong> ObjectId checkIn(<strong class="jxr_keyword">boolean</strong> major, Map&lt;String, ?&gt; properties, ContentStream contentStream,
<a name="188" href="#188">188</a>             String checkinComment, List&lt;Policy&gt; policies, List&lt;Ace&gt; addAces, List&lt;Ace&gt; removeAces) {
<a name="189" href="#189">189</a>         String newObjectId = <strong class="jxr_keyword">null</strong>;
<a name="190" href="#190">190</a> 
<a name="191" href="#191">191</a>         readLock();
<a name="192" href="#192">192</a>         <strong class="jxr_keyword">try</strong> {
<a name="193" href="#193">193</a>             Holder&lt;String&gt; objectIdHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(getObjectId());
<a name="194" href="#194">194</a> 
<a name="195" href="#195">195</a>             ObjectFactory of = getObjectFactory();
<a name="196" href="#196">196</a> 
<a name="197" href="#197">197</a>             Set&lt;Updatability&gt; updatebility = <strong class="jxr_keyword">new</strong> HashSet&lt;Updatability&gt;();
<a name="198" href="#198">198</a>             updatebility.add(Updatability.READWRITE);
<a name="199" href="#199">199</a>             updatebility.add(Updatability.WHENCHECKEDOUT);
<a name="200" href="#200">200</a> 
<a name="201" href="#201">201</a>             getBinding().getVersioningService().checkIn(getRepositoryId(), objectIdHolder, major,
<a name="202" href="#202">202</a>                     of.convertProperties(properties, getType(), updatebility), of.convertContentStream(contentStream),
<a name="203" href="#203">203</a>                     checkinComment, of.convertPolicies(policies), of.convertAces(addAces), of.convertAces(removeAces),
<a name="204" href="#204">204</a>                     <strong class="jxr_keyword">null</strong>);
<a name="205" href="#205">205</a> 
<a name="206" href="#206">206</a>             newObjectId = objectIdHolder.getValue();
<a name="207" href="#207">207</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="208" href="#208">208</a>             readUnlock();
<a name="209" href="#209">209</a>         }
<a name="210" href="#210">210</a> 
<a name="211" href="#211">211</a>         <strong class="jxr_keyword">if</strong> (newObjectId == <strong class="jxr_keyword">null</strong>) {
<a name="212" href="#212">212</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="213" href="#213">213</a>         }
<a name="214" href="#214">214</a> 
<a name="215" href="#215">215</a>         <strong class="jxr_keyword">return</strong> getSession().createObjectId(newObjectId);
<a name="216" href="#216">216</a> 
<a name="217" href="#217">217</a>     }
<a name="218" href="#218">218</a> 
<a name="219" href="#219">219</a>     <strong class="jxr_keyword">public</strong> List&lt;Document&gt; getAllVersions() {
<a name="220" href="#220">220</a>         <strong class="jxr_keyword">return</strong> getAllVersions(getSession().getDefaultContext());
<a name="221" href="#221">221</a>     }
<a name="222" href="#222">222</a> 
<a name="223" href="#223">223</a>     <strong class="jxr_keyword">public</strong> List&lt;Document&gt; getAllVersions(OperationContext context) {
<a name="224" href="#224">224</a>         String objectId;
<a name="225" href="#225">225</a>         String versionSeriesId;
<a name="226" href="#226">226</a> 
<a name="227" href="#227">227</a>         readLock();
<a name="228" href="#228">228</a>         <strong class="jxr_keyword">try</strong> {
<a name="229" href="#229">229</a>             objectId = getObjectId();
<a name="230" href="#230">230</a>             versionSeriesId = getVersionSeriesId();
<a name="231" href="#231">231</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="232" href="#232">232</a>             readUnlock();
<a name="233" href="#233">233</a>         }
<a name="234" href="#234">234</a> 
<a name="235" href="#235">235</a>         List&lt;ObjectData&gt; versions = getBinding().getVersioningService().getAllVersions(getRepositoryId(), objectId,
<a name="236" href="#236">236</a>                 versionSeriesId, context.getFilterString(), context.isIncludeAllowableActions(), <strong class="jxr_keyword">null</strong>);
<a name="237" href="#237">237</a> 
<a name="238" href="#238">238</a>         ObjectFactory objectFactory = getSession().getObjectFactory();
<a name="239" href="#239">239</a> 
<a name="240" href="#240">240</a>         List&lt;Document&gt; result = <strong class="jxr_keyword">new</strong> ArrayList&lt;Document&gt;();
<a name="241" href="#241">241</a>         <strong class="jxr_keyword">if</strong> (versions != <strong class="jxr_keyword">null</strong>) {
<a name="242" href="#242">242</a>             <strong class="jxr_keyword">for</strong> (ObjectData objectData : versions) {
<a name="243" href="#243">243</a>                 CmisObject doc = objectFactory.convertObject(objectData, context);
<a name="244" href="#244">244</a>                 <strong class="jxr_keyword">if</strong> (!(doc instanceof Document)) {
<a name="245" href="#245">245</a>                     <em class="jxr_comment">// should not happen...</em>
<a name="246" href="#246">246</a>                     <strong class="jxr_keyword">continue</strong>;
<a name="247" href="#247">247</a>                 }
<a name="248" href="#248">248</a> 
<a name="249" href="#249">249</a>                 result.add((Document) doc);
<a name="250" href="#250">250</a>             }
<a name="251" href="#251">251</a>         }
<a name="252" href="#252">252</a> 
<a name="253" href="#253">253</a>         <strong class="jxr_keyword">return</strong> result;
<a name="254" href="#254">254</a> 
<a name="255" href="#255">255</a>     }
<a name="256" href="#256">256</a> 
<a name="257" href="#257">257</a>     <strong class="jxr_keyword">public</strong> Document getObjectOfLatestVersion(<strong class="jxr_keyword">boolean</strong> major) {
<a name="258" href="#258">258</a>         <strong class="jxr_keyword">return</strong> getObjectOfLatestVersion(major, getSession().getDefaultContext());
<a name="259" href="#259">259</a>     }
<a name="260" href="#260">260</a> 
<a name="261" href="#261">261</a>     <strong class="jxr_keyword">public</strong> Document getObjectOfLatestVersion(<strong class="jxr_keyword">boolean</strong> major, OperationContext context) {
<a name="262" href="#262">262</a>         String objectId;
<a name="263" href="#263">263</a>         String versionSeriesId;
<a name="264" href="#264">264</a> 
<a name="265" href="#265">265</a>         readLock();
<a name="266" href="#266">266</a>         <strong class="jxr_keyword">try</strong> {
<a name="267" href="#267">267</a>             objectId = getObjectId();
<a name="268" href="#268">268</a>             versionSeriesId = getVersionSeriesId();
<a name="269" href="#269">269</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="270" href="#270">270</a>             readUnlock();
<a name="271" href="#271">271</a>         }
<a name="272" href="#272">272</a> 
<a name="273" href="#273">273</a>         <strong class="jxr_keyword">if</strong> (versionSeriesId == <strong class="jxr_keyword">null</strong>) {
<a name="274" href="#274">274</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> CmisRuntimeException(<span class="jxr_string">"Version series id is unknown!"</span>);
<a name="275" href="#275">275</a>         }
<a name="276" href="#276">276</a> 
<a name="277" href="#277">277</a>         ObjectData objectData = getBinding().getVersioningService().getObjectOfLatestVersion(getRepositoryId(),
<a name="278" href="#278">278</a>                 objectId, versionSeriesId, major, context.getFilterString(), context.isIncludeAllowableActions(),
<a name="279" href="#279">279</a>                 context.getIncludeRelationships(), context.getRenditionFilterString(), context.isIncludePolicies(),
<a name="280" href="#280">280</a>                 context.isIncludeAcls(), <strong class="jxr_keyword">null</strong>);
<a name="281" href="#281">281</a> 
<a name="282" href="#282">282</a>         ObjectFactory objectFactory = getSession().getObjectFactory();
<a name="283" href="#283">283</a> 
<a name="284" href="#284">284</a>         CmisObject result = objectFactory.convertObject(objectData, context);
<a name="285" href="#285">285</a>         <strong class="jxr_keyword">if</strong> (!(result instanceof Document)) {
<a name="286" href="#286">286</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> CmisRuntimeException(<span class="jxr_string">"Latest version is not a document!"</span>);
<a name="287" href="#287">287</a>         }
<a name="288" href="#288">288</a> 
<a name="289" href="#289">289</a>         <strong class="jxr_keyword">return</strong> (Document) result;
<a name="290" href="#290">290</a>     }
<a name="291" href="#291">291</a> 
<a name="292" href="#292">292</a>     <em class="jxr_comment">// content operations</em>
<a name="293" href="#293">293</a> 
<a name="294" href="#294">294</a>     <strong class="jxr_keyword">public</strong> ContentStream getContentStream() {
<a name="295" href="#295">295</a>         <strong class="jxr_keyword">return</strong> getContentStream(<strong class="jxr_keyword">null</strong>);
<a name="296" href="#296">296</a>     }
<a name="297" href="#297">297</a> 
<a name="298" href="#298">298</a>     <strong class="jxr_keyword">public</strong> ContentStream getContentStream(String streamId) {
<a name="299" href="#299">299</a>         String objectId = getObjectId();
<a name="300" href="#300">300</a> 
<a name="301" href="#301">301</a>         <em class="jxr_comment">// get the stream</em>
<a name="302" href="#302">302</a>         ContentStream contentStream;
<a name="303" href="#303">303</a>         <strong class="jxr_keyword">try</strong> {
<a name="304" href="#304">304</a>             contentStream = getBinding().getObjectService().getContentStream(getRepositoryId(), objectId, streamId,
<a name="305" href="#305">305</a>                     <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="306" href="#306">306</a>         } <strong class="jxr_keyword">catch</strong> (CmisConstraintException e) {
<a name="307" href="#307">307</a>             <em class="jxr_comment">// no content stream</em>
<a name="308" href="#308">308</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="309" href="#309">309</a>         }
<a name="310" href="#310">310</a> 
<a name="311" href="#311">311</a>         <em class="jxr_comment">// handle incompliant repositories</em>
<a name="312" href="#312">312</a>         <strong class="jxr_keyword">if</strong> (contentStream == <strong class="jxr_keyword">null</strong>) {
<a name="313" href="#313">313</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="314" href="#314">314</a>         }
<a name="315" href="#315">315</a> 
<a name="316" href="#316">316</a>         <em class="jxr_comment">// the AtomPub binding doesn't return a file name</em>
<a name="317" href="#317">317</a>         <em class="jxr_comment">// -&gt; get the file name from properties, if present</em>
<a name="318" href="#318">318</a>         String filename = contentStream.getFileName();
<a name="319" href="#319">319</a>         <strong class="jxr_keyword">if</strong> (filename == <strong class="jxr_keyword">null</strong>) {
<a name="320" href="#320">320</a>             filename = getContentStreamFileName();
<a name="321" href="#321">321</a>         }
<a name="322" href="#322">322</a> 
<a name="323" href="#323">323</a>         <strong class="jxr_keyword">long</strong> length = (contentStream.getBigLength() == <strong class="jxr_keyword">null</strong> ? -1 : contentStream.getBigLength().longValue());
<a name="324" href="#324">324</a> 
<a name="325" href="#325">325</a>         <em class="jxr_comment">// convert and return stream object</em>
<a name="326" href="#326">326</a>         <strong class="jxr_keyword">return</strong> getSession().getObjectFactory().createContentStream(filename, length, contentStream.getMimeType(),
<a name="327" href="#327">327</a>                 contentStream.getStream());
<a name="328" href="#328">328</a>     }
<a name="329" href="#329">329</a> 
<a name="330" href="#330">330</a>     <strong class="jxr_keyword">public</strong> Document setContentStream(ContentStream contentStream, <strong class="jxr_keyword">boolean</strong> overwrite) {
<a name="331" href="#331">331</a>         ObjectId objectId = setContentStream(contentStream, overwrite, <strong class="jxr_keyword">true</strong>);
<a name="332" href="#332">332</a>         <strong class="jxr_keyword">if</strong> (objectId == <strong class="jxr_keyword">null</strong>) {
<a name="333" href="#333">333</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="334" href="#334">334</a>         }
<a name="335" href="#335">335</a> 
<a name="336" href="#336">336</a>         <strong class="jxr_keyword">if</strong> (!getObjectId().equals(objectId.getId())) {
<a name="337" href="#337">337</a>             <strong class="jxr_keyword">return</strong> (Document) getSession().getObject(objectId, getCreationContext());
<a name="338" href="#338">338</a>         }
<a name="339" href="#339">339</a> 
<a name="340" href="#340">340</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a name="341" href="#341">341</a>     }
<a name="342" href="#342">342</a> 
<a name="343" href="#343">343</a>     <strong class="jxr_keyword">public</strong> ObjectId setContentStream(ContentStream contentStream, <strong class="jxr_keyword">boolean</strong> overwrite, <strong class="jxr_keyword">boolean</strong> refresh) {
<a name="344" href="#344">344</a>         String newObjectId = <strong class="jxr_keyword">null</strong>;
<a name="345" href="#345">345</a> 
<a name="346" href="#346">346</a>         readLock();
<a name="347" href="#347">347</a>         <strong class="jxr_keyword">try</strong> {
<a name="348" href="#348">348</a>             Holder&lt;String&gt; objectIdHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(getObjectId());
<a name="349" href="#349">349</a>             Holder&lt;String&gt; changeTokenHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;((String) getPropertyValue(PropertyIds.CHANGE_TOKEN));
<a name="350" href="#350">350</a> 
<a name="351" href="#351">351</a>             getBinding().getObjectService().setContentStream(getRepositoryId(), objectIdHolder, overwrite,
<a name="352" href="#352">352</a>                     changeTokenHolder, getObjectFactory().convertContentStream(contentStream), <strong class="jxr_keyword">null</strong>);
<a name="353" href="#353">353</a> 
<a name="354" href="#354">354</a>             newObjectId = objectIdHolder.getValue();
<a name="355" href="#355">355</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="356" href="#356">356</a>             readUnlock();
<a name="357" href="#357">357</a>         }
<a name="358" href="#358">358</a> 
<a name="359" href="#359">359</a>         <strong class="jxr_keyword">if</strong> (refresh) {
<a name="360" href="#360">360</a>             refresh();
<a name="361" href="#361">361</a>         }
<a name="362" href="#362">362</a> 
<a name="363" href="#363">363</a>         <strong class="jxr_keyword">if</strong> (newObjectId == <strong class="jxr_keyword">null</strong>) {
<a name="364" href="#364">364</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="365" href="#365">365</a>         }
<a name="366" href="#366">366</a> 
<a name="367" href="#367">367</a>         <strong class="jxr_keyword">return</strong> getSession().createObjectId(newObjectId);
<a name="368" href="#368">368</a>     }
<a name="369" href="#369">369</a> 
<a name="370" href="#370">370</a>     <strong class="jxr_keyword">public</strong> Document deleteContentStream() {
<a name="371" href="#371">371</a>         ObjectId objectId = deleteContentStream(<strong class="jxr_keyword">true</strong>);
<a name="372" href="#372">372</a>         <strong class="jxr_keyword">if</strong> (objectId == <strong class="jxr_keyword">null</strong>) {
<a name="373" href="#373">373</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="374" href="#374">374</a>         }
<a name="375" href="#375">375</a> 
<a name="376" href="#376">376</a>         <strong class="jxr_keyword">if</strong> (!getObjectId().equals(objectId.getId())) {
<a name="377" href="#377">377</a>             <strong class="jxr_keyword">return</strong> (Document) getSession().getObject(objectId, getCreationContext());
<a name="378" href="#378">378</a>         }
<a name="379" href="#379">379</a> 
<a name="380" href="#380">380</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a name="381" href="#381">381</a>     }
<a name="382" href="#382">382</a> 
<a name="383" href="#383">383</a>     <strong class="jxr_keyword">public</strong> ObjectId deleteContentStream(<strong class="jxr_keyword">boolean</strong> refresh) {
<a name="384" href="#384">384</a>         String newObjectId = <strong class="jxr_keyword">null</strong>;
<a name="385" href="#385">385</a> 
<a name="386" href="#386">386</a>         readLock();
<a name="387" href="#387">387</a>         <strong class="jxr_keyword">try</strong> {
<a name="388" href="#388">388</a>             Holder&lt;String&gt; objectIdHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(getObjectId());
<a name="389" href="#389">389</a>             Holder&lt;String&gt; changeTokenHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;((String) getPropertyValue(PropertyIds.CHANGE_TOKEN));
<a name="390" href="#390">390</a> 
<a name="391" href="#391">391</a>             getBinding().getObjectService().deleteContentStream(getRepositoryId(), objectIdHolder, changeTokenHolder,
<a name="392" href="#392">392</a>                     <strong class="jxr_keyword">null</strong>);
<a name="393" href="#393">393</a> 
<a name="394" href="#394">394</a>             newObjectId = objectIdHolder.getValue();
<a name="395" href="#395">395</a>         } <strong class="jxr_keyword">finally</strong> {
<a name="396" href="#396">396</a>             readUnlock();
<a name="397" href="#397">397</a>         }
<a name="398" href="#398">398</a> 
<a name="399" href="#399">399</a>         <strong class="jxr_keyword">if</strong> (refresh) {
<a name="400" href="#400">400</a>             refresh();
<a name="401" href="#401">401</a>         }
<a name="402" href="#402">402</a> 
<a name="403" href="#403">403</a>         <strong class="jxr_keyword">if</strong> (newObjectId == <strong class="jxr_keyword">null</strong>) {
<a name="404" href="#404">404</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
<a name="405" href="#405">405</a>         }
<a name="406" href="#406">406</a> 
<a name="407" href="#407">407</a>         <strong class="jxr_keyword">return</strong> getSession().createObjectId(newObjectId);
<a name="408" href="#408">408</a>     }
<a name="409" href="#409">409</a> 
<a name="410" href="#410">410</a>     <strong class="jxr_keyword">public</strong> ObjectId checkIn(<strong class="jxr_keyword">boolean</strong> major, Map&lt;String, ?&gt; properties, ContentStream contentStream, String checkinComment) {
<a name="411" href="#411">411</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.checkIn(major, properties, contentStream, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="412" href="#412">412</a>     }
<a name="413" href="#413">413</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

