1 16 17 package org.apache.poi.hssf.eventmodel; 18 19 import java.io.InputStream ; 20 import java.util.ArrayList ; 21 import java.util.Iterator ; 22 import java.util.List ; 23 24 import org.apache.poi.hssf.model.Model; 25 import org.apache.poi.hssf.model.Sheet; 26 import org.apache.poi.hssf.model.Workbook; 27 import org.apache.poi.hssf.record.BOFRecord; 28 import org.apache.poi.hssf.record.EOFRecord; 29 import org.apache.poi.hssf.record.Record; 30 31 32 39 public class ModelFactory implements ERFListener 40 { 41 42 List listeners; 43 Model currentmodel; 44 boolean lastEOF; 45 46 49 public ModelFactory() 50 { 51 super(); 52 listeners = new ArrayList (1); 53 } 54 55 59 public void registerListener(ModelFactoryListener listener) { 60 listeners.add(listener); 61 } 62 63 66 public void run(InputStream stream) { 67 EventRecordFactory factory = new EventRecordFactory(true); 68 factory.registerListener(this,null); 69 lastEOF = true; 70 factory.processRecords(stream); 71 } 72 73 public boolean processRecord(Record rec) 75 { 76 if (rec.getSid() == BOFRecord.sid) { 77 if (lastEOF != true) { 78 throw new RuntimeException ("Not yet handled embedded models"); 79 } else { 80 BOFRecord bof = (BOFRecord)rec; 81 switch (bof.getType()) { 82 case BOFRecord.TYPE_WORKBOOK: 83 currentmodel = new Workbook(); 84 break; 85 case BOFRecord.TYPE_WORKSHEET: 86 currentmodel = new Sheet(); 87 break; 88 default: 89 throw new RuntimeException ("Unsupported model type "+bof.getType()); 90 } 91 92 } 93 } 94 95 if (rec.getSid() == EOFRecord.sid) { 96 lastEOF = true; 97 throwEvent(currentmodel); 98 } else { 99 lastEOF = false; 100 } 101 102 103 return true; 104 } 105 106 110 private void throwEvent(Model model) 111 { 112 Iterator i = listeners.iterator(); 113 while (i.hasNext()) { 114 ModelFactoryListener mfl = (ModelFactoryListener) i.next(); 115 mfl.process(model); 116 } 117 } 118 119 120 } 121 | Popular Tags |