]> source.dussan.org Git - poi.git/commitdiff
forbidden apis fixes
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 7 Sep 2015 22:34:21 +0000 (22:34 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 7 Sep 2015 22:34:21 +0000 (22:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1701710 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/format/CellDateFormatter.java
src/java/org/apache/poi/ss/format/CellFormatter.java
src/java/org/apache/poi/ss/format/CellGeneralFormatter.java
src/java/org/apache/poi/ss/format/CellNumberFormatter.java
src/java/org/apache/poi/util/LocaleUtil.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java
src/scratchpad/src/org/apache/poi/hpbf/dev/HPBFDumper.java
src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java

index dcf702c329390b9b4cd6fed1bdb05127121a77a5..4027d02765dbd36e9ea195cb71008a9326510c57 100644 (file)
@@ -38,13 +38,12 @@ public class CellDateFormatter extends CellFormatter {
     private final DateFormat dateFmt;
     private String sFmt;
 
-    private static final long EXCEL_EPOCH_TIME;
-    private static final Date EXCEL_EPOCH_DATE;
+    private final long EXCEL_EPOCH_TIME;
+    private final Date EXCEL_EPOCH_DATE;
 
-    private static final CellFormatter SIMPLE_DATE = new CellDateFormatter(
-            "mm/d/y");
+    private static /* final */ CellDateFormatter SIMPLE_DATE = null;
 
-    static {
+    {
         Calendar c = LocaleUtil.getLocaleCalendar(1904, 0, 1, 0, 0, 0);
         EXCEL_EPOCH_DATE = c.getTime();
         EXCEL_EPOCH_TIME = c.getTimeInMillis();
@@ -153,7 +152,7 @@ public class CellDateFormatter extends CellFormatter {
         // tweak the format pattern to pass tests on JDK 1.7,
         // See https://issues.apache.org/bugzilla/show_bug.cgi?id=53369
         String ptrn = descBuf.toString().replaceAll("((y)(?!y))(?<!yy)", "yy");
-        dateFmt = new SimpleDateFormat(ptrn, LOCALE);
+        dateFmt = new SimpleDateFormat(ptrn, LocaleUtil.getUserLocale());
     }
 
     /** {@inheritDoc} */
@@ -185,7 +184,7 @@ public class CellDateFormatter extends CellFormatter {
                     Formatter formatter = new Formatter(toAppendTo, Locale.ROOT);
                     try {
                         long msecs = dateObj.getTime() % 1000;
-                        formatter.format(LOCALE, sFmt, msecs / 1000.0);
+                        formatter.format(LocaleUtil.getUserLocale(), sFmt, msecs / 1000.0);
                     } finally {
                         formatter.close();
                     }
@@ -219,6 +218,11 @@ public class CellDateFormatter extends CellFormatter {
      * For a date, this is <tt>"mm/d/y"</tt>.
      */
     public void simpleValue(StringBuffer toAppendTo, Object value) {
+        synchronized (CellDateFormatter.class) {
+            if (SIMPLE_DATE == null || !SIMPLE_DATE.EXCEL_EPOCH_DATE.equals(EXCEL_EPOCH_DATE)) {
+                SIMPLE_DATE = new CellDateFormatter("mm/d/y");
+            }
+        }
         SIMPLE_DATE.formatValue(toAppendTo, value);
     }
 }
index 23cfbe541c3a953d8ae4bf7e1070713905fb40f5..e529a90f16bd0058bc427d709b9af0506de12712 100644 (file)
@@ -16,7 +16,6 @@
 ==================================================================== */
 package org.apache.poi.ss.format;
 
-import java.util.Locale;
 import java.util.logging.Logger;
 
 /**
@@ -28,12 +27,6 @@ public abstract class CellFormatter {
     /** The original specified format. */
     protected final String format;
 
-    /**
-     * This is the locale used to get a consistent format result from which to
-     * work.
-     */
-    public static final Locale LOCALE = Locale.US;
-
     /**
      * Creates a new formatter object, storing the format in {@link #format}.
      *
index cdee8cf01bfd492d521af4808a50079526975428..b890e02176148f1b216ad1d67fd433b8ffb1598f 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.poi.ss.format;
 import java.util.Formatter;
 import java.util.Locale;
 
+import org.apache.poi.util.LocaleUtil;
+
 /**
  * A formatter for the default "General" cell format.
  *
@@ -57,9 +59,9 @@ public class CellGeneralFormatter extends CellFormatter {
                 stripZeros = false;
             }
 
-            Formatter formatter = new Formatter(toAppendTo, LOCALE);
+            Formatter formatter = new Formatter(toAppendTo, LocaleUtil.getUserLocale());
             try {
-                formatter.format(LOCALE, fmt, value);
+                formatter.format(LocaleUtil.getUserLocale(), fmt, value);
             } finally {
                 formatter.close();
             }
index 3addf46fe574675507edb2e0799c7940868b8327..f38f78006fcb46f79c9e8ec2c16e4dbc512f84cf 100644 (file)
@@ -597,9 +597,9 @@ public class CellNumberFormatter extends CellFormatter {
             writeFraction(value, null, fractional, output, mods);
         } else {
             StringBuffer result = new StringBuffer();
-            Formatter f = new Formatter(result, LOCALE);
+            Formatter f = new Formatter(result, LocaleUtil.getUserLocale());
             try {
-                f.format(LOCALE, printfFmt, value);
+                f.format(LocaleUtil.getUserLocale(), printfFmt, value);
             } finally {
                 f.close();
             }
@@ -873,9 +873,9 @@ public class CellNumberFormatter extends CellFormatter {
             List<Special> numSpecials, Set<StringMod> mods) {
 
         StringBuffer sb = new StringBuffer();
-        Formatter formatter = new Formatter(sb, LOCALE);
+        Formatter formatter = new Formatter(sb, LocaleUtil.getUserLocale());
         try {
-            formatter.format(LOCALE, fmt, num);
+            formatter.format(LocaleUtil.getUserLocale(), fmt, num);
         } finally {
             formatter.close();
         }
index 4edd65d18d84ce819142bc11b99c354dec1b2020..d402be58c3dcc9928ecfd1cfe3bd0c3b352ef1cb 100644 (file)
@@ -18,6 +18,7 @@
 \r
 package org.apache.poi.util;\r
 \r
+import java.nio.charset.Charset;\r
 import java.util.Calendar;\r
 import java.util.Locale;\r
 import java.util.TimeZone;\r
@@ -39,6 +40,13 @@ public class LocaleUtil {
      *  use UTC to perform calculations\r
      */\r
     public static final TimeZone TIMEZONE_UTC = TimeZone.getTimeZone("UTC");\r
+    \r
+    /**\r
+     * Default encoding for unknown byte encodings of native files\r
+     * (at least it's better than to rely on a platform dependent encoding\r
+     * for legacy stuff ...)\r
+     */\r
+    public static final Charset CHARSET_1252 = Charset.forName("CP1252");\r
 \r
     private static final ThreadLocal<TimeZone> userTimeZone = new ThreadLocal<TimeZone>() {\r
         @Override\r
index 0cbe5bacf6a9b6c184ee288a65682f1334c39c86..a75fc84857fe911ab3b16df390ce7ab64398be9a 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.xwpf.usermodel;
 import java.math.BigInteger;
 
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute.Space;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
@@ -67,8 +68,8 @@ public class TOC {
         rPr.addNewSzCs().setVal(new BigInteger("24"));\r
         CTSdtContentBlock content = block.addNewSdtContent();\r
         CTP p = content.addNewP();\r
-        p.setRsidR("00EF7E24".getBytes());\r
-        p.setRsidRDefault("00EF7E24".getBytes());\r
+        p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));\r
+        p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));\r
         p.addNewPPr().addNewPStyle().setVal("TOCHeading");\r
         p.addNewR().addNewT().setStringValue("Table of Contents");\r
     }\r
@@ -81,8 +82,8 @@ public class TOC {
     public void addRow(int level, String title, int page, String bookmarkRef) {\r
         CTSdtContentBlock contentBlock = this.block.getSdtContent();\r
         CTP p = contentBlock.addNewP();\r
-        p.setRsidR("00EF7E24".getBytes());\r
-        p.setRsidRDefault("00EF7E24".getBytes());\r
+        p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));\r
+        p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));\r
         CTPPr pPr = p.addNewPPr();\r
         pPr.addNewPStyle().setVal("TOC" + level);\r
         CTTabs tabs = pPr.addNewTabs();\r
index 3ea5e9a35a6940d547e3912036569794c4926405..7786950374ffa19b2588633991876aebdeed3b7d 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.poi.hpbf.dev;
 
-import java.io.FileInputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -27,6 +27,7 @@ import org.apache.poi.poifs.filesystem.DirectoryNode;
 import org.apache.poi.poifs.filesystem.DocumentEntry;
 import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
 import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.util.StringUtil;
 
 /**
@@ -39,7 +40,9 @@ public final class HPBFDumper {
        public HPBFDumper(NPOIFSFileSystem fs) {
                this.fs = fs;
        }
-       public HPBFDumper(InputStream inp) throws IOException {
+       
+       @SuppressWarnings("resource")
+    public HPBFDumper(InputStream inp) throws IOException {
                this(new NPOIFSFileSystem(inp));
        }
 
@@ -75,15 +78,14 @@ public final class HPBFDumper {
                return ret.toString();
        }
 
-       public static void main(String[] args) throws Exception {
+       @SuppressWarnings("resource")
+    public static void main(String[] args) throws Exception {
                if(args.length < 1) {
                        System.err.println("Use:");
                        System.err.println("  HPBFDumper <filename>");
                        System.exit(1);
                }
-               HPBFDumper dump = new HPBFDumper(
-                               new FileInputStream(args[0])
-               );
+               HPBFDumper dump = new HPBFDumper(new NPOIFSFileSystem(new File(args[0])));
 
                System.out.println("Dumping " + args[0]);
                dump.dumpContents();
@@ -201,7 +203,7 @@ public final class HPBFDumper {
                //  then 4 bytes giving the length, then
                //  18 00
                System.out.println(
-                               new String(data, 0, 8) +
+                               new String(data, 0, 8, LocaleUtil.CHARSET_1252) +
                                dumpBytes(data, 8, 0x20-8)
                );
 
@@ -214,7 +216,7 @@ public final class HPBFDumper {
                                );
                                pos += 2;
                        }
-                       String text = new String(data, pos, 4);
+                       String text = new String(data, pos, 4, LocaleUtil.CHARSET_1252);
                        int blen = 8;
                        if(sixNotEight)
                                blen = 6;
@@ -265,11 +267,11 @@ public final class HPBFDumper {
                        int offset = 0x20 + i*24;
                        if(data[offset] == 0x18 && data[offset+1] == 0x00) {
                                // Has data
-                               startType[i] = new String(data, offset+2, 4);
+                               startType[i] = new String(data, offset+2, 4, LocaleUtil.CHARSET_1252);
                                optA[i] = LittleEndian.getUShort(data, offset+6);
                                optB[i] = LittleEndian.getUShort(data, offset+8);
                                optC[i] = LittleEndian.getUShort(data, offset+10);
-                               endType[i] = new String(data, offset+12, 4);
+                               endType[i] = new String(data, offset+12, 4, LocaleUtil.CHARSET_1252);
                                from[i] = (int)LittleEndian.getUInt(data, offset+16);
                                len[i] = (int)LittleEndian.getUInt(data, offset+20);
                        } else {
index 2eefe6703bbfc53b54ef956dc930e72b8eb4be21..78eb082a27fe74d165b1ef6bed7eb47879c7b868 100644 (file)
@@ -17,7 +17,6 @@
 package org.apache.poi.hssf.converter;
 
 import java.io.File;
-import java.io.FileWriter;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -85,9 +84,8 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter
         {
             Document doc = ExcelToHtmlConverter.process( new File( args[0] ) );
 
-            FileWriter out = new FileWriter( args[1] );
             DOMSource domSource = new DOMSource( doc );
-            StreamResult streamResult = new StreamResult( out );
+            StreamResult streamResult = new StreamResult( new File(args[1]) );
 
             TransformerFactory tf = TransformerFactory.newInstance();
             Transformer serializer = tf.newTransformer();
@@ -96,7 +94,6 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter
             serializer.setOutputProperty( OutputKeys.INDENT, "no" );
             serializer.setOutputProperty( OutputKeys.METHOD, "html" );
             serializer.transform( domSource, streamResult );
-            out.close();
         }
         catch ( Exception e )
         {
@@ -118,7 +115,9 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter
                 XMLHelper.getDocumentBuilderFactory().newDocumentBuilder()
                         .newDocument() );
         excelToHtmlConverter.processWorkbook( workbook );
-        return excelToHtmlConverter.getDocument();
+        Document doc = excelToHtmlConverter.getDocument();
+        workbook.close();
+        return doc;
     }
 
     private String cssClassContainerCell = null;
@@ -368,8 +367,10 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter
         final short cellStyleIndex = cellStyle.getIndex();
         if ( cellStyleIndex != 0 )
         {
+            @SuppressWarnings("resource")
             HSSFWorkbook workbook = cell.getRow().getSheet().getWorkbook();
             String mainCssClass = getStyleClassName( workbook, cellStyle );
+            
             if ( wrapInDivs )
             {
                 tableCellElement.setAttribute( "class", mainCssClass + " "