View Javadoc
1   /*
2    * Copyright 2012-2021 CodeLibs Project and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
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              // create
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 }