<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.rest.api.model;<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 javax.xml.bind.annotation.XmlRootElement;<a name="line.22"></a>
<FONT color="green">023</FONT>    import java.io.Serializable;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    /**<a name="line.25"></a>
<FONT color="green">026</FONT>     * AdminRepositoryConsumer<a name="line.26"></a>
<FONT color="green">027</FONT>     *<a name="line.27"></a>
<FONT color="green">028</FONT>     *<a name="line.28"></a>
<FONT color="green">029</FONT>     */<a name="line.29"></a>
<FONT color="green">030</FONT>    @XmlRootElement( name = "adminRepositoryConsumer" )<a name="line.30"></a>
<FONT color="green">031</FONT>    public class AdminRepositoryConsumer<a name="line.31"></a>
<FONT color="green">032</FONT>        implements Serializable<a name="line.32"></a>
<FONT color="green">033</FONT>    {<a name="line.33"></a>
<FONT color="green">034</FONT>        private boolean enabled = false;<a name="line.34"></a>
<FONT color="green">035</FONT>    <a name="line.35"></a>
<FONT color="green">036</FONT>        private String id;<a name="line.36"></a>
<FONT color="green">037</FONT>    <a name="line.37"></a>
<FONT color="green">038</FONT>        private String description;<a name="line.38"></a>
<FONT color="green">039</FONT>    <a name="line.39"></a>
<FONT color="green">040</FONT>        public AdminRepositoryConsumer()<a name="line.40"></a>
<FONT color="green">041</FONT>        {<a name="line.41"></a>
<FONT color="green">042</FONT>            // no op<a name="line.42"></a>
<FONT color="green">043</FONT>        }<a name="line.43"></a>
<FONT color="green">044</FONT>    <a name="line.44"></a>
<FONT color="green">045</FONT>        public AdminRepositoryConsumer( boolean enabled, String id, String description )<a name="line.45"></a>
<FONT color="green">046</FONT>        {<a name="line.46"></a>
<FONT color="green">047</FONT>            this.enabled = enabled;<a name="line.47"></a>
<FONT color="green">048</FONT>            this.id = id;<a name="line.48"></a>
<FONT color="green">049</FONT>            this.description = description;<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 String getDescription()<a name="line.52"></a>
<FONT color="green">053</FONT>        {<a name="line.53"></a>
<FONT color="green">054</FONT>            return description;<a name="line.54"></a>
<FONT color="green">055</FONT>        }<a name="line.55"></a>
<FONT color="green">056</FONT>    <a name="line.56"></a>
<FONT color="green">057</FONT>        public String getId()<a name="line.57"></a>
<FONT color="green">058</FONT>        {<a name="line.58"></a>
<FONT color="green">059</FONT>            return id;<a name="line.59"></a>
<FONT color="green">060</FONT>        }<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>        public boolean isEnabled()<a name="line.62"></a>
<FONT color="green">063</FONT>        {<a name="line.63"></a>
<FONT color="green">064</FONT>            return enabled;<a name="line.64"></a>
<FONT color="green">065</FONT>        }<a name="line.65"></a>
<FONT color="green">066</FONT>    <a name="line.66"></a>
<FONT color="green">067</FONT>        public void setDescription( String description )<a name="line.67"></a>
<FONT color="green">068</FONT>        {<a name="line.68"></a>
<FONT color="green">069</FONT>            this.description = description;<a name="line.69"></a>
<FONT color="green">070</FONT>        }<a name="line.70"></a>
<FONT color="green">071</FONT>    <a name="line.71"></a>
<FONT color="green">072</FONT>        public void setEnabled( boolean enabled )<a name="line.72"></a>
<FONT color="green">073</FONT>        {<a name="line.73"></a>
<FONT color="green">074</FONT>            this.enabled = enabled;<a name="line.74"></a>
<FONT color="green">075</FONT>        }<a name="line.75"></a>
<FONT color="green">076</FONT>    <a name="line.76"></a>
<FONT color="green">077</FONT>        public void setId( String id )<a name="line.77"></a>
<FONT color="green">078</FONT>        {<a name="line.78"></a>
<FONT color="green">079</FONT>            this.id = id;<a name="line.79"></a>
<FONT color="green">080</FONT>        }<a name="line.80"></a>
<FONT color="green">081</FONT>    }<a name="line.81"></a>




























































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