]> 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> {
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 String toString() {
23       return lang1 + " :: " + lang2;
24     }
25
26     public String toStringTab() {
27       return lang1 + "\t" + lang2;
28     }
29
30   }
31   
32   public final Pair[] pairs;
33   
34   public PairEntry(final Pair[] pairs) {
35     this.pairs = pairs;
36   }
37   
38   public PairEntry(final RandomAccessFile raf) throws IOException {
39     pairs = new Pair[raf.readInt()];
40     for (int i = 0; i < pairs.length; ++i) {
41       pairs[i] = new Pair(raf.readUTF(), raf.readUTF());
42     }
43   }
44   @Override
45   public void write(RandomAccessFile raf) throws IOException {
46     // TODO: this could be a short.
47     raf.writeInt(pairs.length);
48     for (int i = 0; i < pairs.length; ++i) {
49       raf.writeUTF(pairs[i].lang1);
50       raf.writeUTF(pairs[i].lang2);
51     }
52   }
53   
54   static final RAFSerializer<PairEntry> SERIALIZER = new RAFSerializer<PairEntry>() {
55     @Override
56     public PairEntry read(RandomAccessFile raf) throws IOException {
57       return new PairEntry(raf);
58     }
59
60     @Override
61     public void write(RandomAccessFile raf, PairEntry t) throws IOException {
62       t.write(raf);
63     }
64   };
65   
66
67   public static class Row extends RowBase {
68     
69     Row(final RandomAccessFile raf, final int thisRowIndex,
70         final Index index) throws IOException {
71       super(raf, thisRowIndex, index);
72     }
73
74     Row(final int referenceIndex, final int thisRowIndex,
75         final Index index) {
76       super(referenceIndex, thisRowIndex, index);
77     }
78
79     public PairEntry getEntry() {
80       return index.dict.pairEntries.get(referenceIndex);
81     }
82     
83     @Override
84     public void print(PrintStream out) {
85       final PairEntry pairEntry = getEntry();
86       for (int i = 0; i < pairEntry.pairs.length; ++i) {
87         out.print((i == 0 ? "  " : "    ") + pairEntry.pairs[i]);
88         out.println();
89       }
90     }
91
92     @Override
93     public String getRawText(boolean compact) {
94       final PairEntry pairEntry = getEntry();
95       if (compact) {
96         return pairEntry.pairs[0].toStringTab();
97       }
98       final StringBuilder builder = new StringBuilder();
99       for (int i = 0; i < pairEntry.pairs.length; ++i) {
100         if (i > 0) {
101           builder.append(" | ");
102         }
103         builder.append(pairEntry.pairs[i].lang1);
104       }
105       builder.append("\t");
106       for (int i = 0; i < pairEntry.pairs.length; ++i) {
107         if (i > 0) {
108           builder.append(" | ");
109         }
110         builder.append(pairEntry.pairs[i].lang2);
111       }
112       return builder.toString();
113     }
114   }
115
116
117
118 }