[prev in list] [next in list] [prev in thread] [next in thread] 

List:       slide-dev
Subject:    cvs commit: jakarta-slide/src/share/org/apache/slide/extractor OfficeExtractor.java
From:       dflorey () apache ! org
Date:       2004-04-28 13:08:20
Message-ID: 20040428130820.42391.qmail () minotaur ! apache ! org
[Download RAW message or body]

dflorey     2004/04/28 06:08:20

  Added:       src/share/org/apache/slide/extractor OfficeExtractor.java
  Log:
  Added MS Office metainfo extractor
  
  Revision  Changes    Path
  1.1                  \
jakarta-slide/src/share/org/apache/slide/extractor/OfficeExtractor.java  
  Index: OfficeExtractor.java
  ===================================================================
  package org.apache.slide.extractor;
  
  import java.io.InputStream;
  import java.util.*;
  
  import org.apache.poi.hpsf.*;
  import org.apache.poi.poifs.eventfilesystem.*;
  import org.apache.slide.util.conf.Configurable;
  import org.apache.slide.util.conf.Configuration;
  import org.apache.slide.util.conf.ConfigurationException;
  
  /**
   * The OfficeExtractor class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class OfficeExtractor extends AbstractPropertyExtractor implements \
Configurable {  protected List instructions = new ArrayList();
  	protected Map propertyMap = new HashMap();
  	
  	public OfficeExtractor(String uri, String contentType) {
  		super(uri, contentType);
  	}
  
  	public Map extract(InputStream content) throws ExtractorException {
  		OfficePropertiesListener listener = new OfficePropertiesListener();
  		try {
  			POIFSReader r = new POIFSReader();
  			r.registerListener(listener);
  			r.read(content);
  		} catch (Exception e) {
  			throw new ExtractorException("Exception while extracting properties in \
OfficeExtractor");  }
  		return listener.getProperties();
  	}
  
  	class OfficePropertiesListener implements POIFSReaderListener {
  
  		private HashMap properties = new HashMap();
  
  		public Map getProperties() {
  				return properties;
  		}
  
  		public void processPOIFSReaderEvent(POIFSReaderEvent event) {
  			PropertySet ps = null;
  			try {
  				ps = PropertySetFactory.create(event.getStream());
  			} catch (NoPropertySetStreamException ex) {
  				return;
  			} catch (Exception ex) {
  				throw new RuntimeException("Property set stream \"" + event.getPath() + \
event.getName() + "\": " + ex);  }
  			String eventName = event.getName().trim();
  			final long sectionCount = ps.getSectionCount();
  			List sections = ps.getSections();
  			int nr = 0;
  			for (Iterator i = sections.iterator(); i.hasNext();) {
  				Section sec = (Section) i.next();
  				int propertyCount = sec.getPropertyCount();
  				Property[] props = sec.getProperties();
  				for (int i2 = 0; i2 < props.length; i2++) {
  					Property p = props[i2];
  					int id = p.getID();
  					long type = p.getType();
  					Object value = p.getValue();
  					String key = eventName + "-" + nr + "-" + id; 
  					if ( propertyMap.containsKey(key) ) {
  						properties.put(propertyMap.get(key), value);
  					}
  				}
  			}
  		}
  	}
  
  	public void configure(Configuration configuration) throws ConfigurationException {
          Enumeration instructions = configuration.getConfigurations("instruction");
          while (instructions.hasMoreElements()) {
              Configuration extract = (Configuration)instructions.nextElement();
              String property = extract.getAttribute("property");
              String id = extract.getAttribute("id");
  			propertyMap.put(id, property);
          }
  	}
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic