<!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>RepositoryServiceImpl 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.bindings.spi.atompub;
<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.apache.chemistry.opencmis.commons.impl.Converter.convert;
<a name="22" href="#22">22</a>  
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.math.BigInteger;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.util.List;
<a name="26" href="#26">26</a>  
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
<a name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.ExtensionsData;
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
<a name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
<a name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
<a name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
<a name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
<a name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.Constants;
<a name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
<a name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
<a name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
<a name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
<a name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.chemistry.opencmis.commons.spi.RepositoryService;
<a name="45" href="#45">45</a>  
<a name="46" href="#46">46</a>  <em class="jxr_javadoccomment">/**</em>
<a name="47" href="#47">47</a>  <em class="jxr_javadoccomment"> * Repository Service AtomPub client.</em>
<a name="48" href="#48">48</a>  <em class="jxr_javadoccomment"> */</em>
<a name="49" href="#49">49</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.html">RepositoryServiceImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.html">AbstractAtomPubService</a> implements RepositoryService {
<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/bindings/spi/atompub/RepositoryServiceImpl.html">RepositoryServiceImpl</a>(<a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/BindingSession.html">BindingSession</a> session) {
<a name="55" href="#55">55</a>          setSession(session);
<a name="56" href="#56">56</a>      }
<a name="57" href="#57">57</a>  
<a name="58" href="#58">58</a>      <strong class="jxr_keyword">public</strong> List&lt;RepositoryInfo&gt; getRepositoryInfos(ExtensionsData extension) {
<a name="59" href="#59">59</a>          <strong class="jxr_keyword">return</strong> getRepositoriesInternal(<strong class="jxr_keyword">null</strong>);
<a name="60" href="#60">60</a>      }
<a name="61" href="#61">61</a>  
<a name="62" href="#62">62</a>      <strong class="jxr_keyword">public</strong> RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
<a name="63" href="#63">63</a>          List&lt;RepositoryInfo&gt; repositoryInfos = getRepositoriesInternal(repositoryId);
<a name="64" href="#64">64</a>  
<a name="65" href="#65">65</a>          <em class="jxr_comment">// find the repository</em>
<a name="66" href="#66">66</a>          <strong class="jxr_keyword">for</strong> (RepositoryInfo info : repositoryInfos) {
<a name="67" href="#67">67</a>              <strong class="jxr_keyword">if</strong> (info.getId() == <strong class="jxr_keyword">null</strong>) {
<a name="68" href="#68">68</a>                  <strong class="jxr_keyword">continue</strong>;
<a name="69" href="#69">69</a>              }
<a name="70" href="#70">70</a>  
<a name="71" href="#71">71</a>              <strong class="jxr_keyword">if</strong> (info.getId().equals(repositoryId)) {
<a name="72" href="#72">72</a>                  <strong class="jxr_keyword">return</strong> info;
<a name="73" href="#73">73</a>              }
<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">throw</strong> <strong class="jxr_keyword">new</strong> CmisObjectNotFoundException(<span class="jxr_string">"Repository not found!"</span>);
<a name="77" href="#77">77</a>      }
<a name="78" href="#78">78</a>  
<a name="79" href="#79">79</a>      <strong class="jxr_keyword">public</strong> TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
<a name="80" href="#80">80</a>          <strong class="jxr_keyword">return</strong> getTypeDefinitionInternal(repositoryId, typeId);
<a name="81" href="#81">81</a>      }
<a name="82" href="#82">82</a>  
<a name="83" href="#83">83</a>      <strong class="jxr_keyword">public</strong> TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
<a name="84" href="#84">84</a>              BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
<a name="85" href="#85">85</a>          TypeDefinitionListImpl result = <strong class="jxr_keyword">new</strong> TypeDefinitionListImpl();
<a name="86" href="#86">86</a>  
<a name="87" href="#87">87</a>          <em class="jxr_comment">// find the link</em>
<a name="88" href="#88">88</a>          String link = <strong class="jxr_keyword">null</strong>;
<a name="89" href="#89">89</a>          <strong class="jxr_keyword">if</strong> (typeId == <strong class="jxr_keyword">null</strong>) {
<a name="90" href="#90">90</a>              link = loadCollection(repositoryId, Constants.COLLECTION_TYPES);
<a name="91" href="#91">91</a>          } <strong class="jxr_keyword">else</strong> {
<a name="92" href="#92">92</a>              link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
<a name="93" href="#93">93</a>          }
<a name="94" href="#94">94</a>  
<a name="95" href="#95">95</a>          <strong class="jxr_keyword">if</strong> (link == <strong class="jxr_keyword">null</strong>) {
<a name="96" href="#96">96</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> CmisObjectNotFoundException(<span class="jxr_string">"Unknown repository or type!"</span>);
<a name="97" href="#97">97</a>          }
<a name="98" href="#98">98</a>  
<a name="99" href="#99">99</a>          UrlBuilder url = <strong class="jxr_keyword">new</strong> UrlBuilder(link);
<a name="100" href="#100">100</a>         url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
<a name="101" href="#101">101</a>         url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
<a name="102" href="#102">102</a>         url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
<a name="103" href="#103">103</a> 
<a name="104" href="#104">104</a>         <em class="jxr_comment">// read and parse</em>
<a name="105" href="#105">105</a>         HttpUtils.Response resp = read(url);
<a name="106" href="#106">106</a>         <a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.html">AtomFeed</a> feed = parse(resp.getStream(), AtomFeed.<strong class="jxr_keyword">class</strong>);
<a name="107" href="#107">107</a> 
<a name="108" href="#108">108</a>         <em class="jxr_comment">// handle top level</em>
<a name="109" href="#109">109</a>         <strong class="jxr_keyword">for</strong> (AtomElement element : feed.getElements()) {
<a name="110" href="#110">110</a>             <strong class="jxr_keyword">if</strong> (element.getObject() instanceof AtomLink) {
<a name="111" href="#111">111</a>                 <strong class="jxr_keyword">if</strong> (isNextLink(element)) {
<a name="112" href="#112">112</a>                     result.setHasMoreItems(Boolean.TRUE);
<a name="113" href="#113">113</a>                 }
<a name="114" href="#114">114</a>             } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (isInt(NAME_NUM_ITEMS, element)) {
<a name="115" href="#115">115</a>                 result.setNumItems((BigInteger) element.getObject());
<a name="116" href="#116">116</a>             }
<a name="117" href="#117">117</a>         }
<a name="118" href="#118">118</a> 
<a name="119" href="#119">119</a>         result.setList(<strong class="jxr_keyword">new</strong> ArrayList&lt;TypeDefinition&gt;(feed.getEntries().size()));
<a name="120" href="#120">120</a> 
<a name="121" href="#121">121</a>         <em class="jxr_comment">// get the children</em>
<a name="122" href="#122">122</a>         <strong class="jxr_keyword">if</strong> (!feed.getEntries().isEmpty()) {
<a name="123" href="#123">123</a>             <strong class="jxr_keyword">for</strong> (AtomEntry entry : feed.getEntries()) {
<a name="124" href="#124">124</a>                 TypeDefinition child = <strong class="jxr_keyword">null</strong>;
<a name="125" href="#125">125</a> 
<a name="126" href="#126">126</a>                 lockTypeLinks();
<a name="127" href="#127">127</a>                 <strong class="jxr_keyword">try</strong> {
<a name="128" href="#128">128</a>                     <em class="jxr_comment">// walk through the entry</em>
<a name="129" href="#129">129</a>                     <strong class="jxr_keyword">for</strong> (AtomElement element : entry.getElements()) {
<a name="130" href="#130">130</a>                         <strong class="jxr_keyword">if</strong> (element.getObject() instanceof AtomLink) {
<a name="131" href="#131">131</a>                             addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
<a name="132" href="#132">132</a>                         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (element.getObject() instanceof CmisTypeDefinitionType) {
<a name="133" href="#133">133</a>                             child = convert((CmisTypeDefinitionType) element.getObject());
<a name="134" href="#134">134</a>                         }
<a name="135" href="#135">135</a>                     }
<a name="136" href="#136">136</a>                 } <strong class="jxr_keyword">finally</strong> {
<a name="137" href="#137">137</a>                     unlockTypeLinks();
<a name="138" href="#138">138</a>                 }
<a name="139" href="#139">139</a> 
<a name="140" href="#140">140</a>                 <strong class="jxr_keyword">if</strong> (child != <strong class="jxr_keyword">null</strong>) {
<a name="141" href="#141">141</a>                     result.getList().add(child);
<a name="142" href="#142">142</a>                 }
<a name="143" href="#143">143</a>             }
<a name="144" href="#144">144</a>         }
<a name="145" href="#145">145</a> 
<a name="146" href="#146">146</a>         <strong class="jxr_keyword">return</strong> result;
<a name="147" href="#147">147</a>     }
<a name="148" href="#148">148</a> 
<a name="149" href="#149">149</a>     <strong class="jxr_keyword">public</strong> List&lt;TypeDefinitionContainer&gt; getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
<a name="150" href="#150">150</a>             Boolean includePropertyDefinitions, ExtensionsData extension) {
<a name="151" href="#151">151</a>         List&lt;TypeDefinitionContainer&gt; result = <strong class="jxr_keyword">new</strong> ArrayList&lt;TypeDefinitionContainer&gt;();
<a name="152" href="#152">152</a> 
<a name="153" href="#153">153</a>         <em class="jxr_comment">// find the link</em>
<a name="154" href="#154">154</a>         String link = <strong class="jxr_keyword">null</strong>;
<a name="155" href="#155">155</a>         <strong class="jxr_keyword">if</strong> (typeId == <strong class="jxr_keyword">null</strong>) {
<a name="156" href="#156">156</a>             link = loadRepositoryLink(repositoryId, Constants.REP_REL_TYPEDESC);
<a name="157" href="#157">157</a>         } <strong class="jxr_keyword">else</strong> {
<a name="158" href="#158">158</a>             link = loadTypeLink(repositoryId, typeId, Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
<a name="159" href="#159">159</a>         }
<a name="160" href="#160">160</a> 
<a name="161" href="#161">161</a>         <strong class="jxr_keyword">if</strong> (link == <strong class="jxr_keyword">null</strong>) {
<a name="162" href="#162">162</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> CmisObjectNotFoundException(<span class="jxr_string">"Unknown repository or type!"</span>);
<a name="163" href="#163">163</a>         }
<a name="164" href="#164">164</a> 
<a name="165" href="#165">165</a>         UrlBuilder url = <strong class="jxr_keyword">new</strong> UrlBuilder(link);
<a name="166" href="#166">166</a>         url.addParameter(Constants.PARAM_DEPTH, depth);
<a name="167" href="#167">167</a>         url.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
<a name="168" href="#168">168</a> 
<a name="169" href="#169">169</a>         <em class="jxr_comment">// read and parse</em>
<a name="170" href="#170">170</a>         HttpUtils.Response resp = read(url);
<a name="171" href="#171">171</a>         <a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.html">AtomFeed</a> feed = parse(resp.getStream(), AtomFeed.<strong class="jxr_keyword">class</strong>);
<a name="172" href="#172">172</a> 
<a name="173" href="#173">173</a>         <em class="jxr_comment">// process tree</em>
<a name="174" href="#174">174</a>         addTypeDescendantsLevel(repositoryId, feed, result);
<a name="175" href="#175">175</a> 
<a name="176" href="#176">176</a>         <strong class="jxr_keyword">return</strong> result;
<a name="177" href="#177">177</a>     }
<a name="178" href="#178">178</a> 
<a name="179" href="#179">179</a>     <em class="jxr_javadoccomment">/**</em>
<a name="180" href="#180">180</a> <em class="jxr_javadoccomment">     * Adds type descendants level recursively.</em>
<a name="181" href="#181">181</a> <em class="jxr_javadoccomment">     */</em>
<a name="182" href="#182">182</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> addTypeDescendantsLevel(String repositoryId, <a href="../../../../../../../../org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.html">AtomFeed</a> feed, List&lt;TypeDefinitionContainer&gt; containerList) {
<a name="183" href="#183">183</a>         <strong class="jxr_keyword">if</strong> ((feed == <strong class="jxr_keyword">null</strong>) || (feed.getEntries().isEmpty())) {
<a name="184" href="#184">184</a>             <strong class="jxr_keyword">return</strong>;
<a name="185" href="#185">185</a>         }
<a name="186" href="#186">186</a> 
<a name="187" href="#187">187</a>         <em class="jxr_comment">// walk through the feed</em>
<a name="188" href="#188">188</a>         <strong class="jxr_keyword">for</strong> (AtomEntry entry : feed.getEntries()) {
<a name="189" href="#189">189</a>             TypeDefinitionContainerImpl childContainer = <strong class="jxr_keyword">null</strong>;
<a name="190" href="#190">190</a>             List&lt;TypeDefinitionContainer&gt; childContainerList = <strong class="jxr_keyword">new</strong> ArrayList&lt;TypeDefinitionContainer&gt;();
<a name="191" href="#191">191</a> 
<a name="192" href="#192">192</a>             <em class="jxr_comment">// walk through the entry</em>
<a name="193" href="#193">193</a>             lockTypeLinks();
<a name="194" href="#194">194</a>             <strong class="jxr_keyword">try</strong> {
<a name="195" href="#195">195</a>                 <strong class="jxr_keyword">for</strong> (AtomElement element : entry.getElements()) {
<a name="196" href="#196">196</a>                     <strong class="jxr_keyword">if</strong> (element.getObject() instanceof AtomLink) {
<a name="197" href="#197">197</a>                         addTypeLink(repositoryId, entry.getId(), (AtomLink) element.getObject());
<a name="198" href="#198">198</a>                     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (element.getObject() instanceof CmisTypeDefinitionType) {
<a name="199" href="#199">199</a>                         childContainer = <strong class="jxr_keyword">new</strong> TypeDefinitionContainerImpl(
<a name="200" href="#200">200</a>                                 convert((CmisTypeDefinitionType) element.getObject()));
<a name="201" href="#201">201</a>                     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (element.getObject() instanceof AtomFeed) {
<a name="202" href="#202">202</a>                         addTypeDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), childContainerList);
<a name="203" href="#203">203</a>                     }
<a name="204" href="#204">204</a>                 }
<a name="205" href="#205">205</a>             } <strong class="jxr_keyword">finally</strong> {
<a name="206" href="#206">206</a>                 unlockTypeLinks();
<a name="207" href="#207">207</a>             }
<a name="208" href="#208">208</a> 
<a name="209" href="#209">209</a>             <strong class="jxr_keyword">if</strong> (childContainer != <strong class="jxr_keyword">null</strong>) {
<a name="210" href="#210">210</a>                 childContainer.setChildren(childContainerList);
<a name="211" href="#211">211</a>                 containerList.add(childContainer);
<a name="212" href="#212">212</a>             }
<a name="213" href="#213">213</a>         }
<a name="214" href="#214">214</a>     }
<a name="215" href="#215">215</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

