001 /** 002 * This library is free software; you can redistribute it and/or modify it 003 * under the terms of the GNU Lesser General Public License (LGPL) as 004 * published by the Free Software Foundation; either version 3.0 of the 005 * License, or (at your option) any later version. 006 * 007 * This library is distributed in the hope that it will be useful, but 008 * WITHOUT ANY WARRANTY; without even the implied warranty of 009 * MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 * Lesser General Public License for more details. 011 */ 012 013 /** 014 * Title: JBarcodeBean 015 * Description: Barcode JavaBeans Component 016 * Copyright: Copyright (C) 2004 017 * Company: Dafydd Walters 018 */ 019 package net.sourceforge.jbarcodebean.model; 020 021 import net.sourceforge.jbarcodebean.BarcodeException; 022 023 /** 024 * This class, which implements the {@link BarcodeStrategy} interface, 025 * knows how to encode the 3:1 (wide) 026 * variant of the Codabar barcode type. 027 */ 028 public class Codabar extends AbstractBarcodeStrategy implements java.io.Serializable { 029 030 private static CharacterCode[] codes = { 031 new CharacterCode('0', new byte[] {1,1,1,1,1,3,3,1}, 0), 032 new CharacterCode('1', new byte[] {1,1,1,1,3,3,1,1}, 1), 033 new CharacterCode('2', new byte[] {1,1,1,3,1,1,3,1}, 2), 034 new CharacterCode('3', new byte[] {3,3,1,1,1,1,1,1}, 3), 035 new CharacterCode('4', new byte[] {1,1,3,1,1,3,1,1}, 4), 036 new CharacterCode('5', new byte[] {3,1,1,1,1,3,1,1}, 5), 037 new CharacterCode('6', new byte[] {1,3,1,1,1,1,3,1}, 6), 038 new CharacterCode('7', new byte[] {1,3,1,1,3,1,1,1}, 7), 039 new CharacterCode('8', new byte[] {1,3,3,1,1,1,1,1}, 8), 040 new CharacterCode('9', new byte[] {3,1,1,3,1,1,1,1}, 9), 041 new CharacterCode('-', new byte[] {1,1,1,3,3,1,1,1}, 10), 042 new CharacterCode('$', new byte[] {1,1,3,3,1,1,1,1}, 11), 043 new CharacterCode(':', new byte[] {3,1,1,1,3,1,3,1}, 12), 044 new CharacterCode('/', new byte[] {3,1,3,1,1,1,3,1}, 13), 045 new CharacterCode('.', new byte[] {3,1,3,1,3,1,1,1}, 14), 046 new CharacterCode('+', new byte[] {1,1,3,1,3,1,3,1}, 15), 047 new CharacterCode('A', new byte[] {1,1,3,3,1,3,1,1}, 16), // Start 048 new CharacterCode('B', new byte[] {1,3,1,3,1,1,3,1}, 17) // Stop 049 }; 050 051 /** 052 * Always returns {@link BarcodeStrategy#NO_CHECKSUM}. 053 */ 054 public int requiresChecksum() { 055 // No checksum 056 return NO_CHECKSUM; 057 } 058 059 /** 060 * This implementation of <tt>getCodes</tt> returns an array of 061 * {@link AbstractBarcodeStrategy.CharacterCode CharacterCode} objects 062 * for the wide Codabar format. 063 */ 064 protected CharacterCode[] getCodes() { 065 return Codabar.codes; 066 } 067 068 /** 069 * Codabar does not have a checksum, so this function should never be called. 070 * This implementation simply throws an exception. 071 */ 072 protected String augmentWithChecksum(String text) throws BarcodeException { 073 throw new BarcodeException("No checksum in Codabar"); 074 } 075 076 /** 077 * This implementation of <tt>postprocess</tt> does nothing except return 078 * the text passed to the method. 079 */ 080 protected String postprocess(String text) { 081 return text; 082 } 083 084 /** 085 * This implementation of <tt>preprocess</tt> does nothing except return 086 * the text passed to the method. 087 */ 088 protected String preprocess(String text) { 089 return text; 090 } 091 092 /** 093 * Always returns <tt>false</tt> 094 */ 095 protected boolean isInterleaved() { 096 return false; 097 } 098 099 /** 100 * Always returns 'A'. 101 */ 102 protected char getStartSentinel() { 103 return 'A'; 104 } 105 106 /** 107 * Always returns 'B'. 108 */ 109 protected char getStopSentinel() { 110 return 'B'; 111 } 112 113 /** 114 * Always returns 11 (eleven). 115 */ 116 protected byte getMarginWidth() { 117 return 11; 118 } 119 120 /** 121 * This implementation of <tt>getBarcodeLabelText</tt> does nothing except return 122 * the text passed to the method. 123 */ 124 protected String getBarcodeLabelText(String text) { 125 return text; 126 } 127 }