<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.metadata.model.maven2;<a name="line.1"></a>
<FONT color="green">002</FONT>    <a name="line.2"></a>
<FONT color="green">003</FONT>    /*<a name="line.3"></a>
<FONT color="green">004</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<FONT color="green">005</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<FONT color="green">006</FONT>     * distributed with this work for additional information<a name="line.6"></a>
<FONT color="green">007</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<FONT color="green">008</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<FONT color="green">009</FONT>     * "License"); you may not use this file except in compliance<a name="line.9"></a>
<FONT color="green">010</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<FONT color="green">013</FONT>     *<a name="line.13"></a>
<FONT color="green">014</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<FONT color="green">015</FONT>     * software distributed under the License is distributed on an<a name="line.15"></a>
<FONT color="green">016</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<FONT color="green">017</FONT>     * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<FONT color="green">018</FONT>     * specific language governing permissions and limitations<a name="line.18"></a>
<FONT color="green">019</FONT>     * under the License.<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.archiva.metadata.model.MetadataFacet;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.HashMap;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.Map;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    public class MavenArtifactFacet<a name="line.28"></a>
<FONT color="green">029</FONT>        implements MetadataFacet<a name="line.29"></a>
<FONT color="green">030</FONT>    {<a name="line.30"></a>
<FONT color="green">031</FONT>        private String classifier;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>        private String type;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>        private String timestamp;<a name="line.35"></a>
<FONT color="green">036</FONT>    <a name="line.36"></a>
<FONT color="green">037</FONT>        private int buildNumber;<a name="line.37"></a>
<FONT color="green">038</FONT>    <a name="line.38"></a>
<FONT color="green">039</FONT>        public static final String FACET_ID = "org.apache.archiva.metadata.repository.storage.maven2.artifact";<a name="line.39"></a>
<FONT color="green">040</FONT>    <a name="line.40"></a>
<FONT color="green">041</FONT>        public String getClassifier()<a name="line.41"></a>
<FONT color="green">042</FONT>        {<a name="line.42"></a>
<FONT color="green">043</FONT>            return classifier;<a name="line.43"></a>
<FONT color="green">044</FONT>        }<a name="line.44"></a>
<FONT color="green">045</FONT>    <a name="line.45"></a>
<FONT color="green">046</FONT>        public void setClassifier( String classifier )<a name="line.46"></a>
<FONT color="green">047</FONT>        {<a name="line.47"></a>
<FONT color="green">048</FONT>            this.classifier = classifier;<a name="line.48"></a>
<FONT color="green">049</FONT>        }<a name="line.49"></a>
<FONT color="green">050</FONT>    <a name="line.50"></a>
<FONT color="green">051</FONT>        public String getType()<a name="line.51"></a>
<FONT color="green">052</FONT>        {<a name="line.52"></a>
<FONT color="green">053</FONT>            return type;<a name="line.53"></a>
<FONT color="green">054</FONT>        }<a name="line.54"></a>
<FONT color="green">055</FONT>    <a name="line.55"></a>
<FONT color="green">056</FONT>        public void setType( String type )<a name="line.56"></a>
<FONT color="green">057</FONT>        {<a name="line.57"></a>
<FONT color="green">058</FONT>            this.type = type;<a name="line.58"></a>
<FONT color="green">059</FONT>        }<a name="line.59"></a>
<FONT color="green">060</FONT>    <a name="line.60"></a>
<FONT color="green">061</FONT>        public String getTimestamp()<a name="line.61"></a>
<FONT color="green">062</FONT>        {<a name="line.62"></a>
<FONT color="green">063</FONT>            return timestamp;<a name="line.63"></a>
<FONT color="green">064</FONT>        }<a name="line.64"></a>
<FONT color="green">065</FONT>    <a name="line.65"></a>
<FONT color="green">066</FONT>        public void setTimestamp( String timestamp )<a name="line.66"></a>
<FONT color="green">067</FONT>        {<a name="line.67"></a>
<FONT color="green">068</FONT>            this.timestamp = timestamp;<a name="line.68"></a>
<FONT color="green">069</FONT>        }<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>        public int getBuildNumber()<a name="line.71"></a>
<FONT color="green">072</FONT>        {<a name="line.72"></a>
<FONT color="green">073</FONT>            return buildNumber;<a name="line.73"></a>
<FONT color="green">074</FONT>        }<a name="line.74"></a>
<FONT color="green">075</FONT>    <a name="line.75"></a>
<FONT color="green">076</FONT>        public void setBuildNumber( int buildNumber )<a name="line.76"></a>
<FONT color="green">077</FONT>        {<a name="line.77"></a>
<FONT color="green">078</FONT>            this.buildNumber = buildNumber;<a name="line.78"></a>
<FONT color="green">079</FONT>        }<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        public String getFacetId()<a name="line.81"></a>
<FONT color="green">082</FONT>        {<a name="line.82"></a>
<FONT color="green">083</FONT>            return FACET_ID;<a name="line.83"></a>
<FONT color="green">084</FONT>        }<a name="line.84"></a>
<FONT color="green">085</FONT>    <a name="line.85"></a>
<FONT color="green">086</FONT>        public String getName()<a name="line.86"></a>
<FONT color="green">087</FONT>        {<a name="line.87"></a>
<FONT color="green">088</FONT>            // TODO: not needed, perhaps artifact/version metadata facet should be separate interface?<a name="line.88"></a>
<FONT color="green">089</FONT>            return null;<a name="line.89"></a>
<FONT color="green">090</FONT>        }<a name="line.90"></a>
<FONT color="green">091</FONT>    <a name="line.91"></a>
<FONT color="green">092</FONT>        public Map&lt;String, String&gt; toProperties()<a name="line.92"></a>
<FONT color="green">093</FONT>        {<a name="line.93"></a>
<FONT color="green">094</FONT>            Map&lt;String, String&gt; properties = new HashMap&lt;String, String&gt;();<a name="line.94"></a>
<FONT color="green">095</FONT>            properties.put( "type", type );<a name="line.95"></a>
<FONT color="green">096</FONT>            if ( classifier != null )<a name="line.96"></a>
<FONT color="green">097</FONT>            {<a name="line.97"></a>
<FONT color="green">098</FONT>                properties.put( "classifier", classifier );<a name="line.98"></a>
<FONT color="green">099</FONT>            }<a name="line.99"></a>
<FONT color="green">100</FONT>            if ( timestamp != null )<a name="line.100"></a>
<FONT color="green">101</FONT>            {<a name="line.101"></a>
<FONT color="green">102</FONT>                properties.put( "timestamp", timestamp );<a name="line.102"></a>
<FONT color="green">103</FONT>            }<a name="line.103"></a>
<FONT color="green">104</FONT>            if ( buildNumber &gt; 0 )<a name="line.104"></a>
<FONT color="green">105</FONT>            {<a name="line.105"></a>
<FONT color="green">106</FONT>                properties.put( "buildNumber", Integer.toString( buildNumber ) );<a name="line.106"></a>
<FONT color="green">107</FONT>            }<a name="line.107"></a>
<FONT color="green">108</FONT>            return properties;<a name="line.108"></a>
<FONT color="green">109</FONT>        }<a name="line.109"></a>
<FONT color="green">110</FONT>    <a name="line.110"></a>
<FONT color="green">111</FONT>        public void fromProperties( Map&lt;String, String&gt; properties )<a name="line.111"></a>
<FONT color="green">112</FONT>        {<a name="line.112"></a>
<FONT color="green">113</FONT>            type = properties.get( "type" );<a name="line.113"></a>
<FONT color="green">114</FONT>            classifier = properties.get( "classifier" );<a name="line.114"></a>
<FONT color="green">115</FONT>            timestamp = properties.get( "timestamp" );<a name="line.115"></a>
<FONT color="green">116</FONT>            String buildNumber = properties.get( "buildNumber" );<a name="line.116"></a>
<FONT color="green">117</FONT>            if ( buildNumber != null )<a name="line.117"></a>
<FONT color="green">118</FONT>            {<a name="line.118"></a>
<FONT color="green">119</FONT>                this.buildNumber = Integer.parseInt( buildNumber );<a name="line.119"></a>
<FONT color="green">120</FONT>            }<a name="line.120"></a>
<FONT color="green">121</FONT>        }<a name="line.121"></a>
<FONT color="green">122</FONT>    <a name="line.122"></a>
<FONT color="green">123</FONT>        @Override<a name="line.123"></a>
<FONT color="green">124</FONT>        public boolean equals( Object o )<a name="line.124"></a>
<FONT color="green">125</FONT>        {<a name="line.125"></a>
<FONT color="green">126</FONT>            if ( this == o )<a name="line.126"></a>
<FONT color="green">127</FONT>            {<a name="line.127"></a>
<FONT color="green">128</FONT>                return true;<a name="line.128"></a>
<FONT color="green">129</FONT>            }<a name="line.129"></a>
<FONT color="green">130</FONT>            if ( !( o instanceof MavenArtifactFacet ) )<a name="line.130"></a>
<FONT color="green">131</FONT>            {<a name="line.131"></a>
<FONT color="green">132</FONT>                return false;<a name="line.132"></a>
<FONT color="green">133</FONT>            }<a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>            MavenArtifactFacet that = (MavenArtifactFacet) o;<a name="line.135"></a>
<FONT color="green">136</FONT>    <a name="line.136"></a>
<FONT color="green">137</FONT>            return StringUtils.equals( that.getClassifier(), this.classifier );<a name="line.137"></a>
<FONT color="green">138</FONT>        }<a name="line.138"></a>
<FONT color="green">139</FONT>    <a name="line.139"></a>
<FONT color="green">140</FONT>    }<a name="line.140"></a>




























































</PRE>
</BODY>
</HTML>