1 package com.hughes.android.dictionary;
\r
3 import java.io.IOException;
\r
4 import java.io.RandomAccessFile;
\r
5 import java.util.regex.Pattern;
\r
7 import com.hughes.util.raf.RAFFactory;
\r
8 import com.hughes.util.raf.RAFSerializable;
\r
10 public final class Entry implements RAFSerializable<Entry> {
\r
12 static final byte LANG1 = 0;
\r
13 static final byte LANG2 = 1;
\r
15 static final Pattern lineSplitPattern = Pattern.compile("\\s+::\\s+");
\r
21 public boolean equals(Object o) {
\r
22 if (!(o instanceof Entry)) {
\r
25 final Entry that = (Entry) o;
\r
26 return that.lang1.equals(lang1) && that.lang2.equals(lang2);
\r
30 public int hashCode() {
\r
31 return lang1.hashCode() + lang2.hashCode();
\r
35 public String toString() {
\r
36 return getRawText();
\r
39 public Entry(String lang1, String lang2) {
\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
50 public void write(RandomAccessFile raf) throws IOException {
\r
51 raf.writeUTF(lang1);
\r
52 raf.writeUTF(lang2);
\r
55 String getAllText(final byte lang) {
\r
56 if (lang == LANG1) {
\r
59 assert lang == LANG2;
\r
63 String getIndexableText(final byte lang) {
\r
64 String text = getAllText(lang);
\r
65 text = text.replaceAll("[\"\\.!?,]", "");
\r
66 text = text.replaceAll("\\{[^}]+\\}", "");
\r
70 public String getFormattedEntry(final byte lang) {
\r
71 return getAllText(lang) + "\n" + getAllText(OtherLang(lang));
\r
74 private byte OtherLang(final byte lang) {
\r
75 assert lang == LANG1 || lang == LANG2;
\r
76 return lang == LANG1 ? LANG2 : LANG1;
\r
79 public String getRawText() {
\r
80 return getAllText(LANG1) + " :: " + getAllText(LANG2);
\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
91 return new Entry(parts[0], parts[1]);
\r