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