FileDocCategorySizeDatePackage
HSSFEventFactory.javaAPI DocApache Poi 3.0.17474Mon Jan 01 12:39:36 GMT 2007org.apache.poi.hssf.eventusermodel

HSSFEventFactory

public class HSSFEventFactory extends Object
Low level event based HSSF reader. Pass either a DocumentInputStream to process events along with a request object or pass a POIFS POIFSFileSystem to processWorkbookEvents along with a request. This will cause your file to be processed a record at a time. Each record with a static id matching one that you have registed in your HSSFRequest will be passed to your associated HSSFListener.
see
org.apache.poi.hssf.dev.EFHSSF
author
Andrew C. Oliver (acoliver at apache dot org)
author
Carey Sublette (careysub@earthling.net)

Fields Summary
Constructors Summary
public HSSFEventFactory()
Creates a new instance of HSSFEventFactory

    
Methods Summary
public shortabortableProcessEvents(org.apache.poi.hssf.eventusermodel.HSSFRequest req, java.io.InputStream in)
Processes a DocumentInputStream into essentially Record events.

see
org.apache.poi.poifs.filesystem.POIFSFileSystem#createDocumentInputStream(String)
param
req an Instance of HSSFRequest which has your registered listeners
param
in a DocumentInputStream obtained from POIFS's POIFSFileSystem object
return
numeric user-specified result code.

		return genericProcessEvents(req, new RecordInputStream(in));
    
public shortabortableProcessWorkbookEvents(org.apache.poi.hssf.eventusermodel.HSSFRequest req, org.apache.poi.poifs.filesystem.POIFSFileSystem fs)
Processes a file into essentially record events.

param
req an Instance of HSSFRequest which has your registered listeners
param
fs a POIFS filesystem containing your workbook
return
numeric user-specified result code.

		InputStream in = fs.createDocumentInputStream("Workbook");
		return abortableProcessEvents(req, in);
    
protected shortgenericProcessEvents(org.apache.poi.hssf.eventusermodel.HSSFRequest req, org.apache.poi.hssf.record.RecordInputStream in)
Processes a DocumentInputStream into essentially Record events.

see
org.apache.poi.poifs.filesystem.POIFSFileSystem#createDocumentInputStream(String)
param
req an Instance of HSSFRequest which has your registered listeners
param
in a DocumentInputStream obtained from POIFS's POIFSFileSystem object
return
numeric user-specified result code.

		short userCode = 0;

		short sid = 0;
		process:
		{
                  
			Record rec       = null;

			while (in.hasNextRecord())
			{
                          in.nextRecord();

				sid = in.getSid();;
                
                //
                // for some reasons we have to make the workbook to be at least 4096 bytes
                // but if we have such workbook we fill the end of it with zeros (many zeros)
                //
                // it is not good:
                // if the length( all zero records ) % 4 = 1
                // e.g.: any zero record would be readed as  4 bytes at once ( 2 - id and 2 - size ).
                // And the last 1 byte will be readed WRONG ( the id must be 2 bytes )
                //
                // So we should better to check if the sid is zero and not to read more data
                // The zero sid shows us that rest of the stream data is a fake to make workbook 
                // certain size
                //
                if ( sid == 0 )
                    break;


				if ((rec != null) && (sid != ContinueRecord.sid))
				{
					userCode = req.processRecord(rec);
					if (userCode != 0) break process;
				}
				if (sid != ContinueRecord.sid)
				{
                                        //System.out.println("creating "+sid);
					Record[] recs = RecordFactory.createRecord(in);

					if (recs.length > 1)
					{                                // we know that the multiple
						for (int k = 0; k < (recs.length - 1); k++)
						{                            // record situations do not
							userCode = req.processRecord(
								recs[ k ]);          // contain continue records
							if (userCode != 0) break process;
						}
					}
					rec = recs[ recs.length - 1 ];   // regardless we'll process

					// the last record as though
					// it might be continued
					// if there is only one
					// records, it will go here too.
				}
				else
					{
                                  throw new RecordFormatException("Records should handle ContinueRecord internally. Should not see this exception");
				}
			}
			if (rec != null)
			{
				userCode = req.processRecord(rec);
				if (userCode != 0) break process;
			}
		}
		
		return userCode;

		// Record[] retval = new Record[ records.size() ];
		// retval = ( Record [] ) records.toArray(retval);
		// return null;
    
public voidprocessEvents(org.apache.poi.hssf.eventusermodel.HSSFRequest req, java.io.InputStream in)
Processes a DocumentInputStream into essentially Record events. If an AbortableHSSFListener causes a halt to processing during this call the method will return just as with abortableProcessEvents, but no user code or HSSFUserException will be passed back.

see
org.apache.poi.poifs.filesystem.POIFSFileSystem#createDocumentInputStream(String)
param
req an Instance of HSSFRequest which has your registered listeners
param
in a DocumentInputStream obtained from POIFS's POIFSFileSystem object

		try
		{
			genericProcessEvents(req, new RecordInputStream(in));
		}
		catch (HSSFUserException hue)
		{/*If an HSSFUserException user exception is thrown, ignore it.*/ }
	
public voidprocessWorkbookEvents(org.apache.poi.hssf.eventusermodel.HSSFRequest req, org.apache.poi.poifs.filesystem.POIFSFileSystem fs)
Processes a file into essentially record events.

param
req an Instance of HSSFRequest which has your registered listeners
param
fs a POIFS filesystem containing your workbook

        InputStream in = fs.createDocumentInputStream("Workbook");

        processEvents(req, in);