]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/Entry.java
bd000f408b5c5cbef114c5e57831471ca14cc9fd
[Dictionary.git] / src / com / hughes / android / dictionary / Entry.java
1 package com.hughes.android.dictionary;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.RandomAccessFile;\r
5 import java.util.regex.Pattern;\r
6 \r
7 import com.hughes.util.raf.RAFFactory;\r
8 import com.hughes.util.raf.RAFSerializable;\r
9 \r
10 public final class Entry implements RAFSerializable<Entry> {\r
11 \r
12   static final byte LANG1 = 0;\r
13   static final byte LANG2 = 1;\r
14 \r
15   static final Pattern lineSplitPattern = Pattern.compile("\\s+::\\s+");\r
16 \r
17   final String lang1;\r
18   final String lang2;\r
19   \r
20   @Override\r
21   public boolean equals(Object o) {\r
22     if (!(o instanceof Entry)) {\r
23       return false;\r
24     }\r
25     final Entry that = (Entry) o;\r
26     return that.lang1.equals(lang1) && that.lang2.equals(lang2);\r
27   }\r
28 \r
29   @Override\r
30   public int hashCode() {\r
31     return lang1.hashCode() + lang2.hashCode();\r
32   }\r
33 \r
34   @Override\r
35   public String toString() {\r
36     return getRawText();\r
37   }\r
38 \r
39   public Entry(String lang1, String lang2) {\r
40     this.lang1 = lang1;\r
41     this.lang2 = lang2;\r
42   }\r
43 \r
44   public static final RAFFactory<Entry> RAF_FACTORY = new RAFFactory<Entry>() {\r
45     public Entry create(RandomAccessFile raf) throws IOException {\r
46       final String lang1 = raf.readUTF();\r
47       final String lang2 = raf.readUTF();\r
48       return new Entry(lang1, lang2);\r
49     }};\r
50   public void write(RandomAccessFile raf) throws IOException {\r
51     raf.writeUTF(lang1);\r
52     raf.writeUTF(lang2);\r
53   }\r
54 \r
55   String getAllText(final byte lang) {\r
56     if (lang == LANG1) {\r
57       return lang1;\r
58     }\r
59     assert lang == LANG2;\r
60     return lang2;\r
61   }\r
62   \r
63   String getIndexableText(final byte lang) {\r
64     String text = getAllText(lang);\r
65     text = text.replaceAll("[\"\\.!?,]", "");\r
66     text = text.replaceAll("\\{[^}]+\\}", "");\r
67     return text;\r
68   }\r
69 \r
70   public String getFormattedEntry(final byte lang) {\r
71     return getAllText(lang) + "\n" + getAllText(OtherLang(lang));\r
72   }\r
73 \r
74   private byte OtherLang(final byte lang) {\r
75     assert lang == LANG1 || lang == LANG2;\r
76     return lang == LANG1 ? LANG2 : LANG1;\r
77   }\r
78 \r
79   public String getRawText() {\r
80     return getAllText(LANG1) + " :: " + getAllText(LANG2);\r
81   }\r
82   \r
83   \r
84 \r
85   static Entry parseFromLine(final String line) {\r
86     final String[] parts = lineSplitPattern.split(line);\r
87     if (parts.length != 2) {\r
88       System.err.println("Entry:" + "Invalid line: " + line);\r
89       return null;\r
90     }\r
91     return new Entry(parts[0], parts[1]);\r
92   }\r
93 \r
94 }\r