git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1867597 13f79535-47bb-0310-9956-ffa450edef68tags/REL_4_1_1
@@ -34,19 +34,19 @@ public class WorkbookProperties { | |||
POIXMLProperties props = workbook.getProperties(); | |||
/* | |||
* Extended properties are a predefined set of metadata properties | |||
* that are specifically applicable to Office Open XML documents. | |||
* Extended properties consist of 24 simple properties and 3 complex properties stored in the | |||
* part targeted by the relationship of type | |||
*/ | |||
/* | |||
* Extended properties are a predefined set of metadata properties | |||
* that are specifically applicable to Office Open XML documents. | |||
* Extended properties consist of 24 simple properties and 3 complex properties stored in the | |||
* part targeted by the relationship of type | |||
*/ | |||
POIXMLProperties.ExtendedProperties ext = props.getExtendedProperties(); | |||
ext.getUnderlyingProperties().setCompany("Apache Software Foundation"); | |||
ext.getUnderlyingProperties().setTemplate("XSSF"); | |||
/* | |||
* Custom properties enable users to define custom metadata properties. | |||
*/ | |||
/* | |||
* Custom properties enable users to define custom metadata properties. | |||
*/ | |||
POIXMLProperties.CustomProperties cust = props.getCustomProperties(); | |||
cust.addProperty("Author", "John Smith"); |
@@ -565,6 +565,8 @@ public class POIXMLProperties { | |||
public static final String FORMAT_ID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}"; | |||
private org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props; | |||
private Integer lastPid = null; | |||
private CustomProperties(org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props) { | |||
this.props = props; | |||
} | |||
@@ -651,11 +653,23 @@ public class POIXMLProperties { | |||
* @return next property id starting with 2 | |||
*/ | |||
protected int nextPid() { | |||
int propid = lastPid == null ? getLastPid() : lastPid; | |||
int nextid = propid + 1; | |||
this.lastPid = nextid; | |||
return nextid; | |||
} | |||
/** | |||
* Find the highest Pid in use | |||
* | |||
* @return the highest Pid in use in the property set; returns 1 if no properties are set | |||
*/ | |||
protected int getLastPid() { | |||
int propid = 1; | |||
for(CTProperty p : props.getProperties().getPropertyList()) { | |||
if(p.getPid() > propid) propid = p.getPid(); | |||
} | |||
return propid + 1; | |||
return propid; | |||
} | |||
/** |
@@ -315,6 +315,18 @@ public final class TestPOIXMLProperties { | |||
} | |||
} | |||
@Test | |||
public void testAddProperty() throws IOException { | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("documentProperties.docx")) { | |||
POIXMLProperties.CustomProperties cps = doc.getProperties().getCustomProperties(); | |||
assertEquals(1, cps.getLastPid()); | |||
cps.addProperty("prop1", "abc"); | |||
assertEquals(2, cps.getLastPid()); | |||
assertEquals(2, cps.getProperty("prop1").getPid()); | |||
assertEquals("abc", cps.getProperty("prop1").getLpwstr()); | |||
} | |||
} | |||
@Test | |||
public void testBug60977() throws IOException { | |||
@@ -86,7 +86,8 @@ public final class TestHPSFPropertiesExtractor { | |||
public void testCustomProperties() throws Exception { | |||
try (InputStream is = _samples.openResourceAsStream("TestMickey.doc"); | |||
POIFSFileSystem fs = new POIFSFileSystem(is); | |||
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs)) { | |||
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs)) { | |||
// Custom properties are part of the document info stream | |||
String dinfText = ext.getDocumentSummaryInformationText(); | |||
assertContains(dinfText, "Client = sample client"); |