123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.hpsf;
-
- import static org.apache.poi.hpsf.ClassIDPredefined.SUMMARY_PROPERTIES;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.util.Date;
-
- import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-
- /**
- * Convenience class representing a Summary Information stream in a
- * Microsoft Office document.
- *
- * @see DocumentSummaryInformation
- */
- public final class SummaryInformation extends PropertySet {
-
- /**
- * The document name a summary information stream usually has in a POIFS filesystem.
- */
- public static final String DEFAULT_STREAM_NAME = "\005SummaryInformation";
-
- /**
- * The SummaryInformation's section's format ID.
- */
- public static final ClassID FORMAT_ID = SUMMARY_PROPERTIES.getClassID();
-
- @Override
- public PropertyIDMap getPropertySetIDMap() {
- return PropertyIDMap.getSummaryInformationProperties();
- }
-
- /**
- * Creates an empty SummaryInformation.
- */
- public SummaryInformation() {
- getFirstSection().setFormatID(FORMAT_ID);
- }
-
- /**
- * Creates a SummaryInformation from a given {@link
- * PropertySet}.
- *
- * @param ps A property set which should be created from a summary
- * information stream.
- * @throws UnexpectedPropertySetTypeException if {@code ps} does not
- * contain a summary information stream.
- */
- public SummaryInformation(final PropertySet ps) throws UnexpectedPropertySetTypeException {
- super(ps);
- if (!isSummaryInformation()) {
- throw new UnexpectedPropertySetTypeException("Not a " + getClass().getName());
- }
- }
-
- /**
- * Creates a SummaryInformation instance from an {@link
- * InputStream} in the Horrible Property Set Format.<p>
- *
- * The constructor reads the first few bytes from the stream
- * and determines whether it is really a property set stream. If
- * it is, it parses the rest of the stream. If it is not, it
- * resets the stream to its beginning in order to let other
- * components mess around with the data and throws an
- * exception.
- *
- * @param stream Holds the data making out the property set
- * stream.
- * @throws IOException
- * if the {@link InputStream} cannot be accessed as needed.
- * @throws NoPropertySetStreamException
- * if the input stream does not contain a property set.
- * @throws UnsupportedEncodingException
- * if a character encoding is not supported.
- */
- public SummaryInformation(final InputStream stream)
- throws NoPropertySetStreamException, IOException {
- super(stream);
- }
-
-
- /**
- * @return The title or {@code null}
- */
- public String getTitle() {
- return getPropertyStringValue(PropertyIDMap.PID_TITLE);
- }
-
-
-
- /**
- * Sets the title.
- *
- * @param title The title to set.
- */
- public void setTitle(final String title) {
- set1stProperty(PropertyIDMap.PID_TITLE, title);
- }
-
-
-
- /**
- * Removes the title.
- */
- public void removeTitle() {
- remove1stProperty(PropertyIDMap.PID_TITLE);
- }
-
-
-
- /**
- * Returns the subject (or {@code null}).
- *
- * @return The subject or {@code null}
- */
- public String getSubject() {
- return getPropertyStringValue(PropertyIDMap.PID_SUBJECT);
- }
-
-
-
- /**
- * Sets the subject.
- *
- * @param subject The subject to set.
- */
- public void setSubject(final String subject) {
- set1stProperty(PropertyIDMap.PID_SUBJECT, subject);
- }
-
-
-
- /**
- * Removes the subject.
- */
- public void removeSubject() {
- remove1stProperty(PropertyIDMap.PID_SUBJECT);
- }
-
-
-
- /**
- * Returns the author (or {@code null}).
- *
- * @return The author or {@code null}
- */
- public String getAuthor() {
- return getPropertyStringValue(PropertyIDMap.PID_AUTHOR);
- }
-
-
-
- /**
- * Sets the author.
- *
- * @param author The author to set.
- */
- public void setAuthor(final String author) {
- set1stProperty(PropertyIDMap.PID_AUTHOR, author);
- }
-
-
-
- /**
- * Removes the author.
- */
- public void removeAuthor() {
- remove1stProperty(PropertyIDMap.PID_AUTHOR);
- }
-
-
-
- /**
- * Returns the keywords (or {@code null}).
- *
- * @return The keywords or {@code null}
- */
- public String getKeywords() {
- return getPropertyStringValue(PropertyIDMap.PID_KEYWORDS);
- }
-
-
-
- /**
- * Sets the keywords.
- *
- * @param keywords The keywords to set.
- */
- public void setKeywords(final String keywords) {
- set1stProperty(PropertyIDMap.PID_KEYWORDS, keywords);
- }
-
-
-
- /**
- * Removes the keywords.
- */
- public void removeKeywords() {
- remove1stProperty(PropertyIDMap.PID_KEYWORDS);
- }
-
-
-
- /**
- * Returns the comments (or {@code null}).
- *
- * @return The comments or {@code null}
- */
- public String getComments() {
- return getPropertyStringValue(PropertyIDMap.PID_COMMENTS);
- }
-
-
-
- /**
- * Sets the comments.
- *
- * @param comments The comments to set.
- */
- public void setComments(final String comments) {
- set1stProperty(PropertyIDMap.PID_COMMENTS, comments);
- }
-
-
-
- /**
- * Removes the comments.
- */
- public void removeComments() {
- remove1stProperty(PropertyIDMap.PID_COMMENTS);
- }
-
-
-
- /**
- * Returns the template (or {@code null}).
- *
- * @return The template or {@code null}
- */
- public String getTemplate() {
- return getPropertyStringValue(PropertyIDMap.PID_TEMPLATE);
- }
-
-
-
- /**
- * Sets the template.
- *
- * @param template The template to set.
- */
- public void setTemplate(final String template) {
- set1stProperty(PropertyIDMap.PID_TEMPLATE, template);
- }
-
-
-
- /**
- * Removes the template.
- */
- public void removeTemplate() {
- remove1stProperty(PropertyIDMap.PID_TEMPLATE);
- }
-
-
-
- /**
- * Returns the last author (or {@code null}).
- *
- * @return The last author or {@code null}
- */
- public String getLastAuthor() {
- return getPropertyStringValue(PropertyIDMap.PID_LASTAUTHOR);
- }
-
-
-
- /**
- * Sets the last author.
- *
- * @param lastAuthor The last author to set.
- */
- public void setLastAuthor(final String lastAuthor) {
- set1stProperty(PropertyIDMap.PID_LASTAUTHOR, lastAuthor);
- }
-
-
-
- /**
- * Removes the last author.
- */
- public void removeLastAuthor() {
- remove1stProperty(PropertyIDMap.PID_LASTAUTHOR);
- }
-
-
-
- /**
- * Returns the revision number (or {@code null}).
- *
- * @return The revision number or {@code null}
- */
- public String getRevNumber() {
- return getPropertyStringValue(PropertyIDMap.PID_REVNUMBER);
- }
-
-
-
- /**
- * Sets the revision number.
- *
- * @param revNumber The revision number to set.
- */
- public void setRevNumber(final String revNumber) {
- set1stProperty(PropertyIDMap.PID_REVNUMBER, revNumber);
- }
-
-
-
- /**
- * Removes the revision number.
- */
- public void removeRevNumber() {
- remove1stProperty(PropertyIDMap.PID_REVNUMBER);
- }
-
-
-
- /**
- * Returns the total time spent in editing the document (or
- * {@code 0}).
- *
- * @return The total time spent in editing the document or 0 if the {@link
- * SummaryInformation} does not contain this information.
- */
- public long getEditTime() {
- final Date d = (Date) getProperty(PropertyIDMap.PID_EDITTIME);
- if (d == null) {
- return 0;
- }
- return Filetime.dateToFileTime(d);
- }
-
-
-
- /**
- * Sets the total time spent in editing the document.
- *
- * @param time The time to set.
- */
- public void setEditTime(final long time) {
- final Date d = Filetime.filetimeToDate(time);
- getFirstSection().setProperty(PropertyIDMap.PID_EDITTIME, Variant.VT_FILETIME, d);
- }
-
-
-
- /**
- * Remove the total time spent in editing the document.
- */
- public void removeEditTime() {
- remove1stProperty(PropertyIDMap.PID_EDITTIME);
- }
-
-
-
- /**
- * Returns the last printed time (or {@code null}).
- *
- * @return The last printed time or {@code null}
- */
- public Date getLastPrinted() {
- return (Date) getProperty(PropertyIDMap.PID_LASTPRINTED);
- }
-
-
-
- /**
- * Sets the lastPrinted.
- *
- * @param lastPrinted The lastPrinted to set.
- */
- public void setLastPrinted(final Date lastPrinted) {
- getFirstSection().setProperty(PropertyIDMap.PID_LASTPRINTED, Variant.VT_FILETIME, lastPrinted);
- }
-
-
-
- /**
- * Removes the lastPrinted.
- */
- public void removeLastPrinted() {
- remove1stProperty(PropertyIDMap.PID_LASTPRINTED);
- }
-
-
-
- /**
- * Returns the creation time (or {@code null}).
- *
- * @return The creation time or {@code null}
- */
- public Date getCreateDateTime() {
- return (Date) getProperty(PropertyIDMap.PID_CREATE_DTM);
- }
-
-
-
- /**
- * Sets the creation time.
- *
- * @param createDateTime The creation time to set.
- */
- public void setCreateDateTime(final Date createDateTime) {
- getFirstSection().setProperty(PropertyIDMap.PID_CREATE_DTM, Variant.VT_FILETIME, createDateTime);
- }
-
-
-
- /**
- * Removes the creation time.
- */
- public void removeCreateDateTime() {
- remove1stProperty(PropertyIDMap.PID_CREATE_DTM);
- }
-
-
-
- /**
- * Returns the last save time (or {@code null}).
- *
- * @return The last save time or {@code null}
- */
- public Date getLastSaveDateTime() {
- return (Date) getProperty(PropertyIDMap.PID_LASTSAVE_DTM);
- }
-
-
-
- /**
- * Sets the total time spent in editing the document.
- *
- * @param time The time to set.
- */
- public void setLastSaveDateTime(final Date time) {
- final Section s = getFirstSection();
- s
- .setProperty(PropertyIDMap.PID_LASTSAVE_DTM,
- Variant.VT_FILETIME, time);
- }
-
-
-
- /**
- * Remove the total time spent in editing the document.
- */
- public void removeLastSaveDateTime() {
- remove1stProperty(PropertyIDMap.PID_LASTSAVE_DTM);
- }
-
-
-
- /**
- * Returns the page count or 0 if the SummaryInformation does
- * not contain a page count.
- *
- * @return The page count or 0 if the SummaryInformation does not
- * contain a page count.
- */
- public int getPageCount() {
- return getPropertyIntValue(PropertyIDMap.PID_PAGECOUNT);
- }
-
-
-
- /**
- * Sets the page count.
- *
- * @param pageCount The page count to set.
- */
- public void setPageCount(final int pageCount) {
- set1stProperty(PropertyIDMap.PID_PAGECOUNT, pageCount);
- }
-
-
-
- /**
- * Removes the page count.
- */
- public void removePageCount() {
- remove1stProperty(PropertyIDMap.PID_PAGECOUNT);
- }
-
-
-
- /**
- * Returns the word count or 0 if the SummaryInformation does
- * not contain a word count.
- *
- * @return The word count or {@code null}
- */
- public int getWordCount() {
- return getPropertyIntValue(PropertyIDMap.PID_WORDCOUNT);
- }
-
-
-
- /**
- * Sets the word count.
- *
- * @param wordCount The word count to set.
- */
- public void setWordCount(final int wordCount) {
- set1stProperty(PropertyIDMap.PID_WORDCOUNT, wordCount);
- }
-
-
-
- /**
- * Removes the word count.
- */
- public void removeWordCount() {
- remove1stProperty(PropertyIDMap.PID_WORDCOUNT);
- }
-
-
-
- /**
- * Returns the character count or 0 if the SummaryInformation
- * does not contain a char count.
- *
- * @return The character count or {@code null}
- */
- public int getCharCount() {
- return getPropertyIntValue(PropertyIDMap.PID_CHARCOUNT);
- }
-
-
-
- /**
- * Sets the character count.
- *
- * @param charCount The character count to set.
- */
- public void setCharCount(final int charCount) {
- set1stProperty(PropertyIDMap.PID_CHARCOUNT, charCount);
- }
-
-
-
- /**
- * Removes the character count.
- */
- public void removeCharCount() {
- remove1stProperty(PropertyIDMap.PID_CHARCOUNT);
- }
-
-
-
- /**
- * Returns the thumbnail (or {@code null}) <strong>when this
- * method is implemented. Please note that the return type is likely to
- * change!</strong><p>
- *
- * To process this data, you may wish to make use of the
- * {@link Thumbnail} class. The raw data is generally
- * an image in WMF or Clipboard (BMP?) format
- *
- * @return The thumbnail or {@code null}
- */
- public byte[] getThumbnail() {
- return (byte[]) getProperty(PropertyIDMap.PID_THUMBNAIL);
- }
-
- /**
- * Returns the thumbnail (or {@code null}), processed
- * as an object which is (largely) able to unpack the thumbnail
- * image data.
- *
- * @return The thumbnail or {@code null}
- */
- public Thumbnail getThumbnailThumbnail() {
- byte[] data = getThumbnail();
- if (data == null) {
- return null;
- }
- return new Thumbnail(data);
- }
-
-
-
- /**
- * Sets the thumbnail.
- *
- * @param thumbnail The thumbnail to set.
- */
- public void setThumbnail(final byte[] thumbnail) {
- getFirstSection().setProperty(PropertyIDMap.PID_THUMBNAIL, /* FIXME: */ Variant.VT_LPSTR, thumbnail);
- }
-
-
-
- /**
- * Removes the thumbnail.
- */
- public void removeThumbnail() {
- remove1stProperty(PropertyIDMap.PID_THUMBNAIL);
- }
-
-
-
- /**
- * Returns the application name (or {@code null}).
- *
- * @return The application name or {@code null}
- */
- public String getApplicationName() {
- return getPropertyStringValue(PropertyIDMap.PID_APPNAME);
- }
-
-
-
- /**
- * Sets the application name.
- *
- * @param applicationName The application name to set.
- */
- public void setApplicationName(final String applicationName) {
- set1stProperty(PropertyIDMap.PID_APPNAME, applicationName);
- }
-
-
-
- /**
- * Removes the application name.
- */
- public void removeApplicationName() {
- remove1stProperty(PropertyIDMap.PID_APPNAME);
- }
-
-
-
- /**
- * Returns a security code which is one of the following values:
- *
- * <ul>
- *
- * <li>0 if the SummaryInformation does not contain a
- * security field or if there is no security on the document. Use
- * {@link PropertySet#wasNull()} to distinguish between the two
- * cases!
- *
- * <li>1 if the document is password protected
- *
- * <li>2 if the document is read-only recommended
- *
- * <li>4 if the document is read-only enforced
- *
- * <li>8 if the document is locked for annotations
- *
- * </ul>
- *
- * @return The security code or {@code null}
- */
- public int getSecurity() {
- return getPropertyIntValue(PropertyIDMap.PID_SECURITY);
- }
-
-
-
- /**
- * Sets the security code.
- *
- * @param security The security code to set.
- */
- public void setSecurity(final int security) {
- set1stProperty(PropertyIDMap.PID_SECURITY, security);
- }
-
-
-
- /**
- * Removes the security code.
- */
- public void removeSecurity() {
- remove1stProperty(PropertyIDMap.PID_SECURITY);
- }
-
- }
|