/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2006 - 2013 Pentaho Corporation and Contributors. All rights reserved.
*/
package org.pentaho.reporting.libraries.fonts.itext;
/**
* A PDF font record key. This class is immutable.
*
* @author Thomas Morgner
*/
public final class BaseFontRecordKey {
/**
* The file name of the font file.
*/
private String fileName;
/**
* The encoding.
*/
private final String encoding;
private boolean embedded;
private Integer hashCode;
/**
* Creates a new key.
*
* @param fileName the physical filename name of the font file.
* @param encoding the encoding.
*/
public BaseFontRecordKey( final String fileName,
final String encoding, final boolean embedded ) {
if ( fileName == null ) {
throw new NullPointerException( "font name is null." );
}
if ( encoding == null ) {
throw new NullPointerException( "Encoding is null." );
}
this.fileName = fileName;
this.encoding = encoding;
this.embedded = embedded;
}
/**
* Indicates whether some other object is "equal to" this BaseFontRecordKey.
*
* @param o the object to test.
* @return true or false.
*/
public boolean equals( final Object o ) {
if ( this == o ) {
return true;
}
if ( !( o instanceof BaseFontRecordKey ) ) {
return false;
}
final BaseFontRecordKey key = (BaseFontRecordKey) o;
if ( embedded != key.embedded ) {
return false;
}
if ( !fileName.equals( key.fileName ) ) {
return false;
}
if ( !encoding.equals( key.encoding ) ) {
return false;
}
return true;
}
public int hashCode() {
if ( hashCode == null ) {
int result = fileName.hashCode();
result = 29 * result + encoding.hashCode();
result = 29 * result + ( embedded ? 1 : 0 );
hashCode = new Integer( result );
}
return hashCode.intValue();
}
/**
* Returns a string representation of the object. In general, the <code>toString</code> method returns a string that
* "textually represents" this object. The result should be a concise but informative representation that is easy for
* a person to read. It is recommended that all subclasses override this method.
* <p/>
* The <code>toString</code> method for class <code>Object</code> returns a string consisting of the name of the class
* of which the object is an instance, the at-sign character `<code>@</code>', and the unsigned hexadecimal
* representation of the hash code of the object. In other words, this method returns a string equal to the value of:
* <blockquote>
* <pre>
* getClass().getName() + '@' + Integer.toHexString(hashCode())
* </pre></blockquote>
*
* @return a string representation of the object.
*/
public String toString() {
return ( "FontKey={name=" + fileName + "; encoding=" +
encoding + "; embedded=" + embedded + '}' );
}
}