]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/engine/PairEntry.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / engine / PairEntry.java
1 package com.hughes.android.dictionary.engine;
2
3 import java.io.IOException;
4 import java.io.PrintStream;
5 import java.io.RandomAccessFile;
6
7 import com.hughes.util.raf.RAFSerializable;
8 import com.hughes.util.raf.RAFSerializer;
9
10 public class PairEntry extends Entry implements RAFSerializable<PairEntry>, Comparable<PairEntry> {
11   
12   public static final class Pair {
13     
14     public final String lang1;
15     public final String lang2;
16     
17     public Pair(final String lang1, final String lang2) {
18       this.lang1 = lang1;
19       this.lang2 = lang2;
20     }
21
22     public Pair(final String lang1, final String lang2, final boolean swap) {
23       this(swap ? lang2 : lang1, swap ? lang1 : lang2);
24     }
25
26     public String toString() {
27       return lang1 + " :: " + lang2;
28     }
29
30     public String toStringTab() {
31       return lang1 + "\t" + lang2;
32     }
33
34     public String get(int i) {
35       if (i == 0) {
36         return lang1;
37       } else if (i == 1) {
38         return lang2;
39       }
40       throw new IllegalArgumentException();
41     }
42
43   }
44   
45   public final Pair[] pairs;
46   
47   public PairEntry(final Pair[] pairs) {
48     this.pairs = pairs;
49   }
50   
51   public PairEntry(final String lang1, final String lang2) {
52     this.pairs = new Pair[] { new Pair(lang1, lang2) };
53   }
54   
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());
59     }
60   }
61   @Override
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);
68     }
69   }
70   
71   static final RAFSerializer<PairEntry> SERIALIZER = new RAFSerializer<PairEntry>() {
72     @Override
73     public PairEntry read(RandomAccessFile raf) throws IOException {
74       return new PairEntry(raf);
75     }
76
77     @Override
78     public void write(RandomAccessFile raf, PairEntry t) throws IOException {
79       t.write(raf);
80     }
81   };
82   
83
84   public static class Row extends RowBase {
85     
86     Row(final RandomAccessFile raf, final int thisRowIndex,
87         final Index index) throws IOException {
88       super(raf, thisRowIndex, index);
89     }
90
91     Row(final int referenceIndex, final int thisRowIndex,
92         final Index index) {
93       super(referenceIndex, thisRowIndex, index);
94     }
95
96     public PairEntry getEntry() {
97       return index.dict.pairEntries.get(referenceIndex);
98     }
99     
100     @Override
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]);
105         out.println();
106       }
107     }
108
109     @Override
110     public String getRawText(boolean compact) {
111       final PairEntry pairEntry = getEntry();
112       return pairEntry.getRawText(compact);
113     }
114   
115   }
116
117   public String getRawText(final boolean compact) {
118     if (compact) {
119       return this.pairs[0].toStringTab();
120     }
121     final StringBuilder builder = new StringBuilder();
122     for (int i = 0; i < this.pairs.length; ++i) {
123       if (i > 0) {
124         builder.append(" | ");
125       }
126       builder.append(this.pairs[i].lang1);
127     }
128     builder.append("\t");
129     for (int i = 0; i < this.pairs.length; ++i) {
130       if (i > 0) {
131         builder.append(" | ");
132       }
133       builder.append(this.pairs[i].lang2);
134     }
135     return builder.toString();
136   }
137
138   @Override
139   public int compareTo(final PairEntry that) {
140     return this.getRawText(false).compareTo(that.getRawText(false));
141   }
142   
143   @Override
144   public String toString() {
145     return getRawText(false);
146   }
147   
148
149 }