]> source.dussan.org Git - poi.git/commitdiff
Bug 58915: Add note about memory consumption and update changelog
authorDominik Stadler <centic@apache.org>
Tue, 29 Mar 2016 17:30:55 +0000 (17:30 +0000)
committerDominik Stadler <centic@apache.org>
Tue, 29 Mar 2016 17:30:55 +0000 (17:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1737025 13f79535-47bb-0310-9956-ffa450edef68

19 files changed:
.classpath
OOXMLLite.launch [new file with mode: 0644]
OOXMLPrettyPrint.launch [new file with mode: 0644]
rerun.sh [new file with mode: 0644]
run.sh [new file with mode: 0644]
sonar/run.sh [new file with mode: 0644]
src/integrationtest/integrationtest.iml [new file with mode: 0644]
src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java
src/integrationtest/run.sh [new file with mode: 0644]
src/java/java.iml [new file with mode: 0644]
src/java/org/apache/poi/poifs/dev/POIFSDump.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotCacheDefinition.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java
src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java
src/testcases/org/apache/poi/hpsf/TestPropertySet.java [new file with mode: 0644]
src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java
test-data/document/52372.doc [new file with mode: 0644]
view.sh [new file with mode: 0644]

index 5a7d21738b42175853b5e79171c856e3d2a0bcb3..ac2f3e8070d6dc1c900ab44e545b580cedaf637b 100644 (file)
@@ -18,9 +18,9 @@
        <classpathentry kind="lib" path="lib/ant-1.9.4.jar"/>
        <classpathentry kind="lib" path="lib/ant-launcher-1.9.4.jar"/>
        <classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
-       <classpathentry kind="lib" path="ooxml-lib/xmlbeans-2.6.0.jar"/>
-       <classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
-       <classpathentry kind="lib" path="lib/junit-4.12.jar"/>
+       <classpathentry kind="lib" path="ooxml-lib/xmlbeans-2.6.0.jar" sourcepath="C:/devtools/source/xmlbeans"/>
+       <classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar" sourcepath="/commons-dost/libsrc/hamcrest-all-1.3-sources.jar"/>
+       <classpathentry kind="lib" path="lib/junit-4.12.jar" sourcepath="/commons-dost/libsrc/junit-4.12-sources.jar"/>
        <classpathentry kind="lib" path="ooxml-lib/curvesapi-1.03.jar"/>
        <classpathentry kind="lib" path="ooxml-lib/ooxml-schemas-1.3.jar" sourcepath="ooxml-lib/ooxml-schemas-1.3-sources.jar"/>
        <classpathentry kind="lib" path="ooxml-lib/ooxml-security-1.1.jar" sourcepath="ooxml-lib/ooxml-security-1.1-sources.jar"/>
@@ -31,5 +31,5 @@
        <classpathentry kind="lib" path="compile-lib/xmlsec-2.0.6.jar"/>
        <classpathentry kind="lib" path="lib/commons-codec-1.10.jar"/>
        <classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/>
-       <classpathentry kind="output" path="build/eclipse"/>
+       <classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/OOXMLLite.launch b/OOXMLLite.launch
new file mode 100644 (file)
index 0000000..e85d008
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">\r
+<listEntry value="/Apache POI/src/ooxml/java/org/apache/poi/util/OOXMLLite.java"/>\r
+</listAttribute>\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">\r
+<listEntry value="1"/>\r
+</listAttribute>\r
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK16"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.poi.util.OOXMLLite"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-ooxml build/ooxml-lite-merged/ooxml-lite-merged.jar&#13;&#10;-test build/ooxml-test-classes&#13;&#10;-dest build/ooxml-lite-classes"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Apache POI"/>\r
+</launchConfiguration>\r
diff --git a/OOXMLPrettyPrint.launch b/OOXMLPrettyPrint.launch
new file mode 100644 (file)
index 0000000..d5420dc
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">\r
+<listEntry value="/ApachePOI/src/ooxml/java/org/apache/poi/dev/OOXMLPrettyPrint.java"/>\r
+</listAttribute>\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">\r
+<listEntry value="1"/>\r
+</listAttribute>\r
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.poi.dev.OOXMLPrettyPrint"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="C:\temp\imagelink.xlsx C:\temp\imagelink.pretty.xlsx C:\temp\imagelinka.xlsx c:\temp\imagelinka.pretty.xlsx"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="ApachePOI"/>\r
+</launchConfiguration>\r
diff --git a/rerun.sh b/rerun.sh
new file mode 100644 (file)
index 0000000..980b91e
--- /dev/null
+++ b/rerun.sh
@@ -0,0 +1 @@
+ant clean && ant compile-all jar test-all
diff --git a/run.sh b/run.sh
new file mode 100644 (file)
index 0000000..14befa1
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# integration-tests fail: https://bitbucket.org/fakraemer/line-break-measurer-test/src/dc8e619063a4?at=master
+#JAVA_HOME=/devtools/jdk1.6.0_45
+
+#JAVA_HOME=/devtools/jdk1.7.0_76_x64
+JAVA_HOME=/devtools/jdk1.8.0_66_x64
+export JAVA_HOME
+
+ANT_HOME=/devtools/apache-ant-1.9.4
+export ANT_HOME
+
+PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
+export PATH
+
+FORREST_HOME=/devtools/apache-forrest-0.5.1-bin
+export FORREST_HOME
+
+ANT_OPTS="-Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/workspaces"
+export ANT_OPTS
+
+rm -f build/*-testokfile.txt
+
+# -Dadditionaljar=lib/xercesImpl-2.6.1.jar 
+# -Dmain.docs.notRequired=true
+nice -n 19 /devtools/apache-ant-1.9.6/bin/ant -Dcoverage.enabled=false  $*
diff --git a/sonar/run.sh b/sonar/run.sh
new file mode 100644 (file)
index 0000000..e8b9631
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# -s /x1/jenkins/jenkins-master/catalina-base/temp/settings7837234259678677409.xml 
+mvn -B -f /workspaces/poi/sonar/pom.xml -Dmaven.repo.local=/workspaces/poi/sonar/repo clean install -U -DskipTests -fae -B && \
+mvn -f /workspaces/poi/sonar/pom.xml -e -B org.codehaus.mojo:sonar-maven-plugin:2.6:sonar -Dsonar.jdbc.driver=com.mysql.jdbc.Driver \
+       "-Dsonar.jdbc.url=jdbc:mysql://192.168.0.64:3306/sonar?useUnicode=true&characterEncoding=utf8" \
+       -Dsonar.host.url=http://localhost:9090 -Dmaven.repo.local=/workspaces/poi/sonar/repo
diff --git a/src/integrationtest/integrationtest.iml b/src/integrationtest/integrationtest.iml
new file mode 100644 (file)
index 0000000..0566aa3
--- /dev/null
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/junit-4.12.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/hamcrest-core-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="java" />
+    <orderEntry type="module" module-name="ooxml" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../ooxml-lib/xmlbeans-2.6.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="scratchpad" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/ant-1.9.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/ant-launcher-1.9.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../ooxml-lib/ooxml-encryption-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../ooxml-lib/ooxml-schemas-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../ooxml-lib/ooxml-security-1.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>
\ No newline at end of file
index 6a84201b457973c1733e8959cf597f7d208eb9d4..69039e3c0e9a89d1fe977b4e7f1324c1854024c7 100644 (file)
@@ -39,17 +39,15 @@ public class HPSFFileHandler extends POIFSFileHandler {
        // a test-case to test this locally without executing the full TestAllFiles
        @Test
        public void test() throws Exception {
-               InputStream stream = new FileInputStream("test-data/hpsf/Test0313rur.adm");
+               File file = new File("test-data/document/52372.doc");
+
+               InputStream stream = new FileInputStream(file);
                try {
                        handleFile(stream);
                } finally {
                        stream.close();
                }
-       }
 
-    // a test-case to test this locally without executing the full TestAllFiles
-    @Test
-    public void testExtractor() throws Exception {
-        handleExtracting(new File("test-data/hpsf/TestBug44375.xls"));
-    }
+               handleExtracting(file);
+       }
 }
diff --git a/src/integrationtest/run.sh b/src/integrationtest/run.sh
new file mode 100644 (file)
index 0000000..2676981
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# integration-tests fail: https://bitbucket.org/fakraemer/line-break-measurer-test/src/dc8e619063a4?at=master
+#JAVA_HOME=/devtools/jdk1.6.0_45
+
+#JAVA_HOME=/devtools/jdk1.7.0_76_x64
+JAVA_HOME=/devtools/jdk1.8.0_66_x64
+export JAVA_HOME
+
+ANT_HOME=/devtools/apache-ant-1.9.4
+export ANT_HOME
+
+PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
+export PATH
+
+FORREST_HOME=/devtools/apache-forrest-0.5.1-bin
+export FORREST_HOME
+
+ANT_OPTS="-Xmx1524m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/workspaces"
+export ANT_OPTS
+
+#rm -f build/*-testokfile.txt
+
+# -Dadditionaljar=lib/xercesImpl-2.6.1.jar 
+# -Dmain.docs.notRequired=true
+nice -n 19 /devtools/apache-ant-1.9.6/bin/ant -Dcoverage.enabled=false  $*
diff --git a/src/java/java.iml b/src/java/java.iml
new file mode 100644 (file)
index 0000000..cf5c2ee
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
+    </content>
+    <content url="file://$MODULE_DIR$/../resources/main">
+      <sourceFolder url="file://$MODULE_DIR$/../resources/main" isTestSource="false" />
+    </content>
+    <content url="file://$MODULE_DIR$/../testcases">
+      <sourceFolder url="file://$MODULE_DIR$/../testcases" isTestSource="true" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/commons-logging-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/commons-codec-1.10.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/junit-4.12.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/log4j-1.2.17.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../lib/hamcrest-core-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>
\ No newline at end of file
index f8c00365ac7b554c7db61b19a5cf98dffa126ccb..1afb7bfefd4500fe6a997097203f4d95cc781f61 100644 (file)
@@ -67,7 +67,7 @@ public class POIFSDump {
             is.close();
 
             DirectoryEntry root = fs.getRoot();
-            File file = new File(root.getName());
+            File file = new File(new File(args[i]).getName() + "-" + root.getName());
             file.mkdir();
 
             dump(root, file);
index c611e13e3815d670b9d9cf5c4af69d7130b98d14..f5c65e92abe0332fd8e5261084abe785866f768b 100644 (file)
@@ -111,6 +111,17 @@ public class XSSFPivotCacheDefinition extends POIXMLDocumentPart{
         //Sets the pivotCacheDefinition tag
         xmlOptions.setSaveSyntheticDocumentElement(new QName(CTPivotCacheDefinition.type.getName().
                 getNamespaceURI(), "pivotCacheDefinition"));
+
+        // ensure the fields have names
+        if(ctPivotCacheDefinition.getCacheFields() != null) {
+            CTCacheFields cFields = ctPivotCacheDefinition.getCacheFields();
+            for(CTCacheField cf : cFields.getCacheFieldArray()) {
+                if(cf.getName() == null || cf.getName().isEmpty()) {
+                    cf.setName("A");
+                }
+            }
+        }
+
         ctPivotCacheDefinition.save(out, xmlOptions);
         out.close();
     }
@@ -144,7 +155,8 @@ public class XSSFPivotCacheDefinition extends POIXMLDocumentPart{
             cf.setNumFmtId(0);
             Cell cell = row.getCell(i);
             cell.setCellType(Cell.CELL_TYPE_STRING);
-            cf.setName(row.getCell(i).getStringCellValue());
+            String stringCellValue = cell.getStringCellValue();
+            cf.setName(stringCellValue);
             cf.addNewSharedItems();
         }
     }
index f0103719c1ca05f308708d3d313866540a7aec77..d1edf6d0b575b4ee63fac6585e7a3cf325633faf 100644 (file)
@@ -2902,15 +2902,16 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         // we need to sort it in a way so the shifting does not mess up the structures, 
         // i.e. when shifting down, start from down and go up, when shifting up, vice-versa
         SortedMap<XSSFComment, Integer> commentsToShift = new TreeMap<XSSFComment, Integer>(new Comparator<XSSFComment>() {
-            public int compare(XSSFComment o1, XSSFComment o2) {
-                int row1 = o1.getRow();
-                int row2 = o2.getRow();
-                
-                if(row1 == row2) {
-                    // ordering is not important when row is equal, but don't return zero to still 
-                    // get multiple comments per row into the map
-                    return o1.hashCode() - o2.hashCode();
-                }
+                       @Override
+                       public int compare(XSSFComment o1, XSSFComment o2) {
+                               int row1 = o1.getRow();
+                               int row2 = o2.getRow();
+                               
+                               if(row1 == row2) {
+                                       // ordering is not important when row is equal, but don't return zero to still 
+                                       // get multiple comments per row into the map
+                                       return o1.hashCode() - o2.hashCode();
+                               }
 
                 // when shifting down, sort higher row-values first
                 if(n > 0) {
@@ -2986,6 +2987,78 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
             map.put(r.getRowNum(), r);
         }
         _rows = map;
+        
+        // bug 57423: also re-order sheetdatamap
+        CTSheetData sheetData = worksheet.getSheetData();
+        SortedMap<Long, CTRow> ctmap = new TreeMap<Long, CTRow>();
+        for(CTRow row : sheetData.getRowArray()) {
+            System.out.println("Having row " + row.getR());
+            ctmap.put(row.getR(), row);
+        }
+        /*Node domNode = sheetData.getDomNode();
+        NodeList childNodes = domNode.getChildNodes();
+        System.out.println("Had: " + childNodes.getLength() + ": " + childNodes);
+        for(int i = 0;i < childNodes.getLength();i++) {
+            Node item = childNodes.item(i);
+            System.out.println("Had: " + i + ": " + item);
+        }*/
+        
+        //CTRow[] ctArray = new CTRow[ctmap.size()];
+        /*int rowNum = 0;
+        int arrayIdx = 0;
+        for(CTRow row : ctmap.values()) {
+            if(row.getR() != (rowNum+1)) {
+                // XMLBeans releases any previous object in the setters, so we need to 
+                // use new objects all the time
+                CTRow newRow = (CTRow) row.copy();
+                
+                // we have to copy the Cells as well here as they are not included by 
+                // the copy() and would be invalidated otherwise!
+                
+                XSSFRow xRow = _rows.get((int)row.getR()-1);
+                int cellCount = 0;
+                for (int cellNum = xRow.getFirstCellNum();cellNum < xRow.getLastCellNum();cellNum++) {
+                    XSSFCell xssfCell = xRow.getCell(cellNum);
+                    if(xssfCell == null) {
+                        continue;
+                    }
+                    xssfCell.setCTCell(newRow.getCArray(cellCount));
+
+                    cellCount++;
+                }
+                
+                CTCell[] cArray = new CTCell[cellCount];
+                int i = 0;
+                for (int cellNum = xRow.getFirstCellNum();cellNum < xRow.getLastCellNum();cellNum++) {
+                    XSSFCell xssfCell = xRow.getCell(cellNum);
+                    if(xssfCell != null) {
+                        cArray[i] = (CTCell) xssfCell.getCTCell().copy();
+                        i++;
+                        
+                        // we have to copy and re-create the XSSFCell here because the 
+                        // elements as otherwise setCArray below invalidates all the columns!
+                        // see Bug 56170, XMLBeans seems to always release previous objects
+                        // in the CArray, so we need to provide completely new ones here!
+                        //_cells.put(entry.getKey(), new XSSFCell(this, cArray[i]));
+                        xssfCell.setCTCell(cArray[cellNum]);
+                    }
+                    cellNum++;
+                }
+
+                newRow.setCArray(cArray);
+
+                sheetData.setRowArray(rowNum, row);
+            }
+            rowNum++;
+        }*/
+        //sheetData.setRowArray(ctArray);
+        
+        /*CTRow row13 = (CTRow) sheetData.getRowArray(10).copy();
+        CTRow row12 = (CTRow) sheetData.getRowArray(11).copy();
+        sheetData.setRowArray(10, row12);
+        sheetData.setRowArray(11, row13);*/
+        
+        //sheetData.getRowList()
     }
 
     private int shiftedRowNum(int startRow, int endRow, int n, int rownum) {
@@ -3498,6 +3571,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         safeGetProtectionField().setSheet(false);
     }
 
+
     /**
      * Enable or disable Autofilters locking.
      * This does not modify sheet protection status.
@@ -3725,6 +3799,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         return dataValidationHelper;
     }
 
+    @Override
+    @SuppressWarnings("deprecation") //YK: getXYZArray() array accessors are deprecated in xmlbeans with JDK 1.5 support
     public List<XSSFDataValidation> getDataValidations() {
         List<XSSFDataValidation> xssfValidations = new ArrayList<XSSFDataValidation>();
         CTDataValidations dataValidations = this.worksheet.getDataValidations();
@@ -4100,6 +4176,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         return tables;
     }
     
+    @Override
     public int getColumnOutlineLevel(int columnIndex) {
         CTCol col = columnHelper.getColumn(columnIndex, false);
         if (col == null) {
index 861984fd57e63094886007b10c189eb3334acb1a..60d334667e60486572c59afe3b82d00e156ce7df 100644 (file)
@@ -24,11 +24,12 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.AreaReference;
 import org.apache.poi.ss.util.CellReference;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageField;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageFields;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFields;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotTableDefinition;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataConsolidateFunction;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.List;
 
 public class TestXSSFPivotTable extends TestCase {
     private XSSFPivotTable pivotTable;
@@ -268,4 +269,46 @@ public class TestXSSFPivotTable extends TestCase {
         }
         fail();
     }
+
+    public void test58294() throws Exception {
+        XSSFWorkbook wb = new XSSFWorkbook ("C:\\temp\\test1.xlsx");
+        XSSFSheet sheet = wb.getSheetAt(1);
+        XSSFSheet sheet0 = wb.getSheetAt(0);
+        sheet0.setActiveCell("A4");
+        XSSFPivotTable pivotTable = sheet0.createPivotTable(new AreaReference("A3:H6"), new CellReference("A4"), sheet);
+        pivotTable.addRowLabel(1);
+        pivotTable.addRowLabel(3);
+        pivotTable.addRowLabel(5);
+        pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 6, "Sum of days with hauls");
+        pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 7, "Sum of days site cutoff");
+        //checkPivotTables(wb);
+        FileOutputStream fileOut = new FileOutputStream("c:\\temp\\test2new.xlsx");
+        try {
+            wb.write(fileOut);
+        } finally {
+            fileOut.close();
+        }
+
+        XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
+        //checkPivotTables(wbBack);
+
+        wb.close();
+    }
+
+    private void checkPivotTables(XSSFWorkbook wb) {
+        final List<XSSFPivotTable> pivotTables = wb.getSheetAt(0).getPivotTables();
+        assertNotNull(pivotTables);
+        assertEquals(3, pivotTables.size());
+        final XSSFPivotTable pivotTable = pivotTables.get(2);
+        checkPivotTable(pivotTable);
+    }
+
+    private void checkPivotTable(XSSFPivotTable pivotTableBack) {
+        assertNotNull(pivotTableBack.getPivotCacheDefinition());
+        assertNotNull(pivotTableBack.getPivotCacheDefinition().getCTPivotCacheDefinition());
+        final CTCacheFields cacheFields = pivotTableBack.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields();
+        assertNotNull(cacheFields);
+        assertEquals(8, cacheFields.sizeOfCacheFieldArray());
+        assertEquals("A", cacheFields.getCacheFieldList().get(0).getName());
+    }
 }
index 77a75a19373063c22bbe8662fc8d2dfc6a185b23..6205e50b790a02a3ac6a36ef8853260eaf08f740 100644 (file)
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.FilenameFilter;
 import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import javax.xml.transform.OutputKeys;
@@ -41,8 +42,7 @@ public class TestWordToConverterSuite
     /**
      * YK: a quick hack to exclude failing documents from the suite.
      */
-    private static List<String> failingFiles = Arrays
-            .asList( "ProblemExtracting.doc" );
+    private static List<String> failingFiles = Collections.singletonList("ProblemExtracting.doc");
 
     public static Test suite()
     {
diff --git a/src/testcases/org/apache/poi/hpsf/TestPropertySet.java b/src/testcases/org/apache/poi/hpsf/TestPropertySet.java
new file mode 100644 (file)
index 0000000..be8b16d
--- /dev/null
@@ -0,0 +1,41 @@
+/* ====================================================================\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to You under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+==================================================================== */\r
+\r
+package org.apache.poi.hpsf;\r
+\r
+import org.apache.poi.POIDataSamples;\r
+import org.apache.poi.poifs.filesystem.DocumentInputStream;\r
+import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;\r
+import org.junit.Test;\r
+\r
+import java.io.IOException;\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+\r
+public class TestPropertySet {\r
+    @Test\r
+    public void test52372() throws IOException, NoPropertySetStreamException, MarkUnsupportedException, UnexpectedPropertySetTypeException {\r
+        NPOIFSFileSystem poifs = new NPOIFSFileSystem(POIDataSamples.getDocumentInstance().getFile("52372.doc"));\r
+\r
+        DocumentInputStream dis = poifs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME);\r
+        PropertySet ps = new PropertySet(dis);\r
+        SummaryInformation si = new SummaryInformation(ps);\r
+        dis.close();\r
+\r
+        assertNotNull(si);\r
+    }\r
+}\r
index 8d7fd012a62c5f5b018271842ac701c66178a0ea..151bed3c14bb0e491ed84d9f65ef41fc32ddc609 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.poi.hssf.usermodel;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Calendar;
 import java.util.Date;
 
@@ -544,4 +545,25 @@ public final class TestCellStyle extends TestCase {
         
         wb.close();
     }
+
+
+    @Test
+    public void test58607() throws IOException {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFCellStyle style = wb.createCellStyle();
+
+        style.setDataFormat(wb.createDataFormat().getFormat("dd/MM/yyyy HH:mm:ss"));
+
+        final Cell cell = wb.createSheet("test").createRow(0).createCell(0);
+        cell.setCellType(Cell.CELL_TYPE_NUMERIC);
+        cell.setCellStyle(style);
+        cell.setCellValue(new Date());
+
+        OutputStream out = new FileOutputStream("C:\\temp\\58607.xls");
+        try {
+            wb.write(out);
+        } finally {
+            out.close();
+        }
+    }
 }
diff --git a/test-data/document/52372.doc b/test-data/document/52372.doc
new file mode 100644 (file)
index 0000000..ddaaf5e
Binary files /dev/null and b/test-data/document/52372.doc differ
diff --git a/view.sh b/view.sh
new file mode 100644 (file)
index 0000000..68c74ad
--- /dev/null
+++ b/view.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java -cp build/eclipse org.apache.poi.hssf.dev.BiffViewer --escher "$@"