You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/01/03 15:28:47 UTC

svn commit: r608500 - in /poi/trunk/src/scratchpad: ooxml-src/org/apache/poi/ ooxml-src/org/apache/poi/hxf/ ooxml-testcases/org/apache/poi/hslf/ ooxml-testcases/org/apache/poi/hssf/ ooxml-testcases/org/apache/poi/hwpf/

Author: nick
Date: Thu Jan  3 06:28:46 2008
New Revision: 608500

URL: http://svn.apache.org/viewvc?rev=608500&view=rev
Log:
For ooxml properties, get the core ones as well as the extended ones, and add tests for this

Modified:
    poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/POIXMLDocument.java
    poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java
    poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hslf/TestHSLFXML.java
    poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java
    poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hwpf/TestHWPFXML.java

Modified: poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/POIXMLDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/POIXMLDocument.java?rev=608500&r1=608499&r2=608500&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/POIXMLDocument.java (original)
+++ poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/POIXMLDocument.java Thu Jan  3 06:28:46 2008
@@ -27,7 +27,19 @@
 public abstract class POIXMLDocument {
 	private HXFDocument document;
 
+	/**
+	 * Creates a new POI XML Document, wrapping up
+	 *  the underlying raw HXFDocument
+	 */
 	protected POIXMLDocument(HXFDocument document) {
 		this.document = document;
+	}
+
+	/**
+	 * Returns the underlying HXFDocument, typically
+	 *  used for unit testing
+	 */
+	public HXFDocument _getHXFDocument() {
+		return document;
 	}
 }

Modified: poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java?rev=608500&r1=608499&r2=608500&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java (original)
+++ poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java Thu Jan  3 06:28:46 2008
@@ -34,6 +34,7 @@
 import org.openxml4j.opc.PackageRelationship;
 import org.openxml4j.opc.PackageRelationshipCollection;
 import org.openxml4j.opc.PackagingURIHelper;
+import org.openxml4j.opc.internal.PackagePropertiesPart;
 import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties;
 import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument;
 
@@ -52,6 +53,9 @@
  * WARNING - APIs expected to change rapidly
  */
 public abstract class HXFDocument {
+	public static final String CORE_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
+	public static final String EXTENDED_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
+	
 	/**
 	 * File package/container.
 	 */
@@ -70,12 +74,7 @@
 		this.container = container;
 		
 		// Find the base document
-		ArrayList<PackagePart> baseParts =
-			container.getPartsByContentType(baseContentType);
-		if(baseParts.size() != 1) {
-			throw new OpenXML4JException("Expecting one entry with content type of " + baseContentType + ", but found " + baseParts.size());
-		}
-		basePart = baseParts.get(0);
+		basePart = getSinglePartByType(baseContentType);
 		
 		// And load it up
 		try {
@@ -89,6 +88,41 @@
 	}
 	
 	/**
+	 * Fetches the (single) PackagePart with the supplied
+	 *  content type.
+	 * @param contentType The content type to search for
+	 * @throws IllegalArgumentException If we don't find a single part of that type
+	 */
+	private PackagePart getSinglePartByType(String contentType) throws IllegalArgumentException {
+		ArrayList<PackagePart> parts =
+			container.getPartsByContentType(contentType);
+		if(parts.size() != 1) {
+			throw new IllegalArgumentException("Expecting one entry with content type of " + contentType + ", but found " + parts.size());
+		}
+		return parts.get(0);
+	}
+
+	/**
+	 * Fetches the (single) PackagePart which is defined as
+	 *  the supplied relation content type of the base
+	 *  container, or null if none found.
+	 * @param relationType The relation content type to search for
+	 * @throws IllegalArgumentException If we find more than one part of that type
+	 */
+	private PackagePart getSinglePartByRelationType(String relationType) throws IllegalArgumentException, OpenXML4JException {
+		PackageRelationshipCollection rels =
+			container.getRelationshipsByType(relationType);
+		if(rels.size() == 0) {
+			return null;
+		}
+		if(rels.size() > 1) {
+			throw new IllegalArgumentException("Found " + rels.size() + " relations for the type " + relationType + ", should only ever be one!");
+		}
+		PackageRelationship rel = rels.getRelationship(0);
+		return getPackagePart(rel);
+	}
+	
+	/**
 	 * Retrieves the PackagePart for the given relation
 	 *  id. This will normally come from a r:id attribute
 	 *  on part of the base document. 
@@ -147,19 +181,21 @@
 	}
 	
 	/**
-	 * Get the document properties (extended ooxml properties)
+	 * Get the core document properties (core ooxml properties).
 	 */
-	public CTProperties getDocumentProperties() throws OpenXML4JException, XmlException, IOException {
-		PackageRelationshipCollection docProps =
-			container.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties");
-		if(docProps.size() == 0) {
+	public PackagePropertiesPart getCoreProperties() throws OpenXML4JException, XmlException, IOException {
+		PackagePart propsPart = getSinglePartByRelationType(CORE_PROPERTIES_REL_TYPE);
+		if(propsPart == null) {
 			return null;
 		}
-		if(docProps.size() > 1) {
-			throw new IllegalStateException("Found " + docProps.size() + " relations for the extended properties, should only ever be one!");
-		}
-		PackageRelationship rel = docProps.getRelationship(0);
-		PackagePart propsPart = getPackagePart(rel);
+		return (PackagePropertiesPart)propsPart;
+	}
+	
+	/**
+	 * Get the extended document properties (extended ooxml properties)
+	 */
+	public CTProperties getExtendedProperties() throws OpenXML4JException, XmlException, IOException {
+		PackagePart propsPart = getSinglePartByRelationType(EXTENDED_PROPERTIES_REL_TYPE);
 		
 		PropertiesDocument props = PropertiesDocument.Factory.parse(
 				propsPart.getInputStream());

Modified: poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hslf/TestHSLFXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hslf/TestHSLFXML.java?rev=608500&r1=608499&r2=608500&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hslf/TestHSLFXML.java (original)
+++ poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hslf/TestHSLFXML.java Thu Jan  3 06:28:46 2008
@@ -113,10 +113,15 @@
 		HSLFXML xml = new HSLFXML(
 				HXFDocument.openPackage(sampleFile)
 		);
-		assertNotNull(xml.getDocumentProperties());
 		
-		assertEquals("Microsoft Office PowerPoint", xml.getDocumentProperties().getApplication());
-		assertEquals(0, xml.getDocumentProperties().getCharacters());
-		assertEquals(0, xml.getDocumentProperties().getLines());
+		assertNotNull(xml.getCoreProperties());
+		assertNotNull(xml.getExtendedProperties());
+		
+		assertEquals("Microsoft Office PowerPoint", xml.getExtendedProperties().getApplication());
+		assertEquals(0, xml.getExtendedProperties().getCharacters());
+		assertEquals(0, xml.getExtendedProperties().getLines());
+		
+		assertEquals(null, xml.getCoreProperties().getTitleProperty().getValue());
+		assertEquals(null, xml.getCoreProperties().getSubjectProperty().getValue());
 	}
 }

Modified: poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java?rev=608500&r1=608499&r2=608500&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java (original)
+++ poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java Thu Jan  3 06:28:46 2008
@@ -114,10 +114,14 @@
 		HSSFXML xml = new HSSFXML(
 				HXFDocument.openPackage(sampleFile)
 		);
-		assertNotNull(xml.getDocumentProperties());
+		assertNotNull(xml.getCoreProperties());
+		assertNotNull(xml.getExtendedProperties());
 		
-		assertEquals("Microsoft Excel", xml.getDocumentProperties().getApplication());
-		assertEquals(0, xml.getDocumentProperties().getCharacters());
-		assertEquals(0, xml.getDocumentProperties().getLines());
+		assertEquals("Microsoft Excel", xml.getExtendedProperties().getApplication());
+		assertEquals(0, xml.getExtendedProperties().getCharacters());
+		assertEquals(0, xml.getExtendedProperties().getLines());
+		
+		assertEquals(null, xml.getCoreProperties().getTitleProperty().getValue());
+		assertEquals(null, xml.getCoreProperties().getSubjectProperty().getValue());
 	}
 }

Modified: poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hwpf/TestHWPFXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hwpf/TestHWPFXML.java?rev=608500&r1=608499&r2=608500&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hwpf/TestHWPFXML.java (original)
+++ poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hwpf/TestHWPFXML.java Thu Jan  3 06:28:46 2008
@@ -82,10 +82,29 @@
 		HWPFXML xml = new HWPFXML(
 				HXFDocument.openPackage(sampleFile)
 		);
-		assertNotNull(xml.getDocumentProperties());
+		assertNotNull(xml.getCoreProperties());
+		assertNotNull(xml.getExtendedProperties());
 		
-		assertEquals("Microsoft Office Word", xml.getDocumentProperties().getApplication());
-		assertEquals(1315, xml.getDocumentProperties().getCharacters());
-		assertEquals(10, xml.getDocumentProperties().getLines());
+		assertEquals("Microsoft Office Word", xml.getExtendedProperties().getApplication());
+		assertEquals(1315, xml.getExtendedProperties().getCharacters());
+		assertEquals(10, xml.getExtendedProperties().getLines());
+		
+		assertEquals(null, xml.getCoreProperties().getTitleProperty().getValue());
+		assertEquals(null, xml.getCoreProperties().getSubjectProperty().getValue());
+	}
+	
+	public void testMetadataComplex() throws Exception {
+		HWPFXML xml = new HWPFXML(
+				HXFDocument.openPackage(complexFile)
+		);
+		assertNotNull(xml.getCoreProperties());
+		assertNotNull(xml.getExtendedProperties());
+		
+		assertEquals("Microsoft Office Outlook", xml.getExtendedProperties().getApplication());
+		assertEquals(5184, xml.getExtendedProperties().getCharacters());
+		assertEquals(0, xml.getExtendedProperties().getLines());
+		
+		assertEquals(" ", xml.getCoreProperties().getTitleProperty().getValue());
+		assertEquals(" ", xml.getCoreProperties().getSubjectProperty().getValue());
 	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org