001    /*
002     * Copyright 2004 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.metro.data;
020    
021    import net.dpml.component.Directive;
022    
023    /**
024     * A reference directive is a reference to a part within the enclosing part's
025     * context or parts.
026     *
027     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
028     * @version 1.2.0
029     */
030    public final class LookupDirective extends AbstractDirective implements Directive
031    {
032       /**
033        * Serial version identifier.
034        */
035        static final long serialVersionUID = 1L;
036    
037        /**
038         * The container scoped key.
039         */
040        private final String m_classname;
041    
042        /**
043         * Creation of a new lookup directive.
044         * @param classname the service classname
045         * @exception NullPointerException if the classname argument is null.
046         */
047        public LookupDirective( final String classname )
048            throws NullPointerException
049        {
050            if( null == classname )
051            {
052                throw new NullPointerException( "classname" );
053            }
054            m_classname = classname;
055        }
056    
057        /**
058         * Return the service classname.
059         *
060         * @return the classname
061         */
062        public String getServiceClassname()
063        {
064            return m_classname;
065        }
066    
067       /**
068        * Test if the supplied object is equal to this object.
069        * @param other the object to compare with this instance
070        * @return TRUE if the supplied object is equal to this object
071        */
072        public boolean equals( Object other )
073        {
074            if( null == other )
075            {
076                return false;
077            }
078            else
079            {
080                if( other instanceof LookupDirective )
081                {
082                    LookupDirective directive = (LookupDirective) other;
083                    return m_classname.equals( directive.m_classname );
084                }
085                else
086                {
087                    return false;
088                }
089            }
090        }
091    
092       /**
093        * Return the hashcode for the instance.
094        * @return the instance hashcode
095        */
096        public int hashCode()
097        {
098            return m_classname.hashCode();
099        }
100    }