]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/QuickDicConfig.java
4cdcbd38ae2f9ddbc7c43cbea4f9df08a5e0a5a2
[Dictionary.git] / src / com / hughes / android / dictionary / QuickDicConfig.java
1 // Copyright 2011 Google Inc. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package com.hughes.android.dictionary;
16
17 import java.io.BufferedReader;
18 import java.io.IOException;
19 import java.io.InputStreamReader;
20 import java.io.Serializable;
21 import java.util.ArrayList;
22 import java.util.LinkedHashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import android.content.Context;
27 import android.os.Environment;
28
29 import com.hughes.android.dictionary.engine.Language;
30
31 public final class QuickDicConfig implements Serializable {
32   
33   private static final long serialVersionUID = 6711617368780900979L;
34
35   final List<DictionaryInfo> dictionaryInfos = new ArrayList<DictionaryInfo>();
36   
37   public QuickDicConfig(final Context context) {
38     addDefaultDictionaries(context);
39   }
40   
41   public void addDefaultDictionaries(final Context context) {
42     for (final DictionaryInfo dictionaryInfo : getDefaultDictionaries(context).values()) {
43       addOrReplace(dictionaryInfo);
44     }
45   }
46   
47   private static Map<String,DictionaryInfo> defaultDictionaries = null;
48   public synchronized static Map<String,DictionaryInfo> getDefaultDictionaries(final Context context) {
49     if (defaultDictionaries != null) {
50       return defaultDictionaries;
51     }
52     
53     defaultDictionaries = new LinkedHashMap<String, DictionaryInfo>();
54     
55     final BufferedReader reader = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(R.raw.dictionary_info)));
56     String line;
57     try {
58       while ((line = reader.readLine()) != null) {
59         if (line.startsWith("#") || line.length() == 0) {
60           continue;
61         }
62         final DictionaryInfo dictionaryInfo = new DictionaryInfo(line);
63         String name = "";
64         for (int i = 0; i < dictionaryInfo.indexInfos.size(); ++i) {
65           final Integer langCode = Language.isoCodeToResourceId.get(dictionaryInfo.indexInfos.get(i).langIso);
66           final String lang = langCode != null ? context.getString(langCode) : dictionaryInfo.indexInfos.get(i).langIso;
67           if (i > 0) {
68             name += "-";
69           }
70           name += lang;
71         }
72         dictionaryInfo.name = name;
73         dictionaryInfo.localFile = Environment.getExternalStorageDirectory().getName() + "/quickdic/" + dictionaryInfo.uncompressedFilename; 
74         defaultDictionaries.put(dictionaryInfo.localFile, dictionaryInfo);
75       }
76     } catch (IOException e) {
77       defaultDictionaries = null;
78       return new LinkedHashMap<String, DictionaryInfo>();
79     }
80     
81     return defaultDictionaries;
82   }
83
84   private void addOrReplace(final DictionaryInfo dictionaryConfig) {
85     for (int i = 0; i < dictionaryInfos.size(); ++i) {
86       if (dictionaryInfos.get(i).uncompressedFilename.equals(dictionaryConfig.uncompressedFilename)) {
87         dictionaryInfos.set(i, dictionaryConfig);
88         return;
89       }
90     }
91     dictionaryInfos.add(dictionaryConfig);
92   }
93   
94   DictionaryInfo getDictionaryInfoByFile(final String dictFile) throws Exception {
95     for (int i = 0; i < dictionaryInfos.size(); ++i) {
96       if (dictionaryInfos.get(i).localFile.equals(dictFile)) {
97         return dictionaryInfos.get(i);
98       }
99     }
100     throw new Exception("Not found: " + dictFile);
101   }
102
103 }