/* Copyright (c) 2005 Ricebridge. All Rights Reserved. * * This file is available under the terms and conditions of the * Ricebridge "Open Source API" policy; Ricebridge grants use of this * copyrighted work under the terms of a BSD-style license only. See * http://www.opensource.org/licenses/bsd-license.php for more * information. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * - Neither the name of the Ricebridge nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.ricebridge.xmlman; import org.jostraca.util.Internal; import java.util.*; /** Helper class for implementing the {@link BadRecordListener} interface. * <p>Use of this class will help ensure future compatibility with any <i>XML Manager</i> API changes. * Subclasses should implement the <code>*Impl</code> methods (for example, {@link #handleBadRecordImpl(BadRecord)}) * rather than the declared interface methods such as {@link #handleBadRecord(BadRecord)}. * See the {@link BadRecordListener} interface documentation for a description of the calling sequence of the methods * in this class.</p> * <p>Note: you should probably extend the abstract {@link CollectingBadRecordListener} class, instead of this class, * to ensure that the {@link XmlManager#getBadRecords getBadRecords} method continues to function correctly.</p> * <p>The <b><a href="BadRecordListenerSupport.java.html">Source Code</a></b> of this Java class * is available under a <a href="http://www.opensource.org/licenses/bsd-license.php">BSD-style license</a>.</p> */ public abstract class BadRecordListenerSupport implements BadRecordListener { // public methods /** Helper implementation of {@link BadRecordListener#startProcess BadRecordListener.startProcess}. * Subclasses should implement {@link #startProcessImpl}. */ public void startProcess() { try { startProcessImpl(); } catch( XmlManagerException xme ) { throw xme; } catch( Exception e ) { throw new XmlManagerException( XmlManagerException.CODE_badrecordlistener_exception, new String[] { "bad-record-listener-class", this.getClass().getName(), "methodname", "startProcessImpl" }, e ); } } /** Helper implementation of {@link BadRecordListener#handleBadRecord(BadRecord) BadRecordListener.handleBadRecord}. * Subclasses should implement {@link #handleBadRecordImpl(BadRecord)}. */ public void handleBadRecord( BadRecord pBadRecord ) { BadRecord br = (BadRecord) Internal.null_arg(pBadRecord); try { handleBadRecordImpl( br ); } catch( XmlManagerException xme ) { throw xme; } catch( Exception e ) { throw new XmlManagerException( XmlManagerException.CODE_handlebadrecord_exception, new String[] { "bad-record-listener-class", this.getClass().getName(), "badrecord", String.valueOf(br) }, e ); } } /** Helper implementation of {@link BadRecordListener#endProcess BadRecordListener.endProcess}. * Subclasses should implement {@link #endProcessImpl}. */ public void endProcess() { try { endProcessImpl(); } catch( XmlManagerException xme ) { throw xme; } catch( Exception e ) { throw new XmlManagerException( XmlManagerException.CODE_badrecordlistener_exception, new String[] { "bad-record-listener-class", this.getClass().getName(), "methodname", "endProcessImpl" }, e ); } } // protected methods /** Implement this method to receive notification that the processing of XML data is about to start. * <p>This method is optional for subclasses, as an empty implementation is provided here.</p> * @see #startProcess * @see BadRecordListener#startProcess */ protected void startProcessImpl() { // empty implementation } /** Implement this method to receive each {@link BadRecord} as it occurs. * <p>This method must be implemented by subclasses.</p> * @see #handleBadRecord(BadRecord) * @see BadRecordListener#handleBadRecord(BadRecord) */ protected abstract void handleBadRecordImpl( BadRecord pBadRecord ); /** Implement this method to receive notification that the processing of XML data has finished. * <p>This method is optional for subclasses, as an empty implementation is provided here.</p> * @see #endProcess * @see BadRecordListener#endProcess */ protected void endProcessImpl() { // empty implementation } }