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    import net.sourceforge.jbarcodebean.EncodedBarcode;
023    
024    /**
025     * Interface which defines the barcode strategy for any
026     * given type of barcode.  Classes that implement this interface exist for each
027     * of the barcode types such as Code39, Interleaved25, etc.
028     */
029    public interface BarcodeStrategy {
030    
031      /**
032       * When returned by {@link #requiresChecksum}, indicates that this type of
033       * barcode does not support a checksum.
034       */
035      public static final int NO_CHECKSUM = 0;
036    
037      /**
038       * When returned by {@link #requiresChecksum}, indicates that this type of
039       * barcode always has a checksum.
040       */
041      public static final int MANDATORY_CHECKSUM = 1;
042    
043      /**
044       * When returned by {@link #requiresChecksum}, indicates that this type of
045       * barcode may have an optional checksum.
046       */
047      public static final int OPTIONAL_CHECKSUM = 2;
048    
049      /**
050       * Subclasses implement this method to encode some text into a barcode.
051       *
052       * @param text The raw text to encode.
053       * @param checked <tt>true</tt> if a checksum is to be calculated, <tt>false</tt> if not.
054       *
055       * @return The fully encoded barcode, represented as bars and spaces, wrapped
056       * in a {@link EncodedBarcode} object.
057       *
058       * @throws BarcodeException Typically caused by passing in
059       * a String containing illegal characters (characters that cannot be encoded in
060       * this type of barcode).
061       */
062      public EncodedBarcode encode(String text, boolean checked) throws BarcodeException;
063    
064      /**
065       * Subclasses implement this method to determine whether this type of barcode
066       * has a mandatory, optional or no checksum.  Returns one of the constants
067       * defined in the interface.
068       */
069      public int requiresChecksum();
070    }