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 java.net.URI;
022    
023    import net.dpml.lang.ValueDirective;
024    
025    /**
026     * The CodeBaseDirective is immutable datastructure used to 
027     * describe a codebase.
028     *
029     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
030     * @version 1.0.3
031     */
032    public class LayoutDirective extends CodeBaseDirective
033    {
034        private final String m_id;
035        private final String m_title;
036        
037       /**
038        * Creation of a new codebase descriptor.
039        * @param id the datatype identifier
040        * @param title the handler title
041        * @param codebase the codebase uri 
042        * @param parameters an array of plugin parameter descriptors
043        * @exception NullPointerException if the id is null
044        */
045        public LayoutDirective( 
046          String id, String title, URI codebase, ValueDirective[] parameters ) 
047          throws NullPointerException
048        {
049            super( codebase, parameters );
050            if( null == id )
051            {
052                throw new NullPointerException( "id" );
053            }
054            m_id = id;
055            if( null == title )
056            {
057                m_title = id;
058            }
059            else
060            {
061                m_title = title;
062            }
063        }
064        
065       /**
066        * Return the unique content handler datatype identifier.
067        *
068        * @return the handler id
069        */
070        public String getID()
071        {
072            return m_id;
073        }
074        
075       /**
076        * Return the content handler title.
077        *
078        * @return the title
079        */
080        public String getTitle()
081        {
082            return m_title;
083        }
084        
085       /**
086        * Test if the supplied object is equal to this object.
087        * @param other the object to evaluate
088        * @return true if this object is equal to the supplied object
089        */
090        public boolean equals( Object other )
091        {
092            if( super.equals( other ) && ( other instanceof LayoutDirective ) )
093            {
094                LayoutDirective directive = (LayoutDirective) other;
095                if( !equals( m_id, directive.m_id ) )
096                {
097                    return false;
098                }
099                else
100                {
101                    return equals( m_title, directive.m_title );
102                }
103            }
104            else
105            {
106                return false;
107            }
108        }
109    
110       /**
111        * Compute the instance hashcode value.
112        * @return the hashcode
113        */
114        public int hashCode()
115        {
116            int hash = super.hashCode();
117            hash ^= hashValue( m_id );
118            hash ^= hashValue( m_title );
119            return hash;
120        }
121    }