10cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/*
20cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Copyright (C) 2011 The Android Open Source Project
30cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
40cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); you may not
50cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * use this file except in compliance with the License. You may obtain a copy of
60cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License at
70cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
80cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * http://www.apache.org/licenses/LICENSE-2.0
90cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
100cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Unless required by applicable law or agreed to in writing, software
110cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
120cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
130cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * License for the specific language governing permissions and limitations under
140cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License.
150cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
160cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
170cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpackage com.android.inputmethod.dictionarypack;
180cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
190cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport android.content.ContentValues;
200cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
219a3598b0ee8ab5d8b90e35d65190ecea1aef7828Mohammadinamul Sheikimport javax.annotation.Nonnull;
229a3598b0ee8ab5d8b90e35d65190ecea1aef7828Mohammadinamul Sheik
230cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/**
240cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * The metadata for a single word list.
250cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
260cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Instances of this class are always immutable.
270cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
280cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpublic class WordListMetadata {
290cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
300cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mId;
310cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final int mType; // Type, as of MetadataDbHelper#TYPE_*
320cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mDescription;
330cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final long mLastUpdate;
340cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final long mFileSize;
35e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard    public final String mRawChecksum;
360cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mChecksum;
370cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mLocalFilename;
380cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mRemoteFilename;
390cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final int mVersion; // version of this word list
400cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final int mFlags; // Always 0 in this version, reserved for future use
41256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani    public int mRetryCount;
420cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
430cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // The locale is matched against the locale requested by the client. The matching algorithm
440cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // is a standard locale matching with fallback; it is implemented in
450cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // DictionaryProvider#getDictionaryFileForContentUri.
460cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mLocale;
470cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
480cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
490cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // Version number of the format.
500cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // This implementation of the DictionaryDataService knows how to handle format 1 only.
510cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // This is only for forward compatibility, to be able to upgrade the format without
520cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    // breaking old implementations.
530cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final int mFormatVersion;
540cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
550cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public WordListMetadata(final String id, final int type,
560cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            final String description, final long lastUpdate, final long fileSize,
57256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani            final String rawChecksum, final String checksum, final int retryCount,
58256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani            final String localFilename, final String remoteFilename,
59256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani            final int version, final int formatVersion,
60e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard            final int flags, final String locale) {
610cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mId = id;
620cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mType = type;
630cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mDescription = description;
640cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mLastUpdate = lastUpdate; // In milliseconds
650cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mFileSize = fileSize;
66e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard        mRawChecksum = rawChecksum;
670cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mChecksum = checksum;
68256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani        mRetryCount = retryCount;
690cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mLocalFilename = localFilename;
700cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mRemoteFilename = remoteFilename;
710cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mVersion = version;
720cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mFormatVersion = formatVersion;
730cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mFlags = flags;
740cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mLocale = locale;
750cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
760cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
770cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    /**
780cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * Create a WordListMetadata from the contents of a ContentValues.
790cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     *
800cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * If this lacks any required field, IllegalArgumentException is thrown.
810cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     */
829a3598b0ee8ab5d8b90e35d65190ecea1aef7828Mohammadinamul Sheik    public static WordListMetadata createFromContentValues(@Nonnull final ContentValues values) {
830cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String id = values.getAsString(MetadataDbHelper.WORDLISTID_COLUMN);
840cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Integer type = values.getAsInteger(MetadataDbHelper.TYPE_COLUMN);
850cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String description = values.getAsString(MetadataDbHelper.DESCRIPTION_COLUMN);
860cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Long lastUpdate = values.getAsLong(MetadataDbHelper.DATE_COLUMN);
870cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Long fileSize = values.getAsLong(MetadataDbHelper.FILESIZE_COLUMN);
88e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard        final String rawChecksum = values.getAsString(MetadataDbHelper.RAW_CHECKSUM_COLUMN);
890cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String checksum = values.getAsString(MetadataDbHelper.CHECKSUM_COLUMN);
90256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani        final int retryCount = values.getAsInteger(MetadataDbHelper.RETRY_COUNT_COLUMN);
910cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String localFilename = values.getAsString(MetadataDbHelper.LOCAL_FILENAME_COLUMN);
920cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String remoteFilename = values.getAsString(MetadataDbHelper.REMOTE_FILENAME_COLUMN);
930cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Integer version = values.getAsInteger(MetadataDbHelper.VERSION_COLUMN);
940cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Integer formatVersion = values.getAsInteger(MetadataDbHelper.FORMATVERSION_COLUMN);
950cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final Integer flags = values.getAsInteger(MetadataDbHelper.FLAGS_COLUMN);
960cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final String locale = values.getAsString(MetadataDbHelper.LOCALE_COLUMN);
970cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (null == id
980cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == type
990cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == description
1000cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == lastUpdate
1010cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == fileSize
1020cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == checksum
1030cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == localFilename
1040cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == remoteFilename
1050cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == version
1060cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == formatVersion
1070cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == flags
1080cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard                || null == locale) {
1090cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            throw new IllegalArgumentException();
1100cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
111e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard        return new WordListMetadata(id, type, description, lastUpdate, fileSize, rawChecksum,
112256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani                checksum, retryCount, localFilename, remoteFilename, version, formatVersion,
113256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani                flags, locale);
1140cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
1150cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
1160cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    @Override
1170cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public String toString() {
1180cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final StringBuilder sb = new StringBuilder(WordListMetadata.class.getSimpleName());
1190cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append(" : ").append(mId);
1200cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nType : ").append(mType);
1210cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nDescription : ").append(mDescription);
1220cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nLastUpdate : ").append(mLastUpdate);
1230cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nFileSize : ").append(mFileSize);
124e077c014616f7b4e28dbbfab622ba36c8e922268Jean Chalard        sb.append("\nRawChecksum : ").append(mRawChecksum);
1250cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nChecksum : ").append(mChecksum);
126256b1b2a1e054773987a0672b4ac3c867a4dbd27Jatin Matani        sb.append("\nRetryCount: ").append(mRetryCount);
1270cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nLocalFilename : ").append(mLocalFilename);
1280cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nRemoteFilename : ").append(mRemoteFilename);
1290cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nVersion : ").append(mVersion);
1300cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nFormatVersion : ").append(mFormatVersion);
1310cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nFlags : ").append(mFlags);
1320cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        sb.append("\nLocale : ").append(mLocale);
1330cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        return sb.toString();
1340cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
1350cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard}
136