diff --git a/src/ooxml/java/org/apache/poi/POIXMLProperties.java b/src/ooxml/java/org/apache/poi/POIXMLProperties.java index 0ce6ad677..a8cb58dfe 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLProperties.java +++ b/src/ooxml/java/org/apache/poi/POIXMLProperties.java @@ -45,114 +45,114 @@ import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProper * as well Thumbnails. */ public class POIXMLProperties { - private OPCPackage pkg; - private CoreProperties core; - private ExtendedProperties ext; - private CustomProperties cust; + private OPCPackage pkg; + private CoreProperties core; + private ExtendedProperties ext; + private CustomProperties cust; - private PackagePart extPart; - private PackagePart custPart; + private PackagePart extPart; + private PackagePart custPart; - private static final org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument NEW_EXT_INSTANCE; - private static final org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument NEW_CUST_INSTANCE; - static { - NEW_EXT_INSTANCE = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.newInstance(); - NEW_EXT_INSTANCE.addNewProperties(); + private static final org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument NEW_EXT_INSTANCE; + private static final org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument NEW_CUST_INSTANCE; + static { + NEW_EXT_INSTANCE = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.newInstance(); + NEW_EXT_INSTANCE.addNewProperties(); - NEW_CUST_INSTANCE = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.newInstance(); - NEW_CUST_INSTANCE.addNewProperties(); - } + NEW_CUST_INSTANCE = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.newInstance(); + NEW_CUST_INSTANCE.addNewProperties(); + } - public POIXMLProperties(OPCPackage docPackage) throws IOException, OpenXML4JException, XmlException { - this.pkg = docPackage; + public POIXMLProperties(OPCPackage docPackage) throws IOException, OpenXML4JException, XmlException { + this.pkg = docPackage; - // Core properties - core = new CoreProperties((PackagePropertiesPart)pkg.getPackageProperties() ); + // Core properties + core = new CoreProperties((PackagePropertiesPart)pkg.getPackageProperties() ); - // Extended properties - PackageRelationshipCollection extRel = - pkg.getRelationshipsByType(PackageRelationshipTypes.EXTENDED_PROPERTIES); - if(extRel.size() == 1) { - extPart = pkg.getPart( extRel.getRelationship(0)); - org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.parse( - extPart.getInputStream(), DEFAULT_XML_OPTIONS - ); - ext = new ExtendedProperties(props); - } else { - extPart = null; - ext = new ExtendedProperties((org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument)NEW_EXT_INSTANCE.copy()); - } + // Extended properties + PackageRelationshipCollection extRel = + pkg.getRelationshipsByType(PackageRelationshipTypes.EXTENDED_PROPERTIES); + if(extRel.size() == 1) { + extPart = pkg.getPart( extRel.getRelationship(0)); + org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.parse( + extPart.getInputStream(), DEFAULT_XML_OPTIONS + ); + ext = new ExtendedProperties(props); + } else { + extPart = null; + ext = new ExtendedProperties((org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument)NEW_EXT_INSTANCE.copy()); + } - // Custom properties - PackageRelationshipCollection custRel = - pkg.getRelationshipsByType(PackageRelationshipTypes.CUSTOM_PROPERTIES); - if(custRel.size() == 1) { - custPart = pkg.getPart( custRel.getRelationship(0)); - org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.parse( - custPart.getInputStream(), DEFAULT_XML_OPTIONS - ); - cust = new CustomProperties(props); - } else { - custPart = null; - cust = new CustomProperties((org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument)NEW_CUST_INSTANCE.copy()); - } - } + // Custom properties + PackageRelationshipCollection custRel = + pkg.getRelationshipsByType(PackageRelationshipTypes.CUSTOM_PROPERTIES); + if(custRel.size() == 1) { + custPart = pkg.getPart( custRel.getRelationship(0)); + org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.parse( + custPart.getInputStream(), DEFAULT_XML_OPTIONS + ); + cust = new CustomProperties(props); + } else { + custPart = null; + cust = new CustomProperties((org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument)NEW_CUST_INSTANCE.copy()); + } + } - /** - * Returns the core document properties - * - * @return the core document properties - */ - public CoreProperties getCoreProperties() { - return core; - } + /** + * Returns the core document properties + * + * @return the core document properties + */ + public CoreProperties getCoreProperties() { + return core; + } - /** - * Returns the extended document properties - * - * @return the extended document properties - */ - public ExtendedProperties getExtendedProperties() { - return ext; - } + /** + * Returns the extended document properties + * + * @return the extended document properties + */ + public ExtendedProperties getExtendedProperties() { + return ext; + } - /** - * Returns the custom document properties - * - * @return the custom document properties - */ - public CustomProperties getCustomProperties() { - return cust; - } - - /** - * Returns the {@link PackagePart} for the Document - * Thumbnail, or null if there isn't one - * - * @return The Document Thumbnail part or null - */ - protected PackagePart getThumbnailPart() { + /** + * Returns the custom document properties + * + * @return the custom document properties + */ + public CustomProperties getCustomProperties() { + return cust; + } + + /** + * Returns the {@link PackagePart} for the Document + * Thumbnail, or null if there isn't one + * + * @return The Document Thumbnail part or null + */ + protected PackagePart getThumbnailPart() { PackageRelationshipCollection rels = pkg.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL); if(rels.size() == 1) { return pkg.getPart(rels.getRelationship(0)); } return null; - } - /** - * Returns the name of the Document thumbnail, eg - * thumbnail.jpeg, or null if there - * isn't one. - * - * @return The thumbnail filename, or null - */ - public String getThumbnailFilename() { - PackagePart tPart = getThumbnailPart(); - if (tPart == null) return null; - String name = tPart.getPartName().getName(); - return name.substring(name.lastIndexOf('/')); - } + } + /** + * Returns the name of the Document thumbnail, eg + * thumbnail.jpeg, or null if there + * isn't one. + * + * @return The thumbnail filename, or null + */ + public String getThumbnailFilename() { + PackagePart tPart = getThumbnailPart(); + if (tPart == null) return null; + String name = tPart.getPartName().getName(); + return name.substring(name.lastIndexOf('/')); + } /** * Returns the Document thumbnail image data, or * null if there isn't one. @@ -164,15 +164,15 @@ public class POIXMLProperties { if (tPart == null) return null; return tPart.getInputStream(); } - - /** - * Sets the Thumbnail for the document, replacing any existing - * one. - * - * @param name The filename for the thumbnail image, eg thumbnail.jpg - * @param imageData The inputstream to read the thumbnail image from - */ - public void setThumbnail(String filename, InputStream imageData) throws IOException { + + /** + * Sets the Thumbnail for the document, replacing any existing + * one. + * + * @param name The filename for the thumbnail image, eg thumbnail.jpg + * @param imageData The inputstream to read the thumbnail image from + */ + public void setThumbnail(String filename, InputStream imageData) throws IOException { PackagePart tPart = getThumbnailPart(); if (tPart == null) { // New thumbnail @@ -182,173 +182,173 @@ public class POIXMLProperties { String newType = ContentTypes.getContentTypeFromFileExtension(filename); if (! newType.equals(tPart.getContentType())) { throw new IllegalArgumentException("Can't set a Thumbnail of type " + - newType + " when existing one is of a different type " + - tPart.getContentType()); + newType + " when existing one is of a different type " + + tPart.getContentType()); } StreamHelper.copyStream(imageData, tPart.getOutputStream()); } - } + } - /** - * Commit changes to the underlying OPC package - * - * @throws IOException if the properties can't be saved - * @throws POIXMLException if the properties are erroneous - */ - public void commit() throws IOException{ + /** + * Commit changes to the underlying OPC package + * + * @throws IOException if the properties can't be saved + * @throws POIXMLException if the properties are erroneous + */ + public void commit() throws IOException{ - if(extPart == null && !NEW_EXT_INSTANCE.toString().equals(ext.props.toString())){ - try { - PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/app.xml"); - pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"); - extPart = pkg.createPart(prtname, "application/vnd.openxmlformats-officedocument.extended-properties+xml"); - } catch (InvalidFormatException e){ - throw new POIXMLException(e); - } - } - if(custPart == null && !NEW_CUST_INSTANCE.toString().equals(cust.props.toString())){ - try { - PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/custom.xml"); - pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"); - custPart = pkg.createPart(prtname, "application/vnd.openxmlformats-officedocument.custom-properties+xml"); - } catch (InvalidFormatException e){ - throw new POIXMLException(e); - } - } - if(extPart != null){ - OutputStream out = extPart.getOutputStream(); - if (extPart.getSize() > 0) { - extPart.clear(); - } - ext.props.save(out, DEFAULT_XML_OPTIONS); - out.close(); - } - if(custPart != null){ - OutputStream out = custPart.getOutputStream(); - cust.props.save(out, DEFAULT_XML_OPTIONS); - out.close(); - } - } + if(extPart == null && !NEW_EXT_INSTANCE.toString().equals(ext.props.toString())){ + try { + PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/app.xml"); + pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"); + extPart = pkg.createPart(prtname, "application/vnd.openxmlformats-officedocument.extended-properties+xml"); + } catch (InvalidFormatException e){ + throw new POIXMLException(e); + } + } + if(custPart == null && !NEW_CUST_INSTANCE.toString().equals(cust.props.toString())){ + try { + PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/custom.xml"); + pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"); + custPart = pkg.createPart(prtname, "application/vnd.openxmlformats-officedocument.custom-properties+xml"); + } catch (InvalidFormatException e){ + throw new POIXMLException(e); + } + } + if(extPart != null){ + OutputStream out = extPart.getOutputStream(); + if (extPart.getSize() > 0) { + extPart.clear(); + } + ext.props.save(out, DEFAULT_XML_OPTIONS); + out.close(); + } + if(custPart != null){ + OutputStream out = custPart.getOutputStream(); + cust.props.save(out, DEFAULT_XML_OPTIONS); + out.close(); + } + } - /** - * The core document properties - */ - public static class CoreProperties { - private PackagePropertiesPart part; - private CoreProperties(PackagePropertiesPart part) { - this.part = part; - } + /** + * The core document properties + */ + public static class CoreProperties { + private PackagePropertiesPart part; + private CoreProperties(PackagePropertiesPart part) { + this.part = part; + } - public String getCategory() { - return part.getCategoryProperty().getValue(); - } - public void setCategory(String category) { - part.setCategoryProperty(category); - } - public String getContentStatus() { - return part.getContentStatusProperty().getValue(); - } - public void setContentStatus(String contentStatus) { - part.setContentStatusProperty(contentStatus); - } - public String getContentType() { - return part.getContentTypeProperty().getValue(); - } - public void setContentType(String contentType) { - part.setContentTypeProperty(contentType); - } - public Date getCreated() { - return part.getCreatedProperty().getValue(); - } - public void setCreated(Nullable date) { - part.setCreatedProperty(date); - } - public void setCreated(String date) { - part.setCreatedProperty(date); - } - public String getCreator() { - return part.getCreatorProperty().getValue(); - } - public void setCreator(String creator) { - part.setCreatorProperty(creator); - } - public String getDescription() { - return part.getDescriptionProperty().getValue(); - } - public void setDescription(String description) { - part.setDescriptionProperty(description); - } - public String getIdentifier() { - return part.getIdentifierProperty().getValue(); - } - public void setIdentifier(String identifier) { - part.setIdentifierProperty(identifier); - } - public String getKeywords() { - return part.getKeywordsProperty().getValue(); - } - public void setKeywords(String keywords) { - part.setKeywordsProperty(keywords); - } - public Date getLastPrinted() { - return part.getLastPrintedProperty().getValue(); - } - public void setLastPrinted(Nullable date) { - part.setLastPrintedProperty(date); - } - public void setLastPrinted(String date) { - part.setLastPrintedProperty(date); - } - public Date getModified() { - return part.getModifiedProperty().getValue(); - } - public void setModified(Nullable date) { - part.setModifiedProperty(date); - } - public void setModified(String date) { - part.setModifiedProperty(date); - } - public String getSubject() { - return part.getSubjectProperty().getValue(); - } - public void setSubjectProperty(String subject) { - part.setSubjectProperty(subject); - } - public void setTitle(String title) { - part.setTitleProperty(title); - } - public String getTitle() { - return part.getTitleProperty().getValue(); - } - public String getRevision() { - return part.getRevisionProperty().getValue(); - } - public void setRevision(String revision) { - try { - Long.valueOf(revision); - part.setRevisionProperty(revision); - } - catch (NumberFormatException e) {} - } + public String getCategory() { + return part.getCategoryProperty().getValue(); + } + public void setCategory(String category) { + part.setCategoryProperty(category); + } + public String getContentStatus() { + return part.getContentStatusProperty().getValue(); + } + public void setContentStatus(String contentStatus) { + part.setContentStatusProperty(contentStatus); + } + public String getContentType() { + return part.getContentTypeProperty().getValue(); + } + public void setContentType(String contentType) { + part.setContentTypeProperty(contentType); + } + public Date getCreated() { + return part.getCreatedProperty().getValue(); + } + public void setCreated(Nullable date) { + part.setCreatedProperty(date); + } + public void setCreated(String date) { + part.setCreatedProperty(date); + } + public String getCreator() { + return part.getCreatorProperty().getValue(); + } + public void setCreator(String creator) { + part.setCreatorProperty(creator); + } + public String getDescription() { + return part.getDescriptionProperty().getValue(); + } + public void setDescription(String description) { + part.setDescriptionProperty(description); + } + public String getIdentifier() { + return part.getIdentifierProperty().getValue(); + } + public void setIdentifier(String identifier) { + part.setIdentifierProperty(identifier); + } + public String getKeywords() { + return part.getKeywordsProperty().getValue(); + } + public void setKeywords(String keywords) { + part.setKeywordsProperty(keywords); + } + public Date getLastPrinted() { + return part.getLastPrintedProperty().getValue(); + } + public void setLastPrinted(Nullable date) { + part.setLastPrintedProperty(date); + } + public void setLastPrinted(String date) { + part.setLastPrintedProperty(date); + } + public Date getModified() { + return part.getModifiedProperty().getValue(); + } + public void setModified(Nullable date) { + part.setModifiedProperty(date); + } + public void setModified(String date) { + part.setModifiedProperty(date); + } + public String getSubject() { + return part.getSubjectProperty().getValue(); + } + public void setSubjectProperty(String subject) { + part.setSubjectProperty(subject); + } + public void setTitle(String title) { + part.setTitleProperty(title); + } + public String getTitle() { + return part.getTitleProperty().getValue(); + } + public String getRevision() { + return part.getRevisionProperty().getValue(); + } + public void setRevision(String revision) { + try { + Long.valueOf(revision); + part.setRevisionProperty(revision); + } + catch (NumberFormatException e) {} + } - public PackagePropertiesPart getUnderlyingProperties() { - return part; - } - } + public PackagePropertiesPart getUnderlyingProperties() { + return part; + } + } - /** - * Extended document properties - */ - public static class ExtendedProperties { - private org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props; - private ExtendedProperties(org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props) { - this.props = props; - } + /** + * Extended document properties + */ + public static class ExtendedProperties { + private org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props; + private ExtendedProperties(org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props) { + this.props = props; + } + + public org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties getUnderlyingProperties() { + return props.getProperties(); + } - public org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties getUnderlyingProperties() { - return props.getProperties(); - } - public String getTemplate() { if (props.getProperties().isSetTemplate()) { return props.getProperties().getTemplate(); @@ -459,113 +459,113 @@ public class POIXMLProperties { } return null; } - } + } - /** - * Custom document properties - */ - public static class CustomProperties { - /** - * Each custom property element contains an fmtid attribute - * with the same GUID value ({D5CDD505-2E9C-101B-9397-08002B2CF9AE}). - */ - public static final String FORMAT_ID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}"; + /** + * Custom document properties + */ + public static class CustomProperties { + /** + * Each custom property element contains an fmtid attribute + * with the same GUID value ({D5CDD505-2E9C-101B-9397-08002B2CF9AE}). + */ + public static final String FORMAT_ID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}"; - private org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props; - private CustomProperties(org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props) { - this.props = props; - } + private org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props; + private CustomProperties(org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props) { + this.props = props; + } - public org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperties getUnderlyingProperties() { - return props.getProperties(); - } + public org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperties getUnderlyingProperties() { + return props.getProperties(); + } - /** - * Add a new property - * - * @param name the property name - * @throws IllegalArgumentException if a property with this name already exists - */ - private CTProperty add(String name) { - if(contains(name)) { - throw new IllegalArgumentException("A property with this name " + - "already exists in the custom properties"); - } + /** + * Add a new property + * + * @param name the property name + * @throws IllegalArgumentException if a property with this name already exists + */ + private CTProperty add(String name) { + if(contains(name)) { + throw new IllegalArgumentException("A property with this name " + + "already exists in the custom properties"); + } - CTProperty p = props.getProperties().addNewProperty(); - int pid = nextPid(); - p.setPid(pid); - p.setFmtid(FORMAT_ID); - p.setName(name); - return p; - } + CTProperty p = props.getProperties().addNewProperty(); + int pid = nextPid(); + p.setPid(pid); + p.setFmtid(FORMAT_ID); + p.setName(name); + return p; + } - /** - * Add a new string property - * - * @param name the property name - * @param value the property value - * - * @throws IllegalArgumentException if a property with this name already exists - */ - public void addProperty(String name, String value){ - CTProperty p = add(name); - p.setLpwstr(value); - } - - /** - * Add a new double property - * + /** + * Add a new string property + * * @param name the property name * @param value the property value * - * @throws IllegalArgumentException if a property with this name already exists - */ - public void addProperty(String name, double value){ - CTProperty p = add(name); - p.setR8(value); - } + * @throws IllegalArgumentException if a property with this name already exists + */ + public void addProperty(String name, String value){ + CTProperty p = add(name); + p.setLpwstr(value); + } - /** - * Add a new integer property - * + /** + * Add a new double property + * * @param name the property name * @param value the property value * - * @throws IllegalArgumentException if a property with this name already exists - */ - public void addProperty(String name, int value){ - CTProperty p = add(name); - p.setI4(value); - } + * @throws IllegalArgumentException if a property with this name already exists + */ + public void addProperty(String name, double value){ + CTProperty p = add(name); + p.setR8(value); + } - /** - * Add a new boolean property - * + /** + * Add a new integer property + * * @param name the property name * @param value the property value * - * @throws IllegalArgumentException if a property with this name already exists - */ - public void addProperty(String name, boolean value){ - CTProperty p = add(name); - p.setBool(value); - } + * @throws IllegalArgumentException if a property with this name already exists + */ + public void addProperty(String name, int value){ + CTProperty p = add(name); + p.setI4(value); + } - /** - * Generate next id that uniquely relates a custom property - * - * @return next property id starting with 2 - */ + /** + * Add a new boolean property + * + * @param name the property name + * @param value the property value + * + * @throws IllegalArgumentException if a property with this name already exists + */ + public void addProperty(String name, boolean value){ + CTProperty p = add(name); + p.setBool(value); + } + + /** + * Generate next id that uniquely relates a custom property + * + * @return next property id starting with 2 + */ protected int nextPid() { - int propid = 1; - for(CTProperty p : props.getProperties().getPropertyArray()){ - if(p.getPid() > propid) propid = p.getPid(); - } - return propid + 1; - } + int propid = 1; + for(CTProperty p : props.getProperties().getPropertyArray()){ + if(p.getPid() > propid) propid = p.getPid(); + } + return propid + 1; + } - /** + /** * Check if a property with this name already exists in the collection of custom properties * * @param name the name to check @@ -577,7 +577,7 @@ public class POIXMLProperties { } return false; } - + /** * Retrieve the custom property with this name, or null if none exists. * diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java index e70496f3f..fcd50ada6 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java @@ -461,32 +461,32 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { this.contentTypeManager.clearAll(); } - /** - * Close the package WITHOUT saving its content. Reinitialize this package - * and cancel all changes done to it. - */ - public void revert() { - revertImpl(); - } + /** + * Close the package WITHOUT saving its content. Reinitialize this package + * and cancel all changes done to it. + */ + public void revert() { + revertImpl(); + } - /** - * Add a thumbnail to the package. This method is provided to make easier - * the addition of a thumbnail in a package. You can do the same work by - * using the traditionnal relationship and part mechanism. - * - * @param path The full path to the image file. - */ - public void addThumbnail(String path) throws IOException { + /** + * Add a thumbnail to the package. This method is provided to make easier + * the addition of a thumbnail in a package. You can do the same work by + * using the traditionnal relationship and part mechanism. + * + * @param path The full path to the image file. + */ + public void addThumbnail(String path) throws IOException { // Check parameter if (path == null || path.isEmpty()) { throw new IllegalArgumentException("path"); } String name = path.substring(path.lastIndexOf(File.separatorChar) + 1); - + FileInputStream is = new FileInputStream(path); addThumbnail(name, is); is.close(); - } + } /** * Add a thumbnail to the package. This method is provided to make easier * the addition of a thumbnail in a package. You can do the same work by @@ -495,60 +495,60 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { * @param path The full path to the image file. */ public void addThumbnail(String filename, InputStream data) throws IOException { - // Check parameter + // Check parameter if (filename == null || filename.isEmpty()) { - throw new IllegalArgumentException("filename"); - } + throw new IllegalArgumentException("filename"); + } - // Create the thumbnail part name - String contentType = ContentTypes - .getContentTypeFromFileExtension(filename); - PackagePartName thumbnailPartName = null; - try { - thumbnailPartName = PackagingURIHelper.createPartName("/docProps/" - + filename); - } catch (InvalidFormatException e) { - String partName = "/docProps/thumbnail" + - filename.substring(filename.lastIndexOf(".") + 1); - try { - thumbnailPartName = PackagingURIHelper.createPartName(partName); - } catch (InvalidFormatException e2) { - throw new InvalidOperationException( - "Can't add a thumbnail file named '" + filename + "'", e2); - } - } + // Create the thumbnail part name + String contentType = ContentTypes + .getContentTypeFromFileExtension(filename); + PackagePartName thumbnailPartName = null; + try { + thumbnailPartName = PackagingURIHelper.createPartName("/docProps/" + + filename); + } catch (InvalidFormatException e) { + String partName = "/docProps/thumbnail" + + filename.substring(filename.lastIndexOf(".") + 1); + try { + thumbnailPartName = PackagingURIHelper.createPartName(partName); + } catch (InvalidFormatException e2) { + throw new InvalidOperationException( + "Can't add a thumbnail file named '" + filename + "'", e2); + } + } - // Check if part already exist - if (this.getPart(thumbnailPartName) != null) - throw new InvalidOperationException( - "You already add a thumbnail named '" + filename + "'"); + // Check if part already exist + if (this.getPart(thumbnailPartName) != null) + throw new InvalidOperationException( + "You already add a thumbnail named '" + filename + "'"); - // Add the thumbnail part to this package. - PackagePart thumbnailPart = this.createPart(thumbnailPartName, - contentType, false); + // Add the thumbnail part to this package. + PackagePart thumbnailPart = this.createPart(thumbnailPartName, + contentType, false); - // Add the relationship between the package and the thumbnail part - this.addRelationship(thumbnailPartName, TargetMode.INTERNAL, - PackageRelationshipTypes.THUMBNAIL); + // Add the relationship between the package and the thumbnail part + this.addRelationship(thumbnailPartName, TargetMode.INTERNAL, + PackageRelationshipTypes.THUMBNAIL); - // Copy file data to the newly created part - StreamHelper.copyStream(data, thumbnailPart.getOutputStream()); - } + // Copy file data to the newly created part + StreamHelper.copyStream(data, thumbnailPart.getOutputStream()); + } - /** - * Throws an exception if the package access mode is in read only mode - * (PackageAccess.Read). - * - * @throws InvalidOperationException - * Throws if a writing operation is done on a read only package. - * @see org.apache.poi.openxml4j.opc.PackageAccess - */ - void throwExceptionIfReadOnly() throws InvalidOperationException { - if (packageAccess == PackageAccess.READ) { - throw new InvalidOperationException( - "Operation not allowed, document open in read only mode!"); - } - } + /** + * Throws an exception if the package access mode is in read only mode + * (PackageAccess.Read). + * + * @throws InvalidOperationException + * Throws if a writing operation is done on a read only package. + * @see org.apache.poi.openxml4j.opc.PackageAccess + */ + void throwExceptionIfReadOnly() throws InvalidOperationException { + if (packageAccess == PackageAccess.READ) { + throw new InvalidOperationException( + "Operation not allowed, document open in read only mode!"); + } + } /** * Throws an exception if the package access mode is in write only mode diff --git a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java index 0a3428015..3cd680c55 100644 --- a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java +++ b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java @@ -45,74 +45,74 @@ import org.junit.Test; public final class TestPOIXMLProperties { private XWPFDocument sampleDoc; private XWPFDocument sampleNoThumb; - private POIXMLProperties _props; - private CoreProperties _coreProperties; + private POIXMLProperties _props; + private CoreProperties _coreProperties; - @Before - public void setUp() throws IOException { - sampleDoc = XWPFTestDataSamples.openSampleDocument("documentProperties.docx"); - sampleNoThumb = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); + @Before + public void setUp() throws IOException { + sampleDoc = XWPFTestDataSamples.openSampleDocument("documentProperties.docx"); + sampleNoThumb = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); assertNotNull(sampleDoc); assertNotNull(sampleNoThumb); - _props = sampleDoc.getProperties(); - _coreProperties = _props.getCoreProperties(); - assertNotNull(_props); - } - - @After - public void closeResources() throws Exception { - sampleDoc.close(); - sampleNoThumb.close(); - } + _props = sampleDoc.getProperties(); + _coreProperties = _props.getCoreProperties(); + assertNotNull(_props); + } - @Test - public void testWorkbookExtendedProperties() throws Exception { - XSSFWorkbook workbook = new XSSFWorkbook(); - POIXMLProperties props = workbook.getProperties(); - assertNotNull(props); + @After + public void closeResources() throws Exception { + sampleDoc.close(); + sampleNoThumb.close(); + } - org.apache.poi.POIXMLProperties.ExtendedProperties properties = - props.getExtendedProperties(); + @Test + public void testWorkbookExtendedProperties() throws Exception { + XSSFWorkbook workbook = new XSSFWorkbook(); + POIXMLProperties props = workbook.getProperties(); + assertNotNull(props); - org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties - ctProps = properties.getUnderlyingProperties(); + org.apache.poi.POIXMLProperties.ExtendedProperties properties = + props.getExtendedProperties(); + + org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties + ctProps = properties.getUnderlyingProperties(); - String appVersion = "3.5 beta"; - String application = "POI"; + String appVersion = "3.5 beta"; + String application = "POI"; - ctProps.setApplication(application); - ctProps.setAppVersion(appVersion); + ctProps.setApplication(application); + ctProps.setAppVersion(appVersion); - XSSFWorkbook newWorkbook = - XSSFTestDataSamples.writeOutAndReadBack(workbook); - workbook.close(); - assertTrue(workbook != newWorkbook); + XSSFWorkbook newWorkbook = + XSSFTestDataSamples.writeOutAndReadBack(workbook); + workbook.close(); + assertTrue(workbook != newWorkbook); - POIXMLProperties newProps = newWorkbook.getProperties(); - assertNotNull(newProps); - org.apache.poi.POIXMLProperties.ExtendedProperties newProperties = - newProps.getExtendedProperties(); + POIXMLProperties newProps = newWorkbook.getProperties(); + assertNotNull(newProps); + org.apache.poi.POIXMLProperties.ExtendedProperties newProperties = + newProps.getExtendedProperties(); assertEquals(application, newProperties.getApplication()); assertEquals(appVersion, newProperties.getAppVersion()); - - org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties - newCtProps = newProperties.getUnderlyingProperties(); - assertEquals(application, newCtProps.getApplication()); - assertEquals(appVersion, newCtProps.getAppVersion()); - - newWorkbook.close(); - } + org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties + newCtProps = newProperties.getUnderlyingProperties(); + + assertEquals(application, newCtProps.getApplication()); + assertEquals(appVersion, newCtProps.getAppVersion()); + + newWorkbook.close(); + } /** * Test usermodel API for setting custom properties */ - @Test - public void testCustomProperties() throws Exception { + @Test + public void testCustomProperties() throws Exception { POIXMLDocument wb1 = new XSSFWorkbook(); POIXMLProperties.CustomProperties customProps = wb1.getProperties().getCustomProperties(); @@ -162,27 +162,27 @@ public final class TestPOIXMLProperties { wb2.close(); } - @Test - public void testDocumentProperties() { - String category = _coreProperties.getCategory(); - assertEquals("test", category); - String contentStatus = "Draft"; - _coreProperties.setContentStatus(contentStatus); - assertEquals("Draft", contentStatus); - Date created = _coreProperties.getCreated(); - // the original file contains a following value: 2009-07-20T13:12:00Z - assertTrue(dateTimeEqualToUTCString(created, "2009-07-20T13:12:00Z")); - String creator = _coreProperties.getCreator(); - assertEquals("Paolo Mottadelli", creator); - String subject = _coreProperties.getSubject(); - assertEquals("Greetings", subject); - String title = _coreProperties.getTitle(); - assertEquals("Hello World", title); - } + @Test + public void testDocumentProperties() { + String category = _coreProperties.getCategory(); + assertEquals("test", category); + String contentStatus = "Draft"; + _coreProperties.setContentStatus(contentStatus); + assertEquals("Draft", contentStatus); + Date created = _coreProperties.getCreated(); + // the original file contains a following value: 2009-07-20T13:12:00Z + assertTrue(dateTimeEqualToUTCString(created, "2009-07-20T13:12:00Z")); + String creator = _coreProperties.getCreator(); + assertEquals("Paolo Mottadelli", creator); + String subject = _coreProperties.getSubject(); + assertEquals("Greetings", subject); + String title = _coreProperties.getTitle(); + assertEquals("Hello World", title); + } - @Test - public void testTransitiveSetters() throws IOException { - XWPFDocument doc = new XWPFDocument(); + @Test + public void testTransitiveSetters() throws IOException { + XWPFDocument doc = new XWPFDocument(); CoreProperties cp = doc.getProperties().getCoreProperties(); @@ -198,60 +198,59 @@ public final class TestPOIXMLProperties { doc2.close(); } - @Test - public void testGetSetRevision() { - String revision = _coreProperties.getRevision(); - assertTrue("Revision number is 1", Integer.parseInt(revision) > 1); - _coreProperties.setRevision("20"); - assertEquals("20", _coreProperties.getRevision()); - _coreProperties.setRevision("20xx"); - assertEquals("20", _coreProperties.getRevision()); - } - - public static boolean dateTimeEqualToUTCString(Date dateTime, String utcString) { - Calendar utcCalendar = LocaleUtil.getLocaleCalendar(LocaleUtil.TIMEZONE_UTC); + @Test + public void testGetSetRevision() { + String revision = _coreProperties.getRevision(); + assertTrue("Revision number is 1", Integer.parseInt(revision) > 1); + _coreProperties.setRevision("20"); + assertEquals("20", _coreProperties.getRevision()); + _coreProperties.setRevision("20xx"); + assertEquals("20", _coreProperties.getRevision()); + } + + public static boolean dateTimeEqualToUTCString(Date dateTime, String utcString) { + Calendar utcCalendar = LocaleUtil.getLocaleCalendar(LocaleUtil.TIMEZONE_UTC); utcCalendar.setTimeInMillis(dateTime.getTime()); String dateTimeUtcString = utcCalendar.get(Calendar.YEAR) + "-" + - zeroPad((utcCalendar.get(Calendar.MONTH)+1)) + "-" + - zeroPad(utcCalendar.get(Calendar.DAY_OF_MONTH)) + "T" + - zeroPad(utcCalendar.get(Calendar.HOUR_OF_DAY)) + ":" + - zeroPad(utcCalendar.get(Calendar.MINUTE)) + ":" + - zeroPad(utcCalendar.get(Calendar.SECOND)) + "Z"; - - + zeroPad((utcCalendar.get(Calendar.MONTH)+1)) + "-" + + zeroPad(utcCalendar.get(Calendar.DAY_OF_MONTH)) + "T" + + zeroPad(utcCalendar.get(Calendar.HOUR_OF_DAY)) + ":" + + zeroPad(utcCalendar.get(Calendar.MINUTE)) + ":" + + zeroPad(utcCalendar.get(Calendar.SECOND)) + "Z"; + return utcString.equals(dateTimeUtcString); } - - public void testThumbnails() throws Exception { - POIXMLProperties noThumbProps = sampleNoThumb.getProperties(); - - assertNotNull(_props.getThumbnailPart()); - assertNull(noThumbProps.getThumbnailPart()); - + + public void testThumbnails() throws Exception { + POIXMLProperties noThumbProps = sampleNoThumb.getProperties(); + + assertNotNull(_props.getThumbnailPart()); + assertNull(noThumbProps.getThumbnailPart()); + assertNotNull(_props.getThumbnailFilename()); assertNull(noThumbProps.getThumbnailFilename()); - + assertNotNull(_props.getThumbnailImage()); assertNull(noThumbProps.getThumbnailImage()); - + assertEquals("thumbnail.jpeg", _props.getThumbnailFilename()); - - + + // Adding / changing noThumbProps.setThumbnail("Testing.png", new ByteArrayInputStream(new byte[1])); assertNotNull(noThumbProps.getThumbnailPart()); assertEquals("Testing.png", noThumbProps.getThumbnailFilename()); assertNotNull(noThumbProps.getThumbnailImage()); assertEquals(1, noThumbProps.getThumbnailImage().available()); - + noThumbProps.setThumbnail("Testing2.png", new ByteArrayInputStream(new byte[2])); assertNotNull(noThumbProps.getThumbnailPart()); assertEquals("Testing.png", noThumbProps.getThumbnailFilename()); assertNotNull(noThumbProps.getThumbnailImage()); assertEquals(2, noThumbProps.getThumbnailImage().available()); - } + } - private static String zeroPad(long i) { + private static String zeroPad(long i) { if (i >= 0 && i <=9) { return "0" + i; } else {