001    /*
002     * JBoss, Home of Professional Open Source.
003     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004     * as indicated by the @author tags. See the copyright.txt file in the
005     * distribution for a full listing of individual contributors.
006     *
007     * This is free software; you can redistribute it and/or modify it
008     * under the terms of the GNU Lesser General Public License as
009     * published by the Free Software Foundation; either version 2.1 of
010     * the License, or (at your option) any later version.
011     *
012     * This software is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015     * Lesser General Public License for more details.
016     *
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this software; if not, write to the Free
019     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021     */
022    package org.jboss.dna.sequencer.msoffice;
023    
024    import java.util.Date;
025    import org.apache.poi.hpsf.PropertySetFactory;
026    import org.apache.poi.hpsf.SummaryInformation;
027    import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
028    import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
029    import org.jboss.dna.common.util.Logger;
030    
031    public class MSOfficeMetadata implements POIFSReaderListener {
032    
033        private String title;
034        private String subject;
035        private String author;
036        private String keywords;
037        private String comment;
038        private String template;
039        private Date lastSavedBy;
040        private String revision;
041        private Long totalEditingTime;
042        private Date lastPrinted;
043        private Date created;
044        private Date saved;
045        private int pages;
046        private int words;
047        private int characters;
048        private String creatingApplication;
049        private byte[] thumbnail;
050    
051        public void processPOIFSReaderEvent( POIFSReaderEvent event ) {
052            try {
053                SummaryInformation si = (SummaryInformation)PropertySetFactory.create(event.getStream());
054                title = si.getTitle();
055                subject = si.getSubject();
056                author = si.getAuthor();
057                keywords = si.getKeywords();
058                comment = si.getComments();
059                template = si.getTemplate();
060                lastSavedBy = si.getLastSaveDateTime();
061                revision = si.getRevNumber();
062                totalEditingTime = si.getEditTime();
063                lastPrinted = si.getLastPrinted();
064                created = si.getCreateDateTime();
065                saved = si.getLastSaveDateTime();
066                pages = si.getPageCount();
067                words = si.getWordCount();
068                characters = si.getCharCount();
069                creatingApplication = si.getApplicationName();
070                thumbnail = si.getThumbnail();
071            } catch (Exception ex) {
072                Logger.getLogger(this.getClass()).debug(ex, "Error processing the metadata for the MS Office document");
073            }
074    
075        }
076    
077        public String getTitle() {
078            return title;
079        }
080    
081        public String getSubject() {
082            return subject;
083        }
084    
085        public String getAuthor() {
086            return author;
087        }
088    
089        public String getKeywords() {
090            return keywords;
091        }
092    
093        public String getComment() {
094            return comment;
095        }
096    
097        public String getTemplate() {
098            return template;
099        }
100    
101        public Date getLastSavedBy() {
102            return lastSavedBy;
103        }
104    
105        public String getRevision() {
106            return revision;
107        }
108    
109        public Long getTotalEditingTime() {
110            return totalEditingTime;
111        }
112    
113        public Date getLastPrinted() {
114            return lastPrinted;
115        }
116    
117        public Date getCreated() {
118            return created;
119        }
120    
121        public Date getSaved() {
122            return saved;
123        }
124    
125        public int getPages() {
126            return pages;
127        }
128    
129        public int getWords() {
130            return words;
131        }
132    
133        public int getCharacters() {
134            return characters;
135        }
136    
137        public String getCreatingApplication() {
138            return creatingApplication;
139        }
140    
141        public byte[] getThumbnail() {
142            return thumbnail;
143        }
144    }