WordListMetadata.java revision e077c014616f7b4e28dbbfab622ba36c8e922268
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.inputmethod.dictionarypack;
18
19import android.content.ContentValues;
20
21/**
22 * The metadata for a single word list.
23 *
24 * Instances of this class are always immutable.
25 */
26public class WordListMetadata {
27
28    public final String mId;
29    public final int mType; // Type, as of MetadataDbHelper#TYPE_*
30    public final String mDescription;
31    public final long mLastUpdate;
32    public final long mFileSize;
33    public final String mRawChecksum;
34    public final String mChecksum;
35    public final String mLocalFilename;
36    public final String mRemoteFilename;
37    public final int mVersion; // version of this word list
38    public final int mFlags; // Always 0 in this version, reserved for future use
39
40    // The locale is matched against the locale requested by the client. The matching algorithm
41    // is a standard locale matching with fallback; it is implemented in
42    // DictionaryProvider#getDictionaryFileForContentUri.
43    public final String mLocale;
44
45
46    // Version number of the format.
47    // This implementation of the DictionaryDataService knows how to handle format 1 only.
48    // This is only for forward compatibility, to be able to upgrade the format without
49    // breaking old implementations.
50    public final int mFormatVersion;
51
52    public WordListMetadata(final String id, final int type,
53            final String description, final long lastUpdate, final long fileSize,
54            final String rawChecksum, final String checksum, final String localFilename,
55            final String remoteFilename, final int version, final int formatVersion,
56            final int flags, final String locale) {
57        mId = id;
58        mType = type;
59        mDescription = description;
60        mLastUpdate = lastUpdate; // In milliseconds
61        mFileSize = fileSize;
62        mRawChecksum = rawChecksum;
63        mChecksum = checksum;
64        mLocalFilename = localFilename;
65        mRemoteFilename = remoteFilename;
66        mVersion = version;
67        mFormatVersion = formatVersion;
68        mFlags = flags;
69        mLocale = locale;
70    }
71
72    /**
73     * Create a WordListMetadata from the contents of a ContentValues.
74     *
75     * If this lacks any required field, IllegalArgumentException is thrown.
76     */
77    public static WordListMetadata createFromContentValues(final ContentValues values) {
78        final String id = values.getAsString(MetadataDbHelper.WORDLISTID_COLUMN);
79        final Integer type = values.getAsInteger(MetadataDbHelper.TYPE_COLUMN);
80        final String description = values.getAsString(MetadataDbHelper.DESCRIPTION_COLUMN);
81        final Long lastUpdate = values.getAsLong(MetadataDbHelper.DATE_COLUMN);
82        final Long fileSize = values.getAsLong(MetadataDbHelper.FILESIZE_COLUMN);
83        final String rawChecksum = values.getAsString(MetadataDbHelper.RAW_CHECKSUM_COLUMN);
84        final String checksum = values.getAsString(MetadataDbHelper.CHECKSUM_COLUMN);
85        final String localFilename = values.getAsString(MetadataDbHelper.LOCAL_FILENAME_COLUMN);
86        final String remoteFilename = values.getAsString(MetadataDbHelper.REMOTE_FILENAME_COLUMN);
87        final Integer version = values.getAsInteger(MetadataDbHelper.VERSION_COLUMN);
88        final Integer formatVersion = values.getAsInteger(MetadataDbHelper.FORMATVERSION_COLUMN);
89        final Integer flags = values.getAsInteger(MetadataDbHelper.FLAGS_COLUMN);
90        final String locale = values.getAsString(MetadataDbHelper.LOCALE_COLUMN);
91        if (null == id
92                || null == type
93                || null == description
94                || null == lastUpdate
95                || null == fileSize
96                || null == checksum
97                || null == localFilename
98                || null == remoteFilename
99                || null == version
100                || null == formatVersion
101                || null == flags
102                || null == locale) {
103            throw new IllegalArgumentException();
104        }
105        return new WordListMetadata(id, type, description, lastUpdate, fileSize, rawChecksum,
106                checksum, localFilename, remoteFilename, version, formatVersion, flags, locale);
107    }
108
109    @Override
110    public String toString() {
111        final StringBuilder sb = new StringBuilder(WordListMetadata.class.getSimpleName());
112        sb.append(" : ").append(mId);
113        sb.append("\nType : ").append(mType);
114        sb.append("\nDescription : ").append(mDescription);
115        sb.append("\nLastUpdate : ").append(mLastUpdate);
116        sb.append("\nFileSize : ").append(mFileSize);
117        sb.append("\nRawChecksum : ").append(mRawChecksum);
118        sb.append("\nChecksum : ").append(mChecksum);
119        sb.append("\nLocalFilename : ").append(mLocalFilename);
120        sb.append("\nRemoteFilename : ").append(mRemoteFilename);
121        sb.append("\nVersion : ").append(mVersion);
122        sb.append("\nFormatVersion : ").append(mFormatVersion);
123        sb.append("\nFlags : ").append(mFlags);
124        sb.append("\nLocale : ").append(mLocale);
125        return sb.toString();
126    }
127}
128