blob: 26c4916ea6f964f3771c4312b3c12fcf1f2c28b8 [file] [log] [blame]
<!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=UTF-8" />
<title>UDDISubscriptionImpl xref</title>
<link type="text/css" rel="stylesheet" href="../../../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../../../apidocs/org/apache/juddi/api/impl/UDDISubscriptionImpl.html">View Javadoc</a></div><pre>
<a class="jxr_linenumber" name="L1" href="#L1">1</a> <em class="jxr_comment">/*</em>
<a class="jxr_linenumber" name="L2" href="#L2">2</a> <em class="jxr_comment"> * Copyright 2001-2008 The Apache Software Foundation.</em>
<a class="jxr_linenumber" name="L3" href="#L3">3</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L4" href="#L4">4</a> <em class="jxr_comment"> * Licensed under the Apache License, Version 2.0 (the "License");</em>
<a class="jxr_linenumber" name="L5" href="#L5">5</a> <em class="jxr_comment"> * you may not use this file except in compliance with the License.</em>
<a class="jxr_linenumber" name="L6" href="#L6">6</a> <em class="jxr_comment"> * You may obtain a copy of the License at</em>
<a class="jxr_linenumber" name="L7" href="#L7">7</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L8" href="#L8">8</a> <em class="jxr_comment"> * <a href="http://www.apache.org/licenses/LICENSE-2." target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.</a>0</em>
<a class="jxr_linenumber" name="L9" href="#L9">9</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L10" href="#L10">10</a> <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing, software</em>
<a class="jxr_linenumber" name="L11" href="#L11">11</a> <em class="jxr_comment"> * distributed under the License is distributed on an "AS IS" BASIS,</em>
<a class="jxr_linenumber" name="L12" href="#L12">12</a> <em class="jxr_comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
<a class="jxr_linenumber" name="L13" href="#L13">13</a> <em class="jxr_comment"> * See the License for the specific language governing permissions and</em>
<a class="jxr_linenumber" name="L14" href="#L14">14</a> <em class="jxr_comment"> * limitations under the License.</em>
<a class="jxr_linenumber" name="L15" href="#L15">15</a> <em class="jxr_comment"> *</em>
<a class="jxr_linenumber" name="L16" href="#L16">16</a> <em class="jxr_comment"> */</em>
<a class="jxr_linenumber" name="L17" href="#L17">17</a>
<a class="jxr_linenumber" name="L18" href="#L18">18</a> <strong class="jxr_keyword">package</strong> org.apache.juddi.api.impl;
<a class="jxr_linenumber" name="L19" href="#L19">19</a>
<a class="jxr_linenumber" name="L20" href="#L20">20</a> <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a class="jxr_linenumber" name="L21" href="#L21">21</a> <strong class="jxr_keyword">import</strong> java.util.Date;
<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.util.GregorianCalendar;
<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> java.util.List;
<a class="jxr_linenumber" name="L24" href="#L24">24</a> <strong class="jxr_keyword">import</strong> java.util.UUID;
<a class="jxr_linenumber" name="L25" href="#L25">25</a>
<a class="jxr_linenumber" name="L26" href="#L26">26</a> <strong class="jxr_keyword">import</strong> javax.jws.WebService;
<a class="jxr_linenumber" name="L27" href="#L27">27</a> <strong class="jxr_keyword">import</strong> javax.persistence.EntityManager;
<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">import</strong> javax.persistence.EntityTransaction;
<a class="jxr_linenumber" name="L29" href="#L29">29</a> <strong class="jxr_keyword">import</strong> javax.xml.bind.JAXBException;
<a class="jxr_linenumber" name="L30" href="#L30">30</a> <strong class="jxr_keyword">import</strong> javax.xml.datatype.DatatypeConfigurationException;
<a class="jxr_linenumber" name="L31" href="#L31">31</a> <strong class="jxr_keyword">import</strong> javax.xml.datatype.DatatypeFactory;
<a class="jxr_linenumber" name="L32" href="#L32">32</a> <strong class="jxr_keyword">import</strong> javax.xml.ws.Holder;
<a class="jxr_linenumber" name="L33" href="#L33">33</a>
<a class="jxr_linenumber" name="L34" href="#L34">34</a> <strong class="jxr_keyword">import</strong> org.apache.commons.configuration.ConfigurationException;
<a class="jxr_linenumber" name="L35" href="#L35">35</a> <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
<a class="jxr_linenumber" name="L36" href="#L36">36</a> <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
<a class="jxr_linenumber" name="L37" href="#L37">37</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.api.util.QueryStatus;
<a class="jxr_linenumber" name="L38" href="#L38">38</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.api.util.SubscriptionQuery;
<a class="jxr_linenumber" name="L39" href="#L39">39</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.config.AppConfig;
<a class="jxr_linenumber" name="L40" href="#L40">40</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.config.PersistenceManager;
<a class="jxr_linenumber" name="L41" href="#L41">41</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.config.Property;
<a class="jxr_linenumber" name="L42" href="#L42">42</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.jaxb.JAXBMarshaller;
<a class="jxr_linenumber" name="L43" href="#L43">43</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.mapping.MappingApiToModel;
<a class="jxr_linenumber" name="L44" href="#L44">44</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.mapping.MappingModelToApi;
<a class="jxr_linenumber" name="L45" href="#L45">45</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.model.SubscriptionChunkToken;
<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.model.SubscriptionMatch;
<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.model.UddiEntityPublisher;
<a class="jxr_linenumber" name="L48" href="#L48">48</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.query.FindBusinessByPublisherQuery;
<a class="jxr_linenumber" name="L49" href="#L49">49</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.query.FindSubscriptionByPublisherQuery;
<a class="jxr_linenumber" name="L50" href="#L50">50</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.v3.error.ErrorMessage;
<a class="jxr_linenumber" name="L51" href="#L51">51</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.v3.error.FatalErrorException;
<a class="jxr_linenumber" name="L52" href="#L52">52</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.v3.error.InvalidValueException;
<a class="jxr_linenumber" name="L53" href="#L53">53</a> <strong class="jxr_keyword">import</strong> org.apache.juddi.validation.ValidateSubscription;
<a class="jxr_linenumber" name="L54" href="#L54">54</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.AssertionStatusReport;
<a class="jxr_linenumber" name="L55" href="#L55">55</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.BindingDetail;
<a class="jxr_linenumber" name="L56" href="#L56">56</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.BusinessDetail;
<a class="jxr_linenumber" name="L57" href="#L57">57</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.BusinessList;
<a class="jxr_linenumber" name="L58" href="#L58">58</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.FindBinding;
<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.FindBusiness;
<a class="jxr_linenumber" name="L60" href="#L60">60</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.FindRelatedBusinesses;
<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.FindService;
<a class="jxr_linenumber" name="L62" href="#L62">62</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.FindTModel;
<a class="jxr_linenumber" name="L63" href="#L63">63</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.GetAssertionStatusReport;
<a class="jxr_linenumber" name="L64" href="#L64">64</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.GetBindingDetail;
<a class="jxr_linenumber" name="L65" href="#L65">65</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.GetBusinessDetail;
<a class="jxr_linenumber" name="L66" href="#L66">66</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.GetServiceDetail;
<a class="jxr_linenumber" name="L67" href="#L67">67</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.GetTModelDetail;
<a class="jxr_linenumber" name="L68" href="#L68">68</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.RelatedBusinessesList;
<a class="jxr_linenumber" name="L69" href="#L69">69</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.ServiceDetail;
<a class="jxr_linenumber" name="L70" href="#L70">70</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.ServiceList;
<a class="jxr_linenumber" name="L71" href="#L71">71</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.TModelDetail;
<a class="jxr_linenumber" name="L72" href="#L72">72</a> <strong class="jxr_keyword">import</strong> org.uddi.api_v3.TModelList;
<a class="jxr_linenumber" name="L73" href="#L73">73</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.DeleteSubscription;
<a class="jxr_linenumber" name="L74" href="#L74">74</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.GetSubscriptionResults;
<a class="jxr_linenumber" name="L75" href="#L75">75</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.KeyBag;
<a class="jxr_linenumber" name="L76" href="#L76">76</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.Subscription;
<a class="jxr_linenumber" name="L77" href="#L77">77</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.SubscriptionFilter;
<a class="jxr_linenumber" name="L78" href="#L78">78</a> <strong class="jxr_keyword">import</strong> org.uddi.sub_v3.SubscriptionResultsList;
<a class="jxr_linenumber" name="L79" href="#L79">79</a> <strong class="jxr_keyword">import</strong> org.uddi.v3_service.DispositionReportFaultMessage;
<a class="jxr_linenumber" name="L80" href="#L80">80</a> <strong class="jxr_keyword">import</strong> org.uddi.v3_service.UDDISubscriptionPortType;
<a class="jxr_linenumber" name="L81" href="#L81">81</a>
<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * This is jUDDI's implementation of the UDDIv3 Subscription API</em>
<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L85" href="#L85">85</a> @WebService(serviceName=<span class="jxr_string">"UDDISubscriptionService"</span>,
<a class="jxr_linenumber" name="L86" href="#L86">86</a> endpointInterface=<span class="jxr_string">"org.uddi.v3_service.UDDISubscriptionPortType"</span>,
<a class="jxr_linenumber" name="L87" href="#L87">87</a> targetNamespace = <span class="jxr_string">"urn:uddi-org:api_v3_portType"</span>)
<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/juddi/api/impl/UDDISubscriptionImpl.html">UDDISubscriptionImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/juddi/api/impl/AuthenticatedService.html">AuthenticatedService</a> <strong class="jxr_keyword">implements</strong> UDDISubscriptionPortType {
<a class="jxr_linenumber" name="L89" href="#L89">89</a>
<a class="jxr_linenumber" name="L90" href="#L90">90</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> Log logger = LogFactory.getLog(UDDISubscriptionImpl.<strong class="jxr_keyword">class</strong>);
<a class="jxr_linenumber" name="L91" href="#L91">91</a>
<a class="jxr_linenumber" name="L92" href="#L92">92</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> DEFAULT_SUBSCRIPTIONEXPIRATION_DAYS = 30;
<a class="jxr_linenumber" name="L93" href="#L93">93</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> DEFAULT_CHUNKEXPIRATION_MINUTES = 5;
<a class="jxr_linenumber" name="L94" href="#L94">94</a>
<a class="jxr_linenumber" name="L95" href="#L95">95</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String CHUNK_TOKEN_PREFIX = <span class="jxr_string">"chunktoken:"</span>;
<a class="jxr_linenumber" name="L96" href="#L96">96</a>
<a class="jxr_linenumber" name="L97" href="#L97">97</a> <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/juddi/api/impl/UDDIServiceCounter.html">UDDIServiceCounter</a> serviceCounter;
<a class="jxr_linenumber" name="L98" href="#L98">98</a>
<a class="jxr_linenumber" name="L99" href="#L99">99</a> <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/juddi/api/impl/UDDISubscriptionImpl.html">UDDISubscriptionImpl</a>() {
<a class="jxr_linenumber" name="L100" href="#L100">100</a> <strong class="jxr_keyword">super</strong>();
<a class="jxr_linenumber" name="L101" href="#L101">101</a> serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(<strong class="jxr_keyword">this</strong>.getClass());
<a class="jxr_linenumber" name="L102" href="#L102">102</a> }
<a class="jxr_linenumber" name="L103" href="#L103">103</a>
<a class="jxr_linenumber" name="L104" href="#L104">104</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> deleteSubscription(DeleteSubscription body)
<a class="jxr_linenumber" name="L105" href="#L105">105</a> <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L106" href="#L106">106</a> <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
<a class="jxr_linenumber" name="L107" href="#L107">107</a>
<a class="jxr_linenumber" name="L108" href="#L108">108</a> EntityManager em = PersistenceManager.getEntityManager();
<a class="jxr_linenumber" name="L109" href="#L109">109</a> EntityTransaction tx = em.getTransaction();
<a class="jxr_linenumber" name="L110" href="#L110">110</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L111" href="#L111">111</a> tx.begin();
<a class="jxr_linenumber" name="L112" href="#L112">112</a>
<a class="jxr_linenumber" name="L113" href="#L113">113</a> UddiEntityPublisher publisher = <strong class="jxr_keyword">this</strong>.getEntityPublisher(em, body.getAuthInfo());
<a class="jxr_linenumber" name="L114" href="#L114">114</a> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/validation/ValidateSubscription.html">ValidateSubscription</a>(publisher).validateDeleteSubscription(em, body);
<a class="jxr_linenumber" name="L115" href="#L115">115</a>
<a class="jxr_linenumber" name="L116" href="#L116">116</a> List&lt;String&gt; subscriptionKeyList = body.getSubscriptionKey();
<a class="jxr_linenumber" name="L117" href="#L117">117</a> <strong class="jxr_keyword">for</strong> (String subscriptionKey : subscriptionKeyList) {
<a class="jxr_linenumber" name="L118" href="#L118">118</a> Object obj = em.find(org.apache.juddi.model.Subscription.<strong class="jxr_keyword">class</strong>, subscriptionKey);
<a class="jxr_linenumber" name="L119" href="#L119">119</a> em.remove(obj);
<a class="jxr_linenumber" name="L120" href="#L120">120</a> }
<a class="jxr_linenumber" name="L121" href="#L121">121</a>
<a class="jxr_linenumber" name="L122" href="#L122">122</a> tx.commit();
<a class="jxr_linenumber" name="L123" href="#L123">123</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L124" href="#L124">124</a> serviceCounter.update(SubscriptionQuery.DELETE_SUBSCRIPTION,
<a class="jxr_linenumber" name="L125" href="#L125">125</a> QueryStatus.SUCCESS, procTime);
<a class="jxr_linenumber" name="L126" href="#L126">126</a> } <strong class="jxr_keyword">catch</strong> (DispositionReportFaultMessage drfm) {
<a class="jxr_linenumber" name="L127" href="#L127">127</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L128" href="#L128">128</a> serviceCounter.update(SubscriptionQuery.DELETE_SUBSCRIPTION,
<a class="jxr_linenumber" name="L129" href="#L129">129</a> QueryStatus.FAILED, procTime);
<a class="jxr_linenumber" name="L130" href="#L130">130</a> <strong class="jxr_keyword">throw</strong> drfm;
<a class="jxr_linenumber" name="L131" href="#L131">131</a> } <strong class="jxr_keyword">finally</strong> {
<a class="jxr_linenumber" name="L132" href="#L132">132</a> <strong class="jxr_keyword">if</strong> (tx.isActive()) {
<a class="jxr_linenumber" name="L133" href="#L133">133</a> tx.rollback();
<a class="jxr_linenumber" name="L134" href="#L134">134</a> }
<a class="jxr_linenumber" name="L135" href="#L135">135</a> em.close();
<a class="jxr_linenumber" name="L136" href="#L136">136</a> }
<a class="jxr_linenumber" name="L137" href="#L137">137</a> }
<a class="jxr_linenumber" name="L138" href="#L138">138</a>
<a class="jxr_linenumber" name="L139" href="#L139">139</a> <strong class="jxr_keyword">public</strong> SubscriptionResultsList getSubscriptionResults(GetSubscriptionResults body) <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L140" href="#L140">140</a> <strong class="jxr_keyword">return</strong> getSubscriptionResults(body, <strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L141" href="#L141">141</a> }
<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_comment">/* (non-Javadoc)</em>
<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_comment"> * @see org.uddi.v3_service.UDDISubscriptionPortType#getSubscriptionResults(org.uddi.sub_v3.GetSubscriptionResults)</em>
<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_comment"> * Notes: Does it make sense to refresh the subscription matches on a call to this method? I don't think so, the user theoretically had</em>
<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_comment"> * a set of entities in mind when the subscription was saved and the snapshot should remain just that - a snapshot of the entities at the</em>
<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_comment"> * time of the subscription save. The result of this policy is that if an entity is deleted, that deleted result will appear in the keyBag</em>
<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_comment"> * on every call to this method. To resolve this, the user can renew the subscription at which time the "match" snapshot will be refreshed.</em>
<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_comment"> * The WS needs to be authenticated (null publisher), however the notificationSubscriber is calling this method also. The</em>
<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_comment"> * notificationSubscriber will pass in the publisher and this method will work in unauthenticated mode.</em>
<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_comment"> */</em>
<a class="jxr_linenumber" name="L153" href="#L153">153</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
<a class="jxr_linenumber" name="L154" href="#L154">154</a> <strong class="jxr_keyword">public</strong> SubscriptionResultsList getSubscriptionResults(GetSubscriptionResults body, <a href="../../../../../org/apache/juddi/model/UddiEntityPublisher.html">UddiEntityPublisher</a> publisher) <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L155" href="#L155">155</a> <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
<a class="jxr_linenumber" name="L156" href="#L156">156</a>
<a class="jxr_linenumber" name="L157" href="#L157">157</a> EntityManager em = PersistenceManager.getEntityManager();
<a class="jxr_linenumber" name="L158" href="#L158">158</a> EntityTransaction tx = em.getTransaction();
<a class="jxr_linenumber" name="L159" href="#L159">159</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L160" href="#L160">160</a> tx.begin();
<a class="jxr_linenumber" name="L161" href="#L161">161</a>
<a class="jxr_linenumber" name="L162" href="#L162">162</a> <strong class="jxr_keyword">if</strong> (publisher==<strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L163" href="#L163">163</a> publisher = <strong class="jxr_keyword">this</strong>.getEntityPublisher(em, body.getAuthInfo());
<a class="jxr_linenumber" name="L164" href="#L164">164</a> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/validation/ValidateSubscription.html">ValidateSubscription</a>(publisher).validateGetSubscriptionResults(em, body);
<a class="jxr_linenumber" name="L165" href="#L165">165</a> }
<a class="jxr_linenumber" name="L166" href="#L166">166</a>
<a class="jxr_linenumber" name="L167" href="#L167">167</a> org.apache.juddi.model.Subscription modelSubscription = em.find(org.apache.juddi.model.Subscription.<strong class="jxr_keyword">class</strong>, body.getSubscriptionKey());
<a class="jxr_linenumber" name="L168" href="#L168">168</a> SubscriptionFilter subscriptionFilter = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L169" href="#L169">169</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L170" href="#L170">170</a> subscriptionFilter = (SubscriptionFilter)JAXBMarshaller.unmarshallFromString(modelSubscription.getSubscriptionFilter(), JAXBMarshaller.PACKAGE_SUBSCRIPTION);
<a class="jxr_linenumber" name="L171" href="#L171">171</a> }
<a class="jxr_linenumber" name="L172" href="#L172">172</a> <strong class="jxr_keyword">catch</strong> (JAXBException e) {
<a class="jxr_linenumber" name="L173" href="#L173">173</a> logger.error(<span class="jxr_string">"JAXB Exception while unmarshalling subscription filter"</span>, e);
<a class="jxr_linenumber" name="L174" href="#L174">174</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/FatalErrorException.html">FatalErrorException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.Unspecified"</span>));
<a class="jxr_linenumber" name="L175" href="#L175">175</a> }
<a class="jxr_linenumber" name="L176" href="#L176">176</a> <strong class="jxr_keyword">if</strong> (logger.isDebugEnabled()) logger.debug(<span class="jxr_string">"filter="</span> + modelSubscription.getSubscriptionFilter());
<a class="jxr_linenumber" name="L177" href="#L177">177</a>
<a class="jxr_linenumber" name="L178" href="#L178">178</a> SubscriptionResultsList result = <strong class="jxr_keyword">new</strong> SubscriptionResultsList();
<a class="jxr_linenumber" name="L179" href="#L179">179</a> result.setChunkToken(<span class="jxr_string">"0"</span>);
<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_comment">//chunkToken: Optional element used to retrieve subsequent groups of data when the first invocation of this API indicates more data is available. This occurs when a chunkToken is returned whose value is not "0" in the validValuesList structure described in the next section. To retrieve the next chunk of data, the chunkToken returned should be used as an argument to the next invocation of this API.</em>
<a class="jxr_linenumber" name="L181" href="#L181">181</a> result.setCoveragePeriod(body.getCoveragePeriod());
<a class="jxr_linenumber" name="L182" href="#L182">182</a>
<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_comment">// The subscription structure is required output for the results</em>
<a class="jxr_linenumber" name="L184" href="#L184">184</a> org.uddi.sub_v3.Subscription apiSubscription = <strong class="jxr_keyword">new</strong> org.uddi.sub_v3.Subscription();
<a class="jxr_linenumber" name="L185" href="#L185">185</a> MappingModelToApi.mapSubscription(modelSubscription, apiSubscription);
<a class="jxr_linenumber" name="L186" href="#L186">186</a> result.setSubscription(apiSubscription);
<a class="jxr_linenumber" name="L187" href="#L187">187</a>
<a class="jxr_linenumber" name="L188" href="#L188">188</a> Date startPointDate = <strong class="jxr_keyword">new</strong> Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
<a class="jxr_linenumber" name="L189" href="#L189">189</a> Date endPointDate = <strong class="jxr_keyword">new</strong> Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
<a class="jxr_linenumber" name="L190" href="#L190">190</a>
<a class="jxr_linenumber" name="L191" href="#L191">191</a> Integer chunkData = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L192" href="#L192">192</a> <strong class="jxr_keyword">if</strong> (body.getChunkToken() != <strong class="jxr_keyword">null</strong> &amp;&amp; body.getChunkToken().length() &gt; 0) {
<a class="jxr_linenumber" name="L193" href="#L193">193</a> SubscriptionChunkToken chunkToken = em.find(SubscriptionChunkToken.<strong class="jxr_keyword">class</strong>, body.getChunkToken());
<a class="jxr_linenumber" name="L194" href="#L194">194</a>
<a class="jxr_linenumber" name="L195" href="#L195">195</a> <strong class="jxr_keyword">if</strong> (chunkToken == <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L196" href="#L196">196</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/InvalidValueException.html">InvalidValueException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.getsubscriptionresult.InvalidChunkToken"</span>, body.getChunkToken()));
<a class="jxr_linenumber" name="L197" href="#L197">197</a> <strong class="jxr_keyword">if</strong> (!chunkToken.getSubscriptionKey().equals(body.getSubscriptionKey()))
<a class="jxr_linenumber" name="L198" href="#L198">198</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/InvalidValueException.html">InvalidValueException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.getsubscriptionresult.NonMatchingChunkToken"</span>, body.getChunkToken()));
<a class="jxr_linenumber" name="L199" href="#L199">199</a> <strong class="jxr_keyword">if</strong> (chunkToken.getStartPoint() != <strong class="jxr_keyword">null</strong> &amp;&amp; chunkToken.getStartPoint().getTime() != startPointDate.getTime())
<a class="jxr_linenumber" name="L200" href="#L200">200</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/InvalidValueException.html">InvalidValueException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.getsubscriptionresult.NonMatchingChunkToken"</span>, body.getChunkToken()));
<a class="jxr_linenumber" name="L201" href="#L201">201</a> <strong class="jxr_keyword">if</strong> (chunkToken.getEndPoint() != <strong class="jxr_keyword">null</strong> &amp;&amp; chunkToken.getEndPoint().getTime() != endPointDate.getTime())
<a class="jxr_linenumber" name="L202" href="#L202">202</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/InvalidValueException.html">InvalidValueException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.getsubscriptionresult.NonMatchingChunkToken"</span>, body.getChunkToken()));
<a class="jxr_linenumber" name="L203" href="#L203">203</a> <strong class="jxr_keyword">if</strong> (chunkToken.getExpiresAfter().before(<strong class="jxr_keyword">new</strong> Date()))
<a class="jxr_linenumber" name="L204" href="#L204">204</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/InvalidValueException.html">InvalidValueException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.getsubscriptionresult.ExpiredChunkToken"</span>, body.getChunkToken()));
<a class="jxr_linenumber" name="L205" href="#L205">205</a>
<a class="jxr_linenumber" name="L206" href="#L206">206</a> chunkData = chunkToken.getData();
<a class="jxr_linenumber" name="L207" href="#L207">207</a> <em class="jxr_comment">// We've got the data from the chunk token, now it is no longer needed (once it's called, it's used up)</em>
<a class="jxr_linenumber" name="L208" href="#L208">208</a> em.remove(chunkToken);
<a class="jxr_linenumber" name="L209" href="#L209">209</a> }
<a class="jxr_linenumber" name="L210" href="#L210">210</a>
<a class="jxr_linenumber" name="L211" href="#L211">211</a>
<a class="jxr_linenumber" name="L212" href="#L212">212</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindBinding() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L213" href="#L213">213</a> <em class="jxr_comment">//Get the current matching keys</em>
<a class="jxr_linenumber" name="L214" href="#L214">214</a> List&lt;?&gt; currentMatchingKeys = getSubscriptionMatches(subscriptionFilter, em);
<a class="jxr_linenumber" name="L215" href="#L215">215</a> <em class="jxr_comment">// See if there's any missing keys by comparing against the previous matches. If so, they missing keys are added to the KeyBag and</em>
<a class="jxr_linenumber" name="L216" href="#L216">216</a> <em class="jxr_comment">// then added to the result</em>
<a class="jxr_linenumber" name="L217" href="#L217">217</a> List&lt;String&gt; missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
<a class="jxr_linenumber" name="L218" href="#L218">218</a> <strong class="jxr_keyword">if</strong> (missingKeys != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeys.size() &gt; 0) {
<a class="jxr_linenumber" name="L219" href="#L219">219</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L220" href="#L220">220</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L221" href="#L221">221</a> <strong class="jxr_keyword">for</strong> (String key : missingKeys)
<a class="jxr_linenumber" name="L222" href="#L222">222</a> missingKeyBag.getBindingKey().add(key);
<a class="jxr_linenumber" name="L223" href="#L223">223</a>
<a class="jxr_linenumber" name="L224" href="#L224">224</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L225" href="#L225">225</a> }
<a class="jxr_linenumber" name="L226" href="#L226">226</a>
<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_comment">// Re-setting the subscription matches to the new matching key collection</em>
<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_comment">//modelSubscription.getSubscriptionMatches().clear();</em>
<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_comment">//for (Object key : currentMatchingKeys) {</em>
<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_comment">// SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);</em>
<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_comment">// modelSubscription.getSubscriptionMatches().add(subMatch);</em>
<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_comment">//}</em>
<a class="jxr_linenumber" name="L233" href="#L233">233</a>
<a class="jxr_linenumber" name="L234" href="#L234">234</a> <em class="jxr_comment">// Now, finding the necessary entities, within the coverage period limits</em>
<a class="jxr_linenumber" name="L235" href="#L235">235</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L236" href="#L236">236</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L237" href="#L237">237</a> <strong class="jxr_keyword">for</strong> (String key : (List&lt;String&gt;)currentMatchingKeys)
<a class="jxr_linenumber" name="L238" href="#L238">238</a> resultsKeyBag.getBindingKey().add(key);
<a class="jxr_linenumber" name="L239" href="#L239">239</a>
<a class="jxr_linenumber" name="L240" href="#L240">240</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L241" href="#L241">241</a> }
<a class="jxr_linenumber" name="L242" href="#L242">242</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L243" href="#L243">243</a> FindBinding fb = subscriptionFilter.getFindBinding();
<a class="jxr_linenumber" name="L244" href="#L244">244</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L245" href="#L245">245</a> findQualifiers.mapApiFindQualifiers(fb.getFindQualifiers());
<a class="jxr_linenumber" name="L246" href="#L246">246</a>
<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_comment">// To do subscription "chunking", the listHead and maxRows are nulled which will set them to system default. User settings for</em>
<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_comment">// these values don't make sense with the "chunking" feature.</em>
<a class="jxr_linenumber" name="L249" href="#L249">249</a> fb.setListHead(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L250" href="#L250">250</a> fb.setMaxRows(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_comment">// Setting the start index to the chunkData</em>
<a class="jxr_linenumber" name="L252" href="#L252">252</a> Holder&lt;Integer&gt; subscriptionStartIndex = <strong class="jxr_keyword">new</strong> Holder&lt;Integer&gt;(chunkData);
<a class="jxr_linenumber" name="L253" href="#L253">253</a>
<a class="jxr_linenumber" name="L254" href="#L254">254</a> BindingDetail bindingDetail = InquiryHelper.getBindingDetailFromKeys(fb, findQualifiers, em, currentMatchingKeys,
<a class="jxr_linenumber" name="L255" href="#L255">255</a> startPointDate, endPointDate, subscriptionStartIndex, modelSubscription.getMaxEntities());
<a class="jxr_linenumber" name="L256" href="#L256">256</a>
<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_comment">// Upon exiting above function, if more results are to be had, the subscriptionStartIndex will contain the latest value (or null</em>
<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_comment">// if no more results)</em>
<a class="jxr_linenumber" name="L259" href="#L259">259</a> chunkData = subscriptionStartIndex.value;
<a class="jxr_linenumber" name="L260" href="#L260">260</a>
<a class="jxr_linenumber" name="L261" href="#L261">261</a> result.setBindingDetail(bindingDetail);
<a class="jxr_linenumber" name="L262" href="#L262">262</a> }
<a class="jxr_linenumber" name="L263" href="#L263">263</a> }
<a class="jxr_linenumber" name="L264" href="#L264">264</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindBusiness() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L265" href="#L265">265</a> <em class="jxr_comment">//Get the current matching keys</em>
<a class="jxr_linenumber" name="L266" href="#L266">266</a> List&lt;?&gt; currentMatchingKeys = getSubscriptionMatches(subscriptionFilter, em);
<a class="jxr_linenumber" name="L267" href="#L267">267</a>
<a class="jxr_linenumber" name="L268" href="#L268">268</a> List&lt;String&gt; missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
<a class="jxr_linenumber" name="L269" href="#L269">269</a> <strong class="jxr_keyword">if</strong> (missingKeys != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeys.size() &gt; 0) {
<a class="jxr_linenumber" name="L270" href="#L270">270</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L271" href="#L271">271</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L272" href="#L272">272</a> <strong class="jxr_keyword">for</strong> (String key : missingKeys)
<a class="jxr_linenumber" name="L273" href="#L273">273</a> missingKeyBag.getBusinessKey().add(key);
<a class="jxr_linenumber" name="L274" href="#L274">274</a>
<a class="jxr_linenumber" name="L275" href="#L275">275</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L276" href="#L276">276</a> }
<a class="jxr_linenumber" name="L277" href="#L277">277</a>
<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_comment">// Re-setting the subscription matches to the new matching key collection</em>
<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_comment">//modelSubscription.getSubscriptionMatches().clear();</em>
<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_comment">//for (Object key : currentMatchingKeys) {</em>
<a class="jxr_linenumber" name="L281" href="#L281">281</a> <em class="jxr_comment">// SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);</em>
<a class="jxr_linenumber" name="L282" href="#L282">282</a> <em class="jxr_comment">// modelSubscription.getSubscriptionMatches().add(subMatch);</em>
<a class="jxr_linenumber" name="L283" href="#L283">283</a> <em class="jxr_comment">//}</em>
<a class="jxr_linenumber" name="L284" href="#L284">284</a>
<a class="jxr_linenumber" name="L285" href="#L285">285</a> <em class="jxr_comment">// Now, finding the necessary entities, within the coverage period limits</em>
<a class="jxr_linenumber" name="L286" href="#L286">286</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L287" href="#L287">287</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L288" href="#L288">288</a> <strong class="jxr_keyword">for</strong> (String key : (List&lt;String&gt;)currentMatchingKeys)
<a class="jxr_linenumber" name="L289" href="#L289">289</a> resultsKeyBag.getBusinessKey().add(key);
<a class="jxr_linenumber" name="L290" href="#L290">290</a>
<a class="jxr_linenumber" name="L291" href="#L291">291</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L292" href="#L292">292</a> }
<a class="jxr_linenumber" name="L293" href="#L293">293</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L294" href="#L294">294</a> FindBusiness fb = subscriptionFilter.getFindBusiness();
<a class="jxr_linenumber" name="L295" href="#L295">295</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L296" href="#L296">296</a> findQualifiers.mapApiFindQualifiers(fb.getFindQualifiers());
<a class="jxr_linenumber" name="L297" href="#L297">297</a>
<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_comment">// To do subscription "chunking", the listHead and maxRows are nulled which will set them to system default. User settings for</em>
<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_comment">// these values don't make sense with the "chunking" feature.</em>
<a class="jxr_linenumber" name="L300" href="#L300">300</a> fb.setListHead(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L301" href="#L301">301</a> fb.setMaxRows(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L302" href="#L302">302</a> <em class="jxr_comment">// Setting the start index to the chunkData</em>
<a class="jxr_linenumber" name="L303" href="#L303">303</a> Holder&lt;Integer&gt; subscriptionStartIndex = <strong class="jxr_keyword">new</strong> Holder&lt;Integer&gt;(chunkData);
<a class="jxr_linenumber" name="L304" href="#L304">304</a>
<a class="jxr_linenumber" name="L305" href="#L305">305</a> BusinessList businessList = InquiryHelper.getBusinessListFromKeys(fb, findQualifiers, em, currentMatchingKeys,
<a class="jxr_linenumber" name="L306" href="#L306">306</a> startPointDate, endPointDate, subscriptionStartIndex, modelSubscription.getMaxEntities());
<a class="jxr_linenumber" name="L307" href="#L307">307</a>
<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_comment">// Upon exiting above function, if more results are to be had, the subscriptionStartIndex will contain the latest value (or null</em>
<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_comment">// if no more results)</em>
<a class="jxr_linenumber" name="L310" href="#L310">310</a> chunkData = subscriptionStartIndex.value;
<a class="jxr_linenumber" name="L311" href="#L311">311</a>
<a class="jxr_linenumber" name="L312" href="#L312">312</a> result.setBusinessList(businessList);
<a class="jxr_linenumber" name="L313" href="#L313">313</a> }
<a class="jxr_linenumber" name="L314" href="#L314">314</a> }
<a class="jxr_linenumber" name="L315" href="#L315">315</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindService() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L316" href="#L316">316</a> <em class="jxr_comment">//Get the current matching keys</em>
<a class="jxr_linenumber" name="L317" href="#L317">317</a> List&lt;?&gt; currentMatchingKeys = getSubscriptionMatches(subscriptionFilter, em);
<a class="jxr_linenumber" name="L318" href="#L318">318</a> <strong class="jxr_keyword">if</strong> (logger.isDebugEnabled()) logger.debug(<span class="jxr_string">"current matching keys="</span> + currentMatchingKeys);
<a class="jxr_linenumber" name="L319" href="#L319">319</a> List&lt;String&gt; missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
<a class="jxr_linenumber" name="L320" href="#L320">320</a> <strong class="jxr_keyword">if</strong> (missingKeys != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeys.size() &gt; 0) {
<a class="jxr_linenumber" name="L321" href="#L321">321</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L322" href="#L322">322</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L323" href="#L323">323</a> <strong class="jxr_keyword">for</strong> (String key : missingKeys)
<a class="jxr_linenumber" name="L324" href="#L324">324</a> missingKeyBag.getServiceKey().add(key);
<a class="jxr_linenumber" name="L325" href="#L325">325</a>
<a class="jxr_linenumber" name="L326" href="#L326">326</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L327" href="#L327">327</a> }
<a class="jxr_linenumber" name="L328" href="#L328">328</a>
<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_comment">// Re-setting the subscription matches to the new matching key collection</em>
<a class="jxr_linenumber" name="L330" href="#L330">330</a> <em class="jxr_comment">//modelSubscription.getSubscriptionMatches().clear();</em>
<a class="jxr_linenumber" name="L331" href="#L331">331</a> <em class="jxr_comment">//for (Object key : currentMatchingKeys) {</em>
<a class="jxr_linenumber" name="L332" href="#L332">332</a> <em class="jxr_comment">// SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);</em>
<a class="jxr_linenumber" name="L333" href="#L333">333</a> <em class="jxr_comment">// modelSubscription.getSubscriptionMatches().add(subMatch);</em>
<a class="jxr_linenumber" name="L334" href="#L334">334</a> <em class="jxr_comment">//}</em>
<a class="jxr_linenumber" name="L335" href="#L335">335</a>
<a class="jxr_linenumber" name="L336" href="#L336">336</a> <em class="jxr_comment">// Now, finding the necessary entities, within the coverage period limits</em>
<a class="jxr_linenumber" name="L337" href="#L337">337</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L338" href="#L338">338</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L339" href="#L339">339</a> <strong class="jxr_keyword">for</strong> (String key : (List&lt;String&gt;)currentMatchingKeys)
<a class="jxr_linenumber" name="L340" href="#L340">340</a> resultsKeyBag.getServiceKey().add(key);
<a class="jxr_linenumber" name="L341" href="#L341">341</a>
<a class="jxr_linenumber" name="L342" href="#L342">342</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L343" href="#L343">343</a> }
<a class="jxr_linenumber" name="L344" href="#L344">344</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L345" href="#L345">345</a> FindService fs = subscriptionFilter.getFindService();
<a class="jxr_linenumber" name="L346" href="#L346">346</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L347" href="#L347">347</a> findQualifiers.mapApiFindQualifiers(fs.getFindQualifiers());
<a class="jxr_linenumber" name="L348" href="#L348">348</a>
<a class="jxr_linenumber" name="L349" href="#L349">349</a> <em class="jxr_comment">// To do subscription "chunking", the listHead and maxRows are nulled which will set them to system default. User settings for</em>
<a class="jxr_linenumber" name="L350" href="#L350">350</a> <em class="jxr_comment">// these values don't make sense with the "chunking" feature.</em>
<a class="jxr_linenumber" name="L351" href="#L351">351</a> fs.setListHead(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L352" href="#L352">352</a> fs.setMaxRows(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L353" href="#L353">353</a> <em class="jxr_comment">// Setting the start index to the chunkData</em>
<a class="jxr_linenumber" name="L354" href="#L354">354</a> Holder&lt;Integer&gt; subscriptionStartIndex = <strong class="jxr_keyword">new</strong> Holder&lt;Integer&gt;(chunkData);
<a class="jxr_linenumber" name="L355" href="#L355">355</a>
<a class="jxr_linenumber" name="L356" href="#L356">356</a> ServiceList serviceList = InquiryHelper.getServiceListFromKeys(fs, findQualifiers, em, currentMatchingKeys,
<a class="jxr_linenumber" name="L357" href="#L357">357</a> startPointDate, endPointDate, subscriptionStartIndex, modelSubscription.getMaxEntities());
<a class="jxr_linenumber" name="L358" href="#L358">358</a> <strong class="jxr_keyword">if</strong> (serviceList.getServiceInfos()==<strong class="jxr_keyword">null</strong> || serviceList.getServiceInfos().getServiceInfo().size()==0) {
<a class="jxr_linenumber" name="L359" href="#L359">359</a> serviceList=<strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L360" href="#L360">360</a> }
<a class="jxr_linenumber" name="L361" href="#L361">361</a> <em class="jxr_comment">// Upon exiting above function, if more results are to be had, the subscriptionStartIndex will contain the latest value (or null</em>
<a class="jxr_linenumber" name="L362" href="#L362">362</a> <em class="jxr_comment">// if no more results)</em>
<a class="jxr_linenumber" name="L363" href="#L363">363</a> chunkData = subscriptionStartIndex.value;
<a class="jxr_linenumber" name="L364" href="#L364">364</a>
<a class="jxr_linenumber" name="L365" href="#L365">365</a> result.setServiceList(serviceList);
<a class="jxr_linenumber" name="L366" href="#L366">366</a> }
<a class="jxr_linenumber" name="L367" href="#L367">367</a> }
<a class="jxr_linenumber" name="L368" href="#L368">368</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindTModel() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L369" href="#L369">369</a> <em class="jxr_comment">//Get the current matching keys</em>
<a class="jxr_linenumber" name="L370" href="#L370">370</a> List&lt;?&gt; currentMatchingKeys = getSubscriptionMatches(subscriptionFilter, em);
<a class="jxr_linenumber" name="L371" href="#L371">371</a>
<a class="jxr_linenumber" name="L372" href="#L372">372</a> List&lt;String&gt; missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
<a class="jxr_linenumber" name="L373" href="#L373">373</a> <strong class="jxr_keyword">if</strong> (missingKeys != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeys.size() &gt; 0) {
<a class="jxr_linenumber" name="L374" href="#L374">374</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L375" href="#L375">375</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L376" href="#L376">376</a> <strong class="jxr_keyword">for</strong> (String key : missingKeys)
<a class="jxr_linenumber" name="L377" href="#L377">377</a> missingKeyBag.getTModelKey().add(key);
<a class="jxr_linenumber" name="L378" href="#L378">378</a>
<a class="jxr_linenumber" name="L379" href="#L379">379</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L380" href="#L380">380</a> }
<a class="jxr_linenumber" name="L381" href="#L381">381</a>
<a class="jxr_linenumber" name="L382" href="#L382">382</a> <em class="jxr_comment">// Re-setting the subscription matches to the new matching key collection</em>
<a class="jxr_linenumber" name="L383" href="#L383">383</a> <em class="jxr_comment">//modelSubscription.getSubscriptionMatches().clear();</em>
<a class="jxr_linenumber" name="L384" href="#L384">384</a> <em class="jxr_comment">//for (Object key : currentMatchingKeys) {</em>
<a class="jxr_linenumber" name="L385" href="#L385">385</a> <em class="jxr_comment">// SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);</em>
<a class="jxr_linenumber" name="L386" href="#L386">386</a> <em class="jxr_comment">// modelSubscription.getSubscriptionMatches().add(subMatch);</em>
<a class="jxr_linenumber" name="L387" href="#L387">387</a> <em class="jxr_comment">//}</em>
<a class="jxr_linenumber" name="L388" href="#L388">388</a>
<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_comment">// Now, finding the necessary entities, within the coverage period limits</em>
<a class="jxr_linenumber" name="L390" href="#L390">390</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L391" href="#L391">391</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L392" href="#L392">392</a> <strong class="jxr_keyword">for</strong> (String key : (List&lt;String&gt;)currentMatchingKeys)
<a class="jxr_linenumber" name="L393" href="#L393">393</a> resultsKeyBag.getTModelKey().add(key);
<a class="jxr_linenumber" name="L394" href="#L394">394</a>
<a class="jxr_linenumber" name="L395" href="#L395">395</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L396" href="#L396">396</a> }
<a class="jxr_linenumber" name="L397" href="#L397">397</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L398" href="#L398">398</a> FindTModel ft = subscriptionFilter.getFindTModel();
<a class="jxr_linenumber" name="L399" href="#L399">399</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L400" href="#L400">400</a> findQualifiers.mapApiFindQualifiers(ft.getFindQualifiers());
<a class="jxr_linenumber" name="L401" href="#L401">401</a>
<a class="jxr_linenumber" name="L402" href="#L402">402</a> <em class="jxr_comment">// To do subscription "chunking", the listHead and maxRows are nulled which will set them to system default. User settings for</em>
<a class="jxr_linenumber" name="L403" href="#L403">403</a> <em class="jxr_comment">// these values don't make sense with the "chunking" feature.</em>
<a class="jxr_linenumber" name="L404" href="#L404">404</a> ft.setListHead(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L405" href="#L405">405</a> ft.setMaxRows(<strong class="jxr_keyword">null</strong>);
<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_comment">// Setting the start index to the chunkData</em>
<a class="jxr_linenumber" name="L407" href="#L407">407</a> Holder&lt;Integer&gt; subscriptionStartIndex = <strong class="jxr_keyword">new</strong> Holder&lt;Integer&gt;(chunkData);
<a class="jxr_linenumber" name="L408" href="#L408">408</a>
<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_comment">// If more results are to be had, chunkData will come out with a value and a new token will be generated below. Otherwise, it will</em>
<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_comment">// be null and no token will be generated.</em>
<a class="jxr_linenumber" name="L411" href="#L411">411</a> TModelList tmodelList = InquiryHelper.getTModelListFromKeys(ft, findQualifiers, em, currentMatchingKeys,
<a class="jxr_linenumber" name="L412" href="#L412">412</a> startPointDate, endPointDate, subscriptionStartIndex, modelSubscription.getMaxEntities());
<a class="jxr_linenumber" name="L413" href="#L413">413</a>
<a class="jxr_linenumber" name="L414" href="#L414">414</a> <em class="jxr_comment">// Upon exiting above function, if more results are to be had, the subscriptionStartIndex will contain the latest value (or null</em>
<a class="jxr_linenumber" name="L415" href="#L415">415</a> <em class="jxr_comment">// if no more results)</em>
<a class="jxr_linenumber" name="L416" href="#L416">416</a> chunkData = subscriptionStartIndex.value;
<a class="jxr_linenumber" name="L417" href="#L417">417</a>
<a class="jxr_linenumber" name="L418" href="#L418">418</a> result.setTModelList(tmodelList);
<a class="jxr_linenumber" name="L419" href="#L419">419</a> }
<a class="jxr_linenumber" name="L420" href="#L420">420</a>
<a class="jxr_linenumber" name="L421" href="#L421">421</a> }
<a class="jxr_linenumber" name="L422" href="#L422">422</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindRelatedBusinesses() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L423" href="#L423">423</a> FindRelatedBusinesses findRelatedBusiness = subscriptionFilter.getFindRelatedBusinesses();
<a class="jxr_linenumber" name="L424" href="#L424">424</a> RelatedBusinessesList relatedBusinessList = InquiryHelper.getRelatedBusinessesList(findRelatedBusiness, em, startPointDate, endPointDate);
<a class="jxr_linenumber" name="L425" href="#L425">425</a> result.setRelatedBusinessesList(relatedBusinessList);
<a class="jxr_linenumber" name="L426" href="#L426">426</a> }
<a class="jxr_linenumber" name="L427" href="#L427">427</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetBindingDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L428" href="#L428">428</a> GetBindingDetail getDetail = subscriptionFilter.getGetBindingDetail();
<a class="jxr_linenumber" name="L429" href="#L429">429</a>
<a class="jxr_linenumber" name="L430" href="#L430">430</a> <em class="jxr_comment">// Running through the key list here to determine the deleted keys and store the existing entities.</em>
<a class="jxr_linenumber" name="L431" href="#L431">431</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L432" href="#L432">432</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L433" href="#L433">433</a> List&lt;org.apache.juddi.model.BindingTemplate&gt; existingList = <strong class="jxr_keyword">new</strong> ArrayList&lt;org.apache.juddi.model.BindingTemplate&gt;(0);
<a class="jxr_linenumber" name="L434" href="#L434">434</a> <strong class="jxr_keyword">for</strong> (String key : getDetail.getBindingKey()) {
<a class="jxr_linenumber" name="L435" href="#L435">435</a> org.apache.juddi.model.BindingTemplate modelBindingTemplate = em.find(org.apache.juddi.model.BindingTemplate.<strong class="jxr_keyword">class</strong>, key);
<a class="jxr_linenumber" name="L436" href="#L436">436</a> <strong class="jxr_keyword">if</strong> (modelBindingTemplate != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L437" href="#L437">437</a> existingList.add(modelBindingTemplate);
<a class="jxr_linenumber" name="L438" href="#L438">438</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L439" href="#L439">439</a> missingKeyBag.getBindingKey().add(key);
<a class="jxr_linenumber" name="L440" href="#L440">440</a> }
<a class="jxr_linenumber" name="L441" href="#L441">441</a> <em class="jxr_comment">// Store deleted keys in the results</em>
<a class="jxr_linenumber" name="L442" href="#L442">442</a> <strong class="jxr_keyword">if</strong> (missingKeyBag.getBindingKey() != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeyBag.getBindingKey().size() &gt; 0)
<a class="jxr_linenumber" name="L443" href="#L443">443</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L444" href="#L444">444</a>
<a class="jxr_linenumber" name="L445" href="#L445">445</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L446" href="#L446">446</a> BindingDetail bindingDetail = <strong class="jxr_keyword">new</strong> BindingDetail();
<a class="jxr_linenumber" name="L447" href="#L447">447</a>
<a class="jxr_linenumber" name="L448" href="#L448">448</a> <em class="jxr_comment">// Set the currentIndex to 0 or the value of the chunkData</em>
<a class="jxr_linenumber" name="L449" href="#L449">449</a> <strong class="jxr_keyword">int</strong> currentIndex = 0;
<a class="jxr_linenumber" name="L450" href="#L450">450</a> <strong class="jxr_keyword">if</strong> (chunkData != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L451" href="#L451">451</a> currentIndex = chunkData;
<a class="jxr_linenumber" name="L452" href="#L452">452</a>
<a class="jxr_linenumber" name="L453" href="#L453">453</a> <strong class="jxr_keyword">int</strong> returnedRowCount = 0;
<a class="jxr_linenumber" name="L454" href="#L454">454</a> <strong class="jxr_keyword">while</strong>(currentIndex &lt; existingList.size()) {
<a class="jxr_linenumber" name="L455" href="#L455">455</a>
<a class="jxr_linenumber" name="L456" href="#L456">456</a> org.apache.juddi.model.BindingTemplate modelBindingTemplate = existingList.get(currentIndex);
<a class="jxr_linenumber" name="L457" href="#L457">457</a>
<a class="jxr_linenumber" name="L458" href="#L458">458</a> <strong class="jxr_keyword">if</strong> (startPointDate.after(modelBindingTemplate.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L459" href="#L459">459</a> currentIndex++;
<a class="jxr_linenumber" name="L460" href="#L460">460</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L461" href="#L461">461</a> }
<a class="jxr_linenumber" name="L462" href="#L462">462</a>
<a class="jxr_linenumber" name="L463" href="#L463">463</a> <strong class="jxr_keyword">if</strong> (endPointDate.before(modelBindingTemplate.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L464" href="#L464">464</a> currentIndex++;
<a class="jxr_linenumber" name="L465" href="#L465">465</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L466" href="#L466">466</a> }
<a class="jxr_linenumber" name="L467" href="#L467">467</a>
<a class="jxr_linenumber" name="L468" href="#L468">468</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L469" href="#L469">469</a> resultsKeyBag.getBindingKey().add(modelBindingTemplate.getEntityKey());
<a class="jxr_linenumber" name="L470" href="#L470">470</a> }
<a class="jxr_linenumber" name="L471" href="#L471">471</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L472" href="#L472">472</a> org.uddi.api_v3.BindingTemplate apiBindingTemplate = <strong class="jxr_keyword">new</strong> org.uddi.api_v3.BindingTemplate();
<a class="jxr_linenumber" name="L473" href="#L473">473</a> MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
<a class="jxr_linenumber" name="L474" href="#L474">474</a> bindingDetail.getBindingTemplate().add(apiBindingTemplate);
<a class="jxr_linenumber" name="L475" href="#L475">475</a>
<a class="jxr_linenumber" name="L476" href="#L476">476</a> returnedRowCount++;
<a class="jxr_linenumber" name="L477" href="#L477">477</a> }
<a class="jxr_linenumber" name="L478" href="#L478">478</a>
<a class="jxr_linenumber" name="L479" href="#L479">479</a> <em class="jxr_comment">// If the returned rows equals the max allowed, we can end the loop.</em>
<a class="jxr_linenumber" name="L480" href="#L480">480</a> <strong class="jxr_keyword">if</strong> (modelSubscription.getMaxEntities() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L481" href="#L481">481</a> <strong class="jxr_keyword">if</strong> (returnedRowCount == modelSubscription.getMaxEntities())
<a class="jxr_linenumber" name="L482" href="#L482">482</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L483" href="#L483">483</a> }
<a class="jxr_linenumber" name="L484" href="#L484">484</a>
<a class="jxr_linenumber" name="L485" href="#L485">485</a> currentIndex++;
<a class="jxr_linenumber" name="L486" href="#L486">486</a> }
<a class="jxr_linenumber" name="L487" href="#L487">487</a>
<a class="jxr_linenumber" name="L488" href="#L488">488</a> <em class="jxr_comment">// If the loop was broken prematurely (max row count hit) we set the chunk data to the next index to start with.</em>
<a class="jxr_linenumber" name="L489" href="#L489">489</a> <em class="jxr_comment">// A non-null value of chunk data will cause a chunk token to be generated. </em>
<a class="jxr_linenumber" name="L490" href="#L490">490</a> <strong class="jxr_keyword">if</strong> (currentIndex &lt; (existingList.size() - 1))
<a class="jxr_linenumber" name="L491" href="#L491">491</a> chunkData = currentIndex + 1;
<a class="jxr_linenumber" name="L492" href="#L492">492</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L493" href="#L493">493</a> chunkData = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L494" href="#L494">494</a>
<a class="jxr_linenumber" name="L495" href="#L495">495</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief())
<a class="jxr_linenumber" name="L496" href="#L496">496</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L497" href="#L497">497</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L498" href="#L498">498</a> result.setBindingDetail(bindingDetail);
<a class="jxr_linenumber" name="L499" href="#L499">499</a>
<a class="jxr_linenumber" name="L500" href="#L500">500</a>
<a class="jxr_linenumber" name="L501" href="#L501">501</a> }
<a class="jxr_linenumber" name="L502" href="#L502">502</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetBusinessDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L503" href="#L503">503</a> GetBusinessDetail getDetail = subscriptionFilter.getGetBusinessDetail();
<a class="jxr_linenumber" name="L504" href="#L504">504</a>
<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_comment">// Running through the key list here to determine the deleted keys and store the existing entities.</em>
<a class="jxr_linenumber" name="L506" href="#L506">506</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L507" href="#L507">507</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L508" href="#L508">508</a> List&lt;org.apache.juddi.model.BusinessEntity&gt; existingList = <strong class="jxr_keyword">new</strong> ArrayList&lt;org.apache.juddi.model.BusinessEntity&gt;(0);
<a class="jxr_linenumber" name="L509" href="#L509">509</a> <strong class="jxr_keyword">for</strong> (String key : getDetail.getBusinessKey()) {
<a class="jxr_linenumber" name="L510" href="#L510">510</a> org.apache.juddi.model.BusinessEntity modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.<strong class="jxr_keyword">class</strong>, key);
<a class="jxr_linenumber" name="L511" href="#L511">511</a> <strong class="jxr_keyword">if</strong> (modelBusinessEntity != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L512" href="#L512">512</a> existingList.add(modelBusinessEntity);
<a class="jxr_linenumber" name="L513" href="#L513">513</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L514" href="#L514">514</a> missingKeyBag.getBusinessKey().add(key);
<a class="jxr_linenumber" name="L515" href="#L515">515</a> }
<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_comment">// Store deleted keys in the results</em>
<a class="jxr_linenumber" name="L517" href="#L517">517</a> <strong class="jxr_keyword">if</strong> (missingKeyBag.getBusinessKey() != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeyBag.getBusinessKey().size() &gt; 0)
<a class="jxr_linenumber" name="L518" href="#L518">518</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L519" href="#L519">519</a>
<a class="jxr_linenumber" name="L520" href="#L520">520</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L521" href="#L521">521</a> BusinessDetail businessDetail = <strong class="jxr_keyword">new</strong> BusinessDetail();
<a class="jxr_linenumber" name="L522" href="#L522">522</a>
<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_comment">// Set the currentIndex to 0 or the value of the chunkData</em>
<a class="jxr_linenumber" name="L524" href="#L524">524</a> <strong class="jxr_keyword">int</strong> currentIndex = 0;
<a class="jxr_linenumber" name="L525" href="#L525">525</a> <strong class="jxr_keyword">if</strong> (chunkData != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L526" href="#L526">526</a> currentIndex = chunkData;
<a class="jxr_linenumber" name="L527" href="#L527">527</a>
<a class="jxr_linenumber" name="L528" href="#L528">528</a> <strong class="jxr_keyword">int</strong> returnedRowCount = 0;
<a class="jxr_linenumber" name="L529" href="#L529">529</a> <strong class="jxr_keyword">while</strong>(currentIndex &lt; existingList.size()) {
<a class="jxr_linenumber" name="L530" href="#L530">530</a>
<a class="jxr_linenumber" name="L531" href="#L531">531</a> org.apache.juddi.model.BusinessEntity modelBusinessEntity = existingList.get(currentIndex);
<a class="jxr_linenumber" name="L532" href="#L532">532</a>
<a class="jxr_linenumber" name="L533" href="#L533">533</a> <strong class="jxr_keyword">if</strong> (startPointDate.after(modelBusinessEntity.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L534" href="#L534">534</a> currentIndex++;
<a class="jxr_linenumber" name="L535" href="#L535">535</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L536" href="#L536">536</a> }
<a class="jxr_linenumber" name="L537" href="#L537">537</a>
<a class="jxr_linenumber" name="L538" href="#L538">538</a> <strong class="jxr_keyword">if</strong> (endPointDate.before(modelBusinessEntity.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L539" href="#L539">539</a> currentIndex++;
<a class="jxr_linenumber" name="L540" href="#L540">540</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L541" href="#L541">541</a> }
<a class="jxr_linenumber" name="L542" href="#L542">542</a>
<a class="jxr_linenumber" name="L543" href="#L543">543</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L544" href="#L544">544</a> resultsKeyBag.getBusinessKey().add(modelBusinessEntity.getEntityKey());
<a class="jxr_linenumber" name="L545" href="#L545">545</a> }
<a class="jxr_linenumber" name="L546" href="#L546">546</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L547" href="#L547">547</a> org.uddi.api_v3.BusinessEntity apiBusinessEntity = <strong class="jxr_keyword">new</strong> org.uddi.api_v3.BusinessEntity();
<a class="jxr_linenumber" name="L548" href="#L548">548</a> MappingModelToApi.mapBusinessEntity(modelBusinessEntity, apiBusinessEntity);
<a class="jxr_linenumber" name="L549" href="#L549">549</a> businessDetail.getBusinessEntity().add(apiBusinessEntity);
<a class="jxr_linenumber" name="L550" href="#L550">550</a>
<a class="jxr_linenumber" name="L551" href="#L551">551</a> returnedRowCount++;
<a class="jxr_linenumber" name="L552" href="#L552">552</a> }
<a class="jxr_linenumber" name="L553" href="#L553">553</a>
<a class="jxr_linenumber" name="L554" href="#L554">554</a> <em class="jxr_comment">// If the returned rows equals the max allowed, we can end the loop.</em>
<a class="jxr_linenumber" name="L555" href="#L555">555</a> <strong class="jxr_keyword">if</strong> (modelSubscription.getMaxEntities() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L556" href="#L556">556</a> <strong class="jxr_keyword">if</strong> (returnedRowCount == modelSubscription.getMaxEntities())
<a class="jxr_linenumber" name="L557" href="#L557">557</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L558" href="#L558">558</a> }
<a class="jxr_linenumber" name="L559" href="#L559">559</a>
<a class="jxr_linenumber" name="L560" href="#L560">560</a> currentIndex++;
<a class="jxr_linenumber" name="L561" href="#L561">561</a> }
<a class="jxr_linenumber" name="L562" href="#L562">562</a>
<a class="jxr_linenumber" name="L563" href="#L563">563</a> <em class="jxr_comment">// If the loop was broken prematurely (max row count hit) we set the chunk data to the next index to start with.</em>
<a class="jxr_linenumber" name="L564" href="#L564">564</a> <em class="jxr_comment">// A non-null value of chunk data will cause a chunk token to be generated. </em>
<a class="jxr_linenumber" name="L565" href="#L565">565</a> <strong class="jxr_keyword">if</strong> (currentIndex &lt; (existingList.size() - 1))
<a class="jxr_linenumber" name="L566" href="#L566">566</a> chunkData = currentIndex + 1;
<a class="jxr_linenumber" name="L567" href="#L567">567</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L568" href="#L568">568</a> chunkData = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L569" href="#L569">569</a>
<a class="jxr_linenumber" name="L570" href="#L570">570</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief())
<a class="jxr_linenumber" name="L571" href="#L571">571</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L572" href="#L572">572</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L573" href="#L573">573</a> result.setBusinessDetail(businessDetail);
<a class="jxr_linenumber" name="L574" href="#L574">574</a>
<a class="jxr_linenumber" name="L575" href="#L575">575</a> }
<a class="jxr_linenumber" name="L576" href="#L576">576</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetServiceDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L577" href="#L577">577</a> GetServiceDetail getDetail = subscriptionFilter.getGetServiceDetail();
<a class="jxr_linenumber" name="L578" href="#L578">578</a>
<a class="jxr_linenumber" name="L579" href="#L579">579</a> <em class="jxr_comment">// Running through the key list here to determine the deleted keys and store the existing entities.</em>
<a class="jxr_linenumber" name="L580" href="#L580">580</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L581" href="#L581">581</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L582" href="#L582">582</a> List&lt;org.apache.juddi.model.BusinessService&gt; existingList = <strong class="jxr_keyword">new</strong> ArrayList&lt;org.apache.juddi.model.BusinessService&gt;(0);
<a class="jxr_linenumber" name="L583" href="#L583">583</a> <strong class="jxr_keyword">for</strong> (String key : getDetail.getServiceKey()) {
<a class="jxr_linenumber" name="L584" href="#L584">584</a> org.apache.juddi.model.BusinessService modelBusinessService = em.find(org.apache.juddi.model.BusinessService.<strong class="jxr_keyword">class</strong>, key);
<a class="jxr_linenumber" name="L585" href="#L585">585</a> <strong class="jxr_keyword">if</strong> (modelBusinessService != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L586" href="#L586">586</a> existingList.add(modelBusinessService);
<a class="jxr_linenumber" name="L587" href="#L587">587</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L588" href="#L588">588</a> missingKeyBag.getBusinessKey().add(key);
<a class="jxr_linenumber" name="L589" href="#L589">589</a> }
<a class="jxr_linenumber" name="L590" href="#L590">590</a> <em class="jxr_comment">// Store deleted keys in the results</em>
<a class="jxr_linenumber" name="L591" href="#L591">591</a> <strong class="jxr_keyword">if</strong> (missingKeyBag.getServiceKey() != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeyBag.getServiceKey().size() &gt; 0)
<a class="jxr_linenumber" name="L592" href="#L592">592</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L593" href="#L593">593</a>
<a class="jxr_linenumber" name="L594" href="#L594">594</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L595" href="#L595">595</a> ServiceDetail serviceDetail = <strong class="jxr_keyword">new</strong> ServiceDetail();
<a class="jxr_linenumber" name="L596" href="#L596">596</a>
<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_comment">// Set the currentIndex to 0 or the value of the chunkData</em>
<a class="jxr_linenumber" name="L598" href="#L598">598</a> <strong class="jxr_keyword">int</strong> currentIndex = 0;
<a class="jxr_linenumber" name="L599" href="#L599">599</a> <strong class="jxr_keyword">if</strong> (chunkData != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L600" href="#L600">600</a> currentIndex = chunkData;
<a class="jxr_linenumber" name="L601" href="#L601">601</a>
<a class="jxr_linenumber" name="L602" href="#L602">602</a> <strong class="jxr_keyword">int</strong> returnedRowCount = 0;
<a class="jxr_linenumber" name="L603" href="#L603">603</a> <strong class="jxr_keyword">while</strong>(currentIndex &lt; existingList.size()) {
<a class="jxr_linenumber" name="L604" href="#L604">604</a>
<a class="jxr_linenumber" name="L605" href="#L605">605</a> org.apache.juddi.model.BusinessService modelBusinessService = existingList.get(currentIndex);
<a class="jxr_linenumber" name="L606" href="#L606">606</a>
<a class="jxr_linenumber" name="L607" href="#L607">607</a> <strong class="jxr_keyword">if</strong> (startPointDate.after(modelBusinessService.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L608" href="#L608">608</a> currentIndex++;
<a class="jxr_linenumber" name="L609" href="#L609">609</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L610" href="#L610">610</a> }
<a class="jxr_linenumber" name="L611" href="#L611">611</a>
<a class="jxr_linenumber" name="L612" href="#L612">612</a> <strong class="jxr_keyword">if</strong> (endPointDate.before(modelBusinessService.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L613" href="#L613">613</a> currentIndex++;
<a class="jxr_linenumber" name="L614" href="#L614">614</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L615" href="#L615">615</a> }
<a class="jxr_linenumber" name="L616" href="#L616">616</a>
<a class="jxr_linenumber" name="L617" href="#L617">617</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L618" href="#L618">618</a> resultsKeyBag.getServiceKey().add(modelBusinessService.getEntityKey());
<a class="jxr_linenumber" name="L619" href="#L619">619</a> }
<a class="jxr_linenumber" name="L620" href="#L620">620</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L621" href="#L621">621</a> org.uddi.api_v3.BusinessService apiBusinessService = <strong class="jxr_keyword">new</strong> org.uddi.api_v3.BusinessService();
<a class="jxr_linenumber" name="L622" href="#L622">622</a> MappingModelToApi.mapBusinessService(modelBusinessService, apiBusinessService);
<a class="jxr_linenumber" name="L623" href="#L623">623</a> serviceDetail.getBusinessService().add(apiBusinessService);
<a class="jxr_linenumber" name="L624" href="#L624">624</a>
<a class="jxr_linenumber" name="L625" href="#L625">625</a> returnedRowCount++;
<a class="jxr_linenumber" name="L626" href="#L626">626</a> }
<a class="jxr_linenumber" name="L627" href="#L627">627</a>
<a class="jxr_linenumber" name="L628" href="#L628">628</a> <em class="jxr_comment">// If the returned rows equals the max allowed, we can end the loop.</em>
<a class="jxr_linenumber" name="L629" href="#L629">629</a> <strong class="jxr_keyword">if</strong> (modelSubscription.getMaxEntities() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L630" href="#L630">630</a> <strong class="jxr_keyword">if</strong> (returnedRowCount == modelSubscription.getMaxEntities())
<a class="jxr_linenumber" name="L631" href="#L631">631</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L632" href="#L632">632</a> }
<a class="jxr_linenumber" name="L633" href="#L633">633</a>
<a class="jxr_linenumber" name="L634" href="#L634">634</a> currentIndex++;
<a class="jxr_linenumber" name="L635" href="#L635">635</a> }
<a class="jxr_linenumber" name="L636" href="#L636">636</a>
<a class="jxr_linenumber" name="L637" href="#L637">637</a> <em class="jxr_comment">// If the loop was broken prematurely (max row count hit) we set the chunk data to the next index to start with.</em>
<a class="jxr_linenumber" name="L638" href="#L638">638</a> <em class="jxr_comment">// A non-null value of chunk data will cause a chunk token to be generated. </em>
<a class="jxr_linenumber" name="L639" href="#L639">639</a> <strong class="jxr_keyword">if</strong> (currentIndex &lt; (existingList.size() - 1))
<a class="jxr_linenumber" name="L640" href="#L640">640</a> chunkData = currentIndex + 1;
<a class="jxr_linenumber" name="L641" href="#L641">641</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L642" href="#L642">642</a> chunkData = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L643" href="#L643">643</a>
<a class="jxr_linenumber" name="L644" href="#L644">644</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief())
<a class="jxr_linenumber" name="L645" href="#L645">645</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L646" href="#L646">646</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L647" href="#L647">647</a> result.setServiceDetail(serviceDetail);
<a class="jxr_linenumber" name="L648" href="#L648">648</a>
<a class="jxr_linenumber" name="L649" href="#L649">649</a> }
<a class="jxr_linenumber" name="L650" href="#L650">650</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetTModelDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L651" href="#L651">651</a> GetTModelDetail getDetail = subscriptionFilter.getGetTModelDetail();
<a class="jxr_linenumber" name="L652" href="#L652">652</a>
<a class="jxr_linenumber" name="L653" href="#L653">653</a> <em class="jxr_comment">// Running through the key list here to determine the deleted keys and store the existing entities.</em>
<a class="jxr_linenumber" name="L654" href="#L654">654</a> KeyBag missingKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L655" href="#L655">655</a> missingKeyBag.setDeleted(<strong class="jxr_keyword">true</strong>);
<a class="jxr_linenumber" name="L656" href="#L656">656</a> List&lt;org.apache.juddi.model.Tmodel&gt; existingList = <strong class="jxr_keyword">new</strong> ArrayList&lt;org.apache.juddi.model.Tmodel&gt;(0);
<a class="jxr_linenumber" name="L657" href="#L657">657</a> <strong class="jxr_keyword">for</strong> (String key : getDetail.getTModelKey()) {
<a class="jxr_linenumber" name="L658" href="#L658">658</a> org.apache.juddi.model.Tmodel modelTModel = em.find(org.apache.juddi.model.Tmodel.<strong class="jxr_keyword">class</strong>, key);
<a class="jxr_linenumber" name="L659" href="#L659">659</a> <strong class="jxr_keyword">if</strong> (modelTModel != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L660" href="#L660">660</a> existingList.add(modelTModel);
<a class="jxr_linenumber" name="L661" href="#L661">661</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L662" href="#L662">662</a> missingKeyBag.getTModelKey().add(key);
<a class="jxr_linenumber" name="L663" href="#L663">663</a> }
<a class="jxr_linenumber" name="L664" href="#L664">664</a> <em class="jxr_comment">// Store deleted keys in the results</em>
<a class="jxr_linenumber" name="L665" href="#L665">665</a> <strong class="jxr_keyword">if</strong> (missingKeyBag.getTModelKey() != <strong class="jxr_keyword">null</strong> &amp;&amp; missingKeyBag.getTModelKey().size() &gt; 0)
<a class="jxr_linenumber" name="L666" href="#L666">666</a> result.getKeyBag().add(missingKeyBag);
<a class="jxr_linenumber" name="L667" href="#L667">667</a>
<a class="jxr_linenumber" name="L668" href="#L668">668</a> KeyBag resultsKeyBag = <strong class="jxr_keyword">new</strong> KeyBag();
<a class="jxr_linenumber" name="L669" href="#L669">669</a> TModelDetail tmodelDetail = <strong class="jxr_keyword">new</strong> TModelDetail();
<a class="jxr_linenumber" name="L670" href="#L670">670</a>
<a class="jxr_linenumber" name="L671" href="#L671">671</a> <em class="jxr_comment">// Set the currentIndex to 0 or the value of the chunkData</em>
<a class="jxr_linenumber" name="L672" href="#L672">672</a> <strong class="jxr_keyword">int</strong> currentIndex = 0;
<a class="jxr_linenumber" name="L673" href="#L673">673</a> <strong class="jxr_keyword">if</strong> (chunkData != <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L674" href="#L674">674</a> currentIndex = chunkData;
<a class="jxr_linenumber" name="L675" href="#L675">675</a>
<a class="jxr_linenumber" name="L676" href="#L676">676</a> <strong class="jxr_keyword">int</strong> returnedRowCount = 0;
<a class="jxr_linenumber" name="L677" href="#L677">677</a> <strong class="jxr_keyword">while</strong>(currentIndex &lt; existingList.size()) {
<a class="jxr_linenumber" name="L678" href="#L678">678</a>
<a class="jxr_linenumber" name="L679" href="#L679">679</a> org.apache.juddi.model.Tmodel modelTModel = existingList.get(currentIndex);
<a class="jxr_linenumber" name="L680" href="#L680">680</a>
<a class="jxr_linenumber" name="L681" href="#L681">681</a> <strong class="jxr_keyword">if</strong> (startPointDate.after(modelTModel.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L682" href="#L682">682</a> currentIndex++;
<a class="jxr_linenumber" name="L683" href="#L683">683</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L684" href="#L684">684</a> }
<a class="jxr_linenumber" name="L685" href="#L685">685</a>
<a class="jxr_linenumber" name="L686" href="#L686">686</a> <strong class="jxr_keyword">if</strong> (endPointDate.before(modelTModel.getModifiedIncludingChildren())) {
<a class="jxr_linenumber" name="L687" href="#L687">687</a> currentIndex++;
<a class="jxr_linenumber" name="L688" href="#L688">688</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L689" href="#L689">689</a> }
<a class="jxr_linenumber" name="L690" href="#L690">690</a>
<a class="jxr_linenumber" name="L691" href="#L691">691</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief()) {
<a class="jxr_linenumber" name="L692" href="#L692">692</a> resultsKeyBag.getTModelKey().add(modelTModel.getEntityKey());
<a class="jxr_linenumber" name="L693" href="#L693">693</a> }
<a class="jxr_linenumber" name="L694" href="#L694">694</a> <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L695" href="#L695">695</a> org.uddi.api_v3.TModel apiTModel = <strong class="jxr_keyword">new</strong> org.uddi.api_v3.TModel();
<a class="jxr_linenumber" name="L696" href="#L696">696</a> MappingModelToApi.mapTModel(modelTModel, apiTModel);
<a class="jxr_linenumber" name="L697" href="#L697">697</a> tmodelDetail.getTModel().add(apiTModel);
<a class="jxr_linenumber" name="L698" href="#L698">698</a>
<a class="jxr_linenumber" name="L699" href="#L699">699</a> returnedRowCount++;
<a class="jxr_linenumber" name="L700" href="#L700">700</a> }
<a class="jxr_linenumber" name="L701" href="#L701">701</a>
<a class="jxr_linenumber" name="L702" href="#L702">702</a> <em class="jxr_comment">// If the returned rows equals the max allowed, we can end the loop.</em>
<a class="jxr_linenumber" name="L703" href="#L703">703</a> <strong class="jxr_keyword">if</strong> (modelSubscription.getMaxEntities() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L704" href="#L704">704</a> <strong class="jxr_keyword">if</strong> (returnedRowCount == modelSubscription.getMaxEntities())
<a class="jxr_linenumber" name="L705" href="#L705">705</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L706" href="#L706">706</a> }
<a class="jxr_linenumber" name="L707" href="#L707">707</a>
<a class="jxr_linenumber" name="L708" href="#L708">708</a> currentIndex++;
<a class="jxr_linenumber" name="L709" href="#L709">709</a> }
<a class="jxr_linenumber" name="L710" href="#L710">710</a>
<a class="jxr_linenumber" name="L711" href="#L711">711</a> <em class="jxr_comment">// If the loop was broken prematurely (max row count hit) we set the chunk data to the next index to start with.</em>
<a class="jxr_linenumber" name="L712" href="#L712">712</a> <em class="jxr_comment">// A non-null value of chunk data will cause a chunk token to be generated. </em>
<a class="jxr_linenumber" name="L713" href="#L713">713</a> <strong class="jxr_keyword">if</strong> (currentIndex &lt; (existingList.size() - 1))
<a class="jxr_linenumber" name="L714" href="#L714">714</a> chunkData = currentIndex + 1;
<a class="jxr_linenumber" name="L715" href="#L715">715</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L716" href="#L716">716</a> chunkData = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L717" href="#L717">717</a>
<a class="jxr_linenumber" name="L718" href="#L718">718</a> <strong class="jxr_keyword">if</strong> (modelSubscription.isBrief())
<a class="jxr_linenumber" name="L719" href="#L719">719</a> result.getKeyBag().add(resultsKeyBag);
<a class="jxr_linenumber" name="L720" href="#L720">720</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L721" href="#L721">721</a> result.setTModelDetail(tmodelDetail);
<a class="jxr_linenumber" name="L722" href="#L722">722</a>
<a class="jxr_linenumber" name="L723" href="#L723">723</a> }
<a class="jxr_linenumber" name="L724" href="#L724">724</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetAssertionStatusReport() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L725" href="#L725">725</a> <em class="jxr_comment">// The coverage period doesn't apply here (basically because publisher assertions don't keep operational info).</em>
<a class="jxr_linenumber" name="L726" href="#L726">726</a> <em class="jxr_comment">// TODO, JUDDI-873 edit they do now, rewrite this query</em>
<a class="jxr_linenumber" name="L727" href="#L727">727</a> GetAssertionStatusReport getAssertionStatusReport = subscriptionFilter.getGetAssertionStatusReport();
<a class="jxr_linenumber" name="L728" href="#L728">728</a> List&lt;?&gt; businessKeysFound = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L729" href="#L729">729</a> businessKeysFound = FindBusinessByPublisherQuery.select(em, <strong class="jxr_keyword">null</strong>, publisher, businessKeysFound);
<a class="jxr_linenumber" name="L730" href="#L730">730</a>
<a class="jxr_linenumber" name="L731" href="#L731">731</a> AssertionStatusReport assertionStatusReport = <strong class="jxr_keyword">new</strong> AssertionStatusReport();
<a class="jxr_linenumber" name="L732" href="#L732">732</a>
<a class="jxr_linenumber" name="L733" href="#L733">733</a> List&lt;org.apache.juddi.model.PublisherAssertion&gt; pubAssertionList = org.apache.juddi.query.FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, getAssertionStatusReport.getCompletionStatus());
<a class="jxr_linenumber" name="L734" href="#L734">734</a> <em class="jxr_comment">//if (pubAssertionList==null)</em>
<a class="jxr_linenumber" name="L735" href="#L735">735</a> <em class="jxr_comment">// return result;</em>
<a class="jxr_linenumber" name="L736" href="#L736">736</a> <strong class="jxr_keyword">for</strong> (org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
<a class="jxr_linenumber" name="L737" href="#L737">737</a>
<a class="jxr_linenumber" name="L738" href="#L738">738</a> <strong class="jxr_keyword">if</strong> (startPointDate.after(modelPubAssertion.getModified())) {
<a class="jxr_linenumber" name="L739" href="#L739">739</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L740" href="#L740">740</a> }
<a class="jxr_linenumber" name="L741" href="#L741">741</a>
<a class="jxr_linenumber" name="L742" href="#L742">742</a> <strong class="jxr_keyword">if</strong> (endPointDate.before(modelPubAssertion.getModified())) {
<a class="jxr_linenumber" name="L743" href="#L743">743</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L744" href="#L744">744</a> }
<a class="jxr_linenumber" name="L745" href="#L745">745</a> org.uddi.api_v3.AssertionStatusItem apiAssertionStatusItem = <strong class="jxr_keyword">new</strong> org.uddi.api_v3.AssertionStatusItem();
<a class="jxr_linenumber" name="L746" href="#L746">746</a>
<a class="jxr_linenumber" name="L747" href="#L747">747</a> MappingModelToApi.mapAssertionStatusItem(modelPubAssertion, apiAssertionStatusItem, businessKeysFound);
<a class="jxr_linenumber" name="L748" href="#L748">748</a>
<a class="jxr_linenumber" name="L749" href="#L749">749</a> assertionStatusReport.getAssertionStatusItem().add(apiAssertionStatusItem);
<a class="jxr_linenumber" name="L750" href="#L750">750</a> }
<a class="jxr_linenumber" name="L751" href="#L751">751</a>
<a class="jxr_linenumber" name="L752" href="#L752">752</a>
<a class="jxr_linenumber" name="L753" href="#L753">753</a> result.setAssertionStatusReport(assertionStatusReport);
<a class="jxr_linenumber" name="L754" href="#L754">754</a> }
<a class="jxr_linenumber" name="L755" href="#L755">755</a>
<a class="jxr_linenumber" name="L756" href="#L756">756</a> <em class="jxr_comment">// If chunkData contains non-null data, a new token must be created and the token returned in the results</em>
<a class="jxr_linenumber" name="L757" href="#L757">757</a> <strong class="jxr_keyword">if</strong> (chunkData != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L758" href="#L758">758</a> String chunkToken = CHUNK_TOKEN_PREFIX + UUID.randomUUID();
<a class="jxr_linenumber" name="L759" href="#L759">759</a> SubscriptionChunkToken newChunkToken = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/model/SubscriptionChunkToken.html">SubscriptionChunkToken</a>(chunkToken);
<a class="jxr_linenumber" name="L760" href="#L760">760</a> newChunkToken.setSubscriptionKey(body.getSubscriptionKey());
<a class="jxr_linenumber" name="L761" href="#L761">761</a> newChunkToken.setStartPoint(startPointDate);
<a class="jxr_linenumber" name="L762" href="#L762">762</a> newChunkToken.setEndPoint(endPointDate);
<a class="jxr_linenumber" name="L763" href="#L763">763</a> newChunkToken.setData(chunkData);
<a class="jxr_linenumber" name="L764" href="#L764">764</a>
<a class="jxr_linenumber" name="L765" href="#L765">765</a> <strong class="jxr_keyword">int</strong> chunkExpirationMinutes = DEFAULT_CHUNKEXPIRATION_MINUTES;
<a class="jxr_linenumber" name="L766" href="#L766">766</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L767" href="#L767">767</a> chunkExpirationMinutes = AppConfig.getConfiguration().getInt(Property.JUDDI_SUBSCRIPTION_CHUNKEXPIRATION_MINUTES);
<a class="jxr_linenumber" name="L768" href="#L768">768</a> }
<a class="jxr_linenumber" name="L769" href="#L769">769</a> <strong class="jxr_keyword">catch</strong>(ConfigurationException ce) {
<a class="jxr_linenumber" name="L770" href="#L770">770</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/FatalErrorException.html">FatalErrorException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.configuration.Retrieval"</span>));
<a class="jxr_linenumber" name="L771" href="#L771">771</a> }
<a class="jxr_linenumber" name="L772" href="#L772">772</a> newChunkToken.setExpiresAfter(<strong class="jxr_keyword">new</strong> Date(System.currentTimeMillis() + ((<strong class="jxr_keyword">long</strong>)chunkExpirationMinutes * 60L * 1000L)));
<a class="jxr_linenumber" name="L773" href="#L773">773</a>
<a class="jxr_linenumber" name="L774" href="#L774">774</a> em.persist(newChunkToken);
<a class="jxr_linenumber" name="L775" href="#L775">775</a>
<a class="jxr_linenumber" name="L776" href="#L776">776</a> result.setChunkToken(chunkToken);
<a class="jxr_linenumber" name="L777" href="#L777">777</a> }
<a class="jxr_linenumber" name="L778" href="#L778">778</a>
<a class="jxr_linenumber" name="L779" href="#L779">779</a> tx.commit();
<a class="jxr_linenumber" name="L780" href="#L780">780</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L781" href="#L781">781</a> serviceCounter.update(SubscriptionQuery.GET_SUBSCRIPTIONRESULTS,
<a class="jxr_linenumber" name="L782" href="#L782">782</a> QueryStatus.SUCCESS, procTime);
<a class="jxr_linenumber" name="L783" href="#L783">783</a>
<a class="jxr_linenumber" name="L784" href="#L784">784</a> <strong class="jxr_keyword">return</strong> result;
<a class="jxr_linenumber" name="L785" href="#L785">785</a> } <strong class="jxr_keyword">catch</strong> (DispositionReportFaultMessage drfm) {
<a class="jxr_linenumber" name="L786" href="#L786">786</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L787" href="#L787">787</a> serviceCounter.update(SubscriptionQuery.GET_SUBSCRIPTIONRESULTS,
<a class="jxr_linenumber" name="L788" href="#L788">788</a> QueryStatus.FAILED, procTime);
<a class="jxr_linenumber" name="L789" href="#L789">789</a> <strong class="jxr_keyword">throw</strong> drfm;
<a class="jxr_linenumber" name="L790" href="#L790">790</a> } <strong class="jxr_keyword">finally</strong> {
<a class="jxr_linenumber" name="L791" href="#L791">791</a> <strong class="jxr_keyword">if</strong> (tx.isActive()) {
<a class="jxr_linenumber" name="L792" href="#L792">792</a> tx.rollback();
<a class="jxr_linenumber" name="L793" href="#L793">793</a> }
<a class="jxr_linenumber" name="L794" href="#L794">794</a> em.close();
<a class="jxr_linenumber" name="L795" href="#L795">795</a> }
<a class="jxr_linenumber" name="L796" href="#L796">796</a> }
<a class="jxr_linenumber" name="L797" href="#L797">797</a>
<a class="jxr_linenumber" name="L798" href="#L798">798</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
<a class="jxr_linenumber" name="L799" href="#L799">799</a> <strong class="jxr_keyword">public</strong> List&lt;Subscription&gt; getSubscriptions(String authInfo)
<a class="jxr_linenumber" name="L800" href="#L800">800</a> <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L801" href="#L801">801</a> <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
<a class="jxr_linenumber" name="L802" href="#L802">802</a> EntityManager em = PersistenceManager.getEntityManager();
<a class="jxr_linenumber" name="L803" href="#L803">803</a> EntityTransaction tx = em.getTransaction();
<a class="jxr_linenumber" name="L804" href="#L804">804</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L805" href="#L805">805</a> tx.begin();
<a class="jxr_linenumber" name="L806" href="#L806">806</a>
<a class="jxr_linenumber" name="L807" href="#L807">807</a> UddiEntityPublisher publisher = <strong class="jxr_keyword">this</strong>.getEntityPublisher(em, authInfo);
<a class="jxr_linenumber" name="L808" href="#L808">808</a>
<a class="jxr_linenumber" name="L809" href="#L809">809</a> List&lt;Subscription&gt; result = <strong class="jxr_keyword">new</strong> ArrayList&lt;Subscription&gt;(0);
<a class="jxr_linenumber" name="L810" href="#L810">810</a>
<a class="jxr_linenumber" name="L811" href="#L811">811</a> List&lt;org.apache.juddi.model.Subscription&gt; modelSubscriptionList = (List&lt;org.apache.juddi.model.Subscription&gt;)FindSubscriptionByPublisherQuery.select(em, publisher.getAuthorizedName());
<a class="jxr_linenumber" name="L812" href="#L812">812</a> <strong class="jxr_keyword">if</strong> (modelSubscriptionList != <strong class="jxr_keyword">null</strong> &amp;&amp; modelSubscriptionList.size() &gt; 0) {
<a class="jxr_linenumber" name="L813" href="#L813">813</a> <strong class="jxr_keyword">for</strong> (org.apache.juddi.model.Subscription modelSubscription : modelSubscriptionList) {
<a class="jxr_linenumber" name="L814" href="#L814">814</a>
<a class="jxr_linenumber" name="L815" href="#L815">815</a> Subscription apiSubscription = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/model/Subscription.html">Subscription</a>();
<a class="jxr_linenumber" name="L816" href="#L816">816</a>
<a class="jxr_linenumber" name="L817" href="#L817">817</a> MappingModelToApi.mapSubscription(modelSubscription, apiSubscription);
<a class="jxr_linenumber" name="L818" href="#L818">818</a>
<a class="jxr_linenumber" name="L819" href="#L819">819</a> result.add(apiSubscription);
<a class="jxr_linenumber" name="L820" href="#L820">820</a> }
<a class="jxr_linenumber" name="L821" href="#L821">821</a> }
<a class="jxr_linenumber" name="L822" href="#L822">822</a>
<a class="jxr_linenumber" name="L823" href="#L823">823</a> tx.commit();
<a class="jxr_linenumber" name="L824" href="#L824">824</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L825" href="#L825">825</a> serviceCounter.update(SubscriptionQuery.GET_SUBSCRIPTIONS,
<a class="jxr_linenumber" name="L826" href="#L826">826</a> QueryStatus.SUCCESS, procTime);
<a class="jxr_linenumber" name="L827" href="#L827">827</a>
<a class="jxr_linenumber" name="L828" href="#L828">828</a> <strong class="jxr_keyword">return</strong> result;
<a class="jxr_linenumber" name="L829" href="#L829">829</a> } <strong class="jxr_keyword">catch</strong> (DispositionReportFaultMessage drfm) {
<a class="jxr_linenumber" name="L830" href="#L830">830</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L831" href="#L831">831</a> serviceCounter.update(SubscriptionQuery.GET_SUBSCRIPTIONS,
<a class="jxr_linenumber" name="L832" href="#L832">832</a> QueryStatus.FAILED, procTime);
<a class="jxr_linenumber" name="L833" href="#L833">833</a> <strong class="jxr_keyword">throw</strong> drfm;
<a class="jxr_linenumber" name="L834" href="#L834">834</a> } <strong class="jxr_keyword">finally</strong> {
<a class="jxr_linenumber" name="L835" href="#L835">835</a> <strong class="jxr_keyword">if</strong> (tx.isActive()) {
<a class="jxr_linenumber" name="L836" href="#L836">836</a> tx.rollback();
<a class="jxr_linenumber" name="L837" href="#L837">837</a> }
<a class="jxr_linenumber" name="L838" href="#L838">838</a> em.close();
<a class="jxr_linenumber" name="L839" href="#L839">839</a> }
<a class="jxr_linenumber" name="L840" href="#L840">840</a> }
<a class="jxr_linenumber" name="L841" href="#L841">841</a>
<a class="jxr_linenumber" name="L842" href="#L842">842</a>
<a class="jxr_linenumber" name="L843" href="#L843">843</a> <em class="jxr_comment">/* </em>
<a class="jxr_linenumber" name="L844" href="#L844">844</a> <em class="jxr_comment"> * @see org.uddi.v3_service.UDDISubscriptionPortType#saveSubscription(java.lang.String, javax.xml.ws.Holder)</em>
<a class="jxr_linenumber" name="L845" href="#L845">845</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L846" href="#L846">846</a> <em class="jxr_comment"> * Notes: The matching keys are saved on a new subscription (or renewed subscription) for the find_* filters only. With the other filter </em>
<a class="jxr_linenumber" name="L847" href="#L847">847</a> <em class="jxr_comment"> * types, taking a snapshot of the matches doesn't make sense.</em>
<a class="jxr_linenumber" name="L848" href="#L848">848</a> <em class="jxr_comment"> * </em>
<a class="jxr_linenumber" name="L849" href="#L849">849</a> <em class="jxr_comment"> */</em>
<a class="jxr_linenumber" name="L850" href="#L850">850</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> saveSubscription(String authInfo,
<a class="jxr_linenumber" name="L851" href="#L851">851</a> Holder&lt;List&lt;Subscription&gt;&gt; subscription)
<a class="jxr_linenumber" name="L852" href="#L852">852</a> <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L853" href="#L853">853</a> <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
<a class="jxr_linenumber" name="L854" href="#L854">854</a>
<a class="jxr_linenumber" name="L855" href="#L855">855</a> EntityManager em = PersistenceManager.getEntityManager();
<a class="jxr_linenumber" name="L856" href="#L856">856</a> EntityTransaction tx = em.getTransaction();
<a class="jxr_linenumber" name="L857" href="#L857">857</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L858" href="#L858">858</a> tx.begin();
<a class="jxr_linenumber" name="L859" href="#L859">859</a>
<a class="jxr_linenumber" name="L860" href="#L860">860</a> UddiEntityPublisher publisher = <strong class="jxr_keyword">this</strong>.getEntityPublisher(em, authInfo);
<a class="jxr_linenumber" name="L861" href="#L861">861</a> publisher.populateKeyGeneratorKeys(em);
<a class="jxr_linenumber" name="L862" href="#L862">862</a> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/validation/ValidateSubscription.html">ValidateSubscription</a>(publisher).validateSubscriptions(em, subscription.value, publisher);
<a class="jxr_linenumber" name="L863" href="#L863">863</a>
<a class="jxr_linenumber" name="L864" href="#L864">864</a> List&lt;org.uddi.sub_v3.Subscription&gt; apiSubscriptionList = subscription.value;
<a class="jxr_linenumber" name="L865" href="#L865">865</a> <strong class="jxr_keyword">for</strong> (org.uddi.sub_v3.Subscription apiSubscription : apiSubscriptionList) {
<a class="jxr_linenumber" name="L866" href="#L866">866</a>
<a class="jxr_linenumber" name="L867" href="#L867">867</a> org.apache.juddi.model.Subscription modelSubscription = <strong class="jxr_keyword">new</strong> org.apache.juddi.model.Subscription();
<a class="jxr_linenumber" name="L868" href="#L868">868</a>
<a class="jxr_linenumber" name="L869" href="#L869">869</a> Object existing = em.find(org.apache.juddi.model.Subscription.<strong class="jxr_keyword">class</strong>, apiSubscription.getSubscriptionKey());
<a class="jxr_linenumber" name="L870" href="#L870">870</a> <strong class="jxr_keyword">if</strong> (existing != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L871" href="#L871">871</a> org.apache.juddi.model.Subscription existingEntity = (org.apache.juddi.model.Subscription) existing;
<a class="jxr_linenumber" name="L872" href="#L872">872</a> doRenewal(existingEntity, apiSubscription);
<a class="jxr_linenumber" name="L873" href="#L873">873</a> <em class="jxr_comment">//carrying over the created and last notified dates if this is a renewal.</em>
<a class="jxr_linenumber" name="L874" href="#L874">874</a> modelSubscription.setCreateDate(existingEntity.getCreateDate());
<a class="jxr_linenumber" name="L875" href="#L875">875</a> modelSubscription.setLastNotified(existingEntity.getLastNotified());
<a class="jxr_linenumber" name="L876" href="#L876">876</a> em.remove(existing);
<a class="jxr_linenumber" name="L877" href="#L877">877</a> } <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L878" href="#L878">878</a> modelSubscription.setCreateDate(<strong class="jxr_keyword">new</strong> Date());
<a class="jxr_linenumber" name="L879" href="#L879">879</a> }
<a class="jxr_linenumber" name="L880" href="#L880">880</a>
<a class="jxr_linenumber" name="L881" href="#L881">881</a> doSubscriptionExpirationDate(apiSubscription);
<a class="jxr_linenumber" name="L882" href="#L882">882</a>
<a class="jxr_linenumber" name="L883" href="#L883">883</a> MappingApiToModel.mapSubscription(apiSubscription, modelSubscription);
<a class="jxr_linenumber" name="L884" href="#L884">884</a>
<a class="jxr_linenumber" name="L885" href="#L885">885</a> modelSubscription.setAuthorizedName(publisher.getAuthorizedName());
<a class="jxr_linenumber" name="L886" href="#L886">886</a>
<a class="jxr_linenumber" name="L887" href="#L887">887</a> <em class="jxr_comment">// Add the matching keys to the match collection</em>
<a class="jxr_linenumber" name="L888" href="#L888">888</a> List&lt;?&gt; keys = getSubscriptionMatches(apiSubscription.getSubscriptionFilter(), em);
<a class="jxr_linenumber" name="L889" href="#L889">889</a> <strong class="jxr_keyword">if</strong> (keys != <strong class="jxr_keyword">null</strong> &amp;&amp; keys.size() &gt; 0) {
<a class="jxr_linenumber" name="L890" href="#L890">890</a> <strong class="jxr_keyword">for</strong> (Object key : keys) {
<a class="jxr_linenumber" name="L891" href="#L891">891</a> SubscriptionMatch subMatch = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/model/SubscriptionMatch.html">SubscriptionMatch</a>(modelSubscription, (String)key);
<a class="jxr_linenumber" name="L892" href="#L892">892</a> modelSubscription.getSubscriptionMatches().add(subMatch);
<a class="jxr_linenumber" name="L893" href="#L893">893</a> }
<a class="jxr_linenumber" name="L894" href="#L894">894</a> }
<a class="jxr_linenumber" name="L895" href="#L895">895</a>
<a class="jxr_linenumber" name="L896" href="#L896">896</a> em.persist(modelSubscription);
<a class="jxr_linenumber" name="L897" href="#L897">897</a> }
<a class="jxr_linenumber" name="L898" href="#L898">898</a>
<a class="jxr_linenumber" name="L899" href="#L899">899</a> tx.commit();
<a class="jxr_linenumber" name="L900" href="#L900">900</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L901" href="#L901">901</a> serviceCounter.update(SubscriptionQuery.SAVE_SUBSCRIPTION,
<a class="jxr_linenumber" name="L902" href="#L902">902</a> QueryStatus.SUCCESS, procTime);
<a class="jxr_linenumber" name="L903" href="#L903">903</a> } <strong class="jxr_keyword">catch</strong> (DispositionReportFaultMessage drfm) {
<a class="jxr_linenumber" name="L904" href="#L904">904</a> <strong class="jxr_keyword">long</strong> procTime = System.currentTimeMillis() - startTime;
<a class="jxr_linenumber" name="L905" href="#L905">905</a> serviceCounter.update(SubscriptionQuery.SAVE_SUBSCRIPTION,
<a class="jxr_linenumber" name="L906" href="#L906">906</a> QueryStatus.FAILED, procTime);
<a class="jxr_linenumber" name="L907" href="#L907">907</a> <strong class="jxr_keyword">throw</strong> drfm;
<a class="jxr_linenumber" name="L908" href="#L908">908</a> } <strong class="jxr_keyword">finally</strong> {
<a class="jxr_linenumber" name="L909" href="#L909">909</a> <strong class="jxr_keyword">if</strong> (tx.isActive()) {
<a class="jxr_linenumber" name="L910" href="#L910">910</a> tx.rollback();
<a class="jxr_linenumber" name="L911" href="#L911">911</a> }
<a class="jxr_linenumber" name="L912" href="#L912">912</a> em.close();
<a class="jxr_linenumber" name="L913" href="#L913">913</a> }
<a class="jxr_linenumber" name="L914" href="#L914">914</a> }
<a class="jxr_linenumber" name="L915" href="#L915">915</a>
<a class="jxr_linenumber" name="L916" href="#L916">916</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L917" href="#L917">917</a> <em class="jxr_javadoccomment"> * Will perform the necessary logic for when a subscription is renewed (evidenced by a subscription with the same key in existence). </em>
<a class="jxr_linenumber" name="L918" href="#L918">918</a> <em class="jxr_javadoccomment"> * In general, the appropriate data is copied from the stored subscription to the renewal subscription request.</em>
<a class="jxr_linenumber" name="L919" href="#L919">919</a> <em class="jxr_javadoccomment"> * </em>
<a class="jxr_linenumber" name="L920" href="#L920">920</a> <em class="jxr_javadoccomment"> * @param existingSubscription - existing stored subscription</em>
<a class="jxr_linenumber" name="L921" href="#L921">921</a> <em class="jxr_javadoccomment"> * @param apiSubscription - renewal subscription request</em>
<a class="jxr_linenumber" name="L922" href="#L922">922</a> <em class="jxr_javadoccomment"> * @throws DispositionReportFaultMessage </em>
<a class="jxr_linenumber" name="L923" href="#L923">923</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L924" href="#L924">924</a> <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> doRenewal(org.apache.juddi.model.Subscription existingSubscription, org.uddi.sub_v3.Subscription apiSubscription) <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L925" href="#L925">925</a> <strong class="jxr_keyword">if</strong> (apiSubscription.getSubscriptionFilter() == <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L926" href="#L926">926</a> String rawFilter = existingSubscription.getSubscriptionFilter();
<a class="jxr_linenumber" name="L927" href="#L927">927</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L928" href="#L928">928</a> SubscriptionFilter existingFilter = (SubscriptionFilter)JAXBMarshaller.unmarshallFromString(rawFilter, <span class="jxr_string">"org.uddi.sub_v3"</span>);
<a class="jxr_linenumber" name="L929" href="#L929">929</a> apiSubscription.setSubscriptionFilter(existingFilter);
<a class="jxr_linenumber" name="L930" href="#L930">930</a> }
<a class="jxr_linenumber" name="L931" href="#L931">931</a> <strong class="jxr_keyword">catch</strong> (JAXBException e) {
<a class="jxr_linenumber" name="L932" href="#L932">932</a> logger.error(<span class="jxr_string">"JAXB Exception while marshalling subscription filter"</span>, e);
<a class="jxr_linenumber" name="L933" href="#L933">933</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/FatalErrorException.html">FatalErrorException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.Unspecified"</span>));
<a class="jxr_linenumber" name="L934" href="#L934">934</a> }
<a class="jxr_linenumber" name="L935" href="#L935">935</a> }
<a class="jxr_linenumber" name="L936" href="#L936">936</a>
<a class="jxr_linenumber" name="L937" href="#L937">937</a> }
<a class="jxr_linenumber" name="L938" href="#L938">938</a>
<a class="jxr_linenumber" name="L939" href="#L939">939</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L940" href="#L940">940</a> <em class="jxr_javadoccomment"> * Will add the expiration date to the provided subscription request. Date is earlier of user provided date and the system default</em>
<a class="jxr_linenumber" name="L941" href="#L941">941</a> <em class="jxr_javadoccomment"> * </em>
<a class="jxr_linenumber" name="L942" href="#L942">942</a> <em class="jxr_javadoccomment"> * @param apiSubscription</em>
<a class="jxr_linenumber" name="L943" href="#L943">943</a> <em class="jxr_javadoccomment"> * @throws DispositionReportFaultMessage</em>
<a class="jxr_linenumber" name="L944" href="#L944">944</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L945" href="#L945">945</a> <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> doSubscriptionExpirationDate(org.uddi.sub_v3.Subscription apiSubscription) <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L946" href="#L946">946</a>
<a class="jxr_linenumber" name="L947" href="#L947">947</a> <strong class="jxr_keyword">int</strong> subscriptionExpirationDays = DEFAULT_SUBSCRIPTIONEXPIRATION_DAYS;
<a class="jxr_linenumber" name="L948" href="#L948">948</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L949" href="#L949">949</a> subscriptionExpirationDays = AppConfig.getConfiguration().getInt(Property.JUDDI_SUBSCRIPTION_EXPIRATION_DAYS);
<a class="jxr_linenumber" name="L950" href="#L950">950</a> }
<a class="jxr_linenumber" name="L951" href="#L951">951</a> <strong class="jxr_keyword">catch</strong>(ConfigurationException ce) {
<a class="jxr_linenumber" name="L952" href="#L952">952</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/FatalErrorException.html">FatalErrorException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.configuration.Retrieval"</span>));
<a class="jxr_linenumber" name="L953" href="#L953">953</a> }
<a class="jxr_linenumber" name="L954" href="#L954">954</a>
<a class="jxr_linenumber" name="L955" href="#L955">955</a> GregorianCalendar expirationDate = <strong class="jxr_keyword">new</strong> GregorianCalendar();
<a class="jxr_linenumber" name="L956" href="#L956">956</a> expirationDate.add(GregorianCalendar.DAY_OF_MONTH, subscriptionExpirationDays);
<a class="jxr_linenumber" name="L957" href="#L957">957</a>
<a class="jxr_linenumber" name="L958" href="#L958">958</a> <em class="jxr_comment">// The expiration date is the earlier of the provided date and that specified by the parameter.</em>
<a class="jxr_linenumber" name="L959" href="#L959">959</a> <strong class="jxr_keyword">if</strong> (apiSubscription.getExpiresAfter() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L960" href="#L960">960</a> GregorianCalendar userExpiration = apiSubscription.getExpiresAfter().toGregorianCalendar();
<a class="jxr_linenumber" name="L961" href="#L961">961</a> <strong class="jxr_keyword">if</strong> (userExpiration.getTimeInMillis() &lt; expirationDate.getTimeInMillis())
<a class="jxr_linenumber" name="L962" href="#L962">962</a> expirationDate.setTimeInMillis(userExpiration.getTimeInMillis());
<a class="jxr_linenumber" name="L963" href="#L963">963</a> }
<a class="jxr_linenumber" name="L964" href="#L964">964</a>
<a class="jxr_linenumber" name="L965" href="#L965">965</a> <strong class="jxr_keyword">try</strong> {
<a class="jxr_linenumber" name="L966" href="#L966">966</a> DatatypeFactory df = DatatypeFactory.newInstance();
<a class="jxr_linenumber" name="L967" href="#L967">967</a> apiSubscription.setExpiresAfter(df.newXMLGregorianCalendar(expirationDate));
<a class="jxr_linenumber" name="L968" href="#L968">968</a> }
<a class="jxr_linenumber" name="L969" href="#L969">969</a> <strong class="jxr_keyword">catch</strong>(DatatypeConfigurationException ce) {
<a class="jxr_linenumber" name="L970" href="#L970">970</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/FatalErrorException.html">FatalErrorException</a>(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/juddi/v3/error/ErrorMessage.html">ErrorMessage</a>(<span class="jxr_string">"errors.Unspecified"</span>));
<a class="jxr_linenumber" name="L971" href="#L971">971</a> }
<a class="jxr_linenumber" name="L972" href="#L972">972</a>
<a class="jxr_linenumber" name="L973" href="#L973">973</a> }
<a class="jxr_linenumber" name="L974" href="#L974">974</a>
<a class="jxr_linenumber" name="L975" href="#L975">975</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L976" href="#L976">976</a> <em class="jxr_javadoccomment"> * Will take a snapshot of the keys that match the subscription filter return them. Currently, keys are only returned for the find_*</em>
<a class="jxr_linenumber" name="L977" href="#L977">977</a> <em class="jxr_javadoccomment"> * filters. It seems redundant to return the keys in the get_*Detail filters.</em>
<a class="jxr_linenumber" name="L978" href="#L978">978</a> <em class="jxr_javadoccomment"> * </em>
<a class="jxr_linenumber" name="L979" href="#L979">979</a> <em class="jxr_javadoccomment"> * @param subscriptionFilter</em>
<a class="jxr_linenumber" name="L980" href="#L980">980</a> <em class="jxr_javadoccomment"> * @param em</em>
<a class="jxr_linenumber" name="L981" href="#L981">981</a> <em class="jxr_javadoccomment"> * @return a list of subscription matches</em>
<a class="jxr_linenumber" name="L982" href="#L982">982</a> <em class="jxr_javadoccomment"> * @throws DispositionReportFaultMessage</em>
<a class="jxr_linenumber" name="L983" href="#L983">983</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L984" href="#L984">984</a> <strong class="jxr_keyword">protected</strong> List&lt;?&gt; getSubscriptionMatches(SubscriptionFilter subscriptionFilter, EntityManager em)
<a class="jxr_linenumber" name="L985" href="#L985">985</a> <strong class="jxr_keyword">throws</strong> DispositionReportFaultMessage {
<a class="jxr_linenumber" name="L986" href="#L986">986</a>
<a class="jxr_linenumber" name="L987" href="#L987">987</a>
<a class="jxr_linenumber" name="L988" href="#L988">988</a> List&lt;?&gt; keys = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L989" href="#L989">989</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindBinding() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L990" href="#L990">990</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L991" href="#L991">991</a> findQualifiers.mapApiFindQualifiers(subscriptionFilter.getFindBinding().getFindQualifiers());
<a class="jxr_linenumber" name="L992" href="#L992">992</a> keys = InquiryHelper.findBinding(subscriptionFilter.getFindBinding(), findQualifiers, em);
<a class="jxr_linenumber" name="L993" href="#L993">993</a> }
<a class="jxr_linenumber" name="L994" href="#L994">994</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindBusiness() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L995" href="#L995">995</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L996" href="#L996">996</a> findQualifiers.mapApiFindQualifiers(subscriptionFilter.getFindBusiness().getFindQualifiers());
<a class="jxr_linenumber" name="L997" href="#L997">997</a> keys = InquiryHelper.findBusiness(subscriptionFilter.getFindBusiness(), findQualifiers, em);
<a class="jxr_linenumber" name="L998" href="#L998">998</a> }
<a class="jxr_linenumber" name="L999" href="#L999">999</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindService() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a> findQualifiers.mapApiFindQualifiers(subscriptionFilter.getFindService().getFindQualifiers());
<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a> keys = InquiryHelper.findService(subscriptionFilter.getFindService(), findQualifiers, em);
<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a> }
<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindTModel() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a> org.apache.juddi.query.util.FindQualifiers findQualifiers = <strong class="jxr_keyword">new</strong> org.apache.juddi.query.util.FindQualifiers();
<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a> findQualifiers.mapApiFindQualifiers(subscriptionFilter.getFindTModel().getFindQualifiers());
<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a> keys = InquiryHelper.findTModel(subscriptionFilter.getFindTModel(), findQualifiers, em);
<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a> }
<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getFindRelatedBusinesses() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a> <em class="jxr_comment">// TODO: should we bother taking a snapshot of these?</em>
<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a> }
<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetBindingDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a> <em class="jxr_comment">//keys = subscriptionFilter.getGetBindingDetail().getBindingKey();</em>
<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a> <em class="jxr_comment">// Nothing needs to be done</em>
<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a> }
<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetBusinessDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a> <em class="jxr_comment">//keys = subscriptionFilter.getGetBusinessDetail().getBusinessKey();</em>
<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a> <em class="jxr_comment">// Nothing needs to be done</em>
<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a> }
<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetServiceDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a> <em class="jxr_comment">//keys = subscriptionFilter.getGetServiceDetail().getServiceKey();</em>
<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> <em class="jxr_comment">// Nothing needs to be done</em>
<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a> }
<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetTModelDetail() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a> <em class="jxr_comment">//keys = subscriptionFilter.getGetTModelDetail().getTModelKey();</em>
<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a> <em class="jxr_comment">// Nothing needs to be done</em>
<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a> }
<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a> <strong class="jxr_keyword">if</strong> (subscriptionFilter.getGetAssertionStatusReport() != <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a> <em class="jxr_comment">// Nothing needs to be done</em>
<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a> }
<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a> <strong class="jxr_keyword">return</strong> keys;
<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a>
<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a> }
<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a>
<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a> <strong class="jxr_keyword">private</strong> List&lt;String&gt; getMissingKeys(List&lt;?&gt; currentMatchingKeys, List&lt;SubscriptionMatch&gt; subscriptionMatches) {
<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a>
<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a> List&lt;String&gt; result = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;(subscriptionMatches.size());
<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a> <strong class="jxr_keyword">for</strong> (SubscriptionMatch subMatch : subscriptionMatches)
<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a> result.add(subMatch.getEntityKey());
<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a>
<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a> result.removeAll(currentMatchingKeys);
<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a>
<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a> <strong class="jxr_keyword">return</strong> result;
<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a> }
<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a>
<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a> }
</pre>
<hr/>
<div id="footer">Copyright &#169; 2004&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</div>
</body>
</html>