com.univocity.parsers.common.processor.core
Class AbstractMasterDetailProcessor<T extends Context>

java.lang.Object
  extended by com.univocity.parsers.common.DefaultConversionProcessor
      extended by com.univocity.parsers.common.processor.core.AbstractObjectProcessor<T>
          extended by com.univocity.parsers.common.processor.core.AbstractMasterDetailProcessor<T>
All Implemented Interfaces:
ConversionProcessor, Processor<T>
Direct Known Subclasses:
AbstractMasterDetailListProcessor, MasterDetailProcessor

public abstract class AbstractMasterDetailProcessor<T extends Context>
extends AbstractObjectProcessor<T>

A Processor implementation for associating rows extracted from any implementation of AbstractParser into MasterDetailRecord instances.

For each row processed, a call to isMasterRecord(String[], Context) will be made to identify whether or not it is a master row.

The detail rows are automatically associated with the master record in an instance of MasterDetailRecord.

When the master record is fully processed (i.e. MasterDetailRecord contains a master row and all associated detail rows), it is sent to the user for processing in masterDetailRecordProcessed(MasterDetailRecord, Context).

Note this class extends AbstractObjectProcessor and value conversions provided by Conversion instances are fully supported.

Author:
uniVocity Software Pty Ltd - parsers@univocity.com
See Also:
MasterDetailRecord, RowPlacement, AbstractParser, ObjectRowListProcessor, Processor

Constructor Summary
AbstractMasterDetailProcessor(AbstractObjectListProcessor detailProcessor)
          Creates a MasterDetailProcessor assuming master records are positioned above its detail records in the input.
AbstractMasterDetailProcessor(RowPlacement rowPlacement, AbstractObjectListProcessor detailProcessor)
          Creates a MasterDetailProcessor
 
Method Summary
protected abstract  boolean isMasterRecord(String[] row, T context)
          Queries whether or not the given row is a master record.
protected abstract  void masterDetailRecordProcessed(MasterDetailRecord record, T context)
          Invoked by the processor after a master row and all associated detail rows have been processed.
 void processEnded(T context)
          This method will by invoked by the parser once, after the parsing process stopped and all resources were closed.
 void processStarted(T context)
          This method will by invoked by the parser once, when it is ready to start processing the input.
 void rowProcessed(Object[] row, T context)
          Invoked by the parser after all values of a valid record have been processed and any conversions have been executed.
 void rowProcessed(String[] row, T context)
          Invoked by the parser after all values of a valid record have been processed.
 
Methods inherited from class com.univocity.parsers.common.DefaultConversionProcessor
applyConversions, convertAll, convertFields, convertIndexes, convertType, handleConversionError, initializeConversions, reverseConversions, toDataProcessingException
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractMasterDetailProcessor

public AbstractMasterDetailProcessor(RowPlacement rowPlacement,
                                     AbstractObjectListProcessor detailProcessor)
Creates a MasterDetailProcessor

Parameters:
rowPlacement - indication whether the master records are placed in relation its detail records in the input.

 Master record (Totals)       Master record (Totals)
  above detail records         under detail records

    Totals | 100                 Item   | 60
    Item   | 60                  Item   | 40
    Item   | 40                  Totals | 100
 

detailProcessor - the ObjectRowListProcessor that processes detail rows.

AbstractMasterDetailProcessor

public AbstractMasterDetailProcessor(AbstractObjectListProcessor detailProcessor)
Creates a MasterDetailProcessor assuming master records are positioned above its detail records in the input.

Parameters:
detailProcessor - the AbstractObjectListProcessor that processes detail rows.
Method Detail

processStarted

public void processStarted(T context)
Description copied from interface: Processor
This method will by invoked by the parser once, when it is ready to start processing the input.

Specified by:
processStarted in interface Processor<T extends Context>
Overrides:
processStarted in class AbstractObjectProcessor<T extends Context>
Parameters:
context - A contextual object with information and controls over the current state of the parsing process

rowProcessed

public final void rowProcessed(String[] row,
                               T context)
Invoked by the parser after all values of a valid record have been processed.

This method will then try to identify whether the given record is a master record.

If it is, any conversions applied to the fields of the master record will be executed;

Otherwise, the parsed row will be delegated to the detailProcessor given in the constructor, and a detail record will be associated with the current MasterDetailRecord

Specified by:
rowProcessed in interface Processor<T extends Context>
Overrides:
rowProcessed in class AbstractObjectProcessor<T extends Context>
Parameters:
row - the data extracted by the parser for an individual record.
context - A contextual object with information and controls over the current state of the parsing process

rowProcessed

public final void rowProcessed(Object[] row,
                               T context)
Invoked by the parser after all values of a valid record have been processed and any conversions have been executed.

Specified by:
rowProcessed in class AbstractObjectProcessor<T extends Context>
Parameters:
row - the data extracted by the parser for an individual record.
context - A contextual object with information and controls over the current state of the parsing process

processEnded

public void processEnded(T context)
Description copied from interface: Processor
This method will by invoked by the parser once, after the parsing process stopped and all resources were closed.

It will always be called by the parser: in case of errors, if the end of the input us reached, or if the user stopped the process manually using Context.stop().

Specified by:
processEnded in interface Processor<T extends Context>
Overrides:
processEnded in class AbstractObjectProcessor<T extends Context>
Parameters:
context - A contextual object with information and controls over the state of the parsing process

isMasterRecord

protected abstract boolean isMasterRecord(String[] row,
                                          T context)
Queries whether or not the given row is a master record.

Parameters:
row - the data extracted by the parser for an individual record.
context - A contextual object with information and controls over the current state of the parsing process
Returns:
true if the row is a master record, false if it is a detail record.

masterDetailRecordProcessed

protected abstract void masterDetailRecordProcessed(MasterDetailRecord record,
                                                    T context)
Invoked by the processor after a master row and all associated detail rows have been processed.

Parameters:
record - The master detail records
context - A contextual object with information and controls over the current state of the parsing process


Copyright © 2017 uniVocity Software Pty Ltd. All rights reserved.