<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.metadata.repository.storage;<a name="line.1"></a>
<FONT color="green">002</FONT>    /*<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<FONT color="green">004</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<FONT color="green">005</FONT>     * distributed with this work for additional information<a name="line.5"></a>
<FONT color="green">006</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<FONT color="green">007</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<FONT color="green">008</FONT>     * "License"); you may not use this file except in compliance<a name="line.8"></a>
<FONT color="green">009</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<FONT color="green">012</FONT>     *<a name="line.12"></a>
<FONT color="green">013</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<FONT color="green">014</FONT>     * software distributed under the License is distributed on an<a name="line.14"></a>
<FONT color="green">015</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<FONT color="green">016</FONT>     * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<FONT color="green">017</FONT>     * specific language governing permissions and limitations<a name="line.17"></a>
<FONT color="green">018</FONT>     * under the License.<a name="line.18"></a>
<FONT color="green">019</FONT>     */<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.archiva.metadata.repository.filter.Filter;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    /**<a name="line.23"></a>
<FONT color="green">024</FONT>     * @author Olivier Lamy<a name="line.24"></a>
<FONT color="green">025</FONT>     * @since 1.4-M4<a name="line.25"></a>
<FONT color="green">026</FONT>     */<a name="line.26"></a>
<FONT color="green">027</FONT>    public class ReadMetadataRequest<a name="line.27"></a>
<FONT color="green">028</FONT>    {<a name="line.28"></a>
<FONT color="green">029</FONT>        private String repositoryId;<a name="line.29"></a>
<FONT color="green">030</FONT>    <a name="line.30"></a>
<FONT color="green">031</FONT>        private String namespace;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>        private String projectId;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>        private String projectVersion;<a name="line.35"></a>
<FONT color="green">036</FONT>    <a name="line.36"></a>
<FONT color="green">037</FONT>        private Filter&lt;String&gt; filter;<a name="line.37"></a>
<FONT color="green">038</FONT>    <a name="line.38"></a>
<FONT color="green">039</FONT>        public ReadMetadataRequest()<a name="line.39"></a>
<FONT color="green">040</FONT>        {<a name="line.40"></a>
<FONT color="green">041</FONT>            // no op<a name="line.41"></a>
<FONT color="green">042</FONT>        }<a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>        public ReadMetadataRequest( String repositoryId, String namespace, String projectId, String projectVersion )<a name="line.44"></a>
<FONT color="green">045</FONT>        {<a name="line.45"></a>
<FONT color="green">046</FONT>            this.repositoryId = repositoryId;<a name="line.46"></a>
<FONT color="green">047</FONT>            this.namespace = namespace;<a name="line.47"></a>
<FONT color="green">048</FONT>            this.projectId = projectId;<a name="line.48"></a>
<FONT color="green">049</FONT>            this.projectVersion = projectVersion;<a name="line.49"></a>
<FONT color="green">050</FONT>        }<a name="line.50"></a>
<FONT color="green">051</FONT>    <a name="line.51"></a>
<FONT color="green">052</FONT>        public ReadMetadataRequest( String repositoryId, String namespace, String projectId, String projectVersion,<a name="line.52"></a>
<FONT color="green">053</FONT>                                    Filter&lt;String&gt; filter )<a name="line.53"></a>
<FONT color="green">054</FONT>        {<a name="line.54"></a>
<FONT color="green">055</FONT>            this( repositoryId, namespace, projectId, projectVersion );<a name="line.55"></a>
<FONT color="green">056</FONT>            this.filter = filter;<a name="line.56"></a>
<FONT color="green">057</FONT>        }<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>        public String getRepositoryId()<a name="line.59"></a>
<FONT color="green">060</FONT>        {<a name="line.60"></a>
<FONT color="green">061</FONT>            return repositoryId;<a name="line.61"></a>
<FONT color="green">062</FONT>        }<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>        public void setRepositoryId( String repositoryId )<a name="line.64"></a>
<FONT color="green">065</FONT>        {<a name="line.65"></a>
<FONT color="green">066</FONT>            this.repositoryId = repositoryId;<a name="line.66"></a>
<FONT color="green">067</FONT>        }<a name="line.67"></a>
<FONT color="green">068</FONT>    <a name="line.68"></a>
<FONT color="green">069</FONT>        public ReadMetadataRequest repositoryId( String repoId )<a name="line.69"></a>
<FONT color="green">070</FONT>        {<a name="line.70"></a>
<FONT color="green">071</FONT>            this.repositoryId = repoId;<a name="line.71"></a>
<FONT color="green">072</FONT>            return this;<a name="line.72"></a>
<FONT color="green">073</FONT>        }<a name="line.73"></a>
<FONT color="green">074</FONT>    <a name="line.74"></a>
<FONT color="green">075</FONT>        public String getNamespace()<a name="line.75"></a>
<FONT color="green">076</FONT>        {<a name="line.76"></a>
<FONT color="green">077</FONT>            return namespace;<a name="line.77"></a>
<FONT color="green">078</FONT>        }<a name="line.78"></a>
<FONT color="green">079</FONT>    <a name="line.79"></a>
<FONT color="green">080</FONT>        public void setNamespace( String namespace )<a name="line.80"></a>
<FONT color="green">081</FONT>        {<a name="line.81"></a>
<FONT color="green">082</FONT>            this.namespace = namespace;<a name="line.82"></a>
<FONT color="green">083</FONT>        }<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        public ReadMetadataRequest namespace( String namespace )<a name="line.85"></a>
<FONT color="green">086</FONT>        {<a name="line.86"></a>
<FONT color="green">087</FONT>            this.namespace = namespace;<a name="line.87"></a>
<FONT color="green">088</FONT>            return this;<a name="line.88"></a>
<FONT color="green">089</FONT>        }<a name="line.89"></a>
<FONT color="green">090</FONT>    <a name="line.90"></a>
<FONT color="green">091</FONT>        public String getProjectId()<a name="line.91"></a>
<FONT color="green">092</FONT>        {<a name="line.92"></a>
<FONT color="green">093</FONT>            return projectId;<a name="line.93"></a>
<FONT color="green">094</FONT>        }<a name="line.94"></a>
<FONT color="green">095</FONT>    <a name="line.95"></a>
<FONT color="green">096</FONT>        public void setProjectId( String projectId )<a name="line.96"></a>
<FONT color="green">097</FONT>        {<a name="line.97"></a>
<FONT color="green">098</FONT>            this.projectId = projectId;<a name="line.98"></a>
<FONT color="green">099</FONT>        }<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>        public ReadMetadataRequest projectId( String projectId )<a name="line.101"></a>
<FONT color="green">102</FONT>        {<a name="line.102"></a>
<FONT color="green">103</FONT>            this.projectId = projectId;<a name="line.103"></a>
<FONT color="green">104</FONT>            return this;<a name="line.104"></a>
<FONT color="green">105</FONT>        }<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>        public String getProjectVersion()<a name="line.107"></a>
<FONT color="green">108</FONT>        {<a name="line.108"></a>
<FONT color="green">109</FONT>            return projectVersion;<a name="line.109"></a>
<FONT color="green">110</FONT>        }<a name="line.110"></a>
<FONT color="green">111</FONT>    <a name="line.111"></a>
<FONT color="green">112</FONT>        public void setProjectVersion( String projectVersion )<a name="line.112"></a>
<FONT color="green">113</FONT>        {<a name="line.113"></a>
<FONT color="green">114</FONT>            this.projectVersion = projectVersion;<a name="line.114"></a>
<FONT color="green">115</FONT>        }<a name="line.115"></a>
<FONT color="green">116</FONT>    <a name="line.116"></a>
<FONT color="green">117</FONT>        public ReadMetadataRequest projectVersion( String projectVersion )<a name="line.117"></a>
<FONT color="green">118</FONT>        {<a name="line.118"></a>
<FONT color="green">119</FONT>            this.projectVersion = projectVersion;<a name="line.119"></a>
<FONT color="green">120</FONT>            return this;<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>        public Filter&lt;String&gt; getFilter()<a name="line.123"></a>
<FONT color="green">124</FONT>        {<a name="line.124"></a>
<FONT color="green">125</FONT>            return filter;<a name="line.125"></a>
<FONT color="green">126</FONT>        }<a name="line.126"></a>
<FONT color="green">127</FONT>    <a name="line.127"></a>
<FONT color="green">128</FONT>        public void setFilter( Filter&lt;String&gt; filter )<a name="line.128"></a>
<FONT color="green">129</FONT>        {<a name="line.129"></a>
<FONT color="green">130</FONT>            this.filter = filter;<a name="line.130"></a>
<FONT color="green">131</FONT>        }<a name="line.131"></a>
<FONT color="green">132</FONT>    <a name="line.132"></a>
<FONT color="green">133</FONT>        public ReadMetadataRequest filter( Filter&lt;String&gt; filter )<a name="line.133"></a>
<FONT color="green">134</FONT>        {<a name="line.134"></a>
<FONT color="green">135</FONT>            this.filter = filter;<a name="line.135"></a>
<FONT color="green">136</FONT>            return this;<a name="line.136"></a>
<FONT color="green">137</FONT>        }<a name="line.137"></a>
<FONT color="green">138</FONT>    }<a name="line.138"></a>




























































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