package NetAppCheckInFilter; import intradoc.shared.*; import intradoc.common.*; import intradoc.data.*; import java.io.FileInputStream; import java.io.IOException; import java.io.*; import java.util.*; //import org.apache.poi.hpsf.PropertySetFactory; //import org.apache.poi.hpsf.SummaryInformation; //import org.apache.poi.poifs.eventfilesystem.POIFSReader; //import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent; //import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener; import org.apache.poi.hpsf.*; import org.apache.poi.poifs.eventfilesystem.*; import org.apache.poi.util.HexDump; public class CheckinFilter implements FilterImplementor { public int doFilter(Workspace ws, DataBinder binder, ExecutionContext cxt) throws DataException, ServiceException { if(isWordDoc(binder)) { String fileName = binder.getLocal("primaryFile:path"); try{ POIFSReader r = new POIFSReader(); MyPOIFSReaderListener listner = new MyPOIFSReaderListener(); //r.registerListener(listner,""); r.registerListener(listner,"\005SummaryInformation"); r.read(new FileInputStream(fileName)); String title = listner.getTitle(); System.out.println(" My Title: \"" + title + "\""); if(title != null) binder.putLocal("dDocTitle",title); }catch(java.io.FileNotFoundException e) { System.out.println("FileNotFoundException : " + fileName); }catch(java.io.IOException e) { System.out.println("IOException : " + fileName); } } // filter executed correctly. Return CONTINUE return CONTINUE; } private boolean isWordDoc(DataBinder binder) { String primaryFile = binder.getLocal("primaryFile"); if(primaryFile == null) primaryFile = binder.getLocal("primaryFile:path"); if(primaryFile == null) return false; primaryFile = primaryFile.toUpperCase(); if(primaryFile.indexOf(".DOC") != -1) return true; return false; } static class MyPOIFSReaderListener implements POIFSReaderListener { private String title = "Testing è"; public void processPOIFSReaderEvent(final POIFSReaderEvent event) { PropertySet ps = null; try { ps = PropertySetFactory.create(event.getStream()); System.out.println("event.getStream()"+event.getStream()); } catch (NoPropertySetStreamException ex) { System.out.println("No property set stream: \"" + event.getPath() + event.getName() + "\""); return; } catch (Exception ex) { throw new RuntimeException ("Property set stream \"" + event.getPath() + event.getName() + "\": " + ex); } /* Print the name of the property set stream: */ System.out.println("Property set stream \"" + event.getPath() + event.getName() + "\":"); /* Print the number of sections: */ final long sectionCount = ps.getSectionCount(); System.out.println(" No. of sections: " + sectionCount); /* Print the list of sections: */ List sections = ps.getSections(); int nr = 0; Iterator i; for (i = sections.iterator(); i.hasNext();) { /* Print a single section: */ Section sec = (Section) i.next(); System.out.println(" Section " + nr++ + ":"); //String s = hex(sec.getFormatID().getBytes()); //s = s.substring(0, s.length() - 1); //System.out.println(" Format ID: " + s); /* Print the number of properties in this section. */ int propertyCount = sec.getPropertyCount(); System.out.println(" No. of properties: " + propertyCount); /* Print the properties: */ Property[] properties = sec.getProperties(); for (int i2 = 0; i2 < properties.length; i2++) { /* Print a single property: */ Property p = properties[i2]; int id = p.getID(); long type = p.getType(); Object value = p.getValue(); System.out.println(" Property ID: " + id + ", type: " + type + ", value: " + value); } } /*SummaryInformation si = null; try { si = (SummaryInformation) PropertySetFactory.create(event.getStream()); } catch (Exception ex) { throw new RuntimeException ("Property set stream \"" + event.getPath() + event.getName() + "\": " + ex); } title = si.getTitle(); if (title != null) System.out.println("Title: \"" + title + "\""); else System.out.println("Document has no title."); */ } public String getTitle() { return title; } } }