1 package com.hughes.android.dictionary.engine;
3 import java.io.IOException;
4 import java.io.PrintStream;
5 import java.io.RandomAccessFile;
6 import java.util.ArrayList;
9 import com.hughes.util.raf.RAFSerializable;
10 import com.hughes.util.raf.RAFSerializer;
12 public class PairEntry extends AbstractEntry implements RAFSerializable<PairEntry>, Comparable<PairEntry> {
14 public final List<Pair> pairs;
17 pairs = new ArrayList<Pair>(1);
20 public PairEntry(final String lang1, final String lang2) {
21 pairs = new ArrayList<Pair>(1);
22 this.pairs.add(new Pair(lang1, lang2));
25 public PairEntry(final RandomAccessFile raf) throws IOException {
26 final int size = raf.readInt();
27 pairs = new ArrayList<PairEntry.Pair>(size);
28 for (int i = 0; i < size; ++i) {
29 pairs.add(new Pair(raf.readUTF(), raf.readUTF()));
33 public void write(RandomAccessFile raf) throws IOException {
34 // TODO: this could be a short.
35 raf.writeInt(pairs.size());
36 for (int i = 0; i < pairs.size(); ++i) {
37 raf.writeUTF(pairs.get(i).lang1);
38 raf.writeUTF(pairs.get(i).lang2);
42 static final RAFSerializer<PairEntry> SERIALIZER = new RAFSerializer<PairEntry>() {
44 public PairEntry read(RandomAccessFile raf) throws IOException {
45 return new PairEntry(raf);
49 public void write(RandomAccessFile raf, PairEntry t) throws IOException {
55 public int addToDictionary(final Dictionary dictionary) {
56 dictionary.pairEntries.add(this);
57 return dictionary.pairEntries.size() - 1;
61 // --------------------------------------------------------------------
64 public static class Row extends RowBase {
66 Row(final RandomAccessFile raf, final int thisRowIndex,
67 final Index index) throws IOException {
68 super(raf, thisRowIndex, index);
71 Row(final int referenceIndex, final int thisRowIndex,
73 super(referenceIndex, thisRowIndex, index);
76 public PairEntry getEntry() {
77 return index.dict.pairEntries.get(referenceIndex);
81 public void print(PrintStream out) {
82 final PairEntry pairEntry = getEntry();
83 for (int i = 0; i < pairEntry.pairs.size(); ++i) {
84 out.print((i == 0 ? " " : " ") + pairEntry.pairs.get(i));
90 public String getRawText(boolean compact) {
91 final PairEntry pairEntry = getEntry();
92 return pairEntry.getRawText(compact);
97 public String getRawText(final boolean compact) {
99 return this.pairs.get(0).toStringTab();
101 final StringBuilder builder = new StringBuilder();
102 for (int i = 0; i < this.pairs.size(); ++i) {
104 builder.append(" | ");
106 builder.append(this.pairs.get(i).lang1);
108 builder.append("\t");
109 for (int i = 0; i < this.pairs.size(); ++i) {
111 builder.append(" | ");
113 builder.append(this.pairs.get(i).lang2);
115 return builder.toString();
119 public int compareTo(final PairEntry that) {
120 return this.getRawText(false).compareTo(that.getRawText(false));
124 public String toString() {
125 return getRawText(false);
128 // -----------------------------------------------------------------------
130 public static final class Pair {
132 public final String lang1;
133 public final String lang2;
135 public Pair(final String lang1, final String lang2) {
138 if (!(lang1.trim().length() > 0 && lang2.trim().length() > 0)) {
139 System.err.println("poop");
141 assert lang1.trim().length() > 0 || lang2.trim().length() > 0 : "Empty pair!!!";
142 assert lang1.trim().length() > 0 && lang2.trim().length() > 0 : "Empty pair!!!";
145 public Pair(final String lang1, final String lang2, final boolean swap) {
146 this(swap ? lang2 : lang1, swap ? lang1 : lang2);
149 public String toString() {
150 return lang1 + " :: " + lang2;
153 public String toStringTab() {
154 return lang1 + "\t" + lang2;
157 public String get(int i) {
163 throw new IllegalArgumentException();