1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.dict.kuromoji;
17
18 import java.util.Objects;
19
20 import org.codelibs.fess.dict.DictionaryItem;
21
22 public class KuromojiItem extends DictionaryItem {
23 private final String token;
24
25 private final String segmentation;
26
27 private final String reading;
28
29 private final String pos;
30
31 private String newToken;
32
33 private String newSegmentation;
34
35 private String newReading;
36
37 private String newPos;
38
39 public KuromojiItem(final long id, final String token, final String segmentation, final String reading, final String pos) {
40 this.id = id;
41 this.token = token;
42 this.segmentation = segmentation;
43 this.reading = reading;
44 this.pos = pos;
45
46 if (id == 0) {
47
48 newToken = token;
49 newSegmentation = segmentation;
50 newReading = reading;
51 newPos = pos;
52 }
53 }
54
55 public String getNewToken() {
56 return newToken;
57 }
58
59 public void setNewToken(final String newToken) {
60 this.newToken = newToken;
61 }
62
63 public String getNewSegmentation() {
64 return newSegmentation;
65 }
66
67 public void setNewSegmentation(final String newSegmentation) {
68 this.newSegmentation = newSegmentation;
69 }
70
71 public String getNewReading() {
72 return newReading;
73 }
74
75 public void setNewReading(final String newReading) {
76 this.newReading = newReading;
77 }
78
79 public String getNewPos() {
80 return newPos;
81 }
82
83 public void setNewPos(final String newPos) {
84 this.newPos = newPos;
85 }
86
87 public String getToken() {
88 return token;
89 }
90
91 public String getSegmentation() {
92 return segmentation;
93 }
94
95 public String getReading() {
96 return reading;
97 }
98
99 public String getPos() {
100 return pos;
101 }
102
103 public boolean isUpdated() {
104 return newToken != null;
105 }
106
107 public boolean isDeleted() {
108 return isUpdated() && newToken.length() == 0;
109 }
110
111 @Override
112 public int hashCode() {
113 return Objects.hash(pos, reading, segmentation, token);
114 }
115
116 @Override
117 public boolean equals(final Object obj) {
118 if (this == obj) {
119 return true;
120 }
121 if (obj == null) {
122 return false;
123 }
124 if (getClass() != obj.getClass()) {
125 return false;
126 }
127 final KuromojiItem other = (KuromojiItem) obj;
128 if (!Objects.equals(pos, other.pos)) {
129 return false;
130 }
131 if (!Objects.equals(reading, other.reading)) {
132 return false;
133 }
134 if (!Objects.equals(segmentation, other.segmentation)) {
135 return false;
136 }
137 if (!Objects.equals(token, other.token)) {
138 return false;
139 }
140 return true;
141 }
142
143 @Override
144 public String toString() {
145 return "KuromojiItem [token=" + token + ", segmentation=" + segmentation + ", reading=" + reading + ", pos=" + pos + ", newToken="
146 + newToken + ", newSegmentation=" + newSegmentation + ", newReading=" + newReading + ", newPos=" + newPos + "]";
147 }
148
149 public String toLineString() {
150 final StringBuilder buf = new StringBuilder(100);
151 if (isUpdated()) {
152 buf.append(quoteEscape(newToken));
153 buf.append(',');
154 buf.append(quoteEscape(newSegmentation));
155 buf.append(',');
156 buf.append(quoteEscape(newReading));
157 buf.append(',');
158 buf.append(quoteEscape(newPos));
159 } else {
160 buf.append(quoteEscape(token));
161 buf.append(',');
162 buf.append(quoteEscape(segmentation));
163 buf.append(',');
164 buf.append(quoteEscape(reading));
165 buf.append(',');
166 buf.append(quoteEscape(pos));
167 }
168 return buf.toString();
169 }
170
171 private static String quoteEscape(final String original) {
172 String result = original;
173
174 if (result.indexOf('\"') >= 0) {
175 result = result.replace("\"", "\"\"");
176 }
177 if (result.indexOf(',') >= 0) {
178 return "\"" + result + "\"";
179 }
180 return result;
181 }
182 }