16f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi/*
26f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
36f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi *
46f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
56f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
66f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * You may obtain a copy of the License at
76f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi *
86f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
96f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi *
106f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
116f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
126f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * See the License for the specific language governing permissions and
146f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * limitations under the License.
156f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi */
166f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi
176f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagipackage com.android.inputmethod.latin;
186f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi
196f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagiimport java.io.File;
2072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovicimport java.math.BigDecimal;
216f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagiimport java.util.Locale;
226f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi
2388f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovicimport javax.annotation.Nonnull;
2488f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovicimport javax.annotation.Nullable;
2588f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic
266f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagipublic class DictionaryStats {
27743a9b4499c9b53ffedc63f76137ce2eaa3301d0Keisuke Kuroyanagi    public static final int NOT_AN_ENTRY_COUNT = -1;
28743a9b4499c9b53ffedc63f76137ce2eaa3301d0Keisuke Kuroyanagi
296f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi    public final Locale mLocale;
306d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani    public final String mDictType;
316d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani    public final String mDictFileName;
326f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi    public final long mDictFileSize;
3372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    public final int mContentVersion;
34ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic    public final int mWordCount;
356f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi
3688f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic    public DictionaryStats(
3788f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic            @Nonnull final Locale locale,
3888f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic            @Nonnull final String dictType,
39784233dbc6dda7e702228fc831f3255bb4963f04Dan Zivkovic            @Nullable final String dictFileName,
4088f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic            @Nullable final File dictFile,
4188f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic            final int contentVersion) {
426f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi        mLocale = locale;
436d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani        mDictType = dictType;
4472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        mDictFileSize = (dictFile == null || !dictFile.exists()) ? 0 : dictFile.length();
456d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani        mDictFileName = dictFileName;
4672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        mContentVersion = contentVersion;
47ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mWordCount = -1;
48ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic    }
49ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic
50ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic    public DictionaryStats(
51ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            @Nonnull final Locale locale,
52ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            @Nonnull final String dictType,
53ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            final int wordCount) {
54ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mLocale = locale;
55ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mDictType = dictType;
56ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mDictFileSize = wordCount;
57ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mDictFileName = null;
58ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mContentVersion = 0;
59ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        mWordCount = wordCount;
6072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    }
6172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic
6272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    public String getFileSizeString() {
6372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        BigDecimal bytes = new BigDecimal(mDictFileSize);
6472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        BigDecimal kb = bytes.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP);
6572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        if (kb.longValue() == 0) {
6672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            return bytes.toString() + " bytes";
6772278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        }
6872278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        BigDecimal mb = kb.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP);
6972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        if (mb.longValue() == 0) {
7072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            return kb.toString() + " kb";
7172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        }
7272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        return mb.toString() + " Mb";
7372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    }
7472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic
7572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    @Override
7672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    public String toString() {
776d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani        final StringBuilder builder = new StringBuilder(mDictType);
786d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani        if (mDictType.equals(Dictionary.TYPE_MAIN)) {
7972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            builder.append(" (");
8072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            builder.append(mContentVersion);
8172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            builder.append(")");
8272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        }
8372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        builder.append(": ");
84ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        if (mWordCount > -1) {
85ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            builder.append(mWordCount);
86ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            builder.append(" words");
87ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        } else {
88ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            builder.append(mDictFileName);
89ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            builder.append(" / ");
90ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic            builder.append(getFileSizeString());
91ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic        }
9272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        return builder.toString();
9372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    }
9472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic
9572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic    public static String toString(final Iterable<DictionaryStats> stats) {
9672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        final StringBuilder builder = new StringBuilder("LM Stats");
9772278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        for (DictionaryStats stat : stats) {
9872278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            builder.append("\n    ");
9972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic            builder.append(stat.toString());
10072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        }
10172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic        return builder.toString();
1026f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi    }
1036f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi}
104