/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. 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 <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.components.barcode4j;
import net.sf.jasperreports.engine.JRComponentElement;
import net.sf.jasperreports.engine.JRDefaultStyleProvider;
import net.sf.jasperreports.engine.JRStyle;
import org.krysalis.barcode4j.BaselineAlignment;
import org.krysalis.barcode4j.ChecksumMode;
import org.krysalis.barcode4j.HumanReadablePlacement;
import org.krysalis.barcode4j.impl.AbstractBarcodeBean;
import org.krysalis.barcode4j.impl.codabar.CodabarBean;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.impl.code128.EAN128Bean;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.impl.datamatrix.DataMatrixBean;
import org.krysalis.barcode4j.impl.datamatrix.SymbolShapeHint;
import org.krysalis.barcode4j.impl.fourstate.AbstractFourStateBean;
import org.krysalis.barcode4j.impl.fourstate.RoyalMailCBCBean;
import org.krysalis.barcode4j.impl.fourstate.USPSIntelligentMailBean;
import org.krysalis.barcode4j.impl.int2of5.Interleaved2Of5Bean;
import org.krysalis.barcode4j.impl.pdf417.PDF417Bean;
import org.krysalis.barcode4j.impl.postnet.POSTNETBean;
import org.krysalis.barcode4j.impl.upcean.EAN13Bean;
import org.krysalis.barcode4j.impl.upcean.EAN8Bean;
import org.krysalis.barcode4j.impl.upcean.UPCABean;
import org.krysalis.barcode4j.impl.upcean.UPCEBean;
import org.krysalis.barcode4j.tools.UnitConv;
/**
*
* @author Lucian Chirita (lucianc@users.sourceforge.net)
* @version $Id: AbstractBarcodeEvaluator.java 3032 2009-08-27 11:32:28Z teodord $
*/
public abstract class AbstractBarcodeEvaluator implements BarcodeVisitor
{
protected final JRComponentElement componentElement;
protected final BarcodeComponent barcodeComponent;
protected final JRDefaultStyleProvider defaultStyleProvider;
protected String message;
protected AbstractBarcodeBean barcode;
protected AbstractBarcodeEvaluator(JRComponentElement componentElement,
JRDefaultStyleProvider defaultStyleProvider)
{
this.componentElement = componentElement;
this.barcodeComponent = (BarcodeComponent) componentElement.getComponent();
this.defaultStyleProvider = defaultStyleProvider;
}
public void evaluateBarcode()
{
BarcodeComponent barcodeComponent =
(BarcodeComponent) componentElement.getComponent();
barcodeComponent.receive(this);
}
public String getMessage()
{
return message;
}
public AbstractBarcodeBean getBarcode()
{
return barcode;
}
protected void setBaseAttributes(BarcodeComponent barcodeComponent)
{
JRStyle style = getElementStyle();
if (style != null)
{
String fontName = style.getFontName();
if (fontName != null)
{
barcode.setFontName(fontName);
}
Integer fontSize = style.getFontSize();
if (fontSize != null)
{
double barFontSize = UnitConv.pt2mm(fontSize.intValue());
barcode.setFontSize(barFontSize);
}
}
Double moduleWidth = barcodeComponent.getModuleWidth();
if (moduleWidth != null)
{
barcode.setModuleWidth(UnitConv.pt2mm(moduleWidth.doubleValue()));
}
String textPlacement = barcodeComponent.getTextPosition();
if (textPlacement != null)
{
barcode.setMsgPosition(
HumanReadablePlacement.byName(textPlacement));
}
Double quietZone = barcodeComponent.getQuietZone();
if (quietZone != null)
{
barcode.doQuietZone(true);
barcode.setQuietZone(UnitConv.pt2mm(quietZone.doubleValue()));
}
Double vQuietZone = barcodeComponent.getVerticalQuietZone();
if (vQuietZone != null)
{
barcode.setVerticalQuietZone(UnitConv.pt2mm(vQuietZone.doubleValue()));
}
// FIXME DataMatrix?
double barcodeHeight;
if (BarcodeUtils.isVertical(barcodeComponent))
{
barcodeHeight = UnitConv.pt2mm(componentElement.getWidth());
}
else
{
barcodeHeight = UnitConv.pt2mm(componentElement.getHeight());
}
barcode.setHeight(barcodeHeight);
}
protected JRStyle getElementStyle()
{
JRStyle style = componentElement.getStyle();
if (style == null)
{
style = defaultStyleProvider.getDefaultStyle();
}
return style;
}
public void visitCodabar(CodabarComponent codabar)
{
CodabarBean codabarBean = new CodabarBean();
barcode = codabarBean;
evaluateCodabar(codabar);
setBaseAttributes(codabar);
if (codabar.getWideFactor() != null)
{
codabarBean.setWideFactor(codabar.getWideFactor().doubleValue());
}
}
protected abstract void evaluateCodabar(CodabarComponent codabar);
public void visitCode128(Code128Component code128)
{
barcode = new Code128Bean();
evaluateCode128(code128);
setBaseAttributes(code128);
}
protected abstract void evaluateCode128(Code128Component code128);
public void visitDataMatrix(DataMatrixComponent dataMatrix)
{
DataMatrixBean dataMatrixBean = new DataMatrixBean();
barcode = dataMatrixBean;
evaluateDataMatrix(dataMatrix);
setBaseAttributes(dataMatrix);
if (dataMatrix.getShape() != null)
{
dataMatrixBean.setShape(SymbolShapeHint.byName(dataMatrix.getShape()));
}
}
protected abstract void evaluateDataMatrix(DataMatrixComponent dataMatrix);
public void visitEANCode128(EAN128Component ean128)
{
EAN128Bean ean128Bean = new EAN128Bean();
barcode = ean128Bean;
evaluateEANCode128(ean128);
setBaseAttributes(ean128);
if (ean128.getChecksumMode() != null)
{
ean128Bean.setChecksumMode(ChecksumMode.byName(ean128.getChecksumMode()));
}
}
protected abstract void evaluateEANCode128(EAN128Component ean128);
public void visitCode39(Code39Component code39)
{
Code39Bean code39Bean = new Code39Bean();
barcode = code39Bean;
evaluateCode39(code39);
setBaseAttributes(code39);
if (code39.getChecksumMode() != null)
{
code39Bean.setChecksumMode(ChecksumMode.byName(code39.getChecksumMode()));
}
if (code39.isDisplayChecksum() != null)
{
code39Bean.setDisplayChecksum(code39.isDisplayChecksum().booleanValue());
}
if (code39.isDisplayStartStop() != null)
{
code39Bean.setDisplayStartStop(code39.isDisplayStartStop().booleanValue());
}
if (code39.isExtendedCharSetEnabled() != null)
{
code39Bean.setExtendedCharSetEnabled(code39.isExtendedCharSetEnabled().booleanValue());
}
if (code39.getIntercharGapWidth() != null)
{
code39Bean.setIntercharGapWidth(code39.getIntercharGapWidth().doubleValue());
}
if (code39.getWideFactor() != null)
{
code39Bean.setWideFactor(code39.getWideFactor().doubleValue());
}
}
protected abstract void evaluateCode39(Code39Component code39);
protected abstract void evaluateInterleaved2Of5(Interleaved2Of5Component interleaved2Of5);
public void visitInterleaved2Of5(Interleaved2Of5Component interleaved2Of5)
{
Interleaved2Of5Bean interleaved2Of5Bean = new Interleaved2Of5Bean();
barcode = interleaved2Of5Bean;
evaluateInterleaved2Of5(interleaved2Of5);
setBaseAttributes(interleaved2Of5);
if (interleaved2Of5.getChecksumMode() != null)
{
interleaved2Of5Bean.setChecksumMode(ChecksumMode.byName(interleaved2Of5.getChecksumMode()));
}
if (interleaved2Of5.isDisplayChecksum() != null)
{
interleaved2Of5Bean.setDisplayChecksum(interleaved2Of5.isDisplayChecksum().booleanValue());
}
if (interleaved2Of5.getWideFactor() != null)
{
interleaved2Of5Bean.setWideFactor(interleaved2Of5.getWideFactor().doubleValue());
}
}
public void visitUPCA(UPCAComponent upcA)
{
UPCABean upcABean = new UPCABean();
barcode = upcABean;
evaluateUPCA(upcA);
setBaseAttributes(upcA);
if (upcA.getChecksumMode() != null)
{
upcABean.setChecksumMode(ChecksumMode.byName(upcA.getChecksumMode()));
}
}
protected abstract void evaluateUPCA(UPCAComponent upcA);
public void visitUPCE(UPCEComponent upcE)
{
UPCEBean upcEBean = new UPCEBean();
barcode = upcEBean;
evaluateUPCE(upcE);
setBaseAttributes(upcE);
if (upcE.getChecksumMode() != null)
{
upcEBean.setChecksumMode(ChecksumMode.byName(upcE.getChecksumMode()));
}
}
protected abstract void evaluateUPCE(UPCEComponent upcE);
public void visitEAN13(EAN13Component ean13)
{
EAN13Bean ean13Bean = new EAN13Bean();
barcode = ean13Bean;
evaluateEAN13(ean13);
setBaseAttributes(ean13);
if (ean13.getChecksumMode() != null)
{
ean13Bean.setChecksumMode(ChecksumMode.byName(ean13.getChecksumMode()));
}
}
protected abstract void evaluateEAN13(EAN13Component ean13);
public void visitEAN8(EAN8Component ean8)
{
EAN8Bean ean8Bean = new EAN8Bean();
barcode = ean8Bean;
evaluateEAN8(ean8);
setBaseAttributes(ean8);
if (ean8.getChecksumMode() != null)
{
ean8Bean.setChecksumMode(ChecksumMode.byName(ean8.getChecksumMode()));
}
}
protected abstract void evaluateEAN8(EAN8Component ean8);
public void visitRoyalMailCustomer(
RoyalMailCustomerComponent royalMailCustomer)
{
RoyalMailCBCBean mailBean = new RoyalMailCBCBean();
barcode = mailBean;
evaluateRoyalMailCustomer(royalMailCustomer);
setBaseAttributes(royalMailCustomer);
setFourStateAttributes(royalMailCustomer, mailBean);
}
protected void setFourStateAttributes(
FourStateBarcodeComponent barcodeComponent,
AbstractFourStateBean barcodeBean)
{
if (barcodeComponent.getChecksumMode() != null)
{
barcodeBean.setChecksumMode(
ChecksumMode.byName(barcodeComponent.getChecksumMode()));
}
if (barcodeComponent.getAscenderHeight() != null)
{
barcodeBean.setAscenderHeight(
UnitConv.pt2mm(barcodeComponent.getAscenderHeight().doubleValue()));
}
if (barcodeComponent.getIntercharGapWidth() != null)
{
barcodeBean.setIntercharGapWidth(
UnitConv.pt2mm(barcodeComponent.getIntercharGapWidth().doubleValue()));
}
if (barcodeComponent.getTrackHeight() != null)
{
barcodeBean.setTrackHeight(
UnitConv.pt2mm(barcodeComponent.getTrackHeight().doubleValue()));
}
}
protected abstract void evaluateRoyalMailCustomer(
RoyalMailCustomerComponent royalMailCustomer);
public void visitUSPSIntelligentMail(
USPSIntelligentMailComponent intelligentMail)
{
USPSIntelligentMailBean mailBean = new USPSIntelligentMailBean();
barcode = mailBean;
evaluateUSPSIntelligentMail(intelligentMail);
setBaseAttributes(intelligentMail);
setFourStateAttributes(intelligentMail, mailBean);
}
protected abstract void evaluateUSPSIntelligentMail(
USPSIntelligentMailComponent intelligentMail);
public void visitPostnet(POSTNETComponent postnet)
{
POSTNETBean postnetBean = new POSTNETBean();
barcode = postnetBean;
evaluatePOSTNET(postnet);
setBaseAttributes(postnet);
if (postnet.getShortBarHeight() != null)
{
postnetBean.setShortBarHeight(
UnitConv.pt2mm(postnet.getShortBarHeight().doubleValue()));
}
if (postnet.getBaselinePosition() != null)
{
postnetBean.setBaselinePosition(
BaselineAlignment.byName(postnet.getBaselinePosition()));
}
if (postnet.getChecksumMode() != null)
{
postnetBean.setChecksumMode(
ChecksumMode.byName(postnet.getChecksumMode()));
}
if (postnet.getDisplayChecksum() != null)
{
postnetBean.setDisplayChecksum(
postnet.getDisplayChecksum().booleanValue());
}
if (postnet.getIntercharGapWidth() != null)
{
postnetBean.setIntercharGapWidth(
UnitConv.pt2mm(postnet.getIntercharGapWidth().doubleValue()));
}
}
protected abstract void evaluatePOSTNET(
POSTNETComponent intelligentMail);
public void visitPDF417(PDF417Component pdf417)
{
PDF417Bean pdf417Bean = new PDF417Bean();
barcode = pdf417Bean;
evaluatePDF417(pdf417);
setBaseAttributes(pdf417);
if (pdf417.getMinColumns() != null)
{
pdf417Bean.setMinCols(pdf417.getMinColumns().intValue());
}
if (pdf417.getMaxColumns() != null)
{
pdf417Bean.setMaxCols(pdf417.getMaxColumns().intValue());
}
if (pdf417.getMinRows() != null)
{
pdf417Bean.setMinRows(pdf417.getMinRows().intValue());
}
if (pdf417.getMaxRows() != null)
{
pdf417Bean.setMaxRows(pdf417.getMaxRows().intValue());
}
if (pdf417.getWidthToHeightRatio() != null)
{
pdf417Bean.setWidthToHeightRatio(
pdf417.getWidthToHeightRatio().doubleValue());
}
if (pdf417.getErrorCorrectionLevel() != null)
{
pdf417Bean.setErrorCorrectionLevel(
pdf417.getErrorCorrectionLevel().intValue());
}
}
protected abstract void evaluatePDF417(PDF417Component pdf417);
}