net.sf.jasperreports.engine.base.JRBaseFont Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasperreports Show documentation
Show all versions of jasperreports Show documentation
Free Java Reporting Library
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
package net.sf.jasperreports.engine.base;
import java.awt.font.TextAttribute;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.text.AttributedCharacterIterator.Attribute;
import java.util.Map;
import net.sf.jasperreports.engine.JRAbstractObjectFactory;
import net.sf.jasperreports.engine.JRCloneable;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRDefaultStyleProvider;
import net.sf.jasperreports.engine.JRFont;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JRStyle;
import net.sf.jasperreports.engine.JRStyleContainer;
import net.sf.jasperreports.engine.design.events.JRChangeEventsSupport;
import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport;
import net.sf.jasperreports.engine.util.JRTextAttribute;
import net.sf.jasperreports.engine.util.StyleResolver;
/**
* @author Teodor Danciu ([email protected])
*/
public class JRBaseFont implements JRFont, Serializable, JRChangeEventsSupport, JRCloneable
{
/**
*
*/
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
public static final String PROPERTY_BOLD = "isBold";
public static final String PROPERTY_FONT_NAME = "fontName";
public static final String PROPERTY_FONT_SIZE = "fontSize";
public static final String PROPERTY_ITALIC = "isItalic";
public static final String PROPERTY_PDF_EMBEDDED = "isPdfEmbedded";
public static final String PROPERTY_PDF_ENCODING = "pdfEncoding";
public static final String PROPERTY_PDF_FONT_NAME = "pdfFontName";
public static final String PROPERTY_REPORT_FONT = "reportFont";
public static final String PROPERTY_STRIKE_THROUGH = "isStrikeThrough";
public static final String PROPERTY_UNDERLINE = "isUnderline";
/**
*
*/
protected JRStyleContainer styleContainer;
protected JRStyle style;
protected String styleNameReference;
protected String fontName;
protected Boolean isBold;
protected Boolean isItalic;
protected Boolean isUnderline;
protected Boolean isStrikeThrough;
protected Float fontsize;
protected String pdfFontName;
protected String pdfEncoding;
protected Boolean isPdfEmbedded;
/**
*
*/
public JRBaseFont()
{
}
/**
*
*/
public JRBaseFont(Map attributes)
{
String fontNameAttr = (String)attributes.get(TextAttribute.FAMILY);
if (fontNameAttr != null)
{
setFontName(fontNameAttr);
}
Object bold = attributes.get(TextAttribute.WEIGHT);
if (bold != null)
{
setBold(TextAttribute.WEIGHT_BOLD.equals(bold));
}
Object italic = attributes.get(TextAttribute.POSTURE);
if (italic != null)
{
setItalic(TextAttribute.POSTURE_OBLIQUE.equals(italic));
}
Float sizeAttr = (Float)attributes.get(TextAttribute.SIZE);
if (sizeAttr != null)
{
setFontSize(sizeAttr);
}
Object underline = attributes.get(TextAttribute.UNDERLINE);
if (underline != null)
{
setUnderline(TextAttribute.UNDERLINE_ON.equals(underline));
}
Object strikeThrough = attributes.get(TextAttribute.STRIKETHROUGH);
if (strikeThrough != null)
{
setStrikeThrough(TextAttribute.STRIKETHROUGH_ON.equals(strikeThrough));
}
String pdfFontNameAttr = (String)attributes.get(JRTextAttribute.PDF_FONT_NAME);
if (pdfFontNameAttr != null)
{
setPdfFontName(pdfFontNameAttr);
}
String pdfEncodingAttr = (String)attributes.get(JRTextAttribute.PDF_ENCODING);
if (pdfEncodingAttr != null)
{
setPdfEncoding(pdfEncodingAttr);
}
Boolean isPdfEmbeddedAttr = (Boolean)attributes.get(JRTextAttribute.IS_PDF_EMBEDDED);
if (isPdfEmbeddedAttr != null)
{
setPdfEmbedded(isPdfEmbeddedAttr);
}
}
/**
*
*/
public JRBaseFont(JRStyleContainer styleContainer)
{
this.styleContainer = styleContainer;
}
/**
*
*/
public JRBaseFont(
JRStyleContainer styleContainer,
JRFont font
) // constructor used in chart themes
{
this(styleContainer);
if (font != null)
{
fontName = font.getOwnFontName();
isBold = font.isOwnBold();
isItalic = font.isOwnItalic();
isUnderline = font.isOwnUnderline();
isStrikeThrough = font.isOwnStrikeThrough();
fontsize = font.getOwnFontsize();
pdfFontName = font.getOwnPdfFontName();
pdfEncoding = font.getOwnPdfEncoding();
isPdfEmbedded = font.isOwnPdfEmbedded();
}
}
/**
*
*/
public JRBaseFont(JRStyleContainer styleContainer, JRFont font, JRAbstractObjectFactory factory)
{
factory.put(font, this);
this.styleContainer = styleContainer;
style = factory.getStyle(font.getStyle());
styleNameReference = font.getStyleNameReference();
fontName = font.getOwnFontName();
isBold = font.isOwnBold();
isItalic = font.isOwnItalic();
isUnderline = font.isOwnUnderline();
isStrikeThrough = font.isOwnStrikeThrough();
fontsize = font.getOwnFontsize();
pdfFontName = font.getOwnPdfFontName();
pdfEncoding = font.getOwnPdfEncoding();
isPdfEmbedded = font.isOwnPdfEmbedded();
}
@Override
public JRDefaultStyleProvider getDefaultStyleProvider()
{
return styleContainer == null ? null : styleContainer.getDefaultStyleProvider();
}
/**
*
*/
protected StyleResolver getStyleResolver()
{
if (getDefaultStyleProvider() != null)
{
return getDefaultStyleProvider().getStyleResolver();
}
return StyleResolver.getInstance();
}
@Override
public JRStyle getStyle()
{
return style == null ? (styleContainer == null ? null : styleContainer.getStyle()) : style;
}
@Override
public String getStyleNameReference()
{
return styleNameReference == null ? (styleContainer == null ? null : styleContainer.getStyleNameReference()) : styleNameReference;
}
@Override
public String getFontName()
{
return getStyleResolver().getFontName(this);
}
@Override
public String getOwnFontName()
{
return fontName;
}
@Override
public void setFontName(String fontName)
{
Object old = this.fontName;
this.fontName = fontName;
getEventSupport().firePropertyChange(PROPERTY_FONT_NAME, old, this.fontName);
}
@Override
public boolean isBold()
{
return getStyleResolver().isBold(this);
}
@Override
public Boolean isOwnBold()
{
return isBold;
}
/**
* @deprecated Replaced by {@link #setBold(Boolean)}.
*/
@Override
public void setBold(boolean isBold)
{
setBold((Boolean)isBold);
}
/**
* Alternative setBold method which allows also to reset
* the "own" isBold property.
*/
@Override
public void setBold(Boolean isBold)
{
Object old = this.isBold;
this.isBold = isBold;
getEventSupport().firePropertyChange(PROPERTY_BOLD, old, this.isBold);
}
@Override
public boolean isItalic()
{
return getStyleResolver().isItalic(this);
}
@Override
public Boolean isOwnItalic()
{
return isItalic;
}
/**
* @deprecated Replaced by {@link #setItalic(Boolean)}.
*/
@Override
public void setItalic(boolean isItalic)
{
setItalic((Boolean)isItalic);
}
/**
* Alternative setItalic method which allows also to reset
* the "own" isItalic property.
*/
@Override
public void setItalic(Boolean isItalic)
{
Object old = this.isItalic;
this.isItalic = isItalic;
getEventSupport().firePropertyChange(PROPERTY_ITALIC, old, this.isItalic);
}
@Override
public boolean isUnderline()
{
return getStyleResolver().isUnderline(this);
}
@Override
public Boolean isOwnUnderline()
{
return isUnderline;
}
/**
* @deprecated Replaced by {@link #setUnderline(Boolean)}.
*/
@Override
public void setUnderline(boolean isUnderline)
{
setUnderline((Boolean)isUnderline);
}
/**
* Alternative setUnderline method which allows also to reset
* the "own" isUnderline property.
*/
@Override
public void setUnderline(Boolean isUnderline)
{
Object old = this.isUnderline;
this.isUnderline = isUnderline;
getEventSupport().firePropertyChange(PROPERTY_UNDERLINE, old, this.isUnderline);
}
@Override
public boolean isStrikeThrough()
{
return getStyleResolver().isStrikeThrough(this);
}
@Override
public Boolean isOwnStrikeThrough()
{
return isStrikeThrough;
}
/**
* @deprecated Replaced by {@link #setStrikeThrough(Boolean)}.
*/
@Override
public void setStrikeThrough(boolean isStrikeThrough)
{
setStrikeThrough((Boolean)isStrikeThrough);
}
/**
* Alternative setStrikeThrough method which allows also to reset
* the "own" isStrikeThrough property.
*/
@Override
public void setStrikeThrough(Boolean isStrikeThrough)
{
Object old = this.isStrikeThrough;
this.isStrikeThrough = isStrikeThrough;
getEventSupport().firePropertyChange(PROPERTY_STRIKE_THROUGH, old, this.isStrikeThrough);
}
@Override
public float getFontsize()
{
return getStyleResolver().getFontsize(this);
}
@Override
public Float getOwnFontsize()
{
return fontsize;
}
/**
* Method which allows also to reset the "own" size property.
*/
@Override
public void setFontSize(Float fontSize)
{
Object old = this.fontsize;
this.fontsize = fontSize;
getEventSupport().firePropertyChange(PROPERTY_FONT_SIZE, old, this.fontsize);
}
@Override
public String getPdfFontName()
{
return getStyleResolver().getPdfFontName(this);
}
@Override
public String getOwnPdfFontName()
{
return pdfFontName;
}
@Override
public void setPdfFontName(String pdfFontName)
{
Object old = this.pdfFontName;
this.pdfFontName = pdfFontName;
getEventSupport().firePropertyChange(PROPERTY_PDF_FONT_NAME, old, this.pdfFontName);
}
@Override
public String getPdfEncoding()
{
return getStyleResolver().getPdfEncoding(this);
}
@Override
public String getOwnPdfEncoding()
{
return pdfEncoding;
}
@Override
public void setPdfEncoding(String pdfEncoding)
{
Object old = this.pdfEncoding;
this.pdfEncoding = pdfEncoding;
getEventSupport().firePropertyChange(PROPERTY_PDF_ENCODING, old, this.pdfEncoding);
}
@Override
public boolean isPdfEmbedded()
{
return getStyleResolver().isPdfEmbedded(this);
}
@Override
public Boolean isOwnPdfEmbedded()
{
return isPdfEmbedded;
}
/**
* @deprecated Replaced by {@link #setPdfEmbedded(Boolean)}.
*/
@Override
public void setPdfEmbedded(boolean isPdfEmbedded)
{
setPdfEmbedded((Boolean)isPdfEmbedded);
}
/**
* Alternative setPdfEmbedded method which allows also to reset
* the "own" isPdfEmbedded property.
*/
@Override
public void setPdfEmbedded(Boolean isPdfEmbedded)
{
Object old = this.isPdfEmbedded;
this.isPdfEmbedded = isPdfEmbedded;
getEventSupport().firePropertyChange(PROPERTY_PDF_EMBEDDED, old, this.isPdfEmbedded);
}
@Override
public Object clone()
{
JRBaseFont clone = null;
try
{
clone = (JRBaseFont)super.clone();
}
catch (CloneNotSupportedException e)
{
throw new JRRuntimeException(e);
}
clone.eventSupport = null;
return clone;
}
private transient JRPropertyChangeSupport eventSupport;
@Override
public JRPropertyChangeSupport getEventSupport()
{
synchronized (this)
{
if (eventSupport == null)
{
eventSupport = new JRPropertyChangeSupport(this);
}
}
return eventSupport;
}
/*
* These fields are only for serialization backward compatibility.
*/
private int PSEUDO_SERIAL_VERSION_UID = JRConstants.PSEUDO_SERIAL_VERSION_UID; //NOPMD
/**
* @deprecated
*/
private Integer fontSize;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
if (PSEUDO_SERIAL_VERSION_UID < JRConstants.PSEUDO_SERIAL_VERSION_UID_5_5_2)
{
fontsize = fontSize == null ? null : fontSize.floatValue();
fontSize = null;
}
}
}