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 Entry 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 static class Row extends RowBase {
57 Row(final RandomAccessFile raf, final int thisRowIndex,
58 final Index index) throws IOException {
59 super(raf, thisRowIndex, index);
62 Row(final int referenceIndex, final int thisRowIndex,
64 super(referenceIndex, thisRowIndex, index);
67 public PairEntry getEntry() {
68 return index.dict.pairEntries.get(referenceIndex);
72 public void print(PrintStream out) {
73 final PairEntry pairEntry = getEntry();
74 for (int i = 0; i < pairEntry.pairs.size(); ++i) {
75 out.print((i == 0 ? " " : " ") + pairEntry.pairs.get(i));
81 public String getRawText(boolean compact) {
82 final PairEntry pairEntry = getEntry();
83 return pairEntry.getRawText(compact);
88 public String getRawText(final boolean compact) {
90 return this.pairs.get(0).toStringTab();
92 final StringBuilder builder = new StringBuilder();
93 for (int i = 0; i < this.pairs.size(); ++i) {
95 builder.append(" | ");
97 builder.append(this.pairs.get(i).lang1);
100 for (int i = 0; i < this.pairs.size(); ++i) {
102 builder.append(" | ");
104 builder.append(this.pairs.get(i).lang2);
106 return builder.toString();
110 public int compareTo(final PairEntry that) {
111 return this.getRawText(false).compareTo(that.getRawText(false));
115 public String toString() {
116 return getRawText(false);
119 // -----------------------------------------------------------------------
121 public static final class Pair {
123 public final String lang1;
124 public final String lang2;
126 public Pair(final String lang1, final String lang2) {
129 //assert lang1.trim().length() > 0 || lang2.trim().length() > 0 : "Empty pair!!!";
132 public Pair(final String lang1, final String lang2, final boolean swap) {
133 this(swap ? lang2 : lang1, swap ? lang1 : lang2);
136 public String toString() {
137 return lang1 + " :: " + lang2;
140 public String toStringTab() {
141 return lang1 + "\t" + lang2;
144 public String get(int i) {
150 throw new IllegalArgumentException();