Add a reporting option to the getDictionary method (A7)

This is refactoring to help future changes

Change-Id: I8c4372383a2fff5805b96cc47df5012e4b231004
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
index 7a2fde8..4573fa6 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
@@ -17,6 +17,11 @@
 package com.android.inputmethod.latin.dicttool;
 
 import com.android.inputmethod.latin.makedict.BinaryDictInputOutput;
+import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.ByteBufferWrapper;
+import com.android.inputmethod.latin.makedict.FusionDictionary;
+import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
+
+import org.xml.sax.SAXException;
 
 import java.io.File;
 import java.io.BufferedInputStream;
@@ -26,8 +31,13 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileChannel.MapMode;
 import java.util.ArrayList;
 
+import javax.xml.parsers.ParserConfigurationException;
+
 /**
  * Class grouping utilities for offline dictionary making.
  *
@@ -141,4 +151,54 @@
             return null;
         }
     }
+
+    static void crash(final String filename, final Exception e) {
+        throw new RuntimeException("Can't read file " + filename, e);
+    }
+
+    static FusionDictionary getDictionary(final String filename, final boolean report) {
+        final File file = new File(filename);
+        if (report) {
+            System.out.println("Dictionary : " + file.getAbsolutePath());
+            System.out.println("Size : " + file.length() + " bytes");
+        }
+        try {
+            if (XmlDictInputOutput.isXmlUnigramDictionary(filename)) {
+                if (report) System.out.println("Format : XML unigram list");
+                return XmlDictInputOutput.readDictionaryXml(
+                        new BufferedInputStream(new FileInputStream(file)),
+                        null /* shortcuts */, null /* bigrams */);
+            } else if (CombinedInputOutput.isCombinedDictionary(filename)) {
+                if (report) System.out.println("Format : Combined format");
+                return CombinedInputOutput.readDictionaryCombined(
+                        new BufferedInputStream(new FileInputStream(file)));
+            } else {
+                final DecoderChainSpec decodedSpec = getRawBinaryDictionaryOrNull(file);
+                if (null == decodedSpec) {
+                    crash(filename, new RuntimeException(
+                            filename + " does not seem to be a dictionary file"));
+                } else {
+                    final FileInputStream inStream = new FileInputStream(decodedSpec.mFile);
+                    final ByteBuffer buffer = inStream.getChannel().map(
+                            FileChannel.MapMode.READ_ONLY, 0, decodedSpec.mFile.length());
+                    if (report) {
+                        System.out.println("Format : Binary dictionary format");
+                        System.out.println("Packaging : " + decodedSpec.describeChain());
+                        System.out.println("Uncompressed size : " + decodedSpec.mFile.length());
+                    }
+                    return BinaryDictInputOutput.readDictionaryBinary(
+                            new BinaryDictInputOutput.ByteBufferWrapper(buffer), null);
+                }
+            }
+        } catch (IOException e) {
+            crash(filename, e);
+        } catch (SAXException e) {
+            crash(filename, e);
+        } catch (ParserConfigurationException e) {
+            crash(filename, e);
+        } catch (UnsupportedFormatException e) {
+            crash(filename, e);
+        }
+        return null;
+    }
 }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java
index 072de5c..8c15920 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java
@@ -45,11 +45,13 @@
         public Compressor() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: "
                     + "Compresses a file using gzip compression";
         }
 
+        @Override
         public void run() throws IOException {
             if (mArgs.length > 2) {
                 throw new RuntimeException("Too many arguments for command " + COMMAND);
@@ -71,11 +73,13 @@
         public Uncompressor() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: "
                     + "Uncompresses a file compressed with gzip compression";
         }
 
+        @Override
         public void run() throws IOException {
             if (mArgs.length > 2) {
                 throw new RuntimeException("Too many arguments for command " + COMMAND);
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
index be4b2b8..98a4e8f 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
@@ -16,25 +16,11 @@
 
 package com.android.inputmethod.latin.dicttool;
 
-import com.android.inputmethod.latin.dicttool.BinaryDictOffdeviceUtils.DecoderChainSpec;
-import com.android.inputmethod.latin.makedict.BinaryDictInputOutput;
 import com.android.inputmethod.latin.makedict.FormatSpec;
 import com.android.inputmethod.latin.makedict.FusionDictionary;
 import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
-import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
 import com.android.inputmethod.latin.makedict.Word;
 
-import org.xml.sax.SAXException;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-
-import javax.xml.parsers.ParserConfigurationException;
-
 public class Info extends Dicttool.Command {
     public static final String COMMAND = "info";
 
@@ -46,52 +32,6 @@
         return COMMAND + "<filename>: prints various information about a dictionary file";
     }
 
-    private static void crash(final String filename, final Exception e) {
-        throw new RuntimeException("Can't read file " + filename, e);
-    }
-
-    private static FusionDictionary getDictionary(final String filename) {
-        final File file = new File(filename);
-        System.out.println("Dictionary : " + file.getAbsolutePath());
-        System.out.println("Size : " + file.length() + " bytes");
-        try {
-            if (XmlDictInputOutput.isXmlUnigramDictionary(filename)) {
-                System.out.println("Format : XML unigram list");
-                return XmlDictInputOutput.readDictionaryXml(
-                        new BufferedInputStream(new FileInputStream(file)),
-                        null /* shortcuts */, null /* bigrams */);
-            } else if (CombinedInputOutput.isCombinedDictionary(filename)) {
-                System.out.println("Format : Combined format");
-                return CombinedInputOutput.readDictionaryCombined(
-                        new BufferedInputStream(new FileInputStream(file)));
-            } else {
-                final DecoderChainSpec decodedSpec =
-                        BinaryDictOffdeviceUtils.getRawBinaryDictionaryOrNull(file);
-                if (null == decodedSpec) {
-                    crash(filename, new RuntimeException(
-                            filename + " does not seem to be a dictionary file"));
-                }
-                final FileInputStream inStream = new FileInputStream(decodedSpec.mFile);
-                final ByteBuffer buffer = inStream.getChannel().map(
-                        FileChannel.MapMode.READ_ONLY, 0, decodedSpec.mFile.length());
-                System.out.println("Format : Binary dictionary format");
-                System.out.println("Packaging : " + decodedSpec.describeChain());
-                System.out.println("Uncompressed size : " + decodedSpec.mFile.length());
-                return BinaryDictInputOutput.readDictionaryBinary(
-                        new BinaryDictInputOutput.ByteBufferWrapper(buffer), null);
-            }
-        } catch (IOException e) {
-            crash(filename, e);
-        } catch (SAXException e) {
-            crash(filename, e);
-        } catch (ParserConfigurationException e) {
-            crash(filename, e);
-        } catch (UnsupportedFormatException e) {
-            crash(filename, e);
-        }
-        return null;
-    }
-
     private static void showInfo(final FusionDictionary dict) {
         System.out.println("Header attributes :");
         System.out.print(dict.mOptions.toString(2));
@@ -125,7 +65,8 @@
             throw new RuntimeException("Not enough arguments for command " + COMMAND);
         }
         final String filename = mArgs[0];
-        final FusionDictionary dict = getDictionary(filename);
+        final FusionDictionary dict = BinaryDictOffdeviceUtils.getDictionary(filename,
+                true /* report */);
         showInfo(dict);
     }
 }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java
index c004cfb..808e1d4 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java
@@ -29,10 +29,12 @@
     public Makedict() {
     }
 
+    @Override
     public String getHelp() {
         return DictionaryMaker.Arguments.getHelp();
     }
 
+    @Override
     public void run() throws FileNotFoundException, IOException, ParserConfigurationException,
             SAXException, UnsupportedFormatException {
         DictionaryMaker.main(mArgs);
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
index d8d94a1..1fd2cba 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
@@ -56,8 +56,6 @@
     private static final String WORD_ATTR = "word";
     private static final String NOT_A_WORD_ATTR = "not_a_word";
 
-    private static final int SHORTCUT_ONLY_DEFAULT_FREQ = 1;
-
     private static final String OPTIONS_KEY = "options";
     private static final String GERMAN_UMLAUT_PROCESSING_OPTION = "german_umlaut_processing";
     private static final String FRENCH_LIGATURE_PROCESSING_OPTION = "french_ligature_processing";
@@ -67,12 +65,9 @@
      */
     static private class UnigramHandler extends DefaultHandler {
         // Parser states
-        private static final int NONE = 0;
         private static final int START = 1;
         private static final int WORD = 2;
-        private static final int BIGRAM = 4;
-        private static final int END = 5;
-        private static final int UNKNOWN = 6;
+        private static final int UNKNOWN = 3;
 
         FusionDictionary mDictionary;
         int mState; // the state of the parser