1 package com.hughes.android.dictionary.engine;
3 import java.io.IOException;
4 import java.io.PrintStream;
5 import java.io.RandomAccessFile;
7 import com.hughes.util.raf.RAFSerializable;
8 import com.hughes.util.raf.RAFSerializer;
10 public class PairEntry extends Entry implements RAFSerializable<PairEntry>, Comparable<PairEntry> {
12 public static final class Pair {
14 public final String lang1;
15 public final String lang2;
17 public Pair(final String lang1, final String lang2) {
22 public Pair(final String lang1, final String lang2, final boolean swap) {
23 this(swap ? lang2 : lang1, swap ? lang1 : lang2);
26 public String toString() {
27 return lang1 + " :: " + lang2;
30 public String toStringTab() {
31 return lang1 + "\t" + lang2;
34 public String get(int i) {
40 throw new IllegalArgumentException();
45 public final Pair[] pairs;
47 public PairEntry(final Pair[] pairs) {
51 public PairEntry(final String lang1, final String lang2) {
52 this.pairs = new Pair[] { new Pair(lang1, lang2) };
55 public PairEntry(final RandomAccessFile raf) throws IOException {
56 pairs = new Pair[raf.readInt()];
57 for (int i = 0; i < pairs.length; ++i) {
58 pairs[i] = new Pair(raf.readUTF(), raf.readUTF());
62 public void write(RandomAccessFile raf) throws IOException {
63 // TODO: this could be a short.
64 raf.writeInt(pairs.length);
65 for (int i = 0; i < pairs.length; ++i) {
66 raf.writeUTF(pairs[i].lang1);
67 raf.writeUTF(pairs[i].lang2);
71 static final RAFSerializer<PairEntry> SERIALIZER = new RAFSerializer<PairEntry>() {
73 public PairEntry read(RandomAccessFile raf) throws IOException {
74 return new PairEntry(raf);
78 public void write(RandomAccessFile raf, PairEntry t) throws IOException {
84 public static class Row extends RowBase {
86 Row(final RandomAccessFile raf, final int thisRowIndex,
87 final Index index) throws IOException {
88 super(raf, thisRowIndex, index);
91 Row(final int referenceIndex, final int thisRowIndex,
93 super(referenceIndex, thisRowIndex, index);
96 public PairEntry getEntry() {
97 return index.dict.pairEntries.get(referenceIndex);
101 public void print(PrintStream out) {
102 final PairEntry pairEntry = getEntry();
103 for (int i = 0; i < pairEntry.pairs.length; ++i) {
104 out.print((i == 0 ? " " : " ") + pairEntry.pairs[i]);
110 public String getRawText(boolean compact) {
111 final PairEntry pairEntry = getEntry();
112 return pairEntry.getRawText(compact);
117 public String getRawText(final boolean compact) {
119 return this.pairs[0].toStringTab();
121 final StringBuilder builder = new StringBuilder();
122 for (int i = 0; i < this.pairs.length; ++i) {
124 builder.append(" | ");
126 builder.append(this.pairs[i].lang1);
128 builder.append("\t");
129 for (int i = 0; i < this.pairs.length; ++i) {
131 builder.append(" | ");
133 builder.append(this.pairs[i].lang2);
135 return builder.toString();
139 public int compareTo(final PairEntry that) {
140 return this.getRawText(false).compareTo(that.getRawText(false));
144 public String toString() {
145 return getRawText(false);