001    /* 
002     * Copyright 2006 Stephen 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.depot;
020    
021    import java.io.Serializable;
022    import java.util.logging.LogRecord;
023    
024    import net.dpml.lang.PID;
025    
026    /**
027     * Datastructure holding a log record and process identifier.  The datastructure
028     * is used to bind a PID value that identifies a source JVM  with a log record 
029     * raised by the JVM.
030     *
031     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
032     * @version 1.2.0
033     */
034    public final class LogStatement implements Serializable
035    {
036       /**
037        * Serial version identifier.
038        */
039        static final long serialVersionUID = 1L;
040    
041        private final PID m_pid;
042        private final LogRecord m_record;
043        
044       /**
045        * Creation of a new log statement.
046        * @param pid the JVM process identifier
047        * @param record the log record
048        */
049        public LogStatement( PID pid, LogRecord record )
050        {
051            m_pid = pid;
052            m_record = record;
053        }
054        
055       /**
056        * Get the process identifier identifying the source JVM.
057        * @return the process identifier
058        */
059        public PID getPID()
060        {
061            return m_pid;
062        }
063            
064       /**
065        * Get the log record raised by the source JVM.
066        * @return the log record
067        */
068        public LogRecord getLogRecord()
069        {
070            return m_record;
071        }
072        
073       /**
074        * Compare this object with a supplied object for equality.
075        * This function returns true if the supplied object is a 
076        * LogStatement with an equivalent process identifier and 
077        * log record.
078        * @param other the other object
079        * @return true if the supplied object is equal to this object
080        */
081        public boolean equals( Object other )
082        {
083            if( null == other )
084            {
085                return false;
086            }
087            else if( other instanceof LogStatement )
088            {
089                LogStatement statement = (LogStatement) other;
090                if( !m_pid.equals( statement.m_pid ) )
091                {
092                    return false;
093                }
094                else
095                {
096                    return m_record.equals( statement.m_record );
097                }
098            }
099            else
100            {
101                return false;
102            }
103        }
104        
105       /**
106        * Get the hascode for this instance.
107        * @return the instance hash value
108        */
109        public int hashCode()
110        {
111            int hash = m_pid.hashCode();
112            hash ^= m_record.hashCode();
113            return hash;
114        }
115    }
116