<!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>VersioningTest 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.inmemory;
<a name="20" href="#20">20</a>  
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertEquals;
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertFalse;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertNotNull;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertTrue;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.fail;
<a name="26" href="#26">26</a>  
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.math.BigInteger;
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedList;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.util.List;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
<a name="33" href="#33">33</a>  
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.PropertyIds;
<a name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ContentStream;
<a name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ObjectData;
<a name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ObjectList;
<a name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.Properties;
<a name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.PropertyBoolean;
<a name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.PropertyData;
<a name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.PropertyId;
<a name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.PropertyString;
<a name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
<a name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
<a name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
<a name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
<a name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
<a name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.Updatability;
<a name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.enums.VersioningState;
<a name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
<a name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
<a name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
<a name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
<a name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.server.CallContext;
<a name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.spi.Holder;
<a name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
<a name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
<a name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
<a name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
<a name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.junit.After;
<a name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.junit.Before;
<a name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
<a name="63" href="#63">63</a>  
<a name="64" href="#64">64</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/chemistry/opencmis/inmemory/VersioningTest.html">VersioningTest</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.html">AbstractServiceTest</a> {
<a name="65" href="#65">65</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log log = LogFactory.getLog(ObjectServiceTest.<strong class="jxr_keyword">class</strong>);
<a name="66" href="#66">66</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PROP_VALUE = <span class="jxr_string">"Mickey Mouse"</span>;
<a name="67" href="#67">67</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PROP_VALUE_NEW = <span class="jxr_string">"Donald Duck"</span>;
<a name="68" href="#68">68</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PROP_NAME = <span class="jxr_string">"My Versioned Document"</span>;
<a name="69" href="#69">69</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String TEST_USER = <span class="jxr_string">"TestUser"</span>;
<a name="70" href="#70">70</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String TEST_USER_2 = <span class="jxr_string">"OtherUser"</span>;
<a name="71" href="#71">71</a>  
<a name="72" href="#72">72</a>      <a href="../../../../../org/apache/chemistry/opencmis/inmemory/ObjectCreator.html">ObjectCreator</a> fCreator;
<a name="73" href="#73">73</a>  
<a name="74" href="#74">74</a>      @Override
<a name="75" href="#75">75</a>      @Before
<a name="76" href="#76">76</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() {
<a name="77" href="#77">77</a>          <strong class="jxr_keyword">super</strong>.setTypeCreatorClass(VersionTestTypeSystemCreator.<strong class="jxr_keyword">class</strong>.getName());
<a name="78" href="#78">78</a>          <strong class="jxr_keyword">super</strong>.setUp();
<a name="79" href="#79">79</a>          fCreator = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/chemistry/opencmis/inmemory/ObjectCreator.html">ObjectCreator</a>(fFactory, fObjSvc, fRepositoryId);
<a name="80" href="#80">80</a>          setRuntimeContext(TEST_USER);
<a name="81" href="#81">81</a>      }
<a name="82" href="#82">82</a>  
<a name="83" href="#83">83</a>      @Override
<a name="84" href="#84">84</a>      @After
<a name="85" href="#85">85</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() {
<a name="86" href="#86">86</a>          <strong class="jxr_keyword">super</strong>.tearDown();
<a name="87" href="#87">87</a>      }
<a name="88" href="#88">88</a>  
<a name="89" href="#89">89</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> setRuntimeContext(String user) {
<a name="90" href="#90">90</a>  
<a name="91" href="#91">91</a>          <em class="jxr_comment">/*</em>
<a name="92" href="#92">92</a>  <em class="jxr_comment">         * DummyCallContext ctx = new DummyCallContext();</em>
<a name="93" href="#93">93</a>  <em class="jxr_comment">         * ctx.put(CallContext.USERNAME, user); // Attach the CallContext to a</em>
<a name="94" href="#94">94</a>  <em class="jxr_comment">         * thread local context that can be accessed from everywhere</em>
<a name="95" href="#95">95</a>  <em class="jxr_comment">         * RuntimeContext.attachCfg(ctx);</em>
<a name="96" href="#96">96</a>  <em class="jxr_comment">         */</em>
<a name="97" href="#97">97</a>      	((DummyCallContext) fTestCallContext).put(CallContext.USERNAME, user);
<a name="98" href="#98">98</a>      }
<a name="99" href="#99">99</a>  
<a name="100" href="#100">100</a>     @Test
<a name="101" href="#101">101</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCreateVersionedDocumentMinor() {
<a name="102" href="#102">102</a>         createVersionedDocument(VersioningState.MINOR);
<a name="103" href="#103">103</a>     }
<a name="104" href="#104">104</a> 
<a name="105" href="#105">105</a>     @Test
<a name="106" href="#106">106</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCreateVersionedDocumentCheckedOut() {
<a name="107" href="#107">107</a>         createVersionedDocument(VersioningState.CHECKEDOUT);
<a name="108" href="#108">108</a>     }
<a name="109" href="#109">109</a> 
<a name="110" href="#110">110</a>     @Test
<a name="111" href="#111">111</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCreateVersionedDocumentNone() {
<a name="112" href="#112">112</a>         <strong class="jxr_keyword">try</strong> {
<a name="113" href="#113">113</a>             createVersionedDocument(VersioningState.NONE);
<a name="114" href="#114">114</a>             fail(<span class="jxr_string">"creating a document of a versionable type with state VersioningState.NONE should fail."</span>);
<a name="115" href="#115">115</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="116" href="#116">116</a>             assertEquals(CmisConstraintException.<strong class="jxr_keyword">class</strong>, e.getClass());
<a name="117" href="#117">117</a>         }
<a name="118" href="#118">118</a>     }
<a name="119" href="#119">119</a> 
<a name="120" href="#120">120</a>     @Test
<a name="121" href="#121">121</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCheckOutBasic() {
<a name="122" href="#122">122</a>         String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
<a name="123" href="#123">123</a> 
<a name="124" href="#124">124</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="125" href="#125">125</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="126" href="#126">126</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="127" href="#127">127</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="128" href="#128">128</a> 
<a name="129" href="#129">129</a>         assertFalse(isCheckedOut(version.getProperties().getProperties()));
<a name="130" href="#130">130</a> 
<a name="131" href="#131">131</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="132" href="#132">132</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="133" href="#133">133</a>         <em class="jxr_comment">// be version</em>
<a name="134" href="#134">134</a>         <em class="jxr_comment">// series?</em>
<a name="135" href="#135">135</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="136" href="#136">136</a>         String pwcId = idHolder.getValue();
<a name="137" href="#137">137</a>         <em class="jxr_comment">// test that object is checked out and that all properties are set</em>
<a name="138" href="#138">138</a>         <em class="jxr_comment">// correctly</em>
<a name="139" href="#139">139</a>         Properties props = fObjSvc.getProperties(fRepositoryId, pwcId, <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>);
<a name="140" href="#140">140</a>         String changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
<a name="141" href="#141">141</a>         checkVersionProperties(pwcId, VersioningState.CHECKEDOUT, props.getProperties(), <strong class="jxr_keyword">null</strong>);
<a name="142" href="#142">142</a> 
<a name="143" href="#143">143</a>         <em class="jxr_comment">// Test that a second checkout is not possible</em>
<a name="144" href="#144">144</a>         <strong class="jxr_keyword">try</strong> {
<a name="145" href="#145">145</a>             fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="146" href="#146">146</a>             fail(<span class="jxr_string">"Checking out a document that is already checked-out should fail."</span>);
<a name="147" href="#147">147</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="148" href="#148">148</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="149" href="#149">149</a>         }
<a name="150" href="#150">150</a>         <em class="jxr_comment">// version and version series should be checked out now</em>
<a name="151" href="#151">151</a> <em class="jxr_comment">//        assertTrue(isCheckedOut(docId));</em>
<a name="152" href="#152">152</a>         assertTrue(isCheckedOut(pwcId));
<a name="153" href="#153">153</a> 
<a name="154" href="#154">154</a>         <em class="jxr_comment">// Set a new content and modify property</em>
<a name="155" href="#155">155</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="156" href="#156">156</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="157" href="#157">157</a>         Holder&lt;String&gt; tokenHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(changeToken);
<a name="158" href="#158">158</a>         fObjSvc.setContentStream(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, tokenHolder, altContent, <strong class="jxr_keyword">null</strong>);
<a name="159" href="#159">159</a>         fCreator.updateProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="160" href="#160">160</a> 
<a name="161" href="#161">161</a>         <em class="jxr_comment">// Test that a check-in as same user is possible</em>
<a name="162" href="#162">162</a>         String checkinComment = <span class="jxr_string">"Checkin without content and properties."</span>;
<a name="163" href="#163">163</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="164" href="#164">164</a>         <em class="jxr_comment">// Neither the version nor the version series should be checked out any</em>
<a name="165" href="#165">165</a>         <em class="jxr_comment">// longer:</em>
<a name="166" href="#166">166</a>         assertFalse(isCheckedOut(idHolder.getValue()));
<a name="167" href="#167">167</a> <em class="jxr_comment">//        assertFalse(isCheckedOut(docId));</em>
<a name="168" href="#168">168</a>         ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idHolder.getValue(), <strong class="jxr_keyword">null</strong>, BigInteger
<a name="169" href="#169">169</a>                 .valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="170" href="#170">170</a>         assertTrue(fCreator.verifyContent(fCreator.createAlternateContent(), retrievedContent));
<a name="171" href="#171">171</a>         assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID,
<a name="172" href="#172">172</a>                 PROP_VALUE_NEW));
<a name="173" href="#173">173</a> 
<a name="174" href="#174">174</a>         List&lt;ObjectData&gt; allVersions = fVerSvc.getAllVersions(fRepositoryId, docId, docId, <span class="jxr_string">"*"</span>, false, <strong class="jxr_keyword">null</strong>);
<a name="175" href="#175">175</a>         assertEquals(2, allVersions.size());
<a name="176" href="#176">176</a>     }
<a name="177" href="#177">177</a> 
<a name="178" href="#178">178</a>     @Test
<a name="179" href="#179">179</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCheckInWithContent() {
<a name="180" href="#180">180</a>         String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
<a name="181" href="#181">181</a> 
<a name="182" href="#182">182</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="183" href="#183">183</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="184" href="#184">184</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="185" href="#185">185</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="186" href="#186">186</a> 
<a name="187" href="#187">187</a>         assertFalse(isCheckedOut(version.getProperties().getProperties()));
<a name="188" href="#188">188</a> 
<a name="189" href="#189">189</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="190" href="#190">190</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="191" href="#191">191</a>         <em class="jxr_comment">// be version</em>
<a name="192" href="#192">192</a>         <em class="jxr_comment">// series?</em>
<a name="193" href="#193">193</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="194" href="#194">194</a>         String pwcId = idHolder.getValue();
<a name="195" href="#195">195</a> 
<a name="196" href="#196">196</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="197" href="#197">197</a>         Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="198" href="#198">198</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="199" href="#199">199</a> <em class="jxr_comment">//        assertTrue(isCheckedOut(docId));</em>
<a name="200" href="#200">200</a>         assertTrue(isCheckedOut(pwcId));
<a name="201" href="#201">201</a> 
<a name="202" href="#202">202</a>         <em class="jxr_comment">// Test check-in and pass content and properties</em>
<a name="203" href="#203">203</a>         String checkinComment = <span class="jxr_string">"Checkin with content and properties."</span>;
<a name="204" href="#204">204</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, newProps, altContent, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="205" href="#205">205</a>         <em class="jxr_comment">// Neither the version nor the version series should be checked out any</em>
<a name="206" href="#206">206</a>         <em class="jxr_comment">// longer:</em>
<a name="207" href="#207">207</a>         assertFalse(isCheckedOut(idHolder.getValue()));
<a name="208" href="#208">208</a> <em class="jxr_comment">//        assertFalse(isCheckedOut(docId));</em>
<a name="209" href="#209">209</a>         ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idHolder.getValue(), <strong class="jxr_keyword">null</strong>, BigInteger
<a name="210" href="#210">210</a>                 .valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="211" href="#211">211</a> 
<a name="212" href="#212">212</a>         <em class="jxr_comment">// New content and property should be set</em>
<a name="213" href="#213">213</a>         assertTrue(fCreator.verifyContent(fCreator.createAlternateContent(), retrievedContent));
<a name="214" href="#214">214</a>         assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID,
<a name="215" href="#215">215</a>                 PROP_VALUE_NEW));
<a name="216" href="#216">216</a>     }
<a name="217" href="#217">217</a> 
<a name="218" href="#218">218</a>     @Test
<a name="219" href="#219">219</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCheckOutAndOtherUser() {
<a name="220" href="#220">220</a>         String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
<a name="221" href="#221">221</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="222" href="#222">222</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="223" href="#223">223</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="224" href="#224">224</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="225" href="#225">225</a>         assertFalse(isCheckedOut(version.getProperties().getProperties()));
<a name="226" href="#226">226</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="227" href="#227">227</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="228" href="#228">228</a>         <em class="jxr_comment">// be version</em>
<a name="229" href="#229">229</a>         <em class="jxr_comment">// series?</em>
<a name="230" href="#230">230</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="231" href="#231">231</a>         String pwcId = idHolder.getValue();
<a name="232" href="#232">232</a> 
<a name="233" href="#233">233</a>         <em class="jxr_comment">// Test that a checkin as another user is not possible</em>
<a name="234" href="#234">234</a>         setRuntimeContext(TEST_USER_2);
<a name="235" href="#235">235</a>         <strong class="jxr_keyword">try</strong> {
<a name="236" href="#236">236</a>             fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <span class="jxr_string">"My Comment"</span>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="237" href="#237">237</a>             fail(<span class="jxr_string">"Checking in a document as another user should fail."</span>);
<a name="238" href="#238">238</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="239" href="#239">239</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="240" href="#240">240</a>         }
<a name="241" href="#241">241</a> 
<a name="242" href="#242">242</a>         <em class="jxr_comment">// Test that a cancel checkout as another user is not possible</em>
<a name="243" href="#243">243</a>         <strong class="jxr_keyword">try</strong> {
<a name="244" href="#244">244</a>             fVerSvc.cancelCheckOut(fRepositoryId, pwcId, <strong class="jxr_keyword">null</strong>);
<a name="245" href="#245">245</a>             fail(<span class="jxr_string">"Checking in a document as another user should fail."</span>);
<a name="246" href="#246">246</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="247" href="#247">247</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="248" href="#248">248</a>         }
<a name="249" href="#249">249</a> 
<a name="250" href="#250">250</a>         <em class="jxr_comment">// Test that an updateProperties as another user is not possible</em>
<a name="251" href="#251">251</a>         <strong class="jxr_keyword">try</strong> {
<a name="252" href="#252">252</a>             fCreator.updateProperty(pwcId, VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="253" href="#253">253</a>             fail(<span class="jxr_string">"updateProperty in a document as another user should fail."</span>);
<a name="254" href="#254">254</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="255" href="#255">255</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="256" href="#256">256</a>         }
<a name="257" href="#257">257</a> 
<a name="258" href="#258">258</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="259" href="#259">259</a>         Holder&lt;String&gt; pwcHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="260" href="#260">260</a>         <strong class="jxr_keyword">try</strong> {
<a name="261" href="#261">261</a>             fObjSvc.setContentStream(fRepositoryId, pwcHolder, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, altContent, <strong class="jxr_keyword">null</strong>);
<a name="262" href="#262">262</a>             fail(<span class="jxr_string">"setContentStream in a document as another user should fail."</span>);
<a name="263" href="#263">263</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="264" href="#264">264</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="265" href="#265">265</a>         }
<a name="266" href="#266">266</a> 
<a name="267" href="#267">267</a>         setRuntimeContext(TEST_USER);
<a name="268" href="#268">268</a>         <em class="jxr_comment">// Test that a check-in as same user is possible</em>
<a name="269" href="#269">269</a>         fVerSvc.checkIn(fRepositoryId, pwcHolder, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <span class="jxr_string">"testCheckOutAndOtherUser"</span>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="270" href="#270">270</a> 
<a name="271" href="#271">271</a>         <em class="jxr_comment">// Because nothing was changed we should have a new version with</em>
<a name="272" href="#272">272</a>         <em class="jxr_comment">// identical content</em>
<a name="273" href="#273">273</a>         ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, pwcHolder.getValue(), <strong class="jxr_keyword">null</strong>, BigInteger
<a name="274" href="#274">274</a>                 .valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="275" href="#275">275</a>         assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createContent()));
<a name="276" href="#276">276</a>         assertTrue(fCreator.verifyProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE));
<a name="277" href="#277">277</a>     }
<a name="278" href="#278">278</a> 
<a name="279" href="#279">279</a>     @Test
<a name="280" href="#280">280</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCancelCheckout() {
<a name="281" href="#281">281</a>         String verId = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
<a name="282" href="#282">282</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="283" href="#283">283</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="284" href="#284">284</a>         String idOfLastVersion = version.getId();
<a name="285" href="#285">285</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="286" href="#286">286</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="287" href="#287">287</a>         assertFalse(isCheckedOut(version.getProperties().getProperties()));
<a name="288" href="#288">288</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="289" href="#289">289</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="290" href="#290">290</a>         <em class="jxr_comment">// be version</em>
<a name="291" href="#291">291</a>         <em class="jxr_comment">// series?</em>
<a name="292" href="#292">292</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="293" href="#293">293</a>         String pwcId = idHolder.getValue();
<a name="294" href="#294">294</a> 
<a name="295" href="#295">295</a>         <em class="jxr_comment">// Set a new content and modify property</em>
<a name="296" href="#296">296</a>         Properties props = fObjSvc.getProperties(fRepositoryId, pwcId, <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>);
<a name="297" href="#297">297</a>         String changeToken = (String) props.getProperties().get(PropertyIds.CHANGE_TOKEN).getFirstValue();
<a name="298" href="#298">298</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="299" href="#299">299</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="300" href="#300">300</a>         Holder&lt;String&gt; tokenHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(changeToken);
<a name="301" href="#301">301</a>         fObjSvc.setContentStream(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, tokenHolder, altContent, <strong class="jxr_keyword">null</strong>);
<a name="302" href="#302">302</a>         fCreator.updateProperty(idHolder.getValue(), VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="303" href="#303">303</a> 
<a name="304" href="#304">304</a>         <em class="jxr_comment">// cancel checkout</em>
<a name="305" href="#305">305</a>         fVerSvc.cancelCheckOut(fRepositoryId, pwcId, <strong class="jxr_keyword">null</strong>);
<a name="306" href="#306">306</a>         <strong class="jxr_keyword">try</strong> {
<a name="307" href="#307">307</a>             <em class="jxr_comment">// Verify that pwc no longer exists</em>
<a name="308" href="#308">308</a>             fObjSvc.getObject(fRepositoryId, pwcId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, false, false, <strong class="jxr_keyword">null</strong>);
<a name="309" href="#309">309</a>             fail(<span class="jxr_string">"Getting pwc after cancel checkout should fail."</span>);
<a name="310" href="#310">310</a>         } <strong class="jxr_keyword">catch</strong> (CmisObjectNotFoundException e1) {
<a name="311" href="#311">311</a>         } <strong class="jxr_keyword">catch</strong> (Exception e2) {
<a name="312" href="#312">312</a>             fail(<span class="jxr_string">"Expected a CmisObjectNotFoundException after cancel checkin, but got a "</span> + e2.getClass().getName());
<a name="313" href="#313">313</a>         }
<a name="314" href="#314">314</a> 
<a name="315" href="#315">315</a>         <em class="jxr_comment">// verify that the old content and properties are still valid</em>
<a name="316" href="#316">316</a>         assertTrue(fCreator.verifyProperty(idOfLastVersion, VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE));
<a name="317" href="#317">317</a>         ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, idOfLastVersion, <strong class="jxr_keyword">null</strong>, BigInteger
<a name="318" href="#318">318</a>                 .valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="319" href="#319">319</a>         assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createContent()));
<a name="320" href="#320">320</a>     }
<a name="321" href="#321">321</a> 
<a name="322" href="#322">322</a>     @Test
<a name="323" href="#323">323</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetPropertiesOfLatestVersion() {
<a name="324" href="#324">324</a>         VersioningState versioningState = VersioningState.MAJOR;
<a name="325" href="#325">325</a>         String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
<a name="326" href="#326">326</a>         getDocument(verId);
<a name="327" href="#327">327</a> 
<a name="328" href="#328">328</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="329" href="#329">329</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="330" href="#330">330</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="331" href="#331">331</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="332" href="#332">332</a> 
<a name="333" href="#333">333</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="334" href="#334">334</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="335" href="#335">335</a>         <em class="jxr_comment">// be version</em>
<a name="336" href="#336">336</a>         <em class="jxr_comment">// series?</em>
<a name="337" href="#337">337</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="338" href="#338">338</a>         String pwcId = idHolder.getValue();
<a name="339" href="#339">339</a> 
<a name="340" href="#340">340</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="341" href="#341">341</a>         Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="342" href="#342">342</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="343" href="#343">343</a> <em class="jxr_comment">//        assertTrue(isCheckedOut(docId));</em>
<a name="344" href="#344">344</a>         assertTrue(isCheckedOut(pwcId));
<a name="345" href="#345">345</a> 
<a name="346" href="#346">346</a>         <em class="jxr_comment">// Test check-in and pass content and properties</em>
<a name="347" href="#347">347</a>         String checkinComment = <span class="jxr_string">"Checkin with content and properties."</span>;
<a name="348" href="#348">348</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, newProps, altContent, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="349" href="#349">349</a> 
<a name="350" href="#350">350</a>         Properties latest = fVerSvc.getPropertiesOfLatestVersion(fRepositoryId, docId, docId, <strong class="jxr_keyword">true</strong>, <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>);
<a name="351" href="#351">351</a>         assertNotNull(latest);
<a name="352" href="#352">352</a> 
<a name="353" href="#353">353</a>         checkVersionProperties(verId, versioningState, latest.getProperties(), checkinComment);
<a name="354" href="#354">354</a>     }
<a name="355" href="#355">355</a> 
<a name="356" href="#356">356</a>     @Test
<a name="357" href="#357">357</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetLatestVersion() {
<a name="358" href="#358">358</a>         VersioningState versioningState = VersioningState.MINOR;
<a name="359" href="#359">359</a>         String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
<a name="360" href="#360">360</a>         getDocument(verId);
<a name="361" href="#361">361</a> 
<a name="362" href="#362">362</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="363" href="#363">363</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="364" href="#364">364</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="365" href="#365">365</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="366" href="#366">366</a> 
<a name="367" href="#367">367</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="368" href="#368">368</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verId); <em class="jxr_comment">// or should this</em>
<a name="369" href="#369">369</a>         <em class="jxr_comment">// be version</em>
<a name="370" href="#370">370</a>         <em class="jxr_comment">// series?</em>
<a name="371" href="#371">371</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="372" href="#372">372</a>         String pwcId = idHolder.getValue();
<a name="373" href="#373">373</a> 
<a name="374" href="#374">374</a>         ContentStream altContent = fCreator.createAlternateContent();
<a name="375" href="#375">375</a>         Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE_NEW);
<a name="376" href="#376">376</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(pwcId);
<a name="377" href="#377">377</a> <em class="jxr_comment">//        assertTrue(isCheckedOut(docId));</em>
<a name="378" href="#378">378</a>         assertTrue(isCheckedOut(pwcId));
<a name="379" href="#379">379</a> 
<a name="380" href="#380">380</a>         <em class="jxr_comment">// Test check-in and pass content and properties</em>
<a name="381" href="#381">381</a>         String checkinComment = <span class="jxr_string">"Checkin with content and properties."</span>;
<a name="382" href="#382">382</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, newProps, altContent, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="383" href="#383">383</a> 
<a name="384" href="#384">384</a>         <em class="jxr_comment">// get latest major version</em>
<a name="385" href="#385">385</a>         versioningState = VersioningState.MAJOR;
<a name="386" href="#386">386</a>         <strong class="jxr_keyword">boolean</strong> isMajor = <strong class="jxr_keyword">true</strong>;
<a name="387" href="#387">387</a>         ObjectData objData = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, docId, isMajor, <span class="jxr_string">"*"</span>, false,
<a name="388" href="#388">388</a>                 IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, false, false, <strong class="jxr_keyword">null</strong>);
<a name="389" href="#389">389</a>         checkVersionProperties(verId, versioningState, objData.getProperties().getProperties(), checkinComment);
<a name="390" href="#390">390</a>         ContentStream retrievedContent = fObjSvc.getContentStream(fRepositoryId, objData.getId(), <strong class="jxr_keyword">null</strong>, BigInteger
<a name="391" href="#391">391</a>                 .valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="392" href="#392">392</a>         assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createAlternateContent()));
<a name="393" href="#393">393</a> 
<a name="394" href="#394">394</a>         <em class="jxr_comment">// get latest non-major version, must be the same as before</em>
<a name="395" href="#395">395</a>         versioningState = VersioningState.MAJOR;
<a name="396" href="#396">396</a>         isMajor = false;
<a name="397" href="#397">397</a>         objData = fVerSvc.getObjectOfLatestVersion(fRepositoryId, docId, docId, isMajor, <span class="jxr_string">"*"</span>, false,
<a name="398" href="#398">398</a>                 IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, false, false, <strong class="jxr_keyword">null</strong>);
<a name="399" href="#399">399</a>         checkVersionProperties(verId, versioningState, objData.getProperties().getProperties(), checkinComment);
<a name="400" href="#400">400</a>         retrievedContent = fObjSvc.getContentStream(fRepositoryId, objData.getId(), <strong class="jxr_keyword">null</strong>,
<a name="401" href="#401">401</a>                 BigInteger.valueOf(-1) <em class="jxr_comment">/*<em class="jxr_comment"> offset */</em>, BigInteger.valueOf(-1) /* length */, <strong class="jxr_keyword">null</strong>);</em>
<a name="402" href="#402">402</a>         assertTrue(fCreator.verifyContent(retrievedContent, fCreator.createAlternateContent()));
<a name="403" href="#403">403</a>     }
<a name="404" href="#404">404</a> 
<a name="405" href="#405">405</a>     @Test
<a name="406" href="#406">406</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetCheckedOutDocuments() {
<a name="407" href="#407">407</a>         <em class="jxr_comment">// create two folders with each having two documents, one of them being</em>
<a name="408" href="#408">408</a>         <em class="jxr_comment">// checked out</em>
<a name="409" href="#409">409</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> count = 2;
<a name="410" href="#410">410</a>         String[] folderIds = createLevel1Folders();
<a name="411" href="#411">411</a>         String[] verSeriesIds = <strong class="jxr_keyword">new</strong> String[folderIds.length * count];
<a name="412" href="#412">412</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; folderIds.length; i++) {
<a name="413" href="#413">413</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> j = 0; j &lt; count; j++) {
<a name="414" href="#414">414</a>                 String verId = createDocument(<span class="jxr_string">"MyDoc"</span> + j, folderIds[i], VersioningState.MAJOR);
<a name="415" href="#415">415</a>                 ObjectData od = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="416" href="#416">416</a>                         false, false, <strong class="jxr_keyword">null</strong>);
<a name="417" href="#417">417</a>                 verSeriesIds[i * folderIds.length + j] = verId;
<a name="418" href="#418">418</a>             }
<a name="419" href="#419">419</a>         }
<a name="420" href="#420">420</a>         <em class="jxr_comment">// checkout first in each folder</em>
<a name="421" href="#421">421</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;();
<a name="422" href="#422">422</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verSeriesIds[0]);
<a name="423" href="#423">423</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="424" href="#424">424</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verSeriesIds[2]);
<a name="425" href="#425">425</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="426" href="#426">426</a> 
<a name="427" href="#427">427</a>         <em class="jxr_comment">// must be one in first folder</em>
<a name="428" href="#428">428</a>         ObjectList checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, folderIds[0], <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>, false,
<a name="429" href="#429">429</a>                 IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, BigInteger.valueOf(-1), BigInteger.valueOf(-1), <strong class="jxr_keyword">null</strong>);
<a name="430" href="#430">430</a>         assertEquals(1, checkedOutDocuments.getNumItems().longValue());
<a name="431" href="#431">431</a>         assertEquals(1, checkedOutDocuments.getObjects().size());
<a name="432" href="#432">432</a> 
<a name="433" href="#433">433</a>         <em class="jxr_comment">// must be one in second folder</em>
<a name="434" href="#434">434</a>         checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, folderIds[1], <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>, false,
<a name="435" href="#435">435</a>                 IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, BigInteger.valueOf(-1), BigInteger.valueOf(-1), <strong class="jxr_keyword">null</strong>);
<a name="436" href="#436">436</a>         assertEquals(1, checkedOutDocuments.getNumItems().longValue());
<a name="437" href="#437">437</a>         assertEquals(1, checkedOutDocuments.getObjects().size());
<a name="438" href="#438">438</a> 
<a name="439" href="#439">439</a>         <em class="jxr_comment">// must be two in repository</em>
<a name="440" href="#440">440</a>         checkedOutDocuments = fNavSvc.getCheckedOutDocs(fRepositoryId, <strong class="jxr_keyword">null</strong>, <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>, false,
<a name="441" href="#441">441</a>                 IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, BigInteger.valueOf(-1), BigInteger.valueOf(-1), <strong class="jxr_keyword">null</strong>);
<a name="442" href="#442">442</a>         assertEquals(2, checkedOutDocuments.getNumItems().longValue());
<a name="443" href="#443">443</a>         assertEquals(2, checkedOutDocuments.getObjects().size());
<a name="444" href="#444">444</a>     }
<a name="445" href="#445">445</a> 
<a name="446" href="#446">446</a>     @Test
<a name="447" href="#447">447</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testModifyOldVersions() {
<a name="448" href="#448">448</a>         String versionSeriesId = createVersionSeriesWithThreeVersions();
<a name="449" href="#449">449</a>         List&lt;ObjectData&gt; allVersions = fVerSvc.getAllVersions(fRepositoryId, <strong class="jxr_keyword">null</strong>, versionSeriesId, <span class="jxr_string">"*"</span>, false, <strong class="jxr_keyword">null</strong>);
<a name="450" href="#450">450</a>         assertEquals(3, allVersions.size());
<a name="451" href="#451">451</a> 
<a name="452" href="#452">452</a>     }
<a name="453" href="#453">453</a> 
<a name="454" href="#454">454</a>     <strong class="jxr_keyword">private</strong> String[] createLevel1Folders() {
<a name="455" href="#455">455</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> num = 2;
<a name="456" href="#456">456</a>         String[] res = <strong class="jxr_keyword">new</strong> String[num];
<a name="457" href="#457">457</a> 
<a name="458" href="#458">458</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; num; i++) {
<a name="459" href="#459">459</a>             List&lt;PropertyData&lt;?&gt;&gt; properties = <strong class="jxr_keyword">new</strong> ArrayList&lt;PropertyData&lt;?&gt;&gt;();
<a name="460" href="#460">460</a>             properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, <span class="jxr_string">"Folder "</span> + i));
<a name="461" href="#461">461</a>             properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_FOLDER.value()));
<a name="462" href="#462">462</a>             Properties props = fFactory.createPropertiesData(properties);
<a name="463" href="#463">463</a>             String id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="464" href="#464">464</a>             res[i] = id;
<a name="465" href="#465">465</a>         }
<a name="466" href="#466">466</a>         <strong class="jxr_keyword">return</strong> res;
<a name="467" href="#467">467</a>     }
<a name="468" href="#468">468</a> 
<a name="469" href="#469">469</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> createVersionedDocument(VersioningState versioningState) {
<a name="470" href="#470">470</a>         <em class="jxr_comment">// type id is:</em>
<a name="471" href="#471">471</a>         <em class="jxr_comment">// VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID</em>
<a name="472" href="#472">472</a>         String verId = createDocument(PROP_NAME, fRootFolderId, versioningState);
<a name="473" href="#473">473</a>         getDocument(verId);
<a name="474" href="#474">474</a> 
<a name="475" href="#475">475</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verId, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="476" href="#476">476</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="477" href="#477">477</a>         String docId = getVersionSeriesId(verId, version.getProperties().getProperties());
<a name="478" href="#478">478</a>         assertTrue(<strong class="jxr_keyword">null</strong> != docId &amp;&amp; docId.length() &gt; 0);
<a name="479" href="#479">479</a> 
<a name="480" href="#480">480</a>         List&lt;ObjectData&gt; allVersions = fVerSvc.getAllVersions(fRepositoryId, docId, docId, <span class="jxr_string">"*"</span>, false, <strong class="jxr_keyword">null</strong>);
<a name="481" href="#481">481</a>         assertEquals(1, allVersions.size());
<a name="482" href="#482">482</a> 
<a name="483" href="#483">483</a>         checkVersionProperties(verId, versioningState, allVersions.get(0).getProperties().getProperties(), <strong class="jxr_keyword">null</strong>);
<a name="484" href="#484">484</a>     }
<a name="485" href="#485">485</a> 
<a name="486" href="#486">486</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String getVersionSeriesId(String docId, Map&lt;String, PropertyData&lt;?&gt;&gt; props) {
<a name="487" href="#487">487</a>         PropertyId pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_ID);
<a name="488" href="#488">488</a>         assertNotNull(pdid);
<a name="489" href="#489">489</a>         String sVal = pdid.getFirstValue();
<a name="490" href="#490">490</a>         assertNotNull(sVal);
<a name="491" href="#491">491</a>         <strong class="jxr_keyword">return</strong> sVal;
<a name="492" href="#492">492</a>     }
<a name="493" href="#493">493</a> 
<a name="494" href="#494">494</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isCheckedOut(String objectId) {
<a name="495" href="#495">495</a>         Properties props = fObjSvc.getProperties(fRepositoryId, objectId, <span class="jxr_string">"*"</span>, <strong class="jxr_keyword">null</strong>);
<a name="496" href="#496">496</a>         <strong class="jxr_keyword">return</strong> isCheckedOut(props.getProperties());
<a name="497" href="#497">497</a>     }
<a name="498" href="#498">498</a> 
<a name="499" href="#499">499</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isCheckedOut(Map&lt;String, PropertyData&lt;?&gt;&gt; props) {
<a name="500" href="#500">500</a>         PropertyBoolean pdb = (PropertyBoolean) props.get(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
<a name="501" href="#501">501</a>         assertNotNull(pdb);
<a name="502" href="#502">502</a>         <strong class="jxr_keyword">boolean</strong> bVal = pdb.getFirstValue();
<a name="503" href="#503">503</a>         <strong class="jxr_keyword">return</strong> bVal;
<a name="504" href="#504">504</a>     }
<a name="505" href="#505">505</a> 
<a name="506" href="#506">506</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> checkVersionProperties(String docId, VersioningState versioningState,
<a name="507" href="#507">507</a>             Map&lt;String, PropertyData&lt;?&gt;&gt; props, String checkinComment) {
<a name="508" href="#508">508</a>         <strong class="jxr_keyword">for</strong> (PropertyData&lt;?&gt; pd : props.values()) {
<a name="509" href="#509">509</a>             log.info(<span class="jxr_string">"return property id: "</span> + pd.getId() + <span class="jxr_string">", value: "</span> + pd.getValues());
<a name="510" href="#510">510</a>         }
<a name="511" href="#511">511</a> 
<a name="512" href="#512">512</a>         DocumentTypeDefinition typeDef = (DocumentTypeDefinition) fRepSvc.getTypeDefinition(fRepositoryId,
<a name="513" href="#513">513</a>                 VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, <strong class="jxr_keyword">null</strong>);
<a name="514" href="#514">514</a>         PropertyBoolean pdb = (PropertyBoolean) props.get(PropertyIds.IS_LATEST_VERSION);
<a name="515" href="#515">515</a>         assertNotNull(pdb);
<a name="516" href="#516">516</a>         <strong class="jxr_keyword">boolean</strong> bVal = pdb.getFirstValue();
<a name="517" href="#517">517</a>         assertEquals(versioningState != VersioningState.CHECKEDOUT, bVal); <em class="jxr_comment">// if</em>
<a name="518" href="#518">518</a>         <em class="jxr_comment">// checked out it isn't the latest version</em>
<a name="519" href="#519">519</a> 
<a name="520" href="#520">520</a>         pdb = (PropertyBoolean) props.get(PropertyIds.IS_MAJOR_VERSION);
<a name="521" href="#521">521</a>         assertNotNull(pdb);
<a name="522" href="#522">522</a>         bVal = pdb.getFirstValue();
<a name="523" href="#523">523</a>         assertEquals(versioningState == VersioningState.MAJOR, bVal);
<a name="524" href="#524">524</a> 
<a name="525" href="#525">525</a>         pdb = (PropertyBoolean) props.get(PropertyIds.IS_LATEST_MAJOR_VERSION);
<a name="526" href="#526">526</a>         assertNotNull(pdb);
<a name="527" href="#527">527</a>         bVal = pdb.getFirstValue();
<a name="528" href="#528">528</a>         assertEquals(versioningState == VersioningState.MAJOR, bVal);
<a name="529" href="#529">529</a> 
<a name="530" href="#530">530</a>         PropertyId pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_ID);
<a name="531" href="#531">531</a>         assertNotNull(pdid);
<a name="532" href="#532">532</a>         String sVal = pdid.getFirstValue();
<a name="533" href="#533">533</a> <em class="jxr_comment">//        if (typeDef.isVersionable())  // need not be</em>
<a name="534" href="#534">534</a> <em class="jxr_comment">//            assertFalse(docId.equals(sVal));</em>
<a name="535" href="#535">535</a> <em class="jxr_comment">//        else</em>
<a name="536" href="#536">536</a> <em class="jxr_comment">//            assertEquals(docId, sVal);</em>
<a name="537" href="#537">537</a> 
<a name="538" href="#538">538</a> 
<a name="539" href="#539">539</a>         pdb = (PropertyBoolean) props.get(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
<a name="540" href="#540">540</a>         assertNotNull(pdb);
<a name="541" href="#541">541</a>         bVal = pdb.getFirstValue();
<a name="542" href="#542">542</a>         assertEquals(versioningState == VersioningState.CHECKEDOUT, bVal);
<a name="543" href="#543">543</a> 
<a name="544" href="#544">544</a>         PropertyString pds = (PropertyString) props.get(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
<a name="545" href="#545">545</a>         assertNotNull(pds);
<a name="546" href="#546">546</a>         sVal = pds.getFirstValue();
<a name="547" href="#547">547</a>         <strong class="jxr_keyword">if</strong> (versioningState == VersioningState.CHECKEDOUT) {
<a name="548" href="#548">548</a>             assertTrue(sVal != <strong class="jxr_keyword">null</strong> &amp;&amp; sVal.length() &gt; 0);
<a name="549" href="#549">549</a>         } <strong class="jxr_keyword">else</strong> {
<a name="550" href="#550">550</a>             assertTrue(<strong class="jxr_keyword">null</strong> == sVal || sVal.equals(<span class="jxr_string">""</span>));
<a name="551" href="#551">551</a>         }
<a name="552" href="#552">552</a> 
<a name="553" href="#553">553</a>         pdid = (PropertyId) props.get(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
<a name="554" href="#554">554</a>         assertNotNull(pdid);
<a name="555" href="#555">555</a>         sVal = pdid.getFirstValue();
<a name="556" href="#556">556</a>         <strong class="jxr_keyword">if</strong> (versioningState == VersioningState.CHECKEDOUT) {
<a name="557" href="#557">557</a>             assertTrue(sVal != <strong class="jxr_keyword">null</strong> &amp;&amp; sVal.length() &gt; 0);
<a name="558" href="#558">558</a>         } <strong class="jxr_keyword">else</strong> {
<a name="559" href="#559">559</a>             assertTrue(<strong class="jxr_keyword">null</strong> == sVal || sVal.equals(<span class="jxr_string">""</span>));
<a name="560" href="#560">560</a>         }
<a name="561" href="#561">561</a> 
<a name="562" href="#562">562</a>         pds = (PropertyString) props.get(PropertyIds.CHECKIN_COMMENT);
<a name="563" href="#563">563</a>         assertNotNull(pdb);
<a name="564" href="#564">564</a>         sVal = pds.getFirstValue();
<a name="565" href="#565">565</a>         <strong class="jxr_keyword">if</strong> (checkinComment == <strong class="jxr_keyword">null</strong>) {
<a name="566" href="#566">566</a>             assertTrue(<strong class="jxr_keyword">null</strong> == sVal);
<a name="567" href="#567">567</a>         } <strong class="jxr_keyword">else</strong> {
<a name="568" href="#568">568</a>             assertEquals(checkinComment, sVal);
<a name="569" href="#569">569</a>         }
<a name="570" href="#570">570</a> 
<a name="571" href="#571">571</a>     }
<a name="572" href="#572">572</a> 
<a name="573" href="#573">573</a>     @Override
<a name="574" href="#574">574</a>     <strong class="jxr_keyword">public</strong> String getDocument(String id) {
<a name="575" href="#575">575</a>         String returnedId = <strong class="jxr_keyword">null</strong>;
<a name="576" href="#576">576</a>         <strong class="jxr_keyword">try</strong> {
<a name="577" href="#577">577</a>             ObjectData res = fObjSvc.getObject(fRepositoryId, id, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>, false,
<a name="578" href="#578">578</a>                     false, <strong class="jxr_keyword">null</strong>);
<a name="579" href="#579">579</a>             assertNotNull(res);
<a name="580" href="#580">580</a>             testReturnedProperties(res.getProperties().getProperties());
<a name="581" href="#581">581</a>             returnedId = res.getId();
<a name="582" href="#582">582</a>             assertEquals(id, returnedId);
<a name="583" href="#583">583</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="584" href="#584">584</a>             fail(<span class="jxr_string">"getObject() failed with exception: "</span> + e);
<a name="585" href="#585">585</a>         }
<a name="586" href="#586">586</a>         <strong class="jxr_keyword">return</strong> returnedId;
<a name="587" href="#587">587</a>     }
<a name="588" href="#588">588</a> 
<a name="589" href="#589">589</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> testReturnedProperties(Map&lt;String, PropertyData&lt;?&gt;&gt; props) {
<a name="590" href="#590">590</a>         <strong class="jxr_keyword">for</strong> (PropertyData&lt;?&gt; pd : props.values()) {
<a name="591" href="#591">591</a>             log.info(<span class="jxr_string">"return property id: "</span> + pd.getId() + <span class="jxr_string">", value: "</span> + pd.getValues());
<a name="592" href="#592">592</a>         }
<a name="593" href="#593">593</a> 
<a name="594" href="#594">594</a>         PropertyData&lt;?&gt; pd = props.get(PropertyIds.NAME);
<a name="595" href="#595">595</a>         assertNotNull(pd);
<a name="596" href="#596">596</a>         assertEquals(PROP_NAME, pd.getFirstValue());
<a name="597" href="#597">597</a>         pd = props.get(PropertyIds.OBJECT_TYPE_ID);
<a name="598" href="#598">598</a>         assertEquals(VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, pd.getFirstValue());
<a name="599" href="#599">599</a>         pd = props.get(VersionTestTypeSystemCreator.PROPERTY_ID);
<a name="600" href="#600">600</a>         assertEquals(PROP_VALUE, pd.getFirstValue());
<a name="601" href="#601">601</a>     }
<a name="602" href="#602">602</a> 
<a name="603" href="#603">603</a>     <strong class="jxr_keyword">private</strong> String createDocument(String name, String folderId, VersioningState versioningState) {
<a name="604" href="#604">604</a> 
<a name="605" href="#605">605</a>         String id = <strong class="jxr_keyword">null</strong>;
<a name="606" href="#606">606</a>         Map&lt;String, String&gt; properties = <strong class="jxr_keyword">new</strong> HashMap&lt;String, String&gt;();
<a name="607" href="#607">607</a>         properties.put(VersionTestTypeSystemCreator.PROPERTY_ID, PROP_VALUE);
<a name="608" href="#608">608</a>         id = fCreator.createDocument(name, VersionTestTypeSystemCreator.VERSION_TEST_DOCUMENT_TYPE_ID, folderId,
<a name="609" href="#609">609</a>                 versioningState, properties);
<a name="610" href="#610">610</a> 
<a name="611" href="#611">611</a>         <strong class="jxr_keyword">return</strong> id;
<a name="612" href="#612">612</a>     }
<a name="613" href="#613">613</a> 
<a name="614" href="#614">614</a>     <strong class="jxr_keyword">private</strong> String createVersionSeriesWithThreeVersions() {
<a name="615" href="#615">615</a>         String verIdV1 = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
<a name="616" href="#616">616</a>         getDocument(verIdV1);
<a name="617" href="#617">617</a> 
<a name="618" href="#618">618</a>         ObjectData version = fObjSvc.getObject(fRepositoryId, verIdV1, <span class="jxr_string">"*"</span>, false, IncludeRelationships.NONE, <strong class="jxr_keyword">null</strong>,
<a name="619" href="#619">619</a>                 false, false, <strong class="jxr_keyword">null</strong>);
<a name="620" href="#620">620</a>         String verSeriesId = getVersionSeriesId(verIdV1, version.getProperties().getProperties());
<a name="621" href="#621">621</a> 
<a name="622" href="#622">622</a>         <em class="jxr_comment">// create second version with different content</em>
<a name="623" href="#623">623</a>         Holder&lt;String&gt; idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verIdV1);
<a name="624" href="#624">624</a>         Holder&lt;Boolean&gt; contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;(false);
<a name="625" href="#625">625</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="626" href="#626">626</a> 
<a name="627" href="#627">627</a>         ContentStream content2 = createContent('a');
<a name="628" href="#628">628</a>         Properties newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID,
<a name="629" href="#629">629</a>                 <span class="jxr_string">"PropertyFromVersion2"</span>);
<a name="630" href="#630">630</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verIdV1);
<a name="631" href="#631">631</a>         <em class="jxr_comment">// Test check-in and pass content and properties</em>
<a name="632" href="#632">632</a>         String checkinComment = <span class="jxr_string">"Checkin from Unit Test-2."</span>;
<a name="633" href="#633">633</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, newProps, content2, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="634" href="#634">634</a>         String verIdV2 = idHolder.getValue();
<a name="635" href="#635">635</a> 
<a name="636" href="#636">636</a>         <em class="jxr_comment">// create third version with different content</em>
<a name="637" href="#637">637</a>         contentCopied = <strong class="jxr_keyword">new</strong> Holder&lt;Boolean&gt;(false);
<a name="638" href="#638">638</a>         fVerSvc.checkOut(fRepositoryId, idHolder, <strong class="jxr_keyword">null</strong>, contentCopied);
<a name="639" href="#639">639</a>         ContentStream content3 = <strong class="jxr_keyword">super</strong>.createContent('a');
<a name="640" href="#640">640</a>         newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, <span class="jxr_string">"PropertyFromVersion3"</span>);
<a name="641" href="#641">641</a>         <em class="jxr_comment">// Test check-in and pass content and properties</em>
<a name="642" href="#642">642</a>         checkinComment = <span class="jxr_string">"Checkin from Unit Test-3."</span>;
<a name="643" href="#643">643</a>         fVerSvc.checkIn(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, newProps, content3, checkinComment, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="644" href="#644">644</a>         <em class="jxr_comment">/*<em class="jxr_comment"> String verIdV3 = */</em>idHolder.getValue();</em>
<a name="645" href="#645">645</a> 
<a name="646" href="#646">646</a>         <em class="jxr_comment">// Try to update version2 which should fail (on a versioned document</em>
<a name="647" href="#647">647</a>         <em class="jxr_comment">// only a document that</em>
<a name="648" href="#648">648</a>         <em class="jxr_comment">// is checked out can be modified.</em>
<a name="649" href="#649">649</a>         <strong class="jxr_keyword">try</strong> {
<a name="650" href="#650">650</a>             fCreator.updateProperty(verIdV2, VersionTestTypeSystemCreator.PROPERTY_ID, <span class="jxr_string">"ChangeWithoutCheckout"</span>);
<a name="651" href="#651">651</a>             fail(<span class="jxr_string">"updateProperty for an older version should fail."</span>);
<a name="652" href="#652">652</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="653" href="#653">653</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="654" href="#654">654</a>         }
<a name="655" href="#655">655</a>         <em class="jxr_comment">// try to set content on an older version</em>
<a name="656" href="#656">656</a>         ContentStream content4 = <strong class="jxr_keyword">super</strong>.createContent('x');
<a name="657" href="#657">657</a>         idHolder = <strong class="jxr_keyword">new</strong> Holder&lt;String&gt;(verIdV2);
<a name="658" href="#658">658</a>         <strong class="jxr_keyword">try</strong> {
<a name="659" href="#659">659</a>             fObjSvc.setContentStream(fRepositoryId, idHolder, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, content4, <strong class="jxr_keyword">null</strong>);
<a name="660" href="#660">660</a>             fail(<span class="jxr_string">"setContentStream for an older version should fail."</span>);
<a name="661" href="#661">661</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="662" href="#662">662</a>             assertTrue(e instanceof CmisUpdateConflictException);
<a name="663" href="#663">663</a>         }
<a name="664" href="#664">664</a> 
<a name="665" href="#665">665</a>         <strong class="jxr_keyword">return</strong> verSeriesId;
<a name="666" href="#666">666</a>     }
<a name="667" href="#667">667</a> 
<a name="668" href="#668">668</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

