diff --git a/src/ooxml/java/org/apache/poi/POIXMLProperties.java b/src/ooxml/java/org/apache/poi/POIXMLProperties.java
index 0ce6ad6774..a8cb58dfe1 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 e70496f3f4..fcd50ada6d 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 0a34280154..3cd680c55c 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 {