blob: e1fa79359f3f913fbf9c2d0d32db3b7b46b92527 [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>CreateClusterAppMojo xref</title>
<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../apidocs/org/netbeans/nbm/CreateClusterAppMojo.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 Milos Kleint</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.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></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> <strong class="jxr_keyword">package</strong> org.netbeans.nbm;
<a class="jxr_linenumber" name="L18" href="#L18">18</a>
<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> com.google.common.collect.Sets;
<a class="jxr_linenumber" name="L20" href="#L20">20</a> <strong class="jxr_keyword">import</strong> java.io.*;
<a class="jxr_linenumber" name="L21" href="#L21">21</a> <strong class="jxr_keyword">import</strong> java.net.URL;
<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> java.util.Arrays;
<a class="jxr_linenumber" name="L24" href="#L24">24</a> <strong class="jxr_keyword">import</strong> java.util.Collection;
<a class="jxr_linenumber" name="L25" href="#L25">25</a> <strong class="jxr_keyword">import</strong> java.util.Collections;
<a class="jxr_linenumber" name="L26" href="#L26">26</a> <strong class="jxr_keyword">import</strong> java.util.Date;
<a class="jxr_linenumber" name="L27" href="#L27">27</a> <strong class="jxr_keyword">import</strong> java.util.Enumeration;
<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">import</strong> java.util.HashMap;
<a class="jxr_linenumber" name="L29" href="#L29">29</a> <strong class="jxr_keyword">import</strong> java.util.HashSet;
<a class="jxr_linenumber" name="L30" href="#L30">30</a> <strong class="jxr_keyword">import</strong> java.util.Iterator;
<a class="jxr_linenumber" name="L31" href="#L31">31</a> <strong class="jxr_keyword">import</strong> java.util.List;
<a class="jxr_linenumber" name="L32" href="#L32">32</a> <strong class="jxr_keyword">import</strong> java.util.Map;
<a class="jxr_linenumber" name="L33" href="#L33">33</a> <strong class="jxr_keyword">import</strong> java.util.Set;
<a class="jxr_linenumber" name="L34" href="#L34">34</a> <strong class="jxr_keyword">import</strong> java.util.jar.JarEntry;
<a class="jxr_linenumber" name="L35" href="#L35">35</a> <strong class="jxr_keyword">import</strong> java.util.jar.JarFile;
<a class="jxr_linenumber" name="L36" href="#L36">36</a> <strong class="jxr_keyword">import</strong> java.util.jar.JarOutputStream;
<a class="jxr_linenumber" name="L37" href="#L37">37</a> <strong class="jxr_keyword">import</strong> java.util.jar.Pack200;
<a class="jxr_linenumber" name="L38" href="#L38">38</a> <strong class="jxr_keyword">import</strong> java.util.regex.Matcher;
<a class="jxr_linenumber" name="L39" href="#L39">39</a> <strong class="jxr_keyword">import</strong> java.util.regex.Pattern;
<a class="jxr_linenumber" name="L40" href="#L40">40</a> <strong class="jxr_keyword">import</strong> java.util.zip.CRC32;
<a class="jxr_linenumber" name="L41" href="#L41">41</a> <strong class="jxr_keyword">import</strong> java.util.zip.GZIPInputStream;
<a class="jxr_linenumber" name="L42" href="#L42">42</a> <strong class="jxr_keyword">import</strong> java.util.zip.ZipEntry;
<a class="jxr_linenumber" name="L43" href="#L43">43</a> <strong class="jxr_keyword">import</strong> java.util.zip.ZipFile;
<a class="jxr_linenumber" name="L44" href="#L44">44</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.Artifact;
<a class="jxr_linenumber" name="L45" href="#L45">45</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.factory.ArtifactFactory;
<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.repository.ArtifactRepository;
<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
<a class="jxr_linenumber" name="L48" href="#L48">48</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.resolver.ArtifactNotFoundException;
<a class="jxr_linenumber" name="L49" href="#L49">49</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.resolver.ArtifactResolutionException;
<a class="jxr_linenumber" name="L50" href="#L50">50</a> <strong class="jxr_keyword">import</strong> org.apache.maven.artifact.resolver.ArtifactResolver;
<a class="jxr_linenumber" name="L51" href="#L51">51</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugin.MojoExecutionException;
<a class="jxr_linenumber" name="L52" href="#L52">52</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugin.MojoFailureException;
<a class="jxr_linenumber" name="L53" href="#L53">53</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugin.logging.Log;
<a class="jxr_linenumber" name="L54" href="#L54">54</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugins.annotations.Component;
<a class="jxr_linenumber" name="L55" href="#L55">55</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugins.annotations.LifecyclePhase;
<a class="jxr_linenumber" name="L56" href="#L56">56</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugins.annotations.Mojo;
<a class="jxr_linenumber" name="L57" href="#L57">57</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugins.annotations.Parameter;
<a class="jxr_linenumber" name="L58" href="#L58">58</a> <strong class="jxr_keyword">import</strong> org.apache.maven.plugins.annotations.ResolutionScope;
<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">import</strong> org.apache.maven.project.MavenProject;
<a class="jxr_linenumber" name="L60" href="#L60">60</a> <strong class="jxr_keyword">import</strong> org.netbeans.nbm.utils.ExamineManifest;
<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">import</strong> org.apache.tools.ant.BuildException;
<a class="jxr_linenumber" name="L62" href="#L62">62</a> <strong class="jxr_keyword">import</strong> org.apache.tools.ant.Project;
<a class="jxr_linenumber" name="L63" href="#L63">63</a> <strong class="jxr_keyword">import</strong> org.apache.tools.ant.filters.StringInputStream;
<a class="jxr_linenumber" name="L64" href="#L64">64</a> <strong class="jxr_keyword">import</strong> org.apache.tools.ant.taskdefs.Chmod;
<a class="jxr_linenumber" name="L65" href="#L65">65</a> <strong class="jxr_keyword">import</strong> org.apache.tools.ant.types.FileSet;
<a class="jxr_linenumber" name="L66" href="#L66">66</a> <strong class="jxr_keyword">import</strong> org.codehaus.plexus.util.FileUtils;
<a class="jxr_linenumber" name="L67" href="#L67">67</a> <strong class="jxr_keyword">import</strong> org.codehaus.plexus.util.IOUtil;
<a class="jxr_linenumber" name="L68" href="#L68">68</a> <strong class="jxr_keyword">import</strong> org.codehaus.plexus.util.StringUtils;
<a class="jxr_linenumber" name="L69" href="#L69">69</a> <strong class="jxr_keyword">import</strong> org.codehaus.plexus.util.io.InputStreamFacade;
<a class="jxr_linenumber" name="L70" href="#L70">70</a> <strong class="jxr_keyword">import</strong> org.netbeans.nbbuild.MakeListOfNBM;
<a class="jxr_linenumber" name="L71" href="#L71">71</a>
<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L73" href="#L73">73</a> <em class="jxr_javadoccomment"> * Create the NetBeans module clusters/application for the 'nbm-application' packaging</em>
<a class="jxr_linenumber" name="L74" href="#L74">74</a> <em class="jxr_javadoccomment"> * projects</em>
<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment"> *</em>
<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * @author &lt;a href="<a href="mailto:mkleint@codehaus.org" target="alexandria_uri">mailto:mkleint@codehaus.org</a>"&gt;Milos Kleint&lt;/a&gt;</em>
<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L78" href="#L78">78</a> @Mojo(name=<span class="jxr_string">"cluster-app"</span>,
<a class="jxr_linenumber" name="L79" href="#L79">79</a> defaultPhase= LifecyclePhase.PACKAGE,
<a class="jxr_linenumber" name="L80" href="#L80">80</a> requiresProject=<strong class="jxr_keyword">true</strong>,
<a class="jxr_linenumber" name="L81" href="#L81">81</a> threadSafe = <strong class="jxr_keyword">true</strong>,
<a class="jxr_linenumber" name="L82" href="#L82">82</a> requiresDependencyResolution= ResolutionScope.RUNTIME )
<a class="jxr_linenumber" name="L83" href="#L83">83</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="CreateClusterAppMojo" href="../../../org/netbeans/nbm/CreateClusterAppMojo.html#CreateClusterAppMojo">CreateClusterAppMojo</a>
<a class="jxr_linenumber" name="L84" href="#L84">84</a> <strong class="jxr_keyword">extends</strong> <a name="AbstractNbmMojo" href="../../../org/netbeans/nbm/AbstractNbmMojo.html#AbstractNbmMojo">AbstractNbmMojo</a>
<a class="jxr_linenumber" name="L85" href="#L85">85</a> {
<a class="jxr_linenumber" name="L86" href="#L86">86</a>
<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> * output directory where the the NetBeans application will be created.</em>
<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L90" href="#L90">90</a> @Parameter(defaultValue=<span class="jxr_string">"${project.build.directory}"</span>, required=<strong class="jxr_keyword">true</strong>)
<a class="jxr_linenumber" name="L91" href="#L91">91</a> <strong class="jxr_keyword">private</strong> File outputDirectory;
<a class="jxr_linenumber" name="L92" href="#L92">92</a>
<a class="jxr_linenumber" name="L93" href="#L93">93</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L94" href="#L94">94</a> <em class="jxr_javadoccomment"> * The Maven Project.</em>
<a class="jxr_linenumber" name="L95" href="#L95">95</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L96" href="#L96">96</a> @Parameter(required=<strong class="jxr_keyword">true</strong>, readonly=<strong class="jxr_keyword">true</strong>, property=<span class="jxr_string">"project"</span>)
<a class="jxr_linenumber" name="L97" href="#L97">97</a> <strong class="jxr_keyword">private</strong> MavenProject project;
<a class="jxr_linenumber" name="L98" href="#L98">98</a>
<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> * The branding token for the application based on NetBeans platform.</em>
<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L102" href="#L102">102</a> @Parameter(property=<span class="jxr_string">"netbeans.branding.token"</span>, required=<strong class="jxr_keyword">true</strong>)
<a class="jxr_linenumber" name="L103" href="#L103">103</a> <strong class="jxr_keyword">protected</strong> String brandingToken;
<a class="jxr_linenumber" name="L104" href="#L104">104</a>
<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> * Optional path to custom etc/${brandingToken}.conf file. If not defined,</em>
<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * a default template will be used.</em>
<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L109" href="#L109">109</a> @Parameter( property=<span class="jxr_string">"netbeans.conf.file"</span>)
<a class="jxr_linenumber" name="L110" href="#L110">110</a> <strong class="jxr_keyword">private</strong> File etcConfFile;
<a class="jxr_linenumber" name="L111" href="#L111">111</a>
<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * Optional path to custom etc/${brandingToken}.clusters file. If not defined,</em>
<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> * a default one will be generated.</em>
<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L116" href="#L116">116</a> @Parameter(property=<span class="jxr_string">"netbeans.clusters.file"</span>)
<a class="jxr_linenumber" name="L117" href="#L117">117</a> <strong class="jxr_keyword">private</strong> File etcClustersFile;
<a class="jxr_linenumber" name="L118" href="#L118">118</a>
<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> * Directory which contains the executables that will be copied to</em>
<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment"> * the final application's bin/ directory.</em>
<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> * Please note that the name of the executables shall generally</em>
<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment"> * match the brandingToken parameter. Otherwise the application can be wrongly branded.</em>
<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L125" href="#L125">125</a> @Parameter(property=<span class="jxr_string">"netbeans.bin.directory"</span>)
<a class="jxr_linenumber" name="L126" href="#L126">126</a> <strong class="jxr_keyword">private</strong> File binDirectory;
<a class="jxr_linenumber" name="L127" href="#L127">127</a>
<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment"> * If the depending NBM file doesn't contain any application cluster information,</em>
<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment"> * use this value as default location for such module NBMs.</em>
<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment"> * @since 3.2</em>
<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L133" href="#L133">133</a> @Parameter(defaultValue=<span class="jxr_string">"extra"</span>)
<a class="jxr_linenumber" name="L134" href="#L134">134</a> <strong class="jxr_keyword">private</strong> String defaultCluster;
<a class="jxr_linenumber" name="L135" href="#L135">135</a>
<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment"> * attempts to verify the integrity of module artifacts making sure that all dependencies are included</em>
<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment"> * and that all required tokens are provided</em>
<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment"> * @since 3.10</em>
<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L141" href="#L141">141</a> @Parameter(defaultValue = <span class="jxr_string">"true"</span>, property = <span class="jxr_string">"netbeans.verify.integrity"</span>)
<a class="jxr_linenumber" name="L142" href="#L142">142</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> verifyIntegrity;
<a class="jxr_linenumber" name="L143" href="#L143">143</a>
<a class="jxr_linenumber" name="L144" href="#L144">144</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Collection&lt;String&gt; defaultPlatformTokens = Arrays.asList( <strong class="jxr_keyword">new</strong> String[] {
<a class="jxr_linenumber" name="L145" href="#L145">145</a> <span class="jxr_string">"org.openide.modules.os.Windows"</span>,
<a class="jxr_linenumber" name="L146" href="#L146">146</a> <span class="jxr_string">"org.openide.modules.os.Unix"</span>,
<a class="jxr_linenumber" name="L147" href="#L147">147</a> <span class="jxr_string">"org.openide.modules.os.MacOSX"</span>,
<a class="jxr_linenumber" name="L148" href="#L148">148</a> <span class="jxr_string">"org.openide.modules.os.OS2"</span>,
<a class="jxr_linenumber" name="L149" href="#L149">149</a> <span class="jxr_string">"org.openide.modules.os.PlainUnix"</span>,
<a class="jxr_linenumber" name="L150" href="#L150">150</a> <span class="jxr_string">"org.openide.modules.os.Linux"</span>,
<a class="jxr_linenumber" name="L151" href="#L151">151</a> <span class="jxr_string">"org.openide.modules.os.Solaris"</span>,
<a class="jxr_linenumber" name="L152" href="#L152">152</a> <span class="jxr_string">"org.openide.modules.ModuleFormat1"</span>,
<a class="jxr_linenumber" name="L153" href="#L153">153</a> <span class="jxr_string">"org.openide.modules.ModuleFormat2"</span>,
<a class="jxr_linenumber" name="L154" href="#L154">154</a> <span class="jxr_string">"org.openide.modules.jre.JavaFX"</span> <em class="jxr_comment">//MNBMODULE-234</em>
<a class="jxr_linenumber" name="L155" href="#L155">155</a> });
<a class="jxr_linenumber" name="L156" href="#L156">156</a>
<a class="jxr_linenumber" name="L157" href="#L157">157</a>
<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_comment">// &lt;editor-fold defaultstate="collapsed" desc="Component parameters"&gt;</em>
<a class="jxr_linenumber" name="L159" href="#L159">159</a>
<a class="jxr_linenumber" name="L160" href="#L160">160</a> @Component
<a class="jxr_linenumber" name="L161" href="#L161">161</a> <strong class="jxr_keyword">private</strong> ArtifactFactory artifactFactory;
<a class="jxr_linenumber" name="L162" href="#L162">162</a>
<a class="jxr_linenumber" name="L163" href="#L163">163</a> @Component
<a class="jxr_linenumber" name="L164" href="#L164">164</a> <strong class="jxr_keyword">private</strong> ArtifactResolver artifactResolver;
<a class="jxr_linenumber" name="L165" href="#L165">165</a>
<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * Local maven repository.</em>
<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> *</em>
<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L170" href="#L170">170</a> @Parameter(required=<strong class="jxr_keyword">true</strong>, readonly=<strong class="jxr_keyword">true</strong>, property=<span class="jxr_string">"localRepository"</span>)
<a class="jxr_linenumber" name="L171" href="#L171">171</a> <strong class="jxr_keyword">protected</strong> ArtifactRepository localRepository;
<a class="jxr_linenumber" name="L172" href="#L172">172</a>
<a class="jxr_linenumber" name="L173" href="#L173">173</a> <em class="jxr_comment">// end of component params custom code folding</em>
<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_comment">// &lt;/editor-fold&gt;</em>
<a class="jxr_linenumber" name="L175" href="#L175">175</a>
<a class="jxr_linenumber" name="L176" href="#L176">176</a> @Override
<a class="jxr_linenumber" name="L177" href="#L177">177</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> execute()
<a class="jxr_linenumber" name="L178" href="#L178">178</a> <strong class="jxr_keyword">throws</strong> MojoExecutionException, MojoFailureException
<a class="jxr_linenumber" name="L179" href="#L179">179</a> {
<a class="jxr_linenumber" name="L180" href="#L180">180</a>
<a class="jxr_linenumber" name="L181" href="#L181">181</a> File nbmBuildDirFile = <strong class="jxr_keyword">new</strong> File( outputDirectory, brandingToken );
<a class="jxr_linenumber" name="L182" href="#L182">182</a> <strong class="jxr_keyword">if</strong> ( !nbmBuildDirFile.exists() )
<a class="jxr_linenumber" name="L183" href="#L183">183</a> {
<a class="jxr_linenumber" name="L184" href="#L184">184</a> nbmBuildDirFile.mkdirs();
<a class="jxr_linenumber" name="L185" href="#L185">185</a> }
<a class="jxr_linenumber" name="L186" href="#L186">186</a>
<a class="jxr_linenumber" name="L187" href="#L187">187</a> <strong class="jxr_keyword">if</strong> ( <span class="jxr_string">"nbm-application"</span>.equals( project.getPackaging() ) )
<a class="jxr_linenumber" name="L188" href="#L188">188</a> {
<a class="jxr_linenumber" name="L189" href="#L189">189</a> Project antProject = registerNbmAntTasks();
<a class="jxr_linenumber" name="L190" href="#L190">190</a>
<a class="jxr_linenumber" name="L191" href="#L191">191</a> Set&lt;String&gt; wrappedBundleCNBs = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(100);
<a class="jxr_linenumber" name="L192" href="#L192">192</a> Map&lt;String, Set&lt;String&gt;&gt; clusterDependencies = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
<a class="jxr_linenumber" name="L193" href="#L193">193</a> Map&lt;String, Set&lt;String&gt;&gt; clusterModules = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
<a class="jxr_linenumber" name="L194" href="#L194">194</a>
<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_comment">//verify integrity</em>
<a class="jxr_linenumber" name="L196" href="#L196">196</a> Set&lt;String&gt; modulesCNBs = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(200);
<a class="jxr_linenumber" name="L197" href="#L197">197</a> Set&lt;String&gt; dependencyCNBs = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(200);
<a class="jxr_linenumber" name="L198" href="#L198">198</a> Map&lt;String, Set&lt;String&gt;&gt; dependencyCNBBacktraces = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;(50);
<a class="jxr_linenumber" name="L199" href="#L199">199</a> Set&lt;String&gt; requireTokens = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(50);
<a class="jxr_linenumber" name="L200" href="#L200">200</a> Map&lt;String, Set&lt;String&gt;&gt; requireTokensBacktraces = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;(50);
<a class="jxr_linenumber" name="L201" href="#L201">201</a> Set&lt;String&gt; provideTokens = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(50);
<a class="jxr_linenumber" name="L202" href="#L202">202</a> Set&lt;String&gt; osgiImports = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(50);
<a class="jxr_linenumber" name="L203" href="#L203">203</a> Map&lt;String, Set&lt;String&gt;&gt; osgiImportsBacktraces = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;(50);
<a class="jxr_linenumber" name="L204" href="#L204">204</a> Set&lt;String&gt; osgiExports = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(50);
<a class="jxr_linenumber" name="L205" href="#L205">205</a> Set&lt;String&gt; osgiExportsSubs = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;(50); <em class="jxr_comment">//a way to deal with nb module declaring xxx.** (subpackages) declaration that is consumed by osgi imports</em>
<a class="jxr_linenumber" name="L206" href="#L206">206</a>
<a class="jxr_linenumber" name="L207" href="#L207">207</a> List&lt;BundleTuple&gt; bundles = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
<a class="jxr_linenumber" name="L208" href="#L208">208</a>
<a class="jxr_linenumber" name="L209" href="#L209">209</a> @SuppressWarnings( <span class="jxr_string">"unchecked"</span> )
<a class="jxr_linenumber" name="L210" href="#L210">210</a> Set&lt;Artifact&gt; artifacts = project.getArtifacts();
<a class="jxr_linenumber" name="L211" href="#L211">211</a> <strong class="jxr_keyword">for</strong> ( Artifact art : artifacts )
<a class="jxr_linenumber" name="L212" href="#L212">212</a> {
<a class="jxr_linenumber" name="L213" href="#L213">213</a> ArtifactResult res = turnJarToNbmFile( art, artifactFactory, artifactResolver, project, localRepository );
<a class="jxr_linenumber" name="L214" href="#L214">214</a> <strong class="jxr_keyword">if</strong> ( res.hasConvertedArtifact() )
<a class="jxr_linenumber" name="L215" href="#L215">215</a> {
<a class="jxr_linenumber" name="L216" href="#L216">216</a> art = res.getConvertedArtifact();
<a class="jxr_linenumber" name="L217" href="#L217">217</a> }
<a class="jxr_linenumber" name="L218" href="#L218">218</a>
<a class="jxr_linenumber" name="L219" href="#L219">219</a> <strong class="jxr_keyword">if</strong> ( art.getType().equals( <span class="jxr_string">"nbm-file"</span> ) )
<a class="jxr_linenumber" name="L220" href="#L220">220</a> {
<a class="jxr_linenumber" name="L221" href="#L221">221</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L222" href="#L222">222</a> {
<a class="jxr_linenumber" name="L223" href="#L223">223</a> JarFile jf = <strong class="jxr_keyword">new</strong> JarFile( art.getFile() );
<a class="jxr_linenumber" name="L224" href="#L224">224</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L225" href="#L225">225</a> {
<a class="jxr_linenumber" name="L226" href="#L226">226</a> String clusterName = findCluster( jf );
<a class="jxr_linenumber" name="L227" href="#L227">227</a> ClusterTuple cluster = processCluster( clusterName, nbmBuildDirFile, art );
<a class="jxr_linenumber" name="L228" href="#L228">228</a>
<a class="jxr_linenumber" name="L229" href="#L229">229</a> getLog().debug( <span class="jxr_string">"Copying "</span> + art.getId() + <span class="jxr_string">" to cluster "</span> + clusterName );
<a class="jxr_linenumber" name="L230" href="#L230">230</a> Enumeration&lt;JarEntry&gt; enu = jf.entries();
<a class="jxr_linenumber" name="L231" href="#L231">231</a>
<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_comment">// we need to trigger this ant task to generate the update_tracking file.</em>
<a class="jxr_linenumber" name="L233" href="#L233">233</a> MakeListOfNBM makeTask = (MakeListOfNBM) antProject.createTask( <span class="jxr_string">"genlist"</span> );
<a class="jxr_linenumber" name="L234" href="#L234">234</a> antProject.setNewProperty( <span class="jxr_string">"module.name"</span>, art.getFile().getName() ); <em class="jxr_comment">// TODO</em>
<a class="jxr_linenumber" name="L235" href="#L235">235</a> antProject.setProperty( <span class="jxr_string">"cluster.dir"</span>, clusterName );
<a class="jxr_linenumber" name="L236" href="#L236">236</a> FileSet set = makeTask.createFileSet();
<a class="jxr_linenumber" name="L237" href="#L237">237</a> set.setDir( cluster.location );
<a class="jxr_linenumber" name="L238" href="#L238">238</a> makeTask.setOutputfiledir( cluster.location );
<a class="jxr_linenumber" name="L239" href="#L239">239</a> String[] executables = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L240" href="#L240">240</a> File classpathRoot = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L241" href="#L241">241</a> String classPath = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L242" href="#L242">242</a> <strong class="jxr_keyword">while</strong> ( enu.hasMoreElements() )
<a class="jxr_linenumber" name="L243" href="#L243">243</a> {
<a class="jxr_linenumber" name="L244" href="#L244">244</a> JarEntry ent = enu.nextElement();
<a class="jxr_linenumber" name="L245" href="#L245">245</a> String name = ent.getName();
<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_comment">//MNBMODULE-176</em>
<a class="jxr_linenumber" name="L247" href="#L247">247</a> <strong class="jxr_keyword">if</strong> (name.equals(<span class="jxr_string">"Info/executables.list"</span>)) {
<a class="jxr_linenumber" name="L248" href="#L248">248</a> <strong class="jxr_keyword">if</strong> (cluster.newer) {
<a class="jxr_linenumber" name="L249" href="#L249">249</a> InputStream is = jf.getInputStream( ent );
<a class="jxr_linenumber" name="L250" href="#L250">250</a> executables = StringUtils.split( IOUtil.toString( is, <span class="jxr_string">"UTF-8"</span> ), <span class="jxr_string">"\n"</span>);
<a class="jxr_linenumber" name="L251" href="#L251">251</a> }
<a class="jxr_linenumber" name="L252" href="#L252">252</a> }
<a class="jxr_linenumber" name="L253" href="#L253">253</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( name.startsWith( <span class="jxr_string">"netbeans/"</span> ) )
<a class="jxr_linenumber" name="L254" href="#L254">254</a> { <em class="jxr_comment">// ignore everything else.</em>
<a class="jxr_linenumber" name="L255" href="#L255">255</a> String path = clusterName + name.substring( <span class="jxr_string">"netbeans"</span>.length() );
<a class="jxr_linenumber" name="L256" href="#L256">256</a> <strong class="jxr_keyword">boolean</strong> ispack200 = path.endsWith( <span class="jxr_string">".jar.pack.gz"</span> );
<a class="jxr_linenumber" name="L257" href="#L257">257</a> <strong class="jxr_keyword">if</strong> ( ispack200 )
<a class="jxr_linenumber" name="L258" href="#L258">258</a> {
<a class="jxr_linenumber" name="L259" href="#L259">259</a> path = path.replace( <span class="jxr_string">".jar.pack.gz"</span>, <span class="jxr_string">".jar"</span> );
<a class="jxr_linenumber" name="L260" href="#L260">260</a> }
<a class="jxr_linenumber" name="L261" href="#L261">261</a> File fl = <strong class="jxr_keyword">new</strong> File( nbmBuildDirFile, path.replace( <span class="jxr_string">"/"</span>, File.separator ) );
<a class="jxr_linenumber" name="L262" href="#L262">262</a> String part = name.substring( <span class="jxr_string">"netbeans/"</span>.length() );
<a class="jxr_linenumber" name="L263" href="#L263">263</a> <strong class="jxr_keyword">if</strong> ( ispack200 )
<a class="jxr_linenumber" name="L264" href="#L264">264</a> {
<a class="jxr_linenumber" name="L265" href="#L265">265</a> part = part.replace( <span class="jxr_string">".jar.pack.gz"</span>, <span class="jxr_string">".jar"</span> );
<a class="jxr_linenumber" name="L266" href="#L266">266</a> }
<a class="jxr_linenumber" name="L267" href="#L267">267</a> <strong class="jxr_keyword">if</strong> (cluster.newer)
<a class="jxr_linenumber" name="L268" href="#L268">268</a> {
<a class="jxr_linenumber" name="L269" href="#L269">269</a> <strong class="jxr_keyword">if</strong> ( ent.isDirectory() )
<a class="jxr_linenumber" name="L270" href="#L270">270</a> {
<a class="jxr_linenumber" name="L271" href="#L271">271</a> fl.mkdirs();
<a class="jxr_linenumber" name="L272" href="#L272">272</a> }
<a class="jxr_linenumber" name="L273" href="#L273">273</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( path.endsWith( <span class="jxr_string">".external"</span> ) ) <em class="jxr_comment">// MNBMODULE-138</em>
<a class="jxr_linenumber" name="L274" href="#L274">274</a> {
<a class="jxr_linenumber" name="L275" href="#L275">275</a> InputStream is = jf.getInputStream( ent );
<a class="jxr_linenumber" name="L276" href="#L276">276</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L277" href="#L277">277</a> {
<a class="jxr_linenumber" name="L278" href="#L278">278</a> externalDownload( <strong class="jxr_keyword">new</strong> File( fl.getParentFile(),
<a class="jxr_linenumber" name="L279" href="#L279">279</a> fl.getName().replaceFirst( <span class="jxr_string">"[.]external$"</span>,
<a class="jxr_linenumber" name="L280" href="#L280">280</a> <span class="jxr_string">""</span> ) ), is );
<a class="jxr_linenumber" name="L281" href="#L281">281</a> }
<a class="jxr_linenumber" name="L282" href="#L282">282</a> <strong class="jxr_keyword">finally</strong>
<a class="jxr_linenumber" name="L283" href="#L283">283</a> {
<a class="jxr_linenumber" name="L284" href="#L284">284</a> is.close();
<a class="jxr_linenumber" name="L285" href="#L285">285</a> }
<a class="jxr_linenumber" name="L286" href="#L286">286</a> <em class="jxr_comment">//MNBMODULE-192</em>
<a class="jxr_linenumber" name="L287" href="#L287">287</a> set.appendIncludes( <strong class="jxr_keyword">new</strong> String[] { name.substring( <span class="jxr_string">"netbeans/"</span>.length(), name.length() - <span class="jxr_string">".external"</span>.length() ) } );
<a class="jxr_linenumber" name="L288" href="#L288">288</a> }
<a class="jxr_linenumber" name="L289" href="#L289">289</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L290" href="#L290">290</a> {
<a class="jxr_linenumber" name="L291" href="#L291">291</a> set.appendIncludes( <strong class="jxr_keyword">new</strong> String[] { part } );
<a class="jxr_linenumber" name="L292" href="#L292">292</a>
<a class="jxr_linenumber" name="L293" href="#L293">293</a> fl.getParentFile().mkdirs();
<a class="jxr_linenumber" name="L294" href="#L294">294</a> fl.createNewFile();
<a class="jxr_linenumber" name="L295" href="#L295">295</a> BufferedOutputStream outstream = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L296" href="#L296">296</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L297" href="#L297">297</a> {
<a class="jxr_linenumber" name="L298" href="#L298">298</a> outstream = <strong class="jxr_keyword">new</strong> BufferedOutputStream( <strong class="jxr_keyword">new</strong> FileOutputStream( fl ) );
<a class="jxr_linenumber" name="L299" href="#L299">299</a> InputStream instream = jf.getInputStream( ent );
<a class="jxr_linenumber" name="L300" href="#L300">300</a> <strong class="jxr_keyword">if</strong> ( ispack200 )
<a class="jxr_linenumber" name="L301" href="#L301">301</a> {
<a class="jxr_linenumber" name="L302" href="#L302">302</a> Pack200.Unpacker unp = Pack200.newUnpacker();
<a class="jxr_linenumber" name="L303" href="#L303">303</a> JarOutputStream jos = <strong class="jxr_keyword">new</strong> JarOutputStream( outstream );
<a class="jxr_linenumber" name="L304" href="#L304">304</a> GZIPInputStream gzip = <strong class="jxr_keyword">new</strong> GZIPInputStream( instream );
<a class="jxr_linenumber" name="L305" href="#L305">305</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L306" href="#L306">306</a> {
<a class="jxr_linenumber" name="L307" href="#L307">307</a> unp.unpack( gzip, jos );
<a class="jxr_linenumber" name="L308" href="#L308">308</a> }
<a class="jxr_linenumber" name="L309" href="#L309">309</a> <strong class="jxr_keyword">finally</strong>
<a class="jxr_linenumber" name="L310" href="#L310">310</a> {
<a class="jxr_linenumber" name="L311" href="#L311">311</a> jos.close();
<a class="jxr_linenumber" name="L312" href="#L312">312</a> }
<a class="jxr_linenumber" name="L313" href="#L313">313</a> }
<a class="jxr_linenumber" name="L314" href="#L314">314</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L315" href="#L315">315</a> {
<a class="jxr_linenumber" name="L316" href="#L316">316</a> IOUtil.copy( instream, outstream );
<a class="jxr_linenumber" name="L317" href="#L317">317</a> }
<a class="jxr_linenumber" name="L318" href="#L318">318</a> }
<a class="jxr_linenumber" name="L319" href="#L319">319</a> <strong class="jxr_keyword">finally</strong>
<a class="jxr_linenumber" name="L320" href="#L320">320</a> {
<a class="jxr_linenumber" name="L321" href="#L321">321</a> IOUtil.close( outstream );
<a class="jxr_linenumber" name="L322" href="#L322">322</a> }
<a class="jxr_linenumber" name="L323" href="#L323">323</a> }
<a class="jxr_linenumber" name="L324" href="#L324">324</a> }
<a class="jxr_linenumber" name="L325" href="#L325">325</a>
<a class="jxr_linenumber" name="L326" href="#L326">326</a> <em class="jxr_comment">//TODO examine netbeans/config/Modules to see if the module is autoload/eager</em>
<a class="jxr_linenumber" name="L327" href="#L327">327</a> <em class="jxr_comment">// in verifyIntegrity these could be handled more gracefully than regular modules.</em>
<a class="jxr_linenumber" name="L328" href="#L328">328</a> <em class="jxr_comment">//eager is simpler, does not need to have module dependencies satisfied.</em>
<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_comment">//autoload needs checking if any of the other modules declares a dependency on it. if not, also safe to ignore?</em>
<a class="jxr_linenumber" name="L330" href="#L330">330</a>
<a class="jxr_linenumber" name="L331" href="#L331">331</a>
<a class="jxr_linenumber" name="L332" href="#L332">332</a> <em class="jxr_comment">// now figure which one of the jars is the module jar..</em>
<a class="jxr_linenumber" name="L333" href="#L333">333</a> <strong class="jxr_keyword">if</strong> ( part.matches(<span class="jxr_string">"(modules|core|lib)/[^/]+[.]jar"</span>) )
<a class="jxr_linenumber" name="L334" href="#L334">334</a> {
<a class="jxr_linenumber" name="L335" href="#L335">335</a> ExamineManifest ex = <strong class="jxr_keyword">new</strong> ExamineManifest( getLog() );
<a class="jxr_linenumber" name="L336" href="#L336">336</a> ex.setJarFile( fl );
<a class="jxr_linenumber" name="L337" href="#L337">337</a> ex.setPopulateDependencies( <strong class="jxr_keyword">true</strong> );
<a class="jxr_linenumber" name="L338" href="#L338">338</a> ex.checkFile();
<a class="jxr_linenumber" name="L339" href="#L339">339</a> <strong class="jxr_keyword">if</strong> ( ex.isNetBeansModule() )
<a class="jxr_linenumber" name="L340" href="#L340">340</a> {
<a class="jxr_linenumber" name="L341" href="#L341">341</a> makeTask.setModule( part );
<a class="jxr_linenumber" name="L342" href="#L342">342</a> addToMap(clusterDependencies, clusterName, ex.getDependencyTokens());
<a class="jxr_linenumber" name="L343" href="#L343">343</a> addToMap(clusterModules, clusterName, Collections.singletonList( ex.getModule() ));
<a class="jxr_linenumber" name="L344" href="#L344">344</a> <strong class="jxr_keyword">if</strong> (ex.getClasspath().length() &gt; 0) { <em class="jxr_comment">//MNBMODULE-220</em>
<a class="jxr_linenumber" name="L345" href="#L345">345</a> classPath = ex.getClasspath();
<a class="jxr_linenumber" name="L346" href="#L346">346</a> classpathRoot = fl.getParentFile();
<a class="jxr_linenumber" name="L347" href="#L347">347</a> }
<a class="jxr_linenumber" name="L348" href="#L348">348</a> }
<a class="jxr_linenumber" name="L349" href="#L349">349</a> <strong class="jxr_keyword">if</strong> (verifyIntegrity) {
<a class="jxr_linenumber" name="L350" href="#L350">350</a> dependencyCNBs.addAll(ex.getDependencyTokens());
<a class="jxr_linenumber" name="L351" href="#L351">351</a> modulesCNBs.add(ex.getModule());
<a class="jxr_linenumber" name="L352" href="#L352">352</a> <strong class="jxr_keyword">for</strong> (String d : ex.getDependencyTokens()) {
<a class="jxr_linenumber" name="L353" href="#L353">353</a> addToMap(dependencyCNBBacktraces, d, Collections.singletonList( ex.getModule() ));
<a class="jxr_linenumber" name="L354" href="#L354">354</a> }
<a class="jxr_linenumber" name="L355" href="#L355">355</a> <strong class="jxr_keyword">if</strong> (ex.isNetBeansModule()) {
<a class="jxr_linenumber" name="L356" href="#L356">356</a> requireTokens.addAll(ex.getNetBeansRequiresTokens());
<a class="jxr_linenumber" name="L357" href="#L357">357</a> <strong class="jxr_keyword">for</strong> (String r : ex.getNetBeansRequiresTokens()) {
<a class="jxr_linenumber" name="L358" href="#L358">358</a> addToMap( requireTokensBacktraces, r, Collections.singletonList( ex.getModule()));
<a class="jxr_linenumber" name="L359" href="#L359">359</a> }
<a class="jxr_linenumber" name="L360" href="#L360">360</a> provideTokens.addAll(ex.getNetBeansProvidesTokens());
<a class="jxr_linenumber" name="L361" href="#L361">361</a> <strong class="jxr_keyword">for</strong> (String pack : ex.getPackages()) {
<a class="jxr_linenumber" name="L362" href="#L362">362</a> <strong class="jxr_keyword">if</strong> (pack.endsWith( <span class="jxr_string">".**"</span>)) {
<a class="jxr_linenumber" name="L363" href="#L363">363</a> <em class="jxr_comment">//what to do with subpackages?</em>
<a class="jxr_linenumber" name="L364" href="#L364">364</a> pack = pack.substring( 0, pack.length() - <span class="jxr_string">".**"</span>.length());
<a class="jxr_linenumber" name="L365" href="#L365">365</a> osgiExportsSubs.add( pack );
<a class="jxr_linenumber" name="L366" href="#L366">366</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (pack.endsWith( <span class="jxr_string">".*"</span>)) {
<a class="jxr_linenumber" name="L367" href="#L367">367</a> pack = pack.substring( 0, pack.length() - <span class="jxr_string">".*"</span>.length());
<a class="jxr_linenumber" name="L368" href="#L368">368</a> osgiExports.add(pack);
<a class="jxr_linenumber" name="L369" href="#L369">369</a> }
<a class="jxr_linenumber" name="L370" href="#L370">370</a> }
<a class="jxr_linenumber" name="L371" href="#L371">371</a>
<a class="jxr_linenumber" name="L372" href="#L372">372</a> }
<a class="jxr_linenumber" name="L373" href="#L373">373</a> }
<a class="jxr_linenumber" name="L374" href="#L374">374</a> }
<a class="jxr_linenumber" name="L375" href="#L375">375</a> }
<a class="jxr_linenumber" name="L376" href="#L376">376</a> }
<a class="jxr_linenumber" name="L377" href="#L377">377</a> <strong class="jxr_keyword">if</strong> (classPath != <strong class="jxr_keyword">null</strong>) { <em class="jxr_comment">//MNBMODULE-220 collect wrappedbundleCNBs, later useful in assignClustersToBundles(), these get removed from list of bundles.</em>
<a class="jxr_linenumber" name="L378" href="#L378">378</a> String[] paths = StringUtils.split( classPath, <span class="jxr_string">" "</span>);
<a class="jxr_linenumber" name="L379" href="#L379">379</a> <strong class="jxr_keyword">for</strong> (String path : paths) {
<a class="jxr_linenumber" name="L380" href="#L380">380</a> path = path.trim();
<a class="jxr_linenumber" name="L381" href="#L381">381</a> File classpathFile = <strong class="jxr_keyword">new</strong> File(classpathRoot, path);
<a class="jxr_linenumber" name="L382" href="#L382">382</a> <strong class="jxr_keyword">if</strong> (path.equals(<span class="jxr_string">"${java.home}/lib/ext/jfxrt.jar"</span>)) { <em class="jxr_comment">//MNBMODULE-228</em>
<a class="jxr_linenumber" name="L383" href="#L383">383</a> String jhm = System.getProperty(<span class="jxr_string">"java.home"</span>);
<a class="jxr_linenumber" name="L384" href="#L384">384</a> classpathFile = <strong class="jxr_keyword">new</strong> File(<strong class="jxr_keyword">new</strong> File(<strong class="jxr_keyword">new</strong> File(<strong class="jxr_keyword">new</strong> File(jhm), <span class="jxr_string">"lib"</span>), <span class="jxr_string">"ext"</span>), <span class="jxr_string">"jfxrt.jar"</span>);
<a class="jxr_linenumber" name="L385" href="#L385">385</a> <strong class="jxr_keyword">if</strong> (!classpathFile.exists()) {
<a class="jxr_linenumber" name="L386" href="#L386">386</a> File jdk7 = <strong class="jxr_keyword">new</strong> File(<strong class="jxr_keyword">new</strong> File(<strong class="jxr_keyword">new</strong> File(jhm), <span class="jxr_string">"lib"</span>), <span class="jxr_string">"jfxrt.jar"</span>);
<a class="jxr_linenumber" name="L387" href="#L387">387</a> <strong class="jxr_keyword">if</strong> (jdk7.exists()) {
<a class="jxr_linenumber" name="L388" href="#L388">388</a> classpathFile = jdk7;
<a class="jxr_linenumber" name="L389" href="#L389">389</a> }
<a class="jxr_linenumber" name="L390" href="#L390">390</a> }
<a class="jxr_linenumber" name="L391" href="#L391">391</a> }
<a class="jxr_linenumber" name="L392" href="#L392">392</a> <strong class="jxr_keyword">if</strong> (!classpathFile.isFile()) {
<a class="jxr_linenumber" name="L393" href="#L393">393</a> getLog().warn( <span class="jxr_string">"Could not resolve Class-Path item in "</span> + art.getId() + <span class="jxr_string">", path is:"</span> + path + <span class="jxr_string">", skipping"</span>);
<a class="jxr_linenumber" name="L394" href="#L394">394</a> <strong class="jxr_keyword">continue</strong>; <em class="jxr_comment">//try to guard against future failures</em>
<a class="jxr_linenumber" name="L395" href="#L395">395</a> }
<a class="jxr_linenumber" name="L396" href="#L396">396</a> ExamineManifest ex = <strong class="jxr_keyword">new</strong> ExamineManifest( getLog() );
<a class="jxr_linenumber" name="L397" href="#L397">397</a> ex.setJarFile( classpathFile );
<a class="jxr_linenumber" name="L398" href="#L398">398</a> <em class="jxr_comment">//ex.setPopulateDependencies( true );</em>
<a class="jxr_linenumber" name="L399" href="#L399">399</a> ex.checkFile();
<a class="jxr_linenumber" name="L400" href="#L400">400</a> <strong class="jxr_keyword">if</strong> (ex.isOsgiBundle()) {
<a class="jxr_linenumber" name="L401" href="#L401">401</a> wrappedBundleCNBs.add( ex.getModule() );
<a class="jxr_linenumber" name="L402" href="#L402">402</a> }
<a class="jxr_linenumber" name="L403" href="#L403">403</a> }
<a class="jxr_linenumber" name="L404" href="#L404">404</a> }
<a class="jxr_linenumber" name="L405" href="#L405">405</a> <strong class="jxr_keyword">if</strong> ( cluster.newer )
<a class="jxr_linenumber" name="L406" href="#L406">406</a> {
<a class="jxr_linenumber" name="L407" href="#L407">407</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L408" href="#L408">408</a> {
<a class="jxr_linenumber" name="L409" href="#L409">409</a> makeTask.execute();
<a class="jxr_linenumber" name="L410" href="#L410">410</a> }
<a class="jxr_linenumber" name="L411" href="#L411">411</a> <strong class="jxr_keyword">catch</strong> ( BuildException e )
<a class="jxr_linenumber" name="L412" href="#L412">412</a> {
<a class="jxr_linenumber" name="L413" href="#L413">413</a> getLog().error( <span class="jxr_string">"Cannot Generate update_tracking XML file from "</span> + art.getFile() );
<a class="jxr_linenumber" name="L414" href="#L414">414</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException( e.getMessage(), e );
<a class="jxr_linenumber" name="L415" href="#L415">415</a> }
<a class="jxr_linenumber" name="L416" href="#L416">416</a>
<a class="jxr_linenumber" name="L417" href="#L417">417</a> <strong class="jxr_keyword">if</strong> ( executables != <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L418" href="#L418">418</a> {
<a class="jxr_linenumber" name="L419" href="#L419">419</a> <em class="jxr_comment">//MNBMODULE-176</em>
<a class="jxr_linenumber" name="L420" href="#L420">420</a> <strong class="jxr_keyword">for</strong> ( String exec : executables )
<a class="jxr_linenumber" name="L421" href="#L421">421</a> {
<a class="jxr_linenumber" name="L422" href="#L422">422</a> exec = exec.replace( <span class="jxr_string">"/"</span>, File.separator );
<a class="jxr_linenumber" name="L423" href="#L423">423</a> File execFile = <strong class="jxr_keyword">new</strong> File( cluster.location, exec );
<a class="jxr_linenumber" name="L424" href="#L424">424</a> <strong class="jxr_keyword">if</strong> ( execFile.exists() )
<a class="jxr_linenumber" name="L425" href="#L425">425</a> {
<a class="jxr_linenumber" name="L426" href="#L426">426</a> execFile.setExecutable( <strong class="jxr_keyword">true</strong>, false );
<a class="jxr_linenumber" name="L427" href="#L427">427</a> }
<a class="jxr_linenumber" name="L428" href="#L428">428</a> }
<a class="jxr_linenumber" name="L429" href="#L429">429</a> }
<a class="jxr_linenumber" name="L430" href="#L430">430</a> }
<a class="jxr_linenumber" name="L431" href="#L431">431</a>
<a class="jxr_linenumber" name="L432" href="#L432">432</a> }
<a class="jxr_linenumber" name="L433" href="#L433">433</a> <strong class="jxr_keyword">finally</strong>
<a class="jxr_linenumber" name="L434" href="#L434">434</a> {
<a class="jxr_linenumber" name="L435" href="#L435">435</a> jf.close();
<a class="jxr_linenumber" name="L436" href="#L436">436</a> }
<a class="jxr_linenumber" name="L437" href="#L437">437</a> }
<a class="jxr_linenumber" name="L438" href="#L438">438</a> <strong class="jxr_keyword">catch</strong> ( IOException ex )
<a class="jxr_linenumber" name="L439" href="#L439">439</a> {
<a class="jxr_linenumber" name="L440" href="#L440">440</a> getLog().error( art.getFile().getAbsolutePath(), ex );
<a class="jxr_linenumber" name="L441" href="#L441">441</a> }
<a class="jxr_linenumber" name="L442" href="#L442">442</a> }
<a class="jxr_linenumber" name="L443" href="#L443">443</a> <strong class="jxr_keyword">if</strong> ( res.isOSGiBundle() )
<a class="jxr_linenumber" name="L444" href="#L444">444</a> {
<a class="jxr_linenumber" name="L445" href="#L445">445</a> ExamineManifest ex = res.getExaminedManifest();
<a class="jxr_linenumber" name="L446" href="#L446">446</a> bundles.add( <strong class="jxr_keyword">new</strong> BundleTuple( art, ex) );
<a class="jxr_linenumber" name="L447" href="#L447">447</a> <strong class="jxr_keyword">if</strong> (verifyIntegrity) {
<a class="jxr_linenumber" name="L448" href="#L448">448</a> dependencyCNBs.addAll(ex.getDependencyTokens());
<a class="jxr_linenumber" name="L449" href="#L449">449</a> <strong class="jxr_keyword">for</strong> ( String d : ex.getDependencyTokens() )
<a class="jxr_linenumber" name="L450" href="#L450">450</a> {
<a class="jxr_linenumber" name="L451" href="#L451">451</a> addToMap( dependencyCNBBacktraces, d, Collections.singletonList( ex.getModule() ) );
<a class="jxr_linenumber" name="L452" href="#L452">452</a> }
<a class="jxr_linenumber" name="L453" href="#L453">453</a> modulesCNBs.add(ex.getModule());
<a class="jxr_linenumber" name="L454" href="#L454">454</a> osgiImports.addAll( ex.getOsgiImports());
<a class="jxr_linenumber" name="L455" href="#L455">455</a> <strong class="jxr_keyword">for</strong> ( String d : ex.getOsgiImports() )
<a class="jxr_linenumber" name="L456" href="#L456">456</a> {
<a class="jxr_linenumber" name="L457" href="#L457">457</a> addToMap( osgiImportsBacktraces, d, Collections.singletonList( ex.getModule() ) );
<a class="jxr_linenumber" name="L458" href="#L458">458</a> }
<a class="jxr_linenumber" name="L459" href="#L459">459</a>
<a class="jxr_linenumber" name="L460" href="#L460">460</a> osgiExports.addAll( ex.getOsgiExports());
<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> }
<a class="jxr_linenumber" name="L464" href="#L464">464</a>
<a class="jxr_linenumber" name="L465" href="#L465">465</a> <strong class="jxr_keyword">if</strong> (verifyIntegrity) {
<a class="jxr_linenumber" name="L466" href="#L466">466</a> <strong class="jxr_keyword">if</strong> (getLog().isDebugEnabled()) {
<a class="jxr_linenumber" name="L467" href="#L467">467</a> getLog().debug( <span class="jxr_string">"All found codenamebases:"</span> + Arrays.toString( modulesCNBs.toArray()) );
<a class="jxr_linenumber" name="L468" href="#L468">468</a> getLog().debug( <span class="jxr_string">"All found OSGI exports:"</span> + Arrays.toString( osgiExports.toArray()) );
<a class="jxr_linenumber" name="L469" href="#L469">469</a> getLog().debug( <span class="jxr_string">"All found provided tokens:"</span> + Arrays.toString( provideTokens.toArray()) );
<a class="jxr_linenumber" name="L470" href="#L470">470</a> }
<a class="jxr_linenumber" name="L471" href="#L471">471</a> dependencyCNBs.removeAll( modulesCNBs );
<a class="jxr_linenumber" name="L472" href="#L472">472</a> <strong class="jxr_keyword">if</strong> (modulesCNBs.contains( <span class="jxr_string">"org.netbeans.modules.netbinox"</span>)) {
<a class="jxr_linenumber" name="L473" href="#L473">473</a> dependencyCNBs.remove( <span class="jxr_string">"org.eclipse.osgi"</span>); <em class="jxr_comment">//this is special.</em>
<a class="jxr_linenumber" name="L474" href="#L474">474</a> }
<a class="jxr_linenumber" name="L475" href="#L475">475</a> osgiImports.removeAll( osgiExports );
<a class="jxr_linenumber" name="L476" href="#L476">476</a> Iterator&lt;String&gt; it = osgiImports.iterator();
<a class="jxr_linenumber" name="L477" href="#L477">477</a> <strong class="jxr_keyword">while</strong> (it.hasNext()) {
<a class="jxr_linenumber" name="L478" href="#L478">478</a> String s = it.next();
<a class="jxr_linenumber" name="L479" href="#L479">479</a> <strong class="jxr_keyword">if</strong> (s.startsWith( <span class="jxr_string">"java."</span>) || s.startsWith( <span class="jxr_string">"javax."</span>) || s.startsWith( <span class="jxr_string">"sun."</span>) || s.startsWith( <span class="jxr_string">"org.xml.sax"</span>) || s.startsWith( <span class="jxr_string">"org.w3c.dom"</span>) || s.startsWith( <span class="jxr_string">"org.ietf.jgss"</span>)) {
<a class="jxr_linenumber" name="L480" href="#L480">480</a> it.remove();
<a class="jxr_linenumber" name="L481" href="#L481">481</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L482" href="#L482">482</a> }
<a class="jxr_linenumber" name="L483" href="#L483">483</a> <strong class="jxr_keyword">for</strong> (String sub : osgiExportsSubs) {
<a class="jxr_linenumber" name="L484" href="#L484">484</a> <strong class="jxr_keyword">if</strong> (s.startsWith( sub )) {
<a class="jxr_linenumber" name="L485" href="#L485">485</a> it.remove();
<a class="jxr_linenumber" name="L486" href="#L486">486</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L487" href="#L487">487</a> }
<a class="jxr_linenumber" name="L488" href="#L488">488</a> }
<a class="jxr_linenumber" name="L489" href="#L489">489</a> }
<a class="jxr_linenumber" name="L490" href="#L490">490</a> requireTokens.removeAll( provideTokens );
<a class="jxr_linenumber" name="L491" href="#L491">491</a> requireTokens.removeAll( defaultPlatformTokens );
<a class="jxr_linenumber" name="L492" href="#L492">492</a> <strong class="jxr_keyword">if</strong> (!dependencyCNBs.isEmpty() || !osgiImports.isEmpty() ||!requireTokens.isEmpty()) {
<a class="jxr_linenumber" name="L493" href="#L493">493</a> <strong class="jxr_keyword">if</strong> (!dependencyCNBs.isEmpty()) {
<a class="jxr_linenumber" name="L494" href="#L494">494</a> getLog().error( <span class="jxr_string">"Some included modules/bundles depend on these codenamebases but they are not included. The application will fail starting up. The missing codenamebases are:"</span> );
<a class="jxr_linenumber" name="L495" href="#L495">495</a> <strong class="jxr_keyword">for</strong> (String s : dependencyCNBs) {
<a class="jxr_linenumber" name="L496" href="#L496">496</a> Set&lt;String&gt; back = dependencyCNBBacktraces.get( s );
<a class="jxr_linenumber" name="L497" href="#L497">497</a> getLog().error(<span class="jxr_string">" "</span> + s + (back != <strong class="jxr_keyword">null</strong> ? <span class="jxr_string">" ref: "</span> + Arrays.toString( back.toArray()) : <span class="jxr_string">""</span>));
<a class="jxr_linenumber" name="L498" href="#L498">498</a> }
<a class="jxr_linenumber" name="L499" href="#L499">499</a> }
<a class="jxr_linenumber" name="L500" href="#L500">500</a> <strong class="jxr_keyword">if</strong> (!osgiImports.isEmpty()) {
<a class="jxr_linenumber" name="L501" href="#L501">501</a> getLog().error(<span class="jxr_string">"Some OSGi imports are not satisfied by included bundles' exports. The application will fail starting up. The missing imports are:"</span>);
<a class="jxr_linenumber" name="L502" href="#L502">502</a> <strong class="jxr_keyword">for</strong> (String s : osgiImports) {
<a class="jxr_linenumber" name="L503" href="#L503">503</a> Set&lt;String&gt; back = osgiImportsBacktraces.get( s );
<a class="jxr_linenumber" name="L504" href="#L504">504</a> getLog().error(<span class="jxr_string">" "</span> + s + (back != <strong class="jxr_keyword">null</strong> ? <span class="jxr_string">" ref: "</span> + Arrays.toString( back.toArray()) : <span class="jxr_string">""</span>));
<a class="jxr_linenumber" name="L505" href="#L505">505</a> }
<a class="jxr_linenumber" name="L506" href="#L506">506</a> }
<a class="jxr_linenumber" name="L507" href="#L507">507</a> <strong class="jxr_keyword">if</strong> (!requireTokens.isEmpty()) {
<a class="jxr_linenumber" name="L508" href="#L508">508</a> getLog().error(<span class="jxr_string">"Some tokens required by included modules are not provided by included modules. The application will fail starting up. The missing tokens are:"</span>);
<a class="jxr_linenumber" name="L509" href="#L509">509</a> <strong class="jxr_keyword">for</strong> (String s : requireTokens) {
<a class="jxr_linenumber" name="L510" href="#L510">510</a> Set&lt;String&gt; back = requireTokensBacktraces.get( s );
<a class="jxr_linenumber" name="L511" href="#L511">511</a> getLog().error(<span class="jxr_string">" "</span> + s + (back != <strong class="jxr_keyword">null</strong> ? <span class="jxr_string">" ref: "</span> + Arrays.toString( back.toArray()) : <span class="jxr_string">""</span>));
<a class="jxr_linenumber" name="L512" href="#L512">512</a> }
<a class="jxr_linenumber" name="L513" href="#L513">513</a> }
<a class="jxr_linenumber" name="L514" href="#L514">514</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoFailureException(<span class="jxr_string">"See above for consistency validation check failures. Either fix those by adding the relevant dependencies to the application or disable the check by setting the verifyIntegrity parameter to false or by running with -Dnetbeans.verify.integrity=false cmd line parameter."</span>);
<a class="jxr_linenumber" name="L515" href="#L515">515</a> } <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L516" href="#L516">516</a> getLog().info( <span class="jxr_string">"Integrity verification passed."</span>);
<a class="jxr_linenumber" name="L517" href="#L517">517</a> }
<a class="jxr_linenumber" name="L518" href="#L518">518</a> } <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L519" href="#L519">519</a> getLog().info( <span class="jxr_string">"Integrity verification skipped."</span>);
<a class="jxr_linenumber" name="L520" href="#L520">520</a> }
<a class="jxr_linenumber" name="L521" href="#L521">521</a>
<a class="jxr_linenumber" name="L522" href="#L522">522</a> <em class="jxr_comment">//attempt to sort clusters based on the dependencies and cluster content.</em>
<a class="jxr_linenumber" name="L523" href="#L523">523</a> Map&lt;String, Set&lt;String&gt;&gt; cluster2depClusters = computeClusterOrdering( clusterDependencies, clusterModules );
<a class="jxr_linenumber" name="L524" href="#L524">524</a> clusterModules.clear();
<a class="jxr_linenumber" name="L525" href="#L525">525</a>
<a class="jxr_linenumber" name="L526" href="#L526">526</a> <em class="jxr_comment">//now assign the cluster to bundles based on dependencies..</em>
<a class="jxr_linenumber" name="L527" href="#L527">527</a> assignClustersToBundles( bundles, wrappedBundleCNBs, clusterDependencies, cluster2depClusters, getLog() );
<a class="jxr_linenumber" name="L528" href="#L528">528</a>
<a class="jxr_linenumber" name="L529" href="#L529">529</a>
<a class="jxr_linenumber" name="L530" href="#L530">530</a> <strong class="jxr_keyword">for</strong> (BundleTuple ent : bundles) {
<a class="jxr_linenumber" name="L531" href="#L531">531</a> Artifact art = ent.artifact;
<a class="jxr_linenumber" name="L532" href="#L532">532</a> <strong class="jxr_keyword">final</strong> ExamineManifest ex = ent.manifest;
<a class="jxr_linenumber" name="L533" href="#L533">533</a>
<a class="jxr_linenumber" name="L534" href="#L534">534</a> String clstr = ent.cluster;
<a class="jxr_linenumber" name="L535" href="#L535">535</a> <strong class="jxr_keyword">if</strong> (clstr == <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L536" href="#L536">536</a> clstr = defaultCluster;
<a class="jxr_linenumber" name="L537" href="#L537">537</a> }
<a class="jxr_linenumber" name="L538" href="#L538">538</a>
<a class="jxr_linenumber" name="L539" href="#L539">539</a> ClusterTuple cluster = processCluster( clstr, nbmBuildDirFile, art );
<a class="jxr_linenumber" name="L540" href="#L540">540</a> <strong class="jxr_keyword">if</strong> ( cluster.newer )
<a class="jxr_linenumber" name="L541" href="#L541">541</a> {
<a class="jxr_linenumber" name="L542" href="#L542">542</a> getLog().info( <span class="jxr_string">"Copying "</span> + art.getId() + <span class="jxr_string">" to cluster "</span> + clstr );
<a class="jxr_linenumber" name="L543" href="#L543">543</a> File modules = <strong class="jxr_keyword">new</strong> File( cluster.location, <span class="jxr_string">"modules"</span> );
<a class="jxr_linenumber" name="L544" href="#L544">544</a> modules.mkdirs();
<a class="jxr_linenumber" name="L545" href="#L545">545</a> File config = <strong class="jxr_keyword">new</strong> File( cluster.location, <span class="jxr_string">"config"</span> );
<a class="jxr_linenumber" name="L546" href="#L546">546</a> File confModules = <strong class="jxr_keyword">new</strong> File( config, <span class="jxr_string">"Modules"</span> );
<a class="jxr_linenumber" name="L547" href="#L547">547</a> confModules.mkdirs();
<a class="jxr_linenumber" name="L548" href="#L548">548</a> File updateTracking = <strong class="jxr_keyword">new</strong> File( cluster.location, <span class="jxr_string">"update_tracking"</span> );
<a class="jxr_linenumber" name="L549" href="#L549">549</a> updateTracking.mkdirs();
<a class="jxr_linenumber" name="L550" href="#L550">550</a> <strong class="jxr_keyword">final</strong> String cnb = ex.getModule();
<a class="jxr_linenumber" name="L551" href="#L551">551</a> <strong class="jxr_keyword">final</strong> String cnbDashed = cnb.replace( <span class="jxr_string">"."</span>, <span class="jxr_string">"-"</span> );
<a class="jxr_linenumber" name="L552" href="#L552">552</a> <strong class="jxr_keyword">final</strong> File moduleArt = <strong class="jxr_keyword">new</strong> File( modules, cnbDashed + <span class="jxr_string">".jar"</span> ); <em class="jxr_comment">//do we need the file in some canotical name pattern?</em>
<a class="jxr_linenumber" name="L553" href="#L553">553</a> <strong class="jxr_keyword">final</strong> String specVer = ex.getSpecVersion();
<a class="jxr_linenumber" name="L554" href="#L554">554</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L555" href="#L555">555</a> {
<a class="jxr_linenumber" name="L556" href="#L556">556</a> FileUtils.copyFile( art.getFile(), moduleArt );
<a class="jxr_linenumber" name="L557" href="#L557">557</a> <strong class="jxr_keyword">final</strong> File moduleConf = <strong class="jxr_keyword">new</strong> File( confModules, cnbDashed + <span class="jxr_string">".xml"</span> );
<a class="jxr_linenumber" name="L558" href="#L558">558</a> FileUtils.copyStreamToFile( <strong class="jxr_keyword">new</strong> InputStreamFacade() {
<a class="jxr_linenumber" name="L559" href="#L559">559</a> @Override
<a class="jxr_linenumber" name="L560" href="#L560">560</a> <strong class="jxr_keyword">public</strong> InputStream getInputStream() <strong class="jxr_keyword">throws</strong> IOException
<a class="jxr_linenumber" name="L561" href="#L561">561</a> {
<a class="jxr_linenumber" name="L562" href="#L562">562</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> StringInputStream( createBundleConfigFile( cnb, ex.isBundleAutoload() ), <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L563" href="#L563">563</a> }
<a class="jxr_linenumber" name="L564" href="#L564">564</a> }, moduleConf );
<a class="jxr_linenumber" name="L565" href="#L565">565</a> FileUtils.copyStreamToFile( <strong class="jxr_keyword">new</strong> InputStreamFacade() {
<a class="jxr_linenumber" name="L566" href="#L566">566</a> @Override
<a class="jxr_linenumber" name="L567" href="#L567">567</a> <strong class="jxr_keyword">public</strong> InputStream getInputStream() <strong class="jxr_keyword">throws</strong> IOException
<a class="jxr_linenumber" name="L568" href="#L568">568</a> {
<a class="jxr_linenumber" name="L569" href="#L569">569</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> StringInputStream( createBundleUpdateTracking( cnb, moduleArt, moduleConf, specVer ), <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L570" href="#L570">570</a> }
<a class="jxr_linenumber" name="L571" href="#L571">571</a> }, <strong class="jxr_keyword">new</strong> File( updateTracking, cnbDashed + <span class="jxr_string">".xml"</span> ) );
<a class="jxr_linenumber" name="L572" href="#L572">572</a> }
<a class="jxr_linenumber" name="L573" href="#L573">573</a> <strong class="jxr_keyword">catch</strong> ( IOException exc )
<a class="jxr_linenumber" name="L574" href="#L574">574</a> {
<a class="jxr_linenumber" name="L575" href="#L575">575</a> getLog().error( exc );
<a class="jxr_linenumber" name="L576" href="#L576">576</a> }
<a class="jxr_linenumber" name="L577" href="#L577">577</a> }
<a class="jxr_linenumber" name="L578" href="#L578">578</a> }
<a class="jxr_linenumber" name="L579" href="#L579">579</a>
<a class="jxr_linenumber" name="L580" href="#L580">580</a> getLog().info(
<a class="jxr_linenumber" name="L581" href="#L581">581</a> <span class="jxr_string">"Created NetBeans module cluster(s) at "</span> + nbmBuildDirFile.getAbsoluteFile() );
<a class="jxr_linenumber" name="L582" href="#L582">582</a>
<a class="jxr_linenumber" name="L583" href="#L583">583</a> }
<a class="jxr_linenumber" name="L584" href="#L584">584</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L585" href="#L585">585</a> {
<a class="jxr_linenumber" name="L586" href="#L586">586</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException(
<a class="jxr_linenumber" name="L587" href="#L587">587</a> <span class="jxr_string">"This goal only makes sense on project with nbm-application packaging"</span> );
<a class="jxr_linenumber" name="L588" href="#L588">588</a> }
<a class="jxr_linenumber" name="L589" href="#L589">589</a> <em class="jxr_comment">//in 6.1 the rebuilt modules will be cached if the timestamp is not touched.</em>
<a class="jxr_linenumber" name="L590" href="#L590">590</a> File[] files = nbmBuildDirFile.listFiles();
<a class="jxr_linenumber" name="L591" href="#L591">591</a> <strong class="jxr_keyword">for</strong> ( File file : files )
<a class="jxr_linenumber" name="L592" href="#L592">592</a> {
<a class="jxr_linenumber" name="L593" href="#L593">593</a> <strong class="jxr_keyword">if</strong> ( file.isDirectory() )
<a class="jxr_linenumber" name="L594" href="#L594">594</a> {
<a class="jxr_linenumber" name="L595" href="#L595">595</a> File stamp = <strong class="jxr_keyword">new</strong> File( file, <span class="jxr_string">".lastModified"</span> );
<a class="jxr_linenumber" name="L596" href="#L596">596</a> <strong class="jxr_keyword">if</strong> ( !stamp.exists() )
<a class="jxr_linenumber" name="L597" href="#L597">597</a> {
<a class="jxr_linenumber" name="L598" href="#L598">598</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L599" href="#L599">599</a> {
<a class="jxr_linenumber" name="L600" href="#L600">600</a> stamp.createNewFile();
<a class="jxr_linenumber" name="L601" href="#L601">601</a> }
<a class="jxr_linenumber" name="L602" href="#L602">602</a> <strong class="jxr_keyword">catch</strong> ( IOException ex )
<a class="jxr_linenumber" name="L603" href="#L603">603</a> {
<a class="jxr_linenumber" name="L604" href="#L604">604</a> ex.printStackTrace();
<a class="jxr_linenumber" name="L605" href="#L605">605</a> }
<a class="jxr_linenumber" name="L606" href="#L606">606</a> }
<a class="jxr_linenumber" name="L607" href="#L607">607</a> stamp.setLastModified( <strong class="jxr_keyword">new</strong> Date().getTime() );
<a class="jxr_linenumber" name="L608" href="#L608">608</a> }
<a class="jxr_linenumber" name="L609" href="#L609">609</a> }
<a class="jxr_linenumber" name="L610" href="#L610">610</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L611" href="#L611">611</a> {
<a class="jxr_linenumber" name="L612" href="#L612">612</a> createBinEtcDir( nbmBuildDirFile, brandingToken );
<a class="jxr_linenumber" name="L613" href="#L613">613</a> }
<a class="jxr_linenumber" name="L614" href="#L614">614</a> <strong class="jxr_keyword">catch</strong> ( IOException ex )
<a class="jxr_linenumber" name="L615" href="#L615">615</a> {
<a class="jxr_linenumber" name="L616" href="#L616">616</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException(
<a class="jxr_linenumber" name="L617" href="#L617">617</a> <span class="jxr_string">"Cannot process etc folder content creation."</span>, ex );
<a class="jxr_linenumber" name="L618" href="#L618">618</a> }
<a class="jxr_linenumber" name="L619" href="#L619">619</a> }
<a class="jxr_linenumber" name="L620" href="#L620">620</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> Pattern patt = Pattern.compile(
<a class="jxr_linenumber" name="L621" href="#L621">621</a> <span class="jxr_string">".*targetcluster=\&quot;([a-zA-Z0-9_&#92;&#92;.&#92;&#92;-]+)\&quot;.*"</span>, Pattern.DOTALL );
<a class="jxr_linenumber" name="L622" href="#L622">622</a>
<a class="jxr_linenumber" name="L623" href="#L623">623</a> <strong class="jxr_keyword">private</strong> String findCluster( JarFile jf )
<a class="jxr_linenumber" name="L624" href="#L624">624</a> <strong class="jxr_keyword">throws</strong> MojoFailureException, IOException
<a class="jxr_linenumber" name="L625" href="#L625">625</a> {
<a class="jxr_linenumber" name="L626" href="#L626">626</a> ZipEntry entry = jf.getEntry( <span class="jxr_string">"Info/info.xml"</span> );
<a class="jxr_linenumber" name="L627" href="#L627">627</a> InputStream ins = jf.getInputStream( entry );
<a class="jxr_linenumber" name="L628" href="#L628">628</a> String str = IOUtil.toString( ins, <span class="jxr_string">"UTF8"</span> );
<a class="jxr_linenumber" name="L629" href="#L629">629</a> Matcher m = patt.matcher( str );
<a class="jxr_linenumber" name="L630" href="#L630">630</a> <strong class="jxr_keyword">if</strong> ( !m.matches() )
<a class="jxr_linenumber" name="L631" href="#L631">631</a> {
<a class="jxr_linenumber" name="L632" href="#L632">632</a> getLog().info( <span class="jxr_string">"Cannot find cluster for "</span> + jf.getName() + <span class="jxr_string">" Falling back to default value - '"</span>
<a class="jxr_linenumber" name="L633" href="#L633">633</a> + defaultCluster + <span class="jxr_string">"'."</span> );
<a class="jxr_linenumber" name="L634" href="#L634">634</a> <strong class="jxr_keyword">return</strong> defaultCluster;
<a class="jxr_linenumber" name="L635" href="#L635">635</a> }
<a class="jxr_linenumber" name="L636" href="#L636">636</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L637" href="#L637">637</a> {
<a class="jxr_linenumber" name="L638" href="#L638">638</a> <strong class="jxr_keyword">return</strong> m.group( 1 );
<a class="jxr_linenumber" name="L639" href="#L639">639</a> }
<a class="jxr_linenumber" name="L640" href="#L640">640</a> }
<a class="jxr_linenumber" name="L641" href="#L641">641</a>
<a class="jxr_linenumber" name="L642" href="#L642">642</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L643" href="#L643">643</a> <em class="jxr_javadoccomment"> * </em>
<a class="jxr_linenumber" name="L644" href="#L644">644</a> <em class="jxr_javadoccomment"> * @param buildDir Directory where the platform bundle is built</em>
<a class="jxr_linenumber" name="L645" href="#L645">645</a> <em class="jxr_javadoccomment"> * @param brandingToken</em>
<a class="jxr_linenumber" name="L646" href="#L646">646</a> <em class="jxr_javadoccomment"> * </em>
<a class="jxr_linenumber" name="L647" href="#L647">647</a> <em class="jxr_javadoccomment"> * @throws java.io.IOException</em>
<a class="jxr_linenumber" name="L648" href="#L648">648</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L649" href="#L649">649</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> createBinEtcDir( File buildDir, String brandingToken )
<a class="jxr_linenumber" name="L650" href="#L650">650</a> <strong class="jxr_keyword">throws</strong> IOException, MojoExecutionException
<a class="jxr_linenumber" name="L651" href="#L651">651</a> {
<a class="jxr_linenumber" name="L652" href="#L652">652</a> File etcDir = <strong class="jxr_keyword">new</strong> File( buildDir + File.separator + <span class="jxr_string">"etc"</span> );
<a class="jxr_linenumber" name="L653" href="#L653">653</a> etcDir.mkdir();
<a class="jxr_linenumber" name="L654" href="#L654">654</a>
<a class="jxr_linenumber" name="L655" href="#L655">655</a> <em class="jxr_comment">// create app.clusters which contains a list of clusters to include in the application</em>
<a class="jxr_linenumber" name="L656" href="#L656">656</a>
<a class="jxr_linenumber" name="L657" href="#L657">657</a> File clusterConf = <strong class="jxr_keyword">new</strong> File( etcDir + File.separator + brandingToken + <span class="jxr_string">".clusters"</span> );
<a class="jxr_linenumber" name="L658" href="#L658">658</a> String clustersString;
<a class="jxr_linenumber" name="L659" href="#L659">659</a> <strong class="jxr_keyword">if</strong> ( etcClustersFile != <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L660" href="#L660">660</a> {
<a class="jxr_linenumber" name="L661" href="#L661">661</a> clustersString = FileUtils.fileRead( etcClustersFile, <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L662" href="#L662">662</a> }
<a class="jxr_linenumber" name="L663" href="#L663">663</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L664" href="#L664">664</a> {
<a class="jxr_linenumber" name="L665" href="#L665">665</a> clusterConf.createNewFile();
<a class="jxr_linenumber" name="L666" href="#L666">666</a> StringBuilder buffer = <strong class="jxr_keyword">new</strong> StringBuilder();
<a class="jxr_linenumber" name="L667" href="#L667">667</a> File[] clusters = buildDir.listFiles( <strong class="jxr_keyword">new</strong> FileFilter()
<a class="jxr_linenumber" name="L668" href="#L668">668</a> {
<a class="jxr_linenumber" name="L669" href="#L669">669</a>
<a class="jxr_linenumber" name="L670" href="#L670">670</a> @Override
<a class="jxr_linenumber" name="L671" href="#L671">671</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> accept( File pathname )
<a class="jxr_linenumber" name="L672" href="#L672">672</a> {
<a class="jxr_linenumber" name="L673" href="#L673">673</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> File( pathname, <span class="jxr_string">".lastModified"</span> ).exists();
<a class="jxr_linenumber" name="L674" href="#L674">674</a> }
<a class="jxr_linenumber" name="L675" href="#L675">675</a> } );
<a class="jxr_linenumber" name="L676" href="#L676">676</a> <strong class="jxr_keyword">for</strong> ( File cluster : clusters )
<a class="jxr_linenumber" name="L677" href="#L677">677</a> {
<a class="jxr_linenumber" name="L678" href="#L678">678</a> buffer.append( cluster.getName() );
<a class="jxr_linenumber" name="L679" href="#L679">679</a> buffer.append( <span class="jxr_string">"\n"</span> );
<a class="jxr_linenumber" name="L680" href="#L680">680</a> }
<a class="jxr_linenumber" name="L681" href="#L681">681</a> clustersString = buffer.toString();
<a class="jxr_linenumber" name="L682" href="#L682">682</a> }
<a class="jxr_linenumber" name="L683" href="#L683">683</a>
<a class="jxr_linenumber" name="L684" href="#L684">684</a> FileUtils.fileWrite( clusterConf.getAbsolutePath(), clustersString );
<a class="jxr_linenumber" name="L685" href="#L685">685</a>
<a class="jxr_linenumber" name="L686" href="#L686">686</a> File confFile = etcConfFile;
<a class="jxr_linenumber" name="L687" href="#L687">687</a> String str;
<a class="jxr_linenumber" name="L688" href="#L688">688</a> <strong class="jxr_keyword">if</strong> ( confFile == <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L689" href="#L689">689</a> {
<a class="jxr_linenumber" name="L690" href="#L690">690</a> File harnessDir = <strong class="jxr_keyword">new</strong> File( buildDir, <span class="jxr_string">"harness"</span> );
<a class="jxr_linenumber" name="L691" href="#L691">691</a> <em class="jxr_comment">// app.conf contains default options and other settings</em>
<a class="jxr_linenumber" name="L692" href="#L692">692</a> confFile = <strong class="jxr_keyword">new</strong> File(
<a class="jxr_linenumber" name="L693" href="#L693">693</a> harnessDir.getAbsolutePath() + File.separator + <span class="jxr_string">"etc"</span> + File.separator + <span class="jxr_string">"app.conf"</span> );
<a class="jxr_linenumber" name="L694" href="#L694">694</a> <strong class="jxr_keyword">if</strong> ( confFile.exists() )
<a class="jxr_linenumber" name="L695" href="#L695">695</a> {
<a class="jxr_linenumber" name="L696" href="#L696">696</a> str = FileUtils.fileRead( confFile, <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L697" href="#L697">697</a> }
<a class="jxr_linenumber" name="L698" href="#L698">698</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L699" href="#L699">699</a> {
<a class="jxr_linenumber" name="L700" href="#L700">700</a> getLog().debug( <span class="jxr_string">"Using fallback app.conf shipping with the nbm-maven-plugin."</span> );
<a class="jxr_linenumber" name="L701" href="#L701">701</a> InputStream instream = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L702" href="#L702">702</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L703" href="#L703">703</a> {
<a class="jxr_linenumber" name="L704" href="#L704">704</a> instream = getClass().getClassLoader().getResourceAsStream( <span class="jxr_string">"harness/etc/app.conf"</span> );
<a class="jxr_linenumber" name="L705" href="#L705">705</a> str = IOUtil.toString( instream, <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L706" href="#L706">706</a> }
<a class="jxr_linenumber" name="L707" href="#L707">707</a> <strong class="jxr_keyword">finally</strong>
<a class="jxr_linenumber" name="L708" href="#L708">708</a> {
<a class="jxr_linenumber" name="L709" href="#L709">709</a> IOUtil.close( instream );
<a class="jxr_linenumber" name="L710" href="#L710">710</a> }
<a class="jxr_linenumber" name="L711" href="#L711">711</a> }
<a class="jxr_linenumber" name="L712" href="#L712">712</a> }
<a class="jxr_linenumber" name="L713" href="#L713">713</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L714" href="#L714">714</a> {
<a class="jxr_linenumber" name="L715" href="#L715">715</a> str = FileUtils.fileRead( confFile, <span class="jxr_string">"UTF-8"</span> );
<a class="jxr_linenumber" name="L716" href="#L716">716</a> }
<a class="jxr_linenumber" name="L717" href="#L717">717</a> File confDestFile = <strong class="jxr_keyword">new</strong> File(
<a class="jxr_linenumber" name="L718" href="#L718">718</a> etcDir.getAbsolutePath() + File.separator + brandingToken + <span class="jxr_string">".conf"</span> );
<a class="jxr_linenumber" name="L719" href="#L719">719</a>
<a class="jxr_linenumber" name="L720" href="#L720">720</a> str = str.replace( <span class="jxr_string">"${branding.token}"</span>, brandingToken );
<a class="jxr_linenumber" name="L721" href="#L721">721</a> FileUtils.fileWrite( confDestFile.getAbsolutePath(), <span class="jxr_string">"UTF-8"</span>, str );
<a class="jxr_linenumber" name="L722" href="#L722">722</a>
<a class="jxr_linenumber" name="L723" href="#L723">723</a> File destBinDir = <strong class="jxr_keyword">new</strong> File( buildDir + File.separator + <span class="jxr_string">"bin"</span> );
<a class="jxr_linenumber" name="L724" href="#L724">724</a> destBinDir.mkdir();
<a class="jxr_linenumber" name="L725" href="#L725">725</a>
<a class="jxr_linenumber" name="L726" href="#L726">726</a> File binDir;
<a class="jxr_linenumber" name="L727" href="#L727">727</a> File destExeW = <strong class="jxr_keyword">new</strong> File( destBinDir, brandingToken + <span class="jxr_string">"_w.exe"</span> );
<a class="jxr_linenumber" name="L728" href="#L728">728</a> File destExe = <strong class="jxr_keyword">new</strong> File( destBinDir, brandingToken + <span class="jxr_string">".exe"</span> );
<a class="jxr_linenumber" name="L729" href="#L729">729</a> File destExe64 = <strong class="jxr_keyword">new</strong> File( destBinDir, brandingToken + <span class="jxr_string">"64.exe"</span> );
<a class="jxr_linenumber" name="L730" href="#L730">730</a> File destSh = <strong class="jxr_keyword">new</strong> File( destBinDir, brandingToken );
<a class="jxr_linenumber" name="L731" href="#L731">731</a>
<a class="jxr_linenumber" name="L732" href="#L732">732</a> <strong class="jxr_keyword">if</strong> ( binDirectory != <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L733" href="#L733">733</a> {
<a class="jxr_linenumber" name="L734" href="#L734">734</a> <em class="jxr_comment">//we have custom launchers.</em>
<a class="jxr_linenumber" name="L735" href="#L735">735</a> binDir = binDirectory;
<a class="jxr_linenumber" name="L736" href="#L736">736</a> File[] fls = binDir.listFiles();
<a class="jxr_linenumber" name="L737" href="#L737">737</a> <strong class="jxr_keyword">if</strong> ( fls == <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L738" href="#L738">738</a> {
<a class="jxr_linenumber" name="L739" href="#L739">739</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException( <span class="jxr_string">"Parameter 'binDirectory' has to point to an existing folder."</span> );
<a class="jxr_linenumber" name="L740" href="#L740">740</a> }
<a class="jxr_linenumber" name="L741" href="#L741">741</a> <strong class="jxr_keyword">for</strong> ( File fl : fls )
<a class="jxr_linenumber" name="L742" href="#L742">742</a> {
<a class="jxr_linenumber" name="L743" href="#L743">743</a> String name = fl.getName();
<a class="jxr_linenumber" name="L744" href="#L744">744</a> File dest = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L745" href="#L745">745</a> <strong class="jxr_keyword">if</strong> ( name.endsWith( <span class="jxr_string">"_w.exe"</span> ) )
<a class="jxr_linenumber" name="L746" href="#L746">746</a> {
<a class="jxr_linenumber" name="L747" href="#L747">747</a> dest = destExeW;
<a class="jxr_linenumber" name="L748" href="#L748">748</a> }
<a class="jxr_linenumber" name="L749" href="#L749">749</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( name.endsWith( <span class="jxr_string">"64.exe"</span> ) )
<a class="jxr_linenumber" name="L750" href="#L750">750</a> {
<a class="jxr_linenumber" name="L751" href="#L751">751</a> dest = destExe64;
<a class="jxr_linenumber" name="L752" href="#L752">752</a> }
<a class="jxr_linenumber" name="L753" href="#L753">753</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( name.endsWith( <span class="jxr_string">".exe"</span> ) )
<a class="jxr_linenumber" name="L754" href="#L754">754</a> {
<a class="jxr_linenumber" name="L755" href="#L755">755</a> dest = destExe;
<a class="jxr_linenumber" name="L756" href="#L756">756</a> }
<a class="jxr_linenumber" name="L757" href="#L757">757</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( !name.contains( <span class="jxr_string">"."</span> ) || name.endsWith( <span class="jxr_string">".sh"</span> ) )
<a class="jxr_linenumber" name="L758" href="#L758">758</a> {
<a class="jxr_linenumber" name="L759" href="#L759">759</a> dest = destSh;
<a class="jxr_linenumber" name="L760" href="#L760">760</a> }
<a class="jxr_linenumber" name="L761" href="#L761">761</a> <strong class="jxr_keyword">if</strong> ( dest != <strong class="jxr_keyword">null</strong> &amp;&amp; fl.exists() ) <em class="jxr_comment">//in 6.7 the _w.exe file is no more.</em>
<a class="jxr_linenumber" name="L762" href="#L762">762</a> {
<a class="jxr_linenumber" name="L763" href="#L763">763</a> FileUtils.copyFile( fl, dest );
<a class="jxr_linenumber" name="L764" href="#L764">764</a> }
<a class="jxr_linenumber" name="L765" href="#L765">765</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L766" href="#L766">766</a> {
<a class="jxr_linenumber" name="L767" href="#L767">767</a> <em class="jxr_comment">//warn about file not being copied</em>
<a class="jxr_linenumber" name="L768" href="#L768">768</a> }
<a class="jxr_linenumber" name="L769" href="#L769">769</a> }
<a class="jxr_linenumber" name="L770" href="#L770">770</a> }
<a class="jxr_linenumber" name="L771" href="#L771">771</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L772" href="#L772">772</a> {
<a class="jxr_linenumber" name="L773" href="#L773">773</a> File harnessDir = <strong class="jxr_keyword">new</strong> File( buildDir, <span class="jxr_string">"harness"</span> );
<a class="jxr_linenumber" name="L774" href="#L774">774</a> <em class="jxr_comment">//we have org-netbeans-modules-apisupport-harness in target area, just use it's own launchers.</em>
<a class="jxr_linenumber" name="L775" href="#L775">775</a> binDir = <strong class="jxr_keyword">new</strong> File(
<a class="jxr_linenumber" name="L776" href="#L776">776</a> harnessDir.getAbsolutePath() + File.separator + <span class="jxr_string">"launchers"</span> );
<a class="jxr_linenumber" name="L777" href="#L777">777</a> <strong class="jxr_keyword">if</strong> ( binDir.exists() )
<a class="jxr_linenumber" name="L778" href="#L778">778</a> {
<a class="jxr_linenumber" name="L779" href="#L779">779</a> File exe = <strong class="jxr_keyword">new</strong> File( binDir, <span class="jxr_string">"app.exe"</span> );
<a class="jxr_linenumber" name="L780" href="#L780">780</a> FileUtils.copyFile( exe, destExe );
<a class="jxr_linenumber" name="L781" href="#L781">781</a> File exe64 = <strong class="jxr_keyword">new</strong> File( binDir, <span class="jxr_string">"app64.exe"</span> );
<a class="jxr_linenumber" name="L782" href="#L782">782</a> <strong class="jxr_keyword">if</strong> ( exe64.isFile() )
<a class="jxr_linenumber" name="L783" href="#L783">783</a> {
<a class="jxr_linenumber" name="L784" href="#L784">784</a> FileUtils.copyFile( exe64, destExe64 );
<a class="jxr_linenumber" name="L785" href="#L785">785</a> }
<a class="jxr_linenumber" name="L786" href="#L786">786</a> File exew = <strong class="jxr_keyword">new</strong> File( binDir, <span class="jxr_string">"app_w.exe"</span> );
<a class="jxr_linenumber" name="L787" href="#L787">787</a> <strong class="jxr_keyword">if</strong> ( exew.exists() ) <em class="jxr_comment">//in 6.7 the _w.exe file is no more.</em>
<a class="jxr_linenumber" name="L788" href="#L788">788</a> {
<a class="jxr_linenumber" name="L789" href="#L789">789</a> FileUtils.copyFile( exew, destExeW );
<a class="jxr_linenumber" name="L790" href="#L790">790</a> }
<a class="jxr_linenumber" name="L791" href="#L791">791</a> File sh = <strong class="jxr_keyword">new</strong> File( binDir, <span class="jxr_string">"app.sh"</span> );
<a class="jxr_linenumber" name="L792" href="#L792">792</a> FileUtils.copyFile( sh, destSh );
<a class="jxr_linenumber" name="L793" href="#L793">793</a> }
<a class="jxr_linenumber" name="L794" href="#L794">794</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L795" href="#L795">795</a> {
<a class="jxr_linenumber" name="L796" href="#L796">796</a> File nbm = getHarnessNbm();
<a class="jxr_linenumber" name="L797" href="#L797">797</a> <strong class="jxr_keyword">try</strong> (ZipFile zip = <strong class="jxr_keyword">new</strong> ZipFile( nbm )) {
<a class="jxr_linenumber" name="L798" href="#L798">798</a> getLog().debug( <span class="jxr_string">"Using fallback executables from downloaded org-netbeans-modules-apisupport-harness nbm file."</span> );
<a class="jxr_linenumber" name="L799" href="#L799">799</a> writeFromZip(zip, <span class="jxr_string">"netbeans/launchers/app.sh"</span>, destSh, <strong class="jxr_keyword">true</strong> );
<a class="jxr_linenumber" name="L800" href="#L800">800</a> writeFromZip(zip, <span class="jxr_string">"netbeans/launchers/app.exe"</span>, destExe, <strong class="jxr_keyword">true</strong> );
<a class="jxr_linenumber" name="L801" href="#L801">801</a> writeFromZip(zip, <span class="jxr_string">"netbeans/launchers/app64.exe"</span>, destExe64, false );
<a class="jxr_linenumber" name="L802" href="#L802">802</a> writeFromZip(zip, <span class="jxr_string">"netbeans/launchers/app_w.exe"</span>, destExeW, false );
<a class="jxr_linenumber" name="L803" href="#L803">803</a> }
<a class="jxr_linenumber" name="L804" href="#L804">804</a> }
<a class="jxr_linenumber" name="L805" href="#L805">805</a> }
<a class="jxr_linenumber" name="L806" href="#L806">806</a>
<a class="jxr_linenumber" name="L807" href="#L807">807</a> Project antProject = antProject();
<a class="jxr_linenumber" name="L808" href="#L808">808</a>
<a class="jxr_linenumber" name="L809" href="#L809">809</a> Chmod chmod = (Chmod) antProject.createTask( <span class="jxr_string">"chmod"</span> );
<a class="jxr_linenumber" name="L810" href="#L810">810</a> FileSet fs = <strong class="jxr_keyword">new</strong> FileSet();
<a class="jxr_linenumber" name="L811" href="#L811">811</a> fs.setDir( destBinDir );
<a class="jxr_linenumber" name="L812" href="#L812">812</a> fs.setIncludes( <span class="jxr_string">"*"</span> );
<a class="jxr_linenumber" name="L813" href="#L813">813</a> chmod.addFileset( fs );
<a class="jxr_linenumber" name="L814" href="#L814">814</a> chmod.setPerm( <span class="jxr_string">"755"</span> );
<a class="jxr_linenumber" name="L815" href="#L815">815</a> chmod.execute();
<a class="jxr_linenumber" name="L816" href="#L816">816</a> }
<a class="jxr_linenumber" name="L817" href="#L817">817</a>
<a class="jxr_linenumber" name="L818" href="#L818">818</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> writeFile( String path, File destSh )
<a class="jxr_linenumber" name="L819" href="#L819">819</a> <strong class="jxr_keyword">throws</strong> IOException
<a class="jxr_linenumber" name="L820" href="#L820">820</a> {
<a class="jxr_linenumber" name="L821" href="#L821">821</a> InputStream instream = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L822" href="#L822">822</a> OutputStream output = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L823" href="#L823">823</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L824" href="#L824">824</a> {
<a class="jxr_linenumber" name="L825" href="#L825">825</a> instream = getClass().getClassLoader().getResourceAsStream( path );
<a class="jxr_linenumber" name="L826" href="#L826">826</a> <strong class="jxr_keyword">if</strong> ( instream == <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L827" href="#L827">827</a> {
<a class="jxr_linenumber" name="L828" href="#L828">828</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> FileNotFoundException( path );
<a class="jxr_linenumber" name="L829" href="#L829">829</a> }
<a class="jxr_linenumber" name="L830" href="#L830">830</a> destSh.createNewFile();
<a class="jxr_linenumber" name="L831" href="#L831">831</a> output = <strong class="jxr_keyword">new</strong> BufferedOutputStream( <strong class="jxr_keyword">new</strong> FileOutputStream( destSh ) );
<a class="jxr_linenumber" name="L832" href="#L832">832</a> IOUtil.copy( instream, output );
<a class="jxr_linenumber" name="L833" href="#L833">833</a> }
<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> {
<a class="jxr_linenumber" name="L836" href="#L836">836</a> IOUtil.close( instream );
<a class="jxr_linenumber" name="L837" href="#L837">837</a> IOUtil.close( output );
<a class="jxr_linenumber" name="L838" href="#L838">838</a> }
<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> <strong class="jxr_keyword">private</strong> ClusterTuple processCluster( String cluster, File nbmBuildDirFile, Artifact art )
<a class="jxr_linenumber" name="L842" href="#L842">842</a> {
<a class="jxr_linenumber" name="L843" href="#L843">843</a> File clusterFile = <strong class="jxr_keyword">new</strong> File( nbmBuildDirFile, cluster );
<a class="jxr_linenumber" name="L844" href="#L844">844</a> <strong class="jxr_keyword">boolean</strong> newer = false;
<a class="jxr_linenumber" name="L845" href="#L845">845</a> <strong class="jxr_keyword">if</strong> ( !clusterFile.exists() )
<a class="jxr_linenumber" name="L846" href="#L846">846</a> {
<a class="jxr_linenumber" name="L847" href="#L847">847</a> clusterFile.mkdir();
<a class="jxr_linenumber" name="L848" href="#L848">848</a> newer = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L849" href="#L849">849</a> }
<a class="jxr_linenumber" name="L850" href="#L850">850</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L851" href="#L851">851</a> {
<a class="jxr_linenumber" name="L852" href="#L852">852</a> File stamp = <strong class="jxr_keyword">new</strong> File( clusterFile, <span class="jxr_string">".lastModified"</span> );
<a class="jxr_linenumber" name="L853" href="#L853">853</a> <strong class="jxr_keyword">if</strong> ( stamp.lastModified() &lt; art.getFile().lastModified() )
<a class="jxr_linenumber" name="L854" href="#L854">854</a> {
<a class="jxr_linenumber" name="L855" href="#L855">855</a> newer = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L856" href="#L856">856</a> }
<a class="jxr_linenumber" name="L857" href="#L857">857</a> }
<a class="jxr_linenumber" name="L858" href="#L858">858</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ClusterTuple( clusterFile, newer );
<a class="jxr_linenumber" name="L859" href="#L859">859</a> }
<a class="jxr_linenumber" name="L860" href="#L860">860</a>
<a class="jxr_linenumber" name="L861" href="#L861">861</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> externalDownload( File f, InputStream is )
<a class="jxr_linenumber" name="L862" href="#L862">862</a> <strong class="jxr_keyword">throws</strong> IOException
<a class="jxr_linenumber" name="L863" href="#L863">863</a> {
<a class="jxr_linenumber" name="L864" href="#L864">864</a> <em class="jxr_comment">// Cf. org.netbeans.nbbuild.AutoUpdate</em>
<a class="jxr_linenumber" name="L865" href="#L865">865</a> BufferedReader r = <strong class="jxr_keyword">new</strong> BufferedReader( <strong class="jxr_keyword">new</strong> InputStreamReader( is, <span class="jxr_string">"UTF-8"</span> ) );
<a class="jxr_linenumber" name="L866" href="#L866">866</a> <strong class="jxr_keyword">long</strong> crc = -1;
<a class="jxr_linenumber" name="L867" href="#L867">867</a> <strong class="jxr_keyword">long</strong> size = -1;
<a class="jxr_linenumber" name="L868" href="#L868">868</a> <strong class="jxr_keyword">boolean</strong> found = false;
<a class="jxr_linenumber" name="L869" href="#L869">869</a> String line;
<a class="jxr_linenumber" name="L870" href="#L870">870</a> <strong class="jxr_keyword">while</strong> ( ( line = r.readLine() ) != <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L871" href="#L871">871</a> {
<a class="jxr_linenumber" name="L872" href="#L872">872</a> <strong class="jxr_keyword">if</strong> ( line.startsWith( <span class="jxr_string">"CRC:"</span> ) )
<a class="jxr_linenumber" name="L873" href="#L873">873</a> {
<a class="jxr_linenumber" name="L874" href="#L874">874</a> crc = Long.parseLong( line.substring( 4 ).trim() );
<a class="jxr_linenumber" name="L875" href="#L875">875</a> }
<a class="jxr_linenumber" name="L876" href="#L876">876</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( line.startsWith( <span class="jxr_string">"URL:m2:/"</span> ) )
<a class="jxr_linenumber" name="L877" href="#L877">877</a> {
<a class="jxr_linenumber" name="L878" href="#L878">878</a> <strong class="jxr_keyword">if</strong> ( ! found )
<a class="jxr_linenumber" name="L879" href="#L879">879</a> {
<a class="jxr_linenumber" name="L880" href="#L880">880</a> String[] coords = line.substring( 8 ).trim().split( <span class="jxr_string">":"</span> );
<a class="jxr_linenumber" name="L881" href="#L881">881</a> Artifact artifact;
<a class="jxr_linenumber" name="L882" href="#L882">882</a> <strong class="jxr_keyword">if</strong> ( coords.length == 4 )
<a class="jxr_linenumber" name="L883" href="#L883">883</a> {
<a class="jxr_linenumber" name="L884" href="#L884">884</a> artifact = artifactFactory.createArtifact( coords[0], coords[1], coords[2], <strong class="jxr_keyword">null</strong>, coords[3] );
<a class="jxr_linenumber" name="L885" href="#L885">885</a> }
<a class="jxr_linenumber" name="L886" href="#L886">886</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L887" href="#L887">887</a> {
<a class="jxr_linenumber" name="L888" href="#L888">888</a> artifact = artifactFactory.createArtifactWithClassifier( coords[0], coords[1], coords[2], coords[3], coords[4] );
<a class="jxr_linenumber" name="L889" href="#L889">889</a> }
<a class="jxr_linenumber" name="L890" href="#L890">890</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L891" href="#L891">891</a> {
<a class="jxr_linenumber" name="L892" href="#L892">892</a> artifactResolver.resolve( artifact, project.getRemoteArtifactRepositories(), localRepository );
<a class="jxr_linenumber" name="L893" href="#L893">893</a> FileUtils.copyFile( artifact.getFile(), f );
<a class="jxr_linenumber" name="L894" href="#L894">894</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L895" href="#L895">895</a> }
<a class="jxr_linenumber" name="L896" href="#L896">896</a> <strong class="jxr_keyword">catch</strong> ( AbstractArtifactResolutionException x )
<a class="jxr_linenumber" name="L897" href="#L897">897</a> {
<a class="jxr_linenumber" name="L898" href="#L898">898</a> getLog().warn( <span class="jxr_string">"Cannot find "</span> + line.substring( 8 ), x );
<a class="jxr_linenumber" name="L899" href="#L899">899</a> }
<a class="jxr_linenumber" name="L900" href="#L900">900</a> }
<a class="jxr_linenumber" name="L901" href="#L901">901</a> }
<a class="jxr_linenumber" name="L902" href="#L902">902</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( line.startsWith( <span class="jxr_string">"URL:"</span> ) )
<a class="jxr_linenumber" name="L903" href="#L903">903</a> {
<a class="jxr_linenumber" name="L904" href="#L904">904</a> <strong class="jxr_keyword">if</strong> ( ! found )
<a class="jxr_linenumber" name="L905" href="#L905">905</a> {
<a class="jxr_linenumber" name="L906" href="#L906">906</a> String url = line.substring( 4 ).trim();
<a class="jxr_linenumber" name="L907" href="#L907">907</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L908" href="#L908">908</a> {
<a class="jxr_linenumber" name="L909" href="#L909">909</a> <em class="jxr_comment">// XXX use Wagon API instead</em>
<a class="jxr_linenumber" name="L910" href="#L910">910</a> FileUtils.copyURLToFile( <strong class="jxr_keyword">new</strong> URL( url ), f );
<a class="jxr_linenumber" name="L911" href="#L911">911</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L912" href="#L912">912</a> }
<a class="jxr_linenumber" name="L913" href="#L913">913</a> <strong class="jxr_keyword">catch</strong> ( IOException x )
<a class="jxr_linenumber" name="L914" href="#L914">914</a> {
<a class="jxr_linenumber" name="L915" href="#L915">915</a> getLog().warn( <span class="jxr_string">"Cannot download "</span> + url, x );
<a class="jxr_linenumber" name="L916" href="#L916">916</a> }
<a class="jxr_linenumber" name="L917" href="#L917">917</a> }
<a class="jxr_linenumber" name="L918" href="#L918">918</a> }
<a class="jxr_linenumber" name="L919" href="#L919">919</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ( line.startsWith( <span class="jxr_string">"SIZE:"</span> ) )
<a class="jxr_linenumber" name="L920" href="#L920">920</a> {
<a class="jxr_linenumber" name="L921" href="#L921">921</a> size = Long.parseLong( line.substring( 5 ).trim() );
<a class="jxr_linenumber" name="L922" href="#L922">922</a> }
<a class="jxr_linenumber" name="L923" href="#L923">923</a> <strong class="jxr_keyword">else</strong>
<a class="jxr_linenumber" name="L924" href="#L924">924</a> {
<a class="jxr_linenumber" name="L925" href="#L925">925</a> getLog().warn( <span class="jxr_string">"Unrecognized line: "</span> + line );
<a class="jxr_linenumber" name="L926" href="#L926">926</a> }
<a class="jxr_linenumber" name="L927" href="#L927">927</a> }
<a class="jxr_linenumber" name="L928" href="#L928">928</a> <strong class="jxr_keyword">if</strong> ( ! found )
<a class="jxr_linenumber" name="L929" href="#L929">929</a> {
<a class="jxr_linenumber" name="L930" href="#L930">930</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException( <span class="jxr_string">"Could not download "</span> + f );
<a class="jxr_linenumber" name="L931" href="#L931">931</a> }
<a class="jxr_linenumber" name="L932" href="#L932">932</a> <strong class="jxr_keyword">if</strong> ( crc != -1 &amp;&amp; crc != crcForFile( f ).getValue() )
<a class="jxr_linenumber" name="L933" href="#L933">933</a> {
<a class="jxr_linenumber" name="L934" href="#L934">934</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException( <span class="jxr_string">"CRC-32 of "</span> + f + <span class="jxr_string">" does not match declared "</span> + crc );
<a class="jxr_linenumber" name="L935" href="#L935">935</a> }
<a class="jxr_linenumber" name="L936" href="#L936">936</a> <strong class="jxr_keyword">if</strong> ( size != -1 &amp;&amp; size != f.length() )
<a class="jxr_linenumber" name="L937" href="#L937">937</a> {
<a class="jxr_linenumber" name="L938" href="#L938">938</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException( <span class="jxr_string">"Size of "</span> + f + <span class="jxr_string">" does not match declared "</span> + size );
<a class="jxr_linenumber" name="L939" href="#L939">939</a> }
<a class="jxr_linenumber" name="L940" href="#L940">940</a> }
<a class="jxr_linenumber" name="L941" href="#L941">941</a>
<a class="jxr_linenumber" name="L942" href="#L942">942</a> <strong class="jxr_keyword">private</strong> File getHarnessNbm() <strong class="jxr_keyword">throws</strong> MojoExecutionException
<a class="jxr_linenumber" name="L943" href="#L943">943</a> {
<a class="jxr_linenumber" name="L944" href="#L944">944</a> @SuppressWarnings( <span class="jxr_string">"unchecked"</span> )
<a class="jxr_linenumber" name="L945" href="#L945">945</a> Set&lt;Artifact&gt; artifacts = project.getArtifacts();
<a class="jxr_linenumber" name="L946" href="#L946">946</a> String version = <strong class="jxr_keyword">null</strong>;
<a class="jxr_linenumber" name="L947" href="#L947">947</a> <strong class="jxr_keyword">for</strong> (Artifact a : artifacts) {
<a class="jxr_linenumber" name="L948" href="#L948">948</a> <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"org.netbeans.modules"</span>.equals(a.getGroupId()) &amp;&amp; <span class="jxr_string">"org-netbeans-bootstrap"</span>.equals(a.getArtifactId())) {
<a class="jxr_linenumber" name="L949" href="#L949">949</a> version = a.getBaseVersion(); <em class="jxr_comment">//base version in non-snapshot should equals version, in snapshots to X-SNAPSHOT, not timestamp</em>
<a class="jxr_linenumber" name="L950" href="#L950">950</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L951" href="#L951">951</a> }
<a class="jxr_linenumber" name="L952" href="#L952">952</a> }
<a class="jxr_linenumber" name="L953" href="#L953">953</a> <strong class="jxr_keyword">if</strong> (version == <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L954" href="#L954">954</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException( <span class="jxr_string">"We could not find org-netbeans-bootstrap among the modules in the application. Launchers could not be found."</span>);
<a class="jxr_linenumber" name="L955" href="#L955">955</a> }
<a class="jxr_linenumber" name="L956" href="#L956">956</a> Artifact nbmArt = artifactFactory.createArtifact(
<a class="jxr_linenumber" name="L957" href="#L957">957</a> <span class="jxr_string">"org.netbeans.modules"</span>,
<a class="jxr_linenumber" name="L958" href="#L958">958</a> <span class="jxr_string">"org-netbeans-modules-apisupport-harness"</span>,
<a class="jxr_linenumber" name="L959" href="#L959">959</a> version,
<a class="jxr_linenumber" name="L960" href="#L960">960</a> <span class="jxr_string">"compile"</span>,
<a class="jxr_linenumber" name="L961" href="#L961">961</a> <span class="jxr_string">"nbm-file"</span>);
<a class="jxr_linenumber" name="L962" href="#L962">962</a> <strong class="jxr_keyword">try</strong>
<a class="jxr_linenumber" name="L963" href="#L963">963</a> {
<a class="jxr_linenumber" name="L964" href="#L964">964</a> artifactResolver.resolve( nbmArt, project.getRemoteArtifactRepositories(), localRepository );
<a class="jxr_linenumber" name="L965" href="#L965">965</a> }
<a class="jxr_linenumber" name="L966" href="#L966">966</a>
<a class="jxr_linenumber" name="L967" href="#L967">967</a> <strong class="jxr_keyword">catch</strong> ( ArtifactResolutionException | ArtifactNotFoundException ex )
<a class="jxr_linenumber" name="L968" href="#L968">968</a> {
<a class="jxr_linenumber" name="L969" href="#L969">969</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException( <span class="jxr_string">"Failed to retrieve the nbm file from repository"</span>, ex );
<a class="jxr_linenumber" name="L970" href="#L970">970</a> }
<a class="jxr_linenumber" name="L971" href="#L971">971</a> <strong class="jxr_keyword">return</strong> nbmArt.getFile();
<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> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> writeFromZip( <strong class="jxr_keyword">final</strong> ZipFile zip, String zipPath, File destFile, <strong class="jxr_keyword">boolean</strong> mandatory ) <strong class="jxr_keyword">throws</strong> MojoExecutionException, IOException
<a class="jxr_linenumber" name="L975" href="#L975">975</a> {
<a class="jxr_linenumber" name="L976" href="#L976">976</a> <strong class="jxr_keyword">final</strong> ZipEntry path = zip.getEntry( zipPath );
<a class="jxr_linenumber" name="L977" href="#L977">977</a> <strong class="jxr_keyword">if</strong> (path == <strong class="jxr_keyword">null</strong>) {
<a class="jxr_linenumber" name="L978" href="#L978">978</a> <strong class="jxr_keyword">if</strong> (mandatory) {
<a class="jxr_linenumber" name="L979" href="#L979">979</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> MojoExecutionException( zipPath + <span class="jxr_string">" not found in "</span> + zip.getName());
<a class="jxr_linenumber" name="L980" href="#L980">980</a> }
<a class="jxr_linenumber" name="L981" href="#L981">981</a> getLog().debug(zipPath + <span class="jxr_string">" is not present in "</span> + zip.getName());
<a class="jxr_linenumber" name="L982" href="#L982">982</a> <strong class="jxr_keyword">return</strong>;
<a class="jxr_linenumber" name="L983" href="#L983">983</a> }
<a class="jxr_linenumber" name="L984" href="#L984">984</a> FileUtils.copyStreamToFile( <strong class="jxr_keyword">new</strong> InputStreamFacade() {
<a class="jxr_linenumber" name="L985" href="#L985">985</a>
<a class="jxr_linenumber" name="L986" href="#L986">986</a> @Override
<a class="jxr_linenumber" name="L987" href="#L987">987</a> <strong class="jxr_keyword">public</strong> InputStream getInputStream() <strong class="jxr_keyword">throws</strong> IOException
<a class="jxr_linenumber" name="L988" href="#L988">988</a> {
<a class="jxr_linenumber" name="L989" href="#L989">989</a> <strong class="jxr_keyword">return</strong> zip.getInputStream( path );
<a class="jxr_linenumber" name="L990" href="#L990">990</a> }
<a class="jxr_linenumber" name="L991" href="#L991">991</a> }, destFile);
<a class="jxr_linenumber" name="L992" href="#L992">992</a> }
<a class="jxr_linenumber" name="L993" href="#L993">993</a>
<a class="jxr_linenumber" name="L994" href="#L994">994</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> addToMap( Map&lt;String, Set&lt;String&gt;&gt; map, String clusterName, List&lt;String&gt; newValues )
<a class="jxr_linenumber" name="L995" href="#L995">995</a> {
<a class="jxr_linenumber" name="L996" href="#L996">996</a> Set&lt;String&gt; lst = map.get( clusterName );
<a class="jxr_linenumber" name="L997" href="#L997">997</a> <strong class="jxr_keyword">if</strong> ( lst == <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L998" href="#L998">998</a> {
<a class="jxr_linenumber" name="L999" href="#L999">999</a> lst = <strong class="jxr_keyword">new</strong> HashSet&lt;&gt;();
<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a> map.put( clusterName, lst );
<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a> }
<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a> <strong class="jxr_keyword">if</strong> ( newValues != <strong class="jxr_keyword">null</strong> )
<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a> {
<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a> lst.addAll( newValues );
<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a> }
<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a> }
<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a>
<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; findByDependencies( Map&lt;String, Set&lt;String&gt;&gt; clusterDependencies, String spec)
<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a> {
<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a> List&lt;String&gt; toRet = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a> <strong class="jxr_keyword">for</strong> ( Map.Entry&lt;String, Set&lt;String&gt;&gt; entry : clusterDependencies.entrySet() )
<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a> {
<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a> <strong class="jxr_keyword">if</strong> ( entry.getValue().contains( spec ) )
<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a> {
<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a> toRet.add(entry.getKey());
<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a> }
<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a> }
<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a> <strong class="jxr_keyword">return</strong> toRet;
<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a> }
<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a>
<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a> <em class="jxr_comment">//the basic idea is that bundle's cluster can be determined by who depends on it.</em>
<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> <em class="jxr_comment">//simplest case is when a module depends on it. If there are more, we need to pick one that is "lower in the stack, that's what cluster2depClusters is for.</em>
<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a> <em class="jxr_comment">//the rest needs to be determined in more sofisticated manner.</em>
<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> <em class="jxr_comment">//start from bundles with known cluster and see what other bundles they depend on. stamp all these with the same cluster. do it recursively.</em>
<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a> <em class="jxr_comment">//At the end process the remaining bundles in reverse order. Check if *they* depend on a bundle with known cluster and so on..</em>
<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a> <em class="jxr_comment">//A few unsolved cases:</em>
<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a> <em class="jxr_comment">// - we never update the cluster information once a match was found, but there is a possibility that later in the processing the cluster could be "lowered".</em>
<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a> <em class="jxr_comment">// - 2 or more modules from unrelated clusters we cannot easily decide, most likely should be in common denominator cluster but our cluster2depClusters map is not transitive, only lists direct dependencies</em>
<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> assignClustersToBundles( List&lt;BundleTuple&gt; bundles, Set&lt;String&gt; wrappedBundleCNBs, Map&lt;String, Set&lt;String&gt;&gt; clusterDependencies, Map&lt;String, Set&lt;String&gt;&gt; cluster2depClusters, Log log)
<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a> {
<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a> List&lt;BundleTuple&gt; toProcess = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a> List&lt;BundleTuple&gt; known = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a> <strong class="jxr_keyword">for</strong> ( Iterator&lt;BundleTuple&gt; it = bundles.iterator(); it.hasNext(); )
<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a> {
<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a> BundleTuple ent = it.next();
<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a> Artifact art = ent.artifact;
<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a> ExamineManifest ex = ent.manifest;
<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a> String spec = ex.getModule();
<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a> <em class="jxr_comment">//null check for tests</em>
<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a> <em class="jxr_comment">//have a way to force inclusion of osgi items. Direct dependency is never wrapped by modules.</em>
<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a> <strong class="jxr_keyword">if</strong> ( art != <strong class="jxr_keyword">null</strong> &amp;&amp; art.getDependencyTrail().size() &gt; 2 &amp;&amp; wrappedBundleCNBs.contains( spec ) )
<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a> {
<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a> <em class="jxr_comment">// we already have this one as a wrapped module.</em>
<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a> log.debug( <span class="jxr_string">"Not including bundle "</span> + art.getDependencyConflictId()
<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a> + <span class="jxr_string">". It is already included in a NetBeans module"</span> );
<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a> it.remove();
<a class="jxr_linenumber" name="L1047" href="#L1047">1047</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L1048" href="#L1048">1048</a> }
<a class="jxr_linenumber" name="L1049" href="#L1049">1049</a> List&lt;String&gt; depclusters = findByDependencies(clusterDependencies, spec);
<a class="jxr_linenumber" name="L1050" href="#L1050">1050</a> <strong class="jxr_keyword">if</strong> (depclusters.size() == 1) {
<a class="jxr_linenumber" name="L1051" href="#L1051">1051</a> ent.cluster = depclusters.get( 0 );
<a class="jxr_linenumber" name="L1052" href="#L1052">1052</a> known.add( ent );
<a class="jxr_linenumber" name="L1053" href="#L1053">1053</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (depclusters.isEmpty()) {
<a class="jxr_linenumber" name="L1054" href="#L1054">1054</a> toProcess.add(ent);
<a class="jxr_linenumber" name="L1055" href="#L1055">1055</a> } <strong class="jxr_keyword">else</strong> {
<a class="jxr_linenumber" name="L1056" href="#L1056">1056</a> <em class="jxr_comment">//more results.. from 2 dependent clusters pick the one that is lower in the stack.</em>
<a class="jxr_linenumber" name="L1057" href="#L1057">1057</a> <strong class="jxr_keyword">for</strong> ( Iterator&lt;String&gt; it2 = depclusters.iterator(); it2.hasNext(); )
<a class="jxr_linenumber" name="L1058" href="#L1058">1058</a> {
<a class="jxr_linenumber" name="L1059" href="#L1059">1059</a> String s = it2.next();
<a class="jxr_linenumber" name="L1060" href="#L1060">1060</a> Set&lt;String&gt; depsCs = cluster2depClusters.get( s );
<a class="jxr_linenumber" name="L1061" href="#L1061">1061</a> <strong class="jxr_keyword">boolean</strong> removeS = false;
<a class="jxr_linenumber" name="L1062" href="#L1062">1062</a> <strong class="jxr_keyword">for</strong> (String sDep : depclusters) {
<a class="jxr_linenumber" name="L1063" href="#L1063">1063</a> <strong class="jxr_keyword">if</strong> (s.equals( sDep) ) {
<a class="jxr_linenumber" name="L1064" href="#L1064">1064</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L1065" href="#L1065">1065</a> }
<a class="jxr_linenumber" name="L1066" href="#L1066">1066</a> <strong class="jxr_keyword">if</strong> (depsCs != <strong class="jxr_keyword">null</strong> &amp;&amp; depsCs.contains( sDep ) ) {
<a class="jxr_linenumber" name="L1067" href="#L1067">1067</a> removeS = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1068" href="#L1068">1068</a> }
<a class="jxr_linenumber" name="L1069" href="#L1069">1069</a> }
<a class="jxr_linenumber" name="L1070" href="#L1070">1070</a> <strong class="jxr_keyword">if</strong> (removeS) {
<a class="jxr_linenumber" name="L1071" href="#L1071">1071</a> it2.remove();
<a class="jxr_linenumber" name="L1072" href="#L1072">1072</a> }
<a class="jxr_linenumber" name="L1073" href="#L1073">1073</a> }
<a class="jxr_linenumber" name="L1074" href="#L1074">1074</a> ent.cluster = depclusters.get( 0 ); <em class="jxr_comment">//TODO still some free room there, what if they don't directly depend on each other but still are related</em>
<a class="jxr_linenumber" name="L1075" href="#L1075">1075</a> known.add (ent);
<a class="jxr_linenumber" name="L1076" href="#L1076">1076</a> }
<a class="jxr_linenumber" name="L1077" href="#L1077">1077</a> }
<a class="jxr_linenumber" name="L1078" href="#L1078">1078</a> <strong class="jxr_keyword">if</strong> (!toProcess.isEmpty())
<a class="jxr_linenumber" name="L1079" href="#L1079">1079</a> {
<a class="jxr_linenumber" name="L1080" href="#L1080">1080</a> walkKnownBundleDependenciesDown(known, toProcess);
<a class="jxr_linenumber" name="L1081" href="#L1081">1081</a> }
<a class="jxr_linenumber" name="L1082" href="#L1082">1082</a> <strong class="jxr_keyword">if</strong> (!toProcess.isEmpty())
<a class="jxr_linenumber" name="L1083" href="#L1083">1083</a> {
<a class="jxr_linenumber" name="L1084" href="#L1084">1084</a> walkKnownBundleDependenciesUp(known, toProcess);
<a class="jxr_linenumber" name="L1085" href="#L1085">1085</a> }
<a class="jxr_linenumber" name="L1086" href="#L1086">1086</a> }
<a class="jxr_linenumber" name="L1087" href="#L1087">1087</a>
<a class="jxr_linenumber" name="L1088" href="#L1088">1088</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> walkKnownBundleDependenciesDown( List&lt;BundleTuple&gt; known, List&lt;BundleTuple&gt; toProcess )
<a class="jxr_linenumber" name="L1089" href="#L1089">1089</a> {
<a class="jxr_linenumber" name="L1090" href="#L1090">1090</a> <strong class="jxr_keyword">boolean</strong> atLeastOneWasFound = false;
<a class="jxr_linenumber" name="L1091" href="#L1091">1091</a> <strong class="jxr_keyword">for</strong> ( Iterator&lt;BundleTuple&gt; it = toProcess.iterator(); it.hasNext(); )
<a class="jxr_linenumber" name="L1092" href="#L1092">1092</a> {
<a class="jxr_linenumber" name="L1093" href="#L1093">1093</a> BundleTuple bundleTuple = it.next();
<a class="jxr_linenumber" name="L1094" href="#L1094">1094</a> <strong class="jxr_keyword">boolean</strong> found = false;
<a class="jxr_linenumber" name="L1095" href="#L1095">1095</a> <strong class="jxr_keyword">for</strong> ( BundleTuple knownBT : known)
<a class="jxr_linenumber" name="L1096" href="#L1096">1096</a> {
<a class="jxr_linenumber" name="L1097" href="#L1097">1097</a> Sets.SetView&lt;String&gt; is = Sets.intersection(bundleTuple.manifest.getOsgiExports() , knownBT.manifest.getOsgiImports() );
<a class="jxr_linenumber" name="L1098" href="#L1098">1098</a> <strong class="jxr_keyword">if</strong> (!is.isEmpty()) {
<a class="jxr_linenumber" name="L1099" href="#L1099">1099</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1100" href="#L1100">1100</a> bundleTuple.cluster = knownBT.cluster;
<a class="jxr_linenumber" name="L1101" href="#L1101">1101</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L1102" href="#L1102">1102</a> }
<a class="jxr_linenumber" name="L1103" href="#L1103">1103</a> <em class="jxr_comment">//dependencyTokens are requireBundle - matches the module property</em>
<a class="jxr_linenumber" name="L1104" href="#L1104">1104</a> is = Sets.intersection(Collections.singleton( bundleTuple.manifest.getModule()), <strong class="jxr_keyword">new</strong> HashSet(knownBT.manifest.getDependencyTokens()) );
<a class="jxr_linenumber" name="L1105" href="#L1105">1105</a> <strong class="jxr_keyword">if</strong> (!is.isEmpty()) {
<a class="jxr_linenumber" name="L1106" href="#L1106">1106</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1107" href="#L1107">1107</a> bundleTuple.cluster = knownBT.cluster;
<a class="jxr_linenumber" name="L1108" href="#L1108">1108</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L1109" href="#L1109">1109</a> }
<a class="jxr_linenumber" name="L1110" href="#L1110">1110</a>
<a class="jxr_linenumber" name="L1111" href="#L1111">1111</a> }
<a class="jxr_linenumber" name="L1112" href="#L1112">1112</a> <strong class="jxr_keyword">if</strong> (found) {
<a class="jxr_linenumber" name="L1113" href="#L1113">1113</a> atLeastOneWasFound = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1114" href="#L1114">1114</a> it.remove();
<a class="jxr_linenumber" name="L1115" href="#L1115">1115</a> known.add(bundleTuple);
<a class="jxr_linenumber" name="L1116" href="#L1116">1116</a> }
<a class="jxr_linenumber" name="L1117" href="#L1117">1117</a>
<a class="jxr_linenumber" name="L1118" href="#L1118">1118</a> }
<a class="jxr_linenumber" name="L1119" href="#L1119">1119</a> <strong class="jxr_keyword">if</strong> (!toProcess.isEmpty() &amp;&amp; atLeastOneWasFound) {
<a class="jxr_linenumber" name="L1120" href="#L1120">1120</a> walkKnownBundleDependenciesDown( known, toProcess );
<a class="jxr_linenumber" name="L1121" href="#L1121">1121</a> }
<a class="jxr_linenumber" name="L1122" href="#L1122">1122</a> }
<a class="jxr_linenumber" name="L1123" href="#L1123">1123</a>
<a class="jxr_linenumber" name="L1124" href="#L1124">1124</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> walkKnownBundleDependenciesUp( List&lt;BundleTuple&gt; known, List&lt;BundleTuple&gt; toProcess )
<a class="jxr_linenumber" name="L1125" href="#L1125">1125</a> {
<a class="jxr_linenumber" name="L1126" href="#L1126">1126</a> <strong class="jxr_keyword">boolean</strong> atLeastOneWasFound = false;
<a class="jxr_linenumber" name="L1127" href="#L1127">1127</a> <strong class="jxr_keyword">for</strong> ( Iterator&lt;BundleTuple&gt; it = toProcess.iterator(); it.hasNext(); )
<a class="jxr_linenumber" name="L1128" href="#L1128">1128</a> {
<a class="jxr_linenumber" name="L1129" href="#L1129">1129</a> BundleTuple bundleTuple = it.next();
<a class="jxr_linenumber" name="L1130" href="#L1130">1130</a> <strong class="jxr_keyword">boolean</strong> found = false;
<a class="jxr_linenumber" name="L1131" href="#L1131">1131</a> <strong class="jxr_keyword">for</strong> ( BundleTuple knownBT : known)
<a class="jxr_linenumber" name="L1132" href="#L1132">1132</a> {
<a class="jxr_linenumber" name="L1133" href="#L1133">1133</a> Sets.SetView&lt;String&gt; is = Sets.intersection(bundleTuple.manifest.getOsgiImports() , knownBT.manifest.getOsgiExports() );
<a class="jxr_linenumber" name="L1134" href="#L1134">1134</a> <strong class="jxr_keyword">if</strong> (!is.isEmpty()) {
<a class="jxr_linenumber" name="L1135" href="#L1135">1135</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1136" href="#L1136">1136</a> bundleTuple.cluster = knownBT.cluster;
<a class="jxr_linenumber" name="L1137" href="#L1137">1137</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L1138" href="#L1138">1138</a> }
<a class="jxr_linenumber" name="L1139" href="#L1139">1139</a> <em class="jxr_comment">//dependencyTokens are requireBundle - matches the module property</em>
<a class="jxr_linenumber" name="L1140" href="#L1140">1140</a> is = Sets.intersection(Collections.singleton( knownBT.manifest.getModule()), <strong class="jxr_keyword">new</strong> HashSet(bundleTuple.manifest.getDependencyTokens()) );
<a class="jxr_linenumber" name="L1141" href="#L1141">1141</a> <strong class="jxr_keyword">if</strong> (!is.isEmpty()) {
<a class="jxr_linenumber" name="L1142" href="#L1142">1142</a> found = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1143" href="#L1143">1143</a> bundleTuple.cluster = knownBT.cluster;
<a class="jxr_linenumber" name="L1144" href="#L1144">1144</a> <strong class="jxr_keyword">break</strong>;
<a class="jxr_linenumber" name="L1145" href="#L1145">1145</a> }
<a class="jxr_linenumber" name="L1146" href="#L1146">1146</a>
<a class="jxr_linenumber" name="L1147" href="#L1147">1147</a> }
<a class="jxr_linenumber" name="L1148" href="#L1148">1148</a> <strong class="jxr_keyword">if</strong> (found) {
<a class="jxr_linenumber" name="L1149" href="#L1149">1149</a> atLeastOneWasFound = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1150" href="#L1150">1150</a> it.remove();
<a class="jxr_linenumber" name="L1151" href="#L1151">1151</a> known.add(bundleTuple);
<a class="jxr_linenumber" name="L1152" href="#L1152">1152</a> }
<a class="jxr_linenumber" name="L1153" href="#L1153">1153</a>
<a class="jxr_linenumber" name="L1154" href="#L1154">1154</a> }
<a class="jxr_linenumber" name="L1155" href="#L1155">1155</a> <strong class="jxr_keyword">if</strong> (!toProcess.isEmpty() &amp;&amp; atLeastOneWasFound) {
<a class="jxr_linenumber" name="L1156" href="#L1156">1156</a> walkKnownBundleDependenciesDown( known, toProcess );
<a class="jxr_linenumber" name="L1157" href="#L1157">1157</a> }
<a class="jxr_linenumber" name="L1158" href="#L1158">1158</a> <strong class="jxr_keyword">if</strong> (!toProcess.isEmpty() &amp;&amp; atLeastOneWasFound) {
<a class="jxr_linenumber" name="L1159" href="#L1159">1159</a> walkKnownBundleDependenciesUp( known, toProcess );
<a class="jxr_linenumber" name="L1160" href="#L1160">1160</a> }
<a class="jxr_linenumber" name="L1161" href="#L1161">1161</a> }
<a class="jxr_linenumber" name="L1162" href="#L1162">1162</a>
<a class="jxr_linenumber" name="L1163" href="#L1163">1163</a> <em class="jxr_comment">//static and default for tests..</em>
<a class="jxr_linenumber" name="L1164" href="#L1164">1164</a> <strong class="jxr_keyword">static</strong> Map&lt;String, Set&lt;String&gt;&gt; computeClusterOrdering( Map&lt;String, Set&lt;String&gt;&gt; clusterDependencies, Map&lt;String, Set&lt;String&gt;&gt; clusterModules )
<a class="jxr_linenumber" name="L1165" href="#L1165">1165</a> {
<a class="jxr_linenumber" name="L1166" href="#L1166">1166</a> Map&lt;String, Set&lt;String&gt;&gt; cluster2depClusters = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
<a class="jxr_linenumber" name="L1167" href="#L1167">1167</a> <strong class="jxr_keyword">for</strong> ( Map.Entry&lt;String, Set&lt;String&gt;&gt; entry : clusterDependencies.entrySet() )
<a class="jxr_linenumber" name="L1168" href="#L1168">1168</a> {
<a class="jxr_linenumber" name="L1169" href="#L1169">1169</a> String cluster = entry.getKey();
<a class="jxr_linenumber" name="L1170" href="#L1170">1170</a> Set&lt;String&gt; deps = entry.getValue();
<a class="jxr_linenumber" name="L1171" href="#L1171">1171</a> <strong class="jxr_keyword">for</strong> (Map.Entry&lt;String, Set&lt;String&gt;&gt; subEnt : clusterModules.entrySet()) {
<a class="jxr_linenumber" name="L1172" href="#L1172">1172</a> <strong class="jxr_keyword">if</strong> (subEnt.getKey().equals( cluster) ) {
<a class="jxr_linenumber" name="L1173" href="#L1173">1173</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="L1174" href="#L1174">1174</a> }
<a class="jxr_linenumber" name="L1175" href="#L1175">1175</a> Sets.SetView&lt;String&gt; is = Sets.intersection(subEnt.getValue(), deps );
<a class="jxr_linenumber" name="L1176" href="#L1176">1176</a> <strong class="jxr_keyword">if</strong> (!is.isEmpty()) {
<a class="jxr_linenumber" name="L1177" href="#L1177">1177</a> addToMap( cluster2depClusters, cluster, Collections.singletonList( subEnt.getKey() ) );
<a class="jxr_linenumber" name="L1178" href="#L1178">1178</a> }
<a class="jxr_linenumber" name="L1179" href="#L1179">1179</a> }
<a class="jxr_linenumber" name="L1180" href="#L1180">1180</a> }
<a class="jxr_linenumber" name="L1181" href="#L1181">1181</a> <strong class="jxr_keyword">return</strong> cluster2depClusters;
<a class="jxr_linenumber" name="L1182" href="#L1182">1182</a> }
<a class="jxr_linenumber" name="L1183" href="#L1183">1183</a>
<a class="jxr_linenumber" name="L1184" href="#L1184">1184</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> BundleTuple {
<a class="jxr_linenumber" name="L1185" href="#L1185">1185</a> <strong class="jxr_keyword">final</strong> Artifact artifact;
<a class="jxr_linenumber" name="L1186" href="#L1186">1186</a> <strong class="jxr_keyword">final</strong> ExamineManifest manifest;
<a class="jxr_linenumber" name="L1187" href="#L1187">1187</a> String cluster;
<a class="jxr_linenumber" name="L1188" href="#L1188">1188</a>
<a class="jxr_linenumber" name="L1189" href="#L1189">1189</a> BundleTuple( Artifact artifact, ExamineManifest manifest )
<a class="jxr_linenumber" name="L1190" href="#L1190">1190</a> {
<a class="jxr_linenumber" name="L1191" href="#L1191">1191</a> <strong class="jxr_keyword">this</strong>.artifact = artifact;
<a class="jxr_linenumber" name="L1192" href="#L1192">1192</a> <strong class="jxr_keyword">this</strong>.manifest = manifest;
<a class="jxr_linenumber" name="L1193" href="#L1193">1193</a> }
<a class="jxr_linenumber" name="L1194" href="#L1194">1194</a>
<a class="jxr_linenumber" name="L1195" href="#L1195">1195</a> }
<a class="jxr_linenumber" name="L1196" href="#L1196">1196</a>
<a class="jxr_linenumber" name="L1197" href="#L1197">1197</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> ClusterTuple
<a class="jxr_linenumber" name="L1198" href="#L1198">1198</a> {
<a class="jxr_linenumber" name="L1199" href="#L1199">1199</a> <strong class="jxr_keyword">final</strong> File location;
<a class="jxr_linenumber" name="L1200" href="#L1200">1200</a> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> newer;
<a class="jxr_linenumber" name="L1201" href="#L1201">1201</a>
<a class="jxr_linenumber" name="L1202" href="#L1202">1202</a> <strong class="jxr_keyword">private</strong> ClusterTuple( File clusterFile, <strong class="jxr_keyword">boolean</strong> newer )
<a class="jxr_linenumber" name="L1203" href="#L1203">1203</a> {
<a class="jxr_linenumber" name="L1204" href="#L1204">1204</a> location = clusterFile;
<a class="jxr_linenumber" name="L1205" href="#L1205">1205</a> <strong class="jxr_keyword">this</strong>.newer = newer;
<a class="jxr_linenumber" name="L1206" href="#L1206">1206</a> }
<a class="jxr_linenumber" name="L1207" href="#L1207">1207</a> }
<a class="jxr_linenumber" name="L1208" href="#L1208">1208</a>
<a class="jxr_linenumber" name="L1209" href="#L1209">1209</a> <strong class="jxr_keyword">static</strong> String createBundleConfigFile( String cnb, <strong class="jxr_keyword">boolean</strong> autoload)
<a class="jxr_linenumber" name="L1210" href="#L1210">1210</a> {
<a class="jxr_linenumber" name="L1211" href="#L1211">1211</a> <strong class="jxr_keyword">return</strong>
<a class="jxr_linenumber" name="L1212" href="#L1212">1212</a> <span class="jxr_string">"&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;\n"</span> +
<a class="jxr_linenumber" name="L1213" href="#L1213">1213</a> <span class="jxr_string">"&lt;!DOCTYPE module PUBLIC \&quot;-//NetBeans//DTD Module Status 1.0//EN\&quot;\n"</span> +
<a class="jxr_linenumber" name="L1214" href="#L1214">1214</a> <span class="jxr_string">" \&quot;http://www.netbeans.org/dtds/module-status-1_0.dtd\&quot;&gt;\n"</span> +
<a class="jxr_linenumber" name="L1215" href="#L1215">1215</a> <span class="jxr_string">"&lt;module name=\&quot;"</span> + cnb +<span class="jxr_string">"\&quot;&gt;\n"</span> +
<a class="jxr_linenumber" name="L1216" href="#L1216">1216</a> <span class="jxr_string">" &lt;param name=\&quot;autoload\&quot;&gt;"</span> + autoload + <span class="jxr_string">"&lt;/param&gt;\n"</span> +
<a class="jxr_linenumber" name="L1217" href="#L1217">1217</a> <span class="jxr_string">" &lt;param name=\&quot;eager\&quot;&gt;false&lt;/param&gt;\n"</span> + (autoload ? <span class="jxr_string">""</span> : <span class="jxr_string">" &lt;param name=\&quot;enabled\&quot;&gt;true&lt;/param&gt;\n"</span>) +
<a class="jxr_linenumber" name="L1218" href="#L1218">1218</a> <span class="jxr_string">" &lt;param name=\&quot;jar\&quot;&gt;modules/"</span> + cnb.replace( <span class="jxr_string">"."</span>, <span class="jxr_string">"-"</span>) + <span class="jxr_string">".jar&lt;/param&gt;\n"</span> +
<a class="jxr_linenumber" name="L1219" href="#L1219">1219</a> <span class="jxr_string">" &lt;param name=\&quot;reloadable\&quot;&gt;false&lt;/param&gt;\n"</span> +
<a class="jxr_linenumber" name="L1220" href="#L1220">1220</a> <span class="jxr_string">"&lt;/module&gt;\n"</span>;
<a class="jxr_linenumber" name="L1221" href="#L1221">1221</a> }
<a class="jxr_linenumber" name="L1222" href="#L1222">1222</a>
<a class="jxr_linenumber" name="L1223" href="#L1223">1223</a> <strong class="jxr_keyword">static</strong> String createBundleUpdateTracking( String cnb, File moduleArt, File moduleConf, String specVersion )
<a class="jxr_linenumber" name="L1224" href="#L1224">1224</a> <strong class="jxr_keyword">throws</strong> FileNotFoundException, IOException
<a class="jxr_linenumber" name="L1225" href="#L1225">1225</a> {
<a class="jxr_linenumber" name="L1226" href="#L1226">1226</a>
<a class="jxr_linenumber" name="L1227" href="#L1227">1227</a> <strong class="jxr_keyword">return</strong>
<a class="jxr_linenumber" name="L1228" href="#L1228">1228</a> <span class="jxr_string">"&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;\n"</span> +
<a class="jxr_linenumber" name="L1229" href="#L1229">1229</a> <span class="jxr_string">"&lt;module codename=\&quot;"</span> + cnb + <span class="jxr_string">"\&quot;&gt;\n"</span> +
<a class="jxr_linenumber" name="L1230" href="#L1230">1230</a> <span class="jxr_string">" &lt;module_version install_time=\&quot;"</span> + System.currentTimeMillis() + <span class="jxr_string">"\&quot; last=\&quot;true\&quot; origin=\&quot;installer\&quot; specification_version=\&quot;"</span> + specVersion + <span class="jxr_string">"\&quot;&gt;\n"</span> +
<a class="jxr_linenumber" name="L1231" href="#L1231">1231</a> <span class="jxr_string">" &lt;file crc=\&quot;"</span> + crcForFile( moduleConf ).getValue() + <span class="jxr_string">"\&quot; name=\&quot;config/Modules/"</span> + cnb.replace( <span class="jxr_string">"."</span>, <span class="jxr_string">"-"</span> ) + <span class="jxr_string">".xml\&quot;/&gt;\n"</span> +
<a class="jxr_linenumber" name="L1232" href="#L1232">1232</a> <span class="jxr_string">" &lt;file crc=\&quot;"</span> + crcForFile( moduleArt ).getValue() + <span class="jxr_string">"\&quot; name=\&quot;modules/"</span> + cnb.replace( <span class="jxr_string">"."</span>, <span class="jxr_string">"-"</span> ) + <span class="jxr_string">".jar\&quot;/&gt;\n"</span> +
<a class="jxr_linenumber" name="L1233" href="#L1233">1233</a> <span class="jxr_string">" &lt;/module_version&gt;\n"</span> +
<a class="jxr_linenumber" name="L1234" href="#L1234">1234</a> <span class="jxr_string">"&lt;/module&gt;"</span>;
<a class="jxr_linenumber" name="L1235" href="#L1235">1235</a>
<a class="jxr_linenumber" name="L1236" href="#L1236">1236</a> }
<a class="jxr_linenumber" name="L1237" href="#L1237">1237</a>
<a class="jxr_linenumber" name="L1238" href="#L1238">1238</a> <strong class="jxr_keyword">static</strong> CRC32 crcForFile( File inFile )
<a class="jxr_linenumber" name="L1239" href="#L1239">1239</a> <strong class="jxr_keyword">throws</strong> FileNotFoundException, IOException
<a class="jxr_linenumber" name="L1240" href="#L1240">1240</a> {
<a class="jxr_linenumber" name="L1241" href="#L1241">1241</a> CRC32 crc = <strong class="jxr_keyword">new</strong> CRC32();
<a class="jxr_linenumber" name="L1242" href="#L1242">1242</a> <strong class="jxr_keyword">try</strong> (InputStream inFileStream = <strong class="jxr_keyword">new</strong> FileInputStream( inFile )) {
<a class="jxr_linenumber" name="L1243" href="#L1243">1243</a> byte[] array = <strong class="jxr_keyword">new</strong> byte[(<strong class="jxr_keyword">int</strong>) inFile.length()];
<a class="jxr_linenumber" name="L1244" href="#L1244">1244</a> <strong class="jxr_keyword">int</strong> len = inFileStream.read( array );
<a class="jxr_linenumber" name="L1245" href="#L1245">1245</a> <strong class="jxr_keyword">if</strong> ( len != array.length )
<a class="jxr_linenumber" name="L1246" href="#L1246">1246</a> {
<a class="jxr_linenumber" name="L1247" href="#L1247">1247</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException( <span class="jxr_string">"Cannot fully read "</span> + inFile );
<a class="jxr_linenumber" name="L1248" href="#L1248">1248</a> }
<a class="jxr_linenumber" name="L1249" href="#L1249">1249</a> crc.update( array );
<a class="jxr_linenumber" name="L1250" href="#L1250">1250</a> }
<a class="jxr_linenumber" name="L1251" href="#L1251">1251</a> <strong class="jxr_keyword">return</strong> crc;
<a class="jxr_linenumber" name="L1252" href="#L1252">1252</a> }
<a class="jxr_linenumber" name="L1253" href="#L1253">1253</a>
<a class="jxr_linenumber" name="L1254" href="#L1254">1254</a> }
</pre>
<hr/>
<div id="footer">Copyright &#169; 2005&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</div>
</body>
</html>