001    /*
002     * Copyright 2005 Stephen J. McConnell.
003     *
004     * Licensed  under the  Apache License,  Version 2.0  (the "License");
005     * you may not use  this file  except in  compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *   http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed  under the  License is distributed on an "AS IS" BASIS,
012     * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
013     * implied.
014     *
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package net.dpml.transit.info;
020    
021    import net.dpml.lang.AbstractDirective;
022    
023    /**
024     * Description of a host configuration within Transit.
025     * 
026     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
027     * @version 1.0.3
028     */
029    public class HostDirective extends AbstractDirective
030    {
031        private final String m_id;
032        private final int m_priority;
033        private final String m_host;
034        private final String m_index;
035        private final String m_username;
036        private final char[] m_password;
037        private final boolean m_enabled;
038        private final boolean m_trusted;
039        private final String m_layout;
040        private final String m_scheme;
041        private final String m_prompt;
042    
043       /**
044        * Creation of a new host description.
045        * @param id a unique resource host identifier
046        * @param priority the host prority
047        * @param host the resource host
048        * @param index the name of an index resource (may be null)
049        * @param username a possibly null username
050        * @param password a possibly null password
051        * @param enabled true if enabled
052        * @param trusted true if trusted
053        * @param layout the name of the layout strategy
054        * @param scheme the security scheme (may be null)
055        * @param prompt authentication prompt (may be null)
056        * @exception NullPointerException if the id, host, or layout are null
057        */
058        public HostDirective( 
059          String id, int priority, String host, String index, String username, char[] password, boolean enabled, 
060          boolean trusted, String layout, String scheme, String prompt )
061          throws NullPointerException
062        {
063            if( null == id )
064            {
065                throw new NullPointerException( "id" );
066            }
067            if( null == host )
068            {
069                throw new NullPointerException( "host" );
070            }
071            if( null == layout )
072            {
073                throw new NullPointerException( "layout" );
074            }
075            
076            m_id = id;
077            m_priority = priority;
078            m_host = host;
079            m_index = index;
080            m_username = username;
081            m_password = password;
082            m_enabled = enabled;
083            m_trusted = trusted;
084            m_layout = layout;
085            
086            if( null == scheme )
087            {
088                m_scheme = "";
089            }
090            else
091            {
092                m_scheme = scheme;
093            }
094            
095            if( null == prompt )
096            {
097                m_prompt = "";
098            }
099            else
100            {
101                m_prompt = prompt;
102            }
103            
104        }
105        
106       /**
107        * Return the host identifier.
108        * @return the host id
109        */
110        public String getID()
111        {
112            return m_id;
113        }
114    
115       /**
116        * Return the host priority.
117        * @return the host priority value
118        */
119        public int getPriority()
120        {
121            return m_priority;
122        }
123    
124       /**
125        * Return the resource host.
126        * @return the host
127        */
128        public String getHost()
129        {
130            return m_host;
131        }
132    
133       /**
134        * Return the index resource name.
135        * @return the host index resource name
136        */
137        public String getIndex()
138        {
139            return m_index;
140        }
141    
142       /**
143        * Return the proxy username.
144        * @return the poxy username
145        */
146        public String getUsername()
147        {
148            return m_username;
149        }
150    
151       /**
152        * Return the proxy password.
153        * @return the poxy password
154        */
155        public char[] getPassword()
156        {
157            return m_password;
158        }
159    
160       /**
161        * Return the enabled status.
162        * @return true if enabled
163        */
164        public boolean getEnabled()
165        {
166            return m_enabled;
167        }
168    
169       /**
170        * Return the trusted status.
171        * @return true if trusted
172        */
173        public boolean getTrusted()
174        {
175            return m_trusted;
176        }
177    
178       /**
179        * Return the layout name.
180        * @return the layout key
181        */
182        public String getLayout()
183        {
184            return m_layout;
185        }
186    
187       /**
188        * Return the authentication prompt.
189        * @return the layout key
190        */
191        public String getPrompt()
192        {
193            return m_prompt;
194        }
195        
196       /**
197        * Return the authentication scheme.
198        * @return the scheme
199        */
200        public String getScheme()
201        {
202            return m_scheme;
203        }
204        
205       /**
206        * Compare this instance with a supplied object for equality.
207        * @param other the other object
208        * @return true if the supplied instance is equal to this instance
209        */
210        public boolean equals( Object other )
211        {
212            if( super.equals( other ) && ( other instanceof HostDirective ) )
213            {
214                HostDirective directive = (HostDirective) other;
215                if( !equals( m_id, directive.m_id ) )
216                {
217                    return false;
218                }
219                else if( m_priority != directive.m_priority )
220                {
221                    return false;
222                }
223                else if( m_trusted != directive.m_trusted )
224                {
225                    return false;
226                }
227                else if( m_enabled != directive.m_enabled )
228                {
229                    return false;
230                }
231                else if( !equals( m_host, directive.m_host ) )
232                {
233                    return false;
234                }
235                else if( !equals( m_index, directive.m_index ) )
236                {
237                    return false;
238                }
239                else if( !equals( m_username, directive.m_username ) )
240                {
241                    return false;
242                }
243                else if( !equals( m_layout, directive.m_layout ) )
244                {
245                    return false;
246                }
247                else if( !equals( m_scheme, directive.m_scheme ) )
248                {
249                    return false;
250                }
251                else if( !equals( m_prompt, directive.m_prompt ) )
252                {
253                    return false;
254                }
255                else
256                {
257                    if( null == m_password )
258                    {
259                        return null == directive.m_password;
260                    }
261                    else
262                    {
263                        if( null == directive.m_password )
264                        {
265                            return false;
266                        }
267                        else
268                        {
269                            return new String( m_password ).equals( new String( directive.m_password ) );
270                        }
271                    }
272                }
273            }
274            else
275            {
276                return false;
277            }
278        }
279        
280       /**
281        * Compute the instance hashcode value.
282        * @return the hashcode
283        */
284        public int hashCode()
285        {
286            int hash = m_priority;
287            hash ^= hashValue( m_id );
288            hash ^= hashValue( new Boolean( m_trusted ) );
289            hash ^= hashValue( new Boolean( m_enabled ) );
290            hash ^= hashValue( m_host );
291            hash ^= hashValue( m_index );
292            hash ^= hashValue( m_username );
293            if( null != m_password )
294            {
295                hash ^= new String( m_password ).hashCode();
296            }
297            hash ^= hashValue( m_layout );
298            hash ^= hashValue( m_scheme );
299            hash ^= hashValue( m_prompt );
300            return hash;
301        }
302    
303    }