<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.common.utils;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.commons.lang3.StringUtils;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.regex.Matcher;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.regex.Pattern;<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
<span class="sourceLineNo">028</span> * Version utility methods.<a name="line.28"></a>
<span class="sourceLineNo">029</span> */<a name="line.29"></a>
<span class="sourceLineNo">030</span>public class VersionUtil<a name="line.30"></a>
<span class="sourceLineNo">031</span>{<a name="line.31"></a>
<span class="sourceLineNo">032</span>    /**<a name="line.32"></a>
<span class="sourceLineNo">033</span>     * These are the version patterns found in the filenames of the various artifact's versions IDs.<a name="line.33"></a>
<span class="sourceLineNo">034</span>     * These patterns are all tackling lowercase version IDs.<a name="line.34"></a>
<span class="sourceLineNo">035</span>     */<a name="line.35"></a>
<span class="sourceLineNo">036</span>    private static final String versionPatterns[] =<a name="line.36"></a>
<span class="sourceLineNo">037</span>        new String[]{ "([0-9][_.0-9a-z]*)", "(snapshot)", "(g?[_.0-9ab]*(pre|rc|g|m)[_.0-9]*)", "(dev[_.0-9]*)",<a name="line.37"></a>
<span class="sourceLineNo">038</span>            "(alpha[_.0-9]*)", "(beta[_.0-9]*)", "(rc[_.0-9]*)",<a name="line.38"></a>
<span class="sourceLineNo">039</span>//        "(test[_.0-9]*)", -- omitted for MRM-681, can be reinstated as part of MRM-712<a name="line.39"></a>
<span class="sourceLineNo">040</span>            "(debug[_.0-9]*)", "(unofficial[_.0-9]*)", "(current)", "(latest)", "(fcs)", "(release[_.0-9]*)",<a name="line.40"></a>
<span class="sourceLineNo">041</span>            "(nightly)", "(final)", "(incubating)", "(incubator)", "([ab][_.0-9]+)" };<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>    public static final String SNAPSHOT = "SNAPSHOT";<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span>    public static final Pattern UNIQUE_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>    public static final Pattern TIMESTAMP_PATTERN = Pattern.compile( "^([0-9]{8})\\.([0-9]{6})$" );<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>    public static final Pattern GENERIC_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-" + SNAPSHOT );<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
<span class="sourceLineNo">051</span>    private static final Pattern VERSION_MEGA_PATTERN =<a name="line.51"></a>
<span class="sourceLineNo">052</span>        Pattern.compile( StringUtils.join( versionPatterns, '|' ), Pattern.CASE_INSENSITIVE );<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>    /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * &lt;p&gt;<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * Tests if the unknown string contains elements that identify it as a version string (or not).<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * &lt;/p&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span>     *<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * &lt;p&gt;<a name="line.59"></a>
<span class="sourceLineNo">060</span>     * The algorithm tests each part of the string that is delimited by a '-' (dash) character.<a name="line.60"></a>
<span class="sourceLineNo">061</span>     * If 75% or more of the sections are identified as 'version' strings, the result is<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * determined to be of a high probability to be version identifier string.<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * &lt;/p&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span>     *<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * @param unknown the unknown string to test.<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * @return true if the unknown string is likely a version string.<a name="line.66"></a>
<span class="sourceLineNo">067</span>     */<a name="line.67"></a>
<span class="sourceLineNo">068</span>    public static boolean isVersion( String unknown )<a name="line.68"></a>
<span class="sourceLineNo">069</span>    {<a name="line.69"></a>
<span class="sourceLineNo">070</span>        String versionParts[] = StringUtils.split( unknown, '-' );<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>        Matcher mat;<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>        int countValidParts = 0;<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>        for ( int i = 0; i &lt; versionParts.length; i++ )<a name="line.76"></a>
<span class="sourceLineNo">077</span>        {<a name="line.77"></a>
<span class="sourceLineNo">078</span>            String part = versionParts[i];<a name="line.78"></a>
<span class="sourceLineNo">079</span>            mat = VERSION_MEGA_PATTERN.matcher( part );<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>            if ( mat.matches() )<a name="line.81"></a>
<span class="sourceLineNo">082</span>            {<a name="line.82"></a>
<span class="sourceLineNo">083</span>                if ( i == 0 ) // loosen rule to return true if first token matches<a name="line.83"></a>
<span class="sourceLineNo">084</span>                {<a name="line.84"></a>
<span class="sourceLineNo">085</span>                    return true;<a name="line.85"></a>
<span class="sourceLineNo">086</span>                }<a name="line.86"></a>
<span class="sourceLineNo">087</span>                countValidParts++;<a name="line.87"></a>
<span class="sourceLineNo">088</span>            }<a name="line.88"></a>
<span class="sourceLineNo">089</span>        }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>        /* Calculate version probability as true if 3/4's of the input string has pieces of<a name="line.91"></a>
<span class="sourceLineNo">092</span>         * of known version identifier strings.<a name="line.92"></a>
<span class="sourceLineNo">093</span>         */<a name="line.93"></a>
<span class="sourceLineNo">094</span>        int threshold = (int) Math.floor( Math.max( (double) 1.0, (double) ( versionParts.length * 0.75 ) ) );<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>        return ( countValidParts &gt;= threshold );<a name="line.96"></a>
<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * &lt;p&gt;<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * Tests if the identifier is a known simple version keyword.<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * &lt;/p&gt;<a name="line.102"></a>
<span class="sourceLineNo">103</span>     *<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * &lt;p&gt;<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * This method is different from {@link #isVersion(String)} in that it tests the whole input string in<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * one go as a simple identifier. (eg "alpha", "1.0", "beta", "debug", "latest", "rc#", etc...)<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * &lt;/p&gt;<a name="line.107"></a>
<span class="sourceLineNo">108</span>     *<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * @param identifier the identifier to test.<a name="line.109"></a>
<span class="sourceLineNo">110</span>     * @return true if the unknown string is likely a version string.<a name="line.110"></a>
<span class="sourceLineNo">111</span>     */<a name="line.111"></a>
<span class="sourceLineNo">112</span>    public static boolean isSimpleVersionKeyword( String identifier )<a name="line.112"></a>
<span class="sourceLineNo">113</span>    {<a name="line.113"></a>
<span class="sourceLineNo">114</span>        Matcher mat = VERSION_MEGA_PATTERN.matcher( identifier );<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>        return mat.matches();<a name="line.116"></a>
<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>    public static boolean isSnapshot( String version )<a name="line.119"></a>
<span class="sourceLineNo">120</span>    {<a name="line.120"></a>
<span class="sourceLineNo">121</span>        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );<a name="line.121"></a>
<span class="sourceLineNo">122</span>        if ( m.matches() )<a name="line.122"></a>
<span class="sourceLineNo">123</span>        {<a name="line.123"></a>
<span class="sourceLineNo">124</span>            return true;<a name="line.124"></a>
<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
<span class="sourceLineNo">126</span>        else<a name="line.126"></a>
<span class="sourceLineNo">127</span>        {<a name="line.127"></a>
<span class="sourceLineNo">128</span>            return isGenericSnapshot( version );<a name="line.128"></a>
<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>    public static String getBaseVersion( String version )<a name="line.132"></a>
<span class="sourceLineNo">133</span>    {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );<a name="line.134"></a>
<span class="sourceLineNo">135</span>        if ( m.matches() )<a name="line.135"></a>
<span class="sourceLineNo">136</span>        {<a name="line.136"></a>
<span class="sourceLineNo">137</span>            return m.group( 1 ) + "-" + SNAPSHOT;<a name="line.137"></a>
<span class="sourceLineNo">138</span>        }<a name="line.138"></a>
<span class="sourceLineNo">139</span>        else<a name="line.139"></a>
<span class="sourceLineNo">140</span>        {<a name="line.140"></a>
<span class="sourceLineNo">141</span>            return version;<a name="line.141"></a>
<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    /**<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * &lt;p&gt;<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * Get the release version of the snapshot version.<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * &lt;/p&gt;<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * <a name="line.149"></a>
<span class="sourceLineNo">150</span>     * &lt;p&gt;<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * If snapshot version is 1.0-SNAPSHOT, then release version would be 1.0<a name="line.151"></a>
<span class="sourceLineNo">152</span>     * And if snapshot version is 1.0-20070113.163208-1.jar, then release version would still be 1.0<a name="line.152"></a>
<span class="sourceLineNo">153</span>     * &lt;/p&gt;<a name="line.153"></a>
<span class="sourceLineNo">154</span>     *<a name="line.154"></a>
<span class="sourceLineNo">155</span>     * @param snapshotVersion snapshot version<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * @return release version<a name="line.156"></a>
<span class="sourceLineNo">157</span>     */<a name="line.157"></a>
<span class="sourceLineNo">158</span>    public static String getReleaseVersion( String snapshotVersion )<a name="line.158"></a>
<span class="sourceLineNo">159</span>    {<a name="line.159"></a>
<span class="sourceLineNo">160</span>        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( snapshotVersion );<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>        if ( isGenericSnapshot( snapshotVersion ) )<a name="line.162"></a>
<span class="sourceLineNo">163</span>        {<a name="line.163"></a>
<span class="sourceLineNo">164</span>            m = GENERIC_SNAPSHOT_PATTERN.matcher( snapshotVersion );<a name="line.164"></a>
<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>        if ( m.matches() )<a name="line.167"></a>
<span class="sourceLineNo">168</span>        {<a name="line.168"></a>
<span class="sourceLineNo">169</span>            return m.group( 1 );<a name="line.169"></a>
<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
<span class="sourceLineNo">171</span>        else<a name="line.171"></a>
<span class="sourceLineNo">172</span>        {<a name="line.172"></a>
<span class="sourceLineNo">173</span>            return snapshotVersion;<a name="line.173"></a>
<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>    public static boolean isUniqueSnapshot( String version )<a name="line.177"></a>
<span class="sourceLineNo">178</span>    {<a name="line.178"></a>
<span class="sourceLineNo">179</span>        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );<a name="line.179"></a>
<span class="sourceLineNo">180</span>        return m.matches();<a name="line.180"></a>
<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>    public static boolean isGenericSnapshot( String version )<a name="line.183"></a>
<span class="sourceLineNo">184</span>    {<a name="line.184"></a>
<span class="sourceLineNo">185</span>        return version.endsWith( SNAPSHOT );<a name="line.185"></a>
<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
<span class="sourceLineNo">187</span><a name="line.187"></a>
<span class="sourceLineNo">188</span>    public static String getVersionFromGenericSnapshot( String version )<a name="line.188"></a>
<span class="sourceLineNo">189</span>    {<a name="line.189"></a>
<span class="sourceLineNo">190</span>        Matcher m = GENERIC_SNAPSHOT_PATTERN.matcher( version );<a name="line.190"></a>
<span class="sourceLineNo">191</span>        if ( m.matches() )<a name="line.191"></a>
<span class="sourceLineNo">192</span>        {<a name="line.192"></a>
<span class="sourceLineNo">193</span>            return m.group( 1 );<a name="line.193"></a>
<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
<span class="sourceLineNo">195</span>        return version;<a name="line.195"></a>
<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
<span class="sourceLineNo">197</span>}<a name="line.197"></a>




























































</pre>
</div>
</body>
</html>