annotate src/main/java/de/mpiwg/itgroup/ismi/search/beans/Witness4TitleQuery.java @ 1:2e911857a759

(none)
author jurzua
date Wed, 29 Oct 2014 14:00:28 +0000
parents
children 8ae989269f51
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
jurzua
parents:
diff changeset
1 package de.mpiwg.itgroup.ismi.search.beans;
jurzua
parents:
diff changeset
2
jurzua
parents:
diff changeset
3 import java.io.Serializable;
jurzua
parents:
diff changeset
4 import java.util.ArrayList;
jurzua
parents:
diff changeset
5 import java.util.Collections;
jurzua
parents:
diff changeset
6 import java.util.List;
jurzua
parents:
diff changeset
7
jurzua
parents:
diff changeset
8 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
9 import org.mpi.openmind.repository.bo.Entity;
jurzua
parents:
diff changeset
10 import org.mpi.openmind.repository.utils.NormalizerUtils;
jurzua
parents:
diff changeset
11 import org.mpi.openmind.search.utils.ResultEntry;
jurzua
parents:
diff changeset
12 import org.mpi.openmind.search.utils.SAttributeMultipleName;
jurzua
parents:
diff changeset
13 import org.mpi.openmind.search.utils.SAttributeUniqueName;
jurzua
parents:
diff changeset
14 import org.mpi.openmind.search.utils.SEntity;
jurzua
parents:
diff changeset
15 import org.mpi.openmind.search.utils.SRelLongKey;
jurzua
parents:
diff changeset
16 import org.mpi.openmind.search.utils.SRelation;
jurzua
parents:
diff changeset
17 import org.mpi.openmind.search.utils.SRelationMultipleName;
jurzua
parents:
diff changeset
18 import org.mpi.openmind.search.utils.SRelationUniqueName;
jurzua
parents:
diff changeset
19
jurzua
parents:
diff changeset
20 import de.mpiwg.itgroup.ismi.entry.beans.ApplicationBean;
jurzua
parents:
diff changeset
21
jurzua
parents:
diff changeset
22 /**
jurzua
parents:
diff changeset
23 * 2) List of all witnesses for a title
jurzua
parents:
diff changeset
24 * (the list should distinguish which witnesses go with a particular title version)
jurzua
parents:
diff changeset
25 * @author jurzua
jurzua
parents:
diff changeset
26 *
jurzua
parents:
diff changeset
27 */
jurzua
parents:
diff changeset
28 public class Witness4TitleQuery extends AbstractQuery implements Serializable{
jurzua
parents:
diff changeset
29
jurzua
parents:
diff changeset
30 private static final long serialVersionUID = -1460003809678104919L;
jurzua
parents:
diff changeset
31
jurzua
parents:
diff changeset
32 private String titleName;
jurzua
parents:
diff changeset
33 private List<SRelLongKey> titleWitnessKeyList;
jurzua
parents:
diff changeset
34
jurzua
parents:
diff changeset
35 public Witness4TitleQuery(ApplicationBean appBean){
jurzua
parents:
diff changeset
36 super(appBean);
jurzua
parents:
diff changeset
37 this.exportUrlRoot = ApplicationBean.urlISMIExportServiceTitles;
jurzua
parents:
diff changeset
38 }
jurzua
parents:
diff changeset
39
jurzua
parents:
diff changeset
40 @Override
jurzua
parents:
diff changeset
41 public void reset(){
jurzua
parents:
diff changeset
42 super.reset();
jurzua
parents:
diff changeset
43 this.titleName = null;
jurzua
parents:
diff changeset
44 this.rs = null;
jurzua
parents:
diff changeset
45 this.titleWitnessKeyList = null;
jurzua
parents:
diff changeset
46 }
jurzua
parents:
diff changeset
47
jurzua
parents:
diff changeset
48 @Override
jurzua
parents:
diff changeset
49 protected void search(){
jurzua
parents:
diff changeset
50
jurzua
parents:
diff changeset
51 List<ResultEntry> rs0 = this.execute01(titleName);
jurzua
parents:
diff changeset
52 List<ResultEntry> rs1 = null;
jurzua
parents:
diff changeset
53 if(StringUtils.isNotEmpty(titleName)){
jurzua
parents:
diff changeset
54 rs1 = this.execute02(titleName);
jurzua
parents:
diff changeset
55 }
jurzua
parents:
diff changeset
56 rs = loadResultSet(rs0, rs1);
jurzua
parents:
diff changeset
57
jurzua
parents:
diff changeset
58 List<Long> idLongList = new ArrayList<Long>();
jurzua
parents:
diff changeset
59 for(Object e : rs){
jurzua
parents:
diff changeset
60 ResultEntry02 entry = (ResultEntry02)e;
jurzua
parents:
diff changeset
61 if(!idLongList.contains(entry.titleId))
jurzua
parents:
diff changeset
62 idLongList.add(entry.titleId);
jurzua
parents:
diff changeset
63 }
jurzua
parents:
diff changeset
64 this.idList = ApplicationBean.generateIdList(idLongList);
jurzua
parents:
diff changeset
65
jurzua
parents:
diff changeset
66 this.exportDirkUrl = ApplicationBean.generateExportURL(exportUrlRoot, idList, "xml");
jurzua
parents:
diff changeset
67 }
jurzua
parents:
diff changeset
68
jurzua
parents:
diff changeset
69 private List<ResultEntry02> loadResultSet(List<ResultEntry> rs0, List<ResultEntry> rs1){
jurzua
parents:
diff changeset
70 List<ResultEntry02> currentRs = new ArrayList<ResultEntry02>();
jurzua
parents:
diff changeset
71 titleWitnessKeyList = new ArrayList<SRelLongKey>();
jurzua
parents:
diff changeset
72
jurzua
parents:
diff changeset
73 int count = 0;
jurzua
parents:
diff changeset
74
jurzua
parents:
diff changeset
75 for(ResultEntry re : rs0){
jurzua
parents:
diff changeset
76 Entity title = getOm().getEntityById(re.getEntMap().get(0));
jurzua
parents:
diff changeset
77 Entity witness = getOm().getEntityById(re.getEntMap().get(1));
jurzua
parents:
diff changeset
78
jurzua
parents:
diff changeset
79 List<Entity> subjectList = getOm().getTargetsForSourceRelation(title.getId(), "has_subject", "SUBJECT", 1);
jurzua
parents:
diff changeset
80 String subject = (subjectList.size() == 0) ? null : subjectList.get(0).getOwnValue();
jurzua
parents:
diff changeset
81
jurzua
parents:
diff changeset
82 currentRs.add(new ResultEntry02(title, witness, subject));
jurzua
parents:
diff changeset
83 putTitleWitnessKeyList(title.getId(), witness.getId());
jurzua
parents:
diff changeset
84 count++;
jurzua
parents:
diff changeset
85 if(count >= MAX_RS){
jurzua
parents:
diff changeset
86 break;
jurzua
parents:
diff changeset
87 }
jurzua
parents:
diff changeset
88 }
jurzua
parents:
diff changeset
89
jurzua
parents:
diff changeset
90 if(rs1 != null && count < MAX_RS){
jurzua
parents:
diff changeset
91 for(ResultEntry re : rs1){
jurzua
parents:
diff changeset
92 Entity title = getOm().getEntityById(re.getEntMap().get(0));
jurzua
parents:
diff changeset
93 Entity witness = getOm().getEntityById(re.getEntMap().get(1));
jurzua
parents:
diff changeset
94 if(!containsTitleWitnessKeyList(title.getId(), witness.getId())){
jurzua
parents:
diff changeset
95
jurzua
parents:
diff changeset
96 Entity alias = getOm().getEntityById(re.getEntMap().get(1));
jurzua
parents:
diff changeset
97 String alias2Person = re.getRel(1, 0);
jurzua
parents:
diff changeset
98 List<Entity> subjectList = getOm().getTargetsForSourceRelation(title.getId(), "has_subject", "SUBJECT", 1);
jurzua
parents:
diff changeset
99 String subject = (subjectList.size() == 0) ? null : subjectList.get(0).getOwnValue();
jurzua
parents:
diff changeset
100
jurzua
parents:
diff changeset
101 currentRs.add(new ResultEntry02(title, witness, subject, alias.getOwnValue(), alias2Person));
jurzua
parents:
diff changeset
102 putTitleWitnessKeyList(title.getId(), witness.getId());
jurzua
parents:
diff changeset
103 count++;
jurzua
parents:
diff changeset
104 if(count >= MAX_RS){
jurzua
parents:
diff changeset
105 break;
jurzua
parents:
diff changeset
106 }
jurzua
parents:
diff changeset
107 }
jurzua
parents:
diff changeset
108 }
jurzua
parents:
diff changeset
109 }
jurzua
parents:
diff changeset
110
jurzua
parents:
diff changeset
111 Collections.sort(currentRs);
jurzua
parents:
diff changeset
112
jurzua
parents:
diff changeset
113 return currentRs;
jurzua
parents:
diff changeset
114 }
jurzua
parents:
diff changeset
115
jurzua
parents:
diff changeset
116 private void putTitleWitnessKeyList(Long titleId, Long witness){
jurzua
parents:
diff changeset
117 titleWitnessKeyList.add(new SRelLongKey(titleId, witness));
jurzua
parents:
diff changeset
118 }
jurzua
parents:
diff changeset
119
jurzua
parents:
diff changeset
120 private boolean containsTitleWitnessKeyList(Long titleId, Long witnessId){
jurzua
parents:
diff changeset
121 return titleWitnessKeyList.contains(new SRelLongKey(titleId, witnessId));
jurzua
parents:
diff changeset
122 }
jurzua
parents:
diff changeset
123
jurzua
parents:
diff changeset
124 private List<ResultEntry> execute01(String titleName){
jurzua
parents:
diff changeset
125
jurzua
parents:
diff changeset
126 List<SEntity> entFilters = new ArrayList<SEntity>();
jurzua
parents:
diff changeset
127 List<SRelation> relFilters = new ArrayList<SRelation>();
jurzua
parents:
diff changeset
128
jurzua
parents:
diff changeset
129
jurzua
parents:
diff changeset
130 SEntity text = new SEntity(0, "TEXT");
jurzua
parents:
diff changeset
131 if(StringUtils.isNotEmpty(titleName)){
jurzua
parents:
diff changeset
132 text.addAtt(new SAttributeMultipleName(titleName, "full_title_translit", "full_title"));
jurzua
parents:
diff changeset
133 }
jurzua
parents:
diff changeset
134 entFilters.add(text);
jurzua
parents:
diff changeset
135
jurzua
parents:
diff changeset
136 SEntity witness = new SEntity(1, "WITNESS");
jurzua
parents:
diff changeset
137 entFilters.add(witness);
jurzua
parents:
diff changeset
138
jurzua
parents:
diff changeset
139 SRelationUniqueName is_exemplar_of = new SRelationUniqueName(witness, text, "is_exemplar_of");
jurzua
parents:
diff changeset
140 relFilters.add(is_exemplar_of);
jurzua
parents:
diff changeset
141
jurzua
parents:
diff changeset
142 return this.appBean.getSS().search(entFilters, relFilters);
jurzua
parents:
diff changeset
143 }
jurzua
parents:
diff changeset
144
jurzua
parents:
diff changeset
145 private List<ResultEntry> execute02(String titleName){
jurzua
parents:
diff changeset
146
jurzua
parents:
diff changeset
147 List<SEntity> entFilters = new ArrayList<SEntity>();
jurzua
parents:
diff changeset
148 List<SRelation> relFilters = new ArrayList<SRelation>();
jurzua
parents:
diff changeset
149
jurzua
parents:
diff changeset
150
jurzua
parents:
diff changeset
151 SEntity text = new SEntity(0, "TEXT");
jurzua
parents:
diff changeset
152 entFilters.add(text);
jurzua
parents:
diff changeset
153
jurzua
parents:
diff changeset
154 SEntity alias = new SEntity(1, "ALIAS");
jurzua
parents:
diff changeset
155 alias.addAtt(new SAttributeUniqueName("alias", titleName));
jurzua
parents:
diff changeset
156 entFilters.add(alias);
jurzua
parents:
diff changeset
157
jurzua
parents:
diff changeset
158 SEntity witness = new SEntity(2, "WITNESS");
jurzua
parents:
diff changeset
159 entFilters.add(witness);
jurzua
parents:
diff changeset
160
jurzua
parents:
diff changeset
161 SRelationMultipleName is_alias = new SRelationMultipleName(alias, text,
jurzua
parents:
diff changeset
162 "is_prime_alias_title_of", "is_alias_title_of",
jurzua
parents:
diff changeset
163 "is_alias_explicit_of", "is_alias_incipit_of");
jurzua
parents:
diff changeset
164 SRelationUniqueName is_exemplar_of = new SRelationUniqueName(witness, text, "is_exemplar_of");
jurzua
parents:
diff changeset
165 relFilters.add(is_exemplar_of);
jurzua
parents:
diff changeset
166 relFilters.add(is_alias);
jurzua
parents:
diff changeset
167
jurzua
parents:
diff changeset
168 return this.appBean.getSS().search(entFilters, relFilters);
jurzua
parents:
diff changeset
169 }
jurzua
parents:
diff changeset
170
jurzua
parents:
diff changeset
171 public class ResultEntry02 implements Comparable<ResultEntry02>, Serializable{
jurzua
parents:
diff changeset
172 private static final long serialVersionUID = -2672042198162179468L;
jurzua
parents:
diff changeset
173
jurzua
parents:
diff changeset
174 public Long titleId;
jurzua
parents:
diff changeset
175 public String titleOv;
jurzua
parents:
diff changeset
176 public String titleNOv;
jurzua
parents:
diff changeset
177 public String alias;
jurzua
parents:
diff changeset
178 public String alias2Title;
jurzua
parents:
diff changeset
179 public Long witnessId;
jurzua
parents:
diff changeset
180 public String witnessOv;
jurzua
parents:
diff changeset
181 public String witnessNOv;
jurzua
parents:
diff changeset
182 public String subject;
jurzua
parents:
diff changeset
183
jurzua
parents:
diff changeset
184 public ResultEntry02(Entity title, Entity witness, String subject){
jurzua
parents:
diff changeset
185 this.set(title, witness, subject);
jurzua
parents:
diff changeset
186
jurzua
parents:
diff changeset
187 }
jurzua
parents:
diff changeset
188
jurzua
parents:
diff changeset
189 public ResultEntry02(Entity title, Entity witness, String subject, String alias, String alias2Title){
jurzua
parents:
diff changeset
190 this.set(title, witness, subject);
jurzua
parents:
diff changeset
191 this.alias = alias;
jurzua
parents:
diff changeset
192 this.alias2Title = alias2Title;
jurzua
parents:
diff changeset
193 }
jurzua
parents:
diff changeset
194
jurzua
parents:
diff changeset
195 private void set(Entity title, Entity witness, String subject){
jurzua
parents:
diff changeset
196 this.subject = subject;
jurzua
parents:
diff changeset
197
jurzua
parents:
diff changeset
198 this.titleId = title.getId();
jurzua
parents:
diff changeset
199 this.titleOv = title.getOwnValue();
jurzua
parents:
diff changeset
200 this.titleNOv = title.getNormalizedOwnValue();
jurzua
parents:
diff changeset
201
jurzua
parents:
diff changeset
202 this.witnessId = witness.getId();
jurzua
parents:
diff changeset
203 this.witnessOv = witness.getOwnValue();
jurzua
parents:
diff changeset
204 this.witnessNOv = witness.getNormalizedOwnValue();
jurzua
parents:
diff changeset
205 }
jurzua
parents:
diff changeset
206
jurzua
parents:
diff changeset
207 @Override
jurzua
parents:
diff changeset
208 public int compareTo(ResultEntry02 o) {
jurzua
parents:
diff changeset
209 if(!this.titleId.equals(o.titleId)){
jurzua
parents:
diff changeset
210
jurzua
parents:
diff changeset
211 //comparing subject
jurzua
parents:
diff changeset
212 if(StringUtils.isNotEmpty(subject) && StringUtils.isNotEmpty(o.subject)){
jurzua
parents:
diff changeset
213 int comparisonSubject = this.subject.compareTo(o.subject);
jurzua
parents:
diff changeset
214 if(comparisonSubject != 0){
jurzua
parents:
diff changeset
215 return comparisonSubject;
jurzua
parents:
diff changeset
216 }
jurzua
parents:
diff changeset
217 }else{
jurzua
parents:
diff changeset
218 if(StringUtils.isNotEmpty(subject)){
jurzua
parents:
diff changeset
219 return -1;
jurzua
parents:
diff changeset
220 }else if(StringUtils.isNotEmpty(o.subject)){
jurzua
parents:
diff changeset
221 return 1;
jurzua
parents:
diff changeset
222 }
jurzua
parents:
diff changeset
223 }
jurzua
parents:
diff changeset
224
jurzua
parents:
diff changeset
225 //comparing title
jurzua
parents:
diff changeset
226 int comparisonTitle = NormalizerUtils.normalizedToCompare(titleNOv).compareTo(
jurzua
parents:
diff changeset
227 NormalizerUtils.normalizedToCompare(o.titleNOv));
jurzua
parents:
diff changeset
228 if(comparisonTitle != 0){
jurzua
parents:
diff changeset
229 return comparisonTitle;
jurzua
parents:
diff changeset
230 }
jurzua
parents:
diff changeset
231 }else{
jurzua
parents:
diff changeset
232 if(!this.witnessId.equals(o.witnessId)){
jurzua
parents:
diff changeset
233 //comparing witness
jurzua
parents:
diff changeset
234 int comparisonWitness = NormalizerUtils.normalizedToCompare(titleNOv).compareTo(
jurzua
parents:
diff changeset
235 NormalizerUtils.normalizedToCompare(o.titleNOv));
jurzua
parents:
diff changeset
236 return comparisonWitness;
jurzua
parents:
diff changeset
237 }
jurzua
parents:
diff changeset
238 }
jurzua
parents:
diff changeset
239 return 0;
jurzua
parents:
diff changeset
240 }
jurzua
parents:
diff changeset
241
jurzua
parents:
diff changeset
242 public Long getTitleId() {
jurzua
parents:
diff changeset
243 return titleId;
jurzua
parents:
diff changeset
244 }
jurzua
parents:
diff changeset
245
jurzua
parents:
diff changeset
246 public String getTitleOv() {
jurzua
parents:
diff changeset
247 return titleOv;
jurzua
parents:
diff changeset
248 }
jurzua
parents:
diff changeset
249
jurzua
parents:
diff changeset
250 public String getTitleNOv() {
jurzua
parents:
diff changeset
251 return titleNOv;
jurzua
parents:
diff changeset
252 }
jurzua
parents:
diff changeset
253
jurzua
parents:
diff changeset
254 public String getAlias() {
jurzua
parents:
diff changeset
255 return alias;
jurzua
parents:
diff changeset
256 }
jurzua
parents:
diff changeset
257
jurzua
parents:
diff changeset
258 public String getAlias2Title() {
jurzua
parents:
diff changeset
259 return alias2Title;
jurzua
parents:
diff changeset
260 }
jurzua
parents:
diff changeset
261
jurzua
parents:
diff changeset
262 public Long getWitnessId() {
jurzua
parents:
diff changeset
263 return witnessId;
jurzua
parents:
diff changeset
264 }
jurzua
parents:
diff changeset
265
jurzua
parents:
diff changeset
266 public String getWitnessOv() {
jurzua
parents:
diff changeset
267 return witnessOv;
jurzua
parents:
diff changeset
268 }
jurzua
parents:
diff changeset
269
jurzua
parents:
diff changeset
270 public String getWitnessNOv() {
jurzua
parents:
diff changeset
271 return witnessNOv;
jurzua
parents:
diff changeset
272 }
jurzua
parents:
diff changeset
273
jurzua
parents:
diff changeset
274 public String getSubject() {
jurzua
parents:
diff changeset
275 return subject;
jurzua
parents:
diff changeset
276 }
jurzua
parents:
diff changeset
277 }
jurzua
parents:
diff changeset
278
jurzua
parents:
diff changeset
279 public String getTitleName() {
jurzua
parents:
diff changeset
280 return titleName;
jurzua
parents:
diff changeset
281 }
jurzua
parents:
diff changeset
282
jurzua
parents:
diff changeset
283 public void setTitleName(String titleName) {
jurzua
parents:
diff changeset
284 this.titleName = titleName;
jurzua
parents:
diff changeset
285 }
jurzua
parents:
diff changeset
286 }