package com.hughes.android.dictionary.engine;
+import com.hughes.util.raf.RAFListSerializer;
+import com.hughes.util.raf.RAFSerializable;
+import com.ibm.icu.text.Transliterator;
+
+import java.io.DataInput;
+import java.io.DataOutput;
import java.io.IOException;
import java.io.PrintStream;
-import java.io.RandomAccessFile;
import java.util.List;
import java.util.regex.Pattern;
-import com.hughes.android.dictionary.engine.HtmlEntry.Row;
-import com.hughes.util.raf.RAFSerializable;
-import com.hughes.util.raf.RAFSerializer;
-import com.ibm.icu.text.Transliterator;
-
public class TextEntry extends AbstractEntry implements RAFSerializable<TextEntry> {
-
- final String text;
-
- public TextEntry(final Dictionary dictionary, final RandomAccessFile raf) throws IOException {
- super(dictionary, raf);
- text = raf.readUTF();
- throw new RuntimeException();
- }
- @Override
- public void write(RandomAccessFile raf) throws IOException {
- super.write(raf);
- raf.writeUTF(text);
- }
-
- static final class Serializer implements RAFSerializer<TextEntry> {
-
- final Dictionary dictionary;
-
- Serializer(Dictionary dictionary) {
- this.dictionary = dictionary;
- }
- @Override
- public TextEntry read(RandomAccessFile raf) throws IOException {
- return new TextEntry(dictionary, raf);
+ private final String text;
+
+ private TextEntry(final Dictionary dictionary, final DataInput raf, final int index)
+ throws IOException {
+ super(dictionary, raf, index);
+ text = raf.readUTF();
+ throw new RuntimeException("TextEntry constructor should be unreachable");
}
@Override
- public void write(RandomAccessFile raf, TextEntry t) throws IOException {
- t.write(raf);
+ public void write(DataOutput raf) throws IOException {
+ super.write(raf);
+ raf.writeUTF(text);
}
- };
-
-
- @Override
- public int addToDictionary(final Dictionary dictionary) {
- dictionary.textEntries.add(this);
- return dictionary.textEntries.size() - 1;
- }
-
- @Override
- public RowBase CreateRow(int entryIndex, int rowIndex, Index dictionaryIndex) {
- throw new UnsupportedOperationException("TextEntry's don't really exist.");
- }
-
- public static class Row extends RowBase {
-
- Row(final RandomAccessFile raf, final int thisRowIndex,
- final Index index) throws IOException {
- super(raf, thisRowIndex, index);
- }
-
- public TextEntry getEntry() {
- return index.dict.textEntries.get(referenceIndex);
- }
-
- @Override
- public void print(PrintStream out) {
- out.println(" " + getEntry().text);
+
+ static final class Serializer implements RAFListSerializer<TextEntry> {
+
+ final Dictionary dictionary;
+
+ Serializer(Dictionary dictionary) {
+ this.dictionary = dictionary;
+ }
+
+ @Override
+ public TextEntry read(DataInput raf, final int index) throws IOException {
+ return new TextEntry(dictionary, raf, index);
+ }
+
+ @Override
+ public void write(DataOutput raf, TextEntry t) throws IOException {
+ t.write(raf);
+ }
}
@Override
- public String getRawText(boolean compact) {
- return getEntry().text;
+ public void addToDictionary(final Dictionary dictionary) {
+ assert index == -1;
+ dictionary.textEntries.add(this);
+ index = dictionary.textEntries.size() - 1;
}
-
+
@Override
- public RowMatchType matches(final List<String> searchTokens, final Pattern orderedMatchPattern, Transliterator normalizer, boolean swapPairEntries) {
- return null;
+ public RowBase CreateRow(int rowIndex, Index dictionaryIndex) {
+ throw new UnsupportedOperationException("TextEntry's don't really exist.");
}
- }
+ public static class Row extends RowBase {
+ Row(final DataInput raf, final int thisRowIndex,
+ final Index index, int extra) throws IOException {
+ super(raf, thisRowIndex, index, extra);
+ }
+
+ TextEntry getEntry() {
+ return index.dict.textEntries.get(referenceIndex);
+ }
+
+ @Override
+ public void print(PrintStream out) {
+ out.println(" " + getEntry().text);
+ }
+
+ @Override
+ public String getRawText(boolean compact) {
+ return getEntry().text;
+ }
+
+ @Override
+ public RowMatchType matches(final List<String> searchTokens,
+ final Pattern orderedMatchPattern, Transliterator normalizer,
+ boolean swapPairEntries) {
+ return null;
+ }
+ }
}