blob: 131c5a6929016eecf7dd251d611fcc080fd16826 [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.fo.properties;
import java.awt.Color;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.expr.PropertyException;
import org.apache.fop.util.ColorUtil;
/**
* Class for properties that wrap Color values
*/
public final class ColorProperty extends Property {
/** cache holding canonical ColorProperty instances */
private static final PropertyCache<ColorProperty> CACHE = new PropertyCache<ColorProperty>();
/**
* The color represented by this property.
*/
private final Color color;
/**
* Inner class for creating instances of ColorTypeProperty
*/
public static class Maker extends PropertyMaker {
/**
* @param propId the id of the property for which a Maker should be created
*/
public Maker(int propId) {
super(propId);
}
/**
* Return a ColorProperty object based on the passed Property object.
* This method is called if the Property object built by the parser
* isn't the right type for this property.
*
* @param p
* The Property object return by the expression parser
* @param propertyList
* The PropertyList object being built for this FO.
* @param fo
* The parent FO for the FO whose property is being made.
* @return A Property of the correct type or null if the parsed value
* can't be converted to the correct type.
* @throws PropertyException
* for invalid or inconsistent FO input
*/
@Override
public Property convertProperty(Property p,
PropertyList propertyList, FObj fo)
throws PropertyException {
if (p instanceof ColorProperty) {
return p;
}
FObj fobj = (fo == null ? propertyList.getFObj() : fo);
FOUserAgent ua = (fobj == null ? null : fobj.getUserAgent());
Color val = p.getColor(ua);
if (val != null) {
return new ColorProperty(val);
}
return convertPropertyDatatype(p, propertyList, fo);
}
}
/**
* Set the color given a particular String. For a full List of supported
* values please see ColorUtil.
*
* @param foUserAgent FOP user agent
* @param value RGB value as String to be parsed
* @return the canonical ColorProperty instance corresponding
* to the given value
* @throws PropertyException if the value can't be parsed
* @see ColorUtil#parseColorString(FOUserAgent, String)
*/
public static ColorProperty getInstance(FOUserAgent foUserAgent, String value)
throws PropertyException {
ColorProperty instance = new ColorProperty(
ColorUtil.parseColorString(
foUserAgent, value));
return CACHE.fetch(instance);
}
/**
* Create a new ColorProperty with a given color.
*
* @param value the color to use.
*/
private ColorProperty(Color value) {
this.color = value;
}
/**
* Returns an AWT instance of this color
* @param foUserAgent FOP user agent
* @return float the AWT color represented by this ColorType instance
*/
@Override
public Color getColor(FOUserAgent foUserAgent) {
return color;
}
/** {@inheritDoc} */
@Override
public String toString() {
return ColorUtil.colorToString(color);
}
/**
* Can't convert to any other types
* @return this.colorType
*/
public ColorProperty getColorProperty() {
return this;
}
/**
* @return this.colorType cast as an Object
*/
@Override
public Object getObject() {
return this;
}
/** {@inheritDoc} */
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof ColorProperty) {
return org.apache.xmlgraphics.java2d.color.ColorUtil.isSameColor(
((ColorProperty) o).color, this.color);
}
return false;
}
/** {@inheritDoc} */
@Override
public int hashCode() {
return this.color.hashCode();
}
}