]> source.dussan.org Git - poi.git/commitdiff
Shuffle a few ooxml bits about, improve the ant tasks for it, and add in a ooxml...
authorNick Burch <nick@apache.org>
Thu, 27 Dec 2007 09:12:57 +0000 (09:12 +0000)
committerNick Burch <nick@apache.org>
Thu, 27 Dec 2007 09:12:57 +0000 (09:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@607024 13f79535-47bb-0310-9956-ffa450edef68

build.xml
src/scratchpad/ooxml-src/org/apache/poi/HXFDocument.java [deleted file]
src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java
src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java [new file with mode: 0644]
src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java [new file with mode: 0644]
src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java

index 88bc47c20ba26e301a24214f4524b1bf3f793a49..0db31607358b67f6b57e9cbb9c1ef72afb7bc6ed 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -145,6 +145,7 @@ under the License.
   <property name="ooxml.xsds.ozip" location="${ooxml.lib}/OfficeOpenXML-Part4.zip"/>
   <property name="ooxml.xsds.izip" location="${ooxml.lib}/OfficeOpenXML-XMLSchema.zip"/>
   <property name="ooxml.xsds.url" value="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%20Part%204%20(DOCX).zip" />
+  <property name="ooxml.xsds.jar" location="${ooxml.lib}/ooxml-schemas.jar"/>
 
   <property name="build.site" location="build/tmp/site/build/site"/>
   <property name="build.site.src" location="build/tmp/site"/>
@@ -262,9 +263,11 @@ under the License.
         <mkdir dir="${scratchpad.output.dir}"/>
         <mkdir dir="${contrib.output.dir}"/>
         <mkdir dir="${examples.output.dir}"/>
+        <mkdir dir="${ooxml.output.dir}"/>
         <mkdir dir="${main.output.test.dir}"/>
         <mkdir dir="${contrib.output.test.dir}"/>
         <mkdir dir="${scratchpad.output.test.dir}"/>
+        <mkdir dir="${ooxml.output.test.dir}"/>
         <mkdir dir="${main.reports.test}"/>
         <mkdir dir="${scratchpad.reports.test}"/>
         <mkdir dir="${contrib.reports.test}"/>
@@ -348,7 +351,18 @@ under the License.
                        </patternset>
                </unzip>
        </target>
-       <target name="compile-ooxml-xsds" depends="check-jars,fetch-jars,check-ooxml-xsds,fetch-ooxml-xsds"
+       <target name="check-compiled-ooxml-xsds">
+        <condition property="ooxml-compiled-xsds.present">
+            <or>
+                <and>
+                    <available file="${ooxml.xsds.jar}"/>
+                </and>
+                <isset property="disconnected"/>
+            </or>
+        </condition>
+       </target>
+       <target name="compile-ooxml-xsds" unless="ooxml-compiled-xsds.present"
+        depends="check-jars,fetch-jars,check-ooxml-xsds,fetch-ooxml-xsds,check-compiled-ooxml-xsds"
         description="Unpacks the OOXML xsd files, and compiles them into XmlBeans">
                <taskdef name="xmlbean"
                        classname="org.apache.xmlbeans.impl.tool.XMLBean"
@@ -361,7 +375,7 @@ under the License.
                -->
                <xmlbean
                        schema="build/ooxml-xsds/"
-                       destfile="${ooxml.lib}/ooxml-schemas.jar"
+                       destfile="${ooxml.xsds.jar}"
                        javasource="1.4"
                        failonerror="false"
                >
@@ -452,7 +466,8 @@ under the License.
   </target>
 
   <target name="compile-ooxml" depends="init, check-ooxml-xsds, fetch-ooxml-xsds, compile-ooxml-xsds, compile-main">
-    <javac target="${jdk.version.class}" source="${jdk.version.source}"
+       <!-- openxml4j requires java 1.5, so so must we, for now -->
+    <javac target="1.5" source="1.5"
       destdir="${ooxml.output.dir}" debug="on" srcdir="${ooxml.src}">
       <classpath refid="ooxml.classpath"/>
     </javac>
diff --git a/src/scratchpad/ooxml-src/org/apache/poi/HXFDocument.java b/src/scratchpad/ooxml-src/org/apache/poi/HXFDocument.java
deleted file mode 100644 (file)
index 427e377..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.io.SAXReader;
-import org.openxml4j.exceptions.InvalidFormatException;
-import org.openxml4j.exceptions.OpenXML4JException;
-import org.openxml4j.opc.Package;
-import org.openxml4j.opc.PackageAccess;
-import org.openxml4j.opc.PackagePart;
-
-/**
- * Parent class of the low level interface to  
- *  all POI XML (OOXML) implementations.
- * Normal users should probably deal with things that
- *  extends {@link POIXMLDocument}, unless they really
- *  do need to get low level access to the files.
- *  
- * WARNING - APIs expected to change rapidly
- */
-public abstract class HXFDocument {
-       /**
-        * File package/container.
-        */
-       protected Package container;
-       /**
-        * The Package Part for our base document
-        */
-       protected PackagePart basePart;
-       /**
-        * The base document of this instance, eg Workbook for
-        *  xslsx
-        */
-       protected Document baseDocument;
-       
-       protected HXFDocument(Package container, String baseContentType) throws OpenXML4JException {
-               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);
-               
-               // And load it up
-               try {
-                       SAXReader reader = new SAXReader();
-                       baseDocument = reader.read(basePart.getInputStream());
-               } catch (DocumentException e) {
-                       throw new OpenXML4JException(e.getMessage());
-               } catch (IOException ioe) {
-                       throw new OpenXML4JException(ioe.getMessage());
-               }
-       }
-       
-       public static Package openPackage(File f) throws InvalidFormatException {
-               return Package.open(f.toString(), PackageAccess.READ_WRITE);
-       }
-
-       /**
-        * Get the package container.
-        * @return The package associated to this document.
-        */
-       public Package getPackage() {
-               return container;
-       }
-}
index 20707aac822caef009c9064ff42847f249c0a086..f2a71fd467d67a9560fd819dc3ccee423acc351b 100644 (file)
@@ -18,7 +18,7 @@ package org.apache.poi.hssf;
 
 import java.io.IOException;
 
-import org.apache.poi.HXFDocument;
+import org.apache.poi.hxf.HXFDocument;
 import org.apache.xmlbeans.XmlException;
 import org.openxml4j.exceptions.OpenXML4JException;
 import org.openxml4j.opc.Package;
diff --git a/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java b/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java
new file mode 100644 (file)
index 0000000..f8f74e0
--- /dev/null
@@ -0,0 +1,90 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.hxf;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.poi.POIXMLDocument;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.openxml4j.exceptions.InvalidFormatException;
+import org.openxml4j.exceptions.OpenXML4JException;
+import org.openxml4j.opc.Package;
+import org.openxml4j.opc.PackageAccess;
+import org.openxml4j.opc.PackagePart;
+
+/**
+ * Parent class of the low level interface to  
+ *  all POI XML (OOXML) implementations.
+ * Normal users should probably deal with things that
+ *  extends {@link POIXMLDocument}, unless they really
+ *  do need to get low level access to the files.
+ *  
+ * WARNING - APIs expected to change rapidly
+ */
+public abstract class HXFDocument {
+       /**
+        * File package/container.
+        */
+       protected Package container;
+       /**
+        * The Package Part for our base document
+        */
+       protected PackagePart basePart;
+       /**
+        * The base document of this instance, eg Workbook for
+        *  xslsx
+        */
+       protected Document baseDocument;
+       
+       protected HXFDocument(Package container, String baseContentType) throws OpenXML4JException {
+               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);
+               
+               // And load it up
+               try {
+                       SAXReader reader = new SAXReader();
+                       baseDocument = reader.read(basePart.getInputStream());
+               } catch (DocumentException e) {
+                       throw new OpenXML4JException(e.getMessage());
+               } catch (IOException ioe) {
+                       throw new OpenXML4JException(ioe.getMessage());
+               }
+       }
+       
+       public static Package openPackage(File f) throws InvalidFormatException {
+               return Package.open(f.toString(), PackageAccess.READ_WRITE);
+       }
+
+       /**
+        * Get the package container.
+        * @return The package associated to this document.
+        */
+       public Package getPackage() {
+               return container;
+       }
+}
diff --git a/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java b/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java
new file mode 100644 (file)
index 0000000..d56d268
--- /dev/null
@@ -0,0 +1,126 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.hxf.dev;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+
+import org.openxml4j.opc.Package;
+import org.openxml4j.opc.PackageAccess;
+import org.openxml4j.opc.PackagePart;
+import org.openxml4j.opc.PackageRelationship;
+import org.openxml4j.opc.PackageRelationshipCollection;
+
+/**
+ * Prints out the contents of a HXF (ooxml) container.
+ * Useful for seeing what parts are defined, and how
+ *  they're all related to each other.
+ */
+public class HXFLister {
+       private Package container;
+       private PrintStream disp;
+       
+       public HXFLister(Package container) {
+               this(container, System.out);
+       }
+       public HXFLister(Package container, PrintStream disp) {
+               this.container = container;
+               this.disp = disp;
+       }
+       
+       /**
+        * Figures out how big a given PackagePart is.
+        */
+       public static long getSize(PackagePart part) throws IOException {
+               InputStream in = part.getInputStream();
+               byte[] b = new byte[8192];
+               long size = 0;
+               int read = 0;
+               
+               while(read > -1) {
+                       read = in.read(b);
+                       if(read > 0) {
+                               size += read;
+                       }
+               }
+               
+               return size;
+       }
+       
+       /**
+        * Displays information on all the different
+        *  parts of the OOXML file container.
+        */
+       public void displayParts() throws Exception {
+               ArrayList<PackagePart> parts = container.getParts();
+               for (PackagePart part : parts) {
+                       disp.println(part.getPartName());
+                       disp.println("\t" + part.getContentType());
+                       
+                       if(! part.getPartName().toString().equals("/docProps/core.xml")) {
+                               disp.println("\t" + getSize(part) + " bytes");
+                       }
+                       
+                       if(! part.isRelationshipPart()) {
+                               disp.println("\t" + part.getRelationships().size() + " relations");
+                       }
+               }
+       }
+       /**
+        * Displays information on all the different
+        *  relationships between different parts
+        *  of the OOXML file container.
+        */
+       public void displayRelations() throws Exception {
+               PackageRelationshipCollection rels = 
+                       container.getRelationships();
+               for (PackageRelationship rel : rels) {
+                       disp.println("Relationship:");
+                       disp.println("\tFrom: "+ rel.getSourceURI());
+                       disp.println("\tTo:   " + rel.getTargetURI());
+                       disp.println("\tMode: " + rel.getTargetMode());
+                       disp.println("\tType: " + rel.getRelationshipType());
+               }
+       }
+       
+       public static void main(String[] args) throws Exception {
+               if(args.length == 0) {
+                       System.err.println("Use:");
+                       System.err.println("\tjava HXFLister <filename>");
+                       System.exit(1);
+               }
+               
+               File f = new File(args[0]);
+               if(! f.exists()) {
+                       System.err.println("Error, file not found!");
+                       System.err.println("\t" + f.toString());
+                       System.exit(2);
+               }
+               
+               HXFLister lister = new HXFLister(
+                               Package.open(f.toString(), PackageAccess.READ)
+               );
+               
+               lister.disp.println(f.toString() + "\n");
+               lister.displayParts();
+               lister.disp.println();
+               lister.displayRelations();
+       }
+}
index 1013d4f104800593ee4c9c9274045f4102d139d7..69d5a668a2a626816a9a18df592e81bfdb0710c3 100644 (file)
@@ -2,7 +2,7 @@ package org.apache.poi.hssf;
 
 import java.io.File;
 
-import org.apache.poi.HXFDocument;
+import org.apache.poi.hxf.HXFDocument;
 import org.openxml4j.opc.Package;
 import org.openxml4j.opc.PackagePart;