blob: a9728428a74afb0b72ab1e4896855caa40a6bbe9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.fonts;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
/**
* FontTriplet contains information on name, style and weight of one font
*/
public class FontTriplet implements Comparable<FontTriplet>, Serializable {
public static final FontTriplet DEFAULT_FONT_TRIPLET
= new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
/** serial version UID */
private static final long serialVersionUID = 1168991106658033508L;
private String name;
private String style;
private int weight;
private int priority; // priority of this triplet/font mapping
//This is only a cache
private transient String key;
public FontTriplet() {
this(null, null, 0);
}
/**
* Creates a new font triplet.
* @param name font name
* @param style font style (normal, italic etc.)
* @param weight font weight (100, 200, 300...800, 900)
*/
public FontTriplet(String name, String style, int weight) {
this(name, style, weight, Font.PRIORITY_DEFAULT);
}
/**
* Creates a new font triplet.
* @param name font name
* @param style font style (normal, italic etc.)
* @param weight font weight (100, 200, 300...800, 900)
* @param priority priority of this triplet/font mapping
*/
public FontTriplet(String name, String style, int weight, int priority) {
this.name = name;
this.style = style;
this.weight = weight;
this.priority = priority;
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
/** @return the font name */
public String getName() {
return name;
}
/** @return the font style */
public String getStyle() {
return style;
}
/** @return the font weight */
public int getWeight() {
return weight;
}
/** @return the priority of this triplet/font mapping */
public int getPriority() {
return priority;
}
private String getKey() {
if (this.key == null) {
//This caches the combined key
this.key = getName() + "," + getStyle() + "," + getWeight();
}
return this.key;
}
/** {@inheritDoc} */
public int compareTo(FontTriplet o) {
return getKey().compareTo(o.getKey());
}
/** {@inheritDoc} */
public int hashCode() {
return toString().hashCode();
}
/** {@inheritDoc} */
public boolean equals(Object obj) {
if (obj == null) {
return false;
} else if (obj == this) {
return true;
} else {
if (obj instanceof FontTriplet) {
FontTriplet other = (FontTriplet)obj;
return (getName().equals(other.getName())
&& getStyle().equals(other.getStyle())
&& (getWeight() == other.getWeight()));
}
}
return false;
}
/** {@inheritDoc} */
public String toString() {
return getKey();
}
/**
* Matcher interface for {@link FontTriplet}.
*/
public interface Matcher {
/**
* Indicates whether the given {@link FontTriplet} matches a particular criterium.
* @param triplet the font triplet
* @return true if the font triplet is a match
*/
boolean matches(FontTriplet triplet);
}
}