Mercurial > hg > ismi-richfaces
view src/main/java/de/mpiwg/itgroup/ismi/search/beans/Witness4TitleQuery.java @ 215:26138384984c
update more instances of IIIF server URL.
author | casties |
---|---|
date | Sat, 15 Jan 2022 16:09:55 +0100 |
parents | 8ae989269f51 |
children |
line wrap: on
line source
package de.mpiwg.itgroup.ismi.search.beans; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.lang.StringUtils; import org.mpi.openmind.repository.bo.Entity; import org.mpi.openmind.repository.utils.NormalizerUtils; import org.mpi.openmind.repository.utils.OldNormalizerUtils; import org.mpi.openmind.search.utils.ResultEntry; import org.mpi.openmind.search.utils.SAttributeMultipleName; import org.mpi.openmind.search.utils.SAttributeUniqueName; import org.mpi.openmind.search.utils.SEntity; import org.mpi.openmind.search.utils.SRelLongKey; import org.mpi.openmind.search.utils.SRelation; import org.mpi.openmind.search.utils.SRelationMultipleName; import org.mpi.openmind.search.utils.SRelationUniqueName; import de.mpiwg.itgroup.ismi.entry.beans.ApplicationBean; /** * 2) List of all witnesses for a title * (the list should distinguish which witnesses go with a particular title version) * @author jurzua * */ public class Witness4TitleQuery extends AbstractQuery implements Serializable{ private static final long serialVersionUID = -1460003809678104919L; private String titleName; private List<SRelLongKey> titleWitnessKeyList; public Witness4TitleQuery(ApplicationBean appBean){ super(appBean); this.exportUrlRoot = ApplicationBean.urlISMIExportServiceTitles; } @Override public void reset(){ super.reset(); this.titleName = null; this.rs = null; this.titleWitnessKeyList = null; } @Override protected void search(){ List<ResultEntry> rs0 = this.execute01(titleName); List<ResultEntry> rs1 = null; if(StringUtils.isNotEmpty(titleName)){ rs1 = this.execute02(titleName); } rs = loadResultSet(rs0, rs1); List<Long> idLongList = new ArrayList<Long>(); for(Object e : rs){ ResultEntry02 entry = (ResultEntry02)e; if(!idLongList.contains(entry.titleId)) idLongList.add(entry.titleId); } this.idList = ApplicationBean.generateIdList(idLongList); this.exportDirkUrl = ApplicationBean.generateExportURL(exportUrlRoot, idList, "xml"); } private List<ResultEntry02> loadResultSet(List<ResultEntry> rs0, List<ResultEntry> rs1){ List<ResultEntry02> currentRs = new ArrayList<ResultEntry02>(); titleWitnessKeyList = new ArrayList<SRelLongKey>(); int count = 0; for(ResultEntry re : rs0){ Entity title = getOm().getEntityById(re.getEntMap().get(0)); Entity witness = getOm().getEntityById(re.getEntMap().get(1)); List<Entity> subjectList = getOm().getTargetsForSourceRelation(title.getId(), "has_subject", "SUBJECT", 1); String subject = (subjectList.size() == 0) ? null : subjectList.get(0).getOwnValue(); currentRs.add(new ResultEntry02(title, witness, subject)); putTitleWitnessKeyList(title.getId(), witness.getId()); count++; if(count >= MAX_RS){ break; } } if(rs1 != null && count < MAX_RS){ for(ResultEntry re : rs1){ Entity title = getOm().getEntityById(re.getEntMap().get(0)); Entity witness = getOm().getEntityById(re.getEntMap().get(1)); if(!containsTitleWitnessKeyList(title.getId(), witness.getId())){ Entity alias = getOm().getEntityById(re.getEntMap().get(1)); String alias2Person = re.getRel(1, 0); List<Entity> subjectList = getOm().getTargetsForSourceRelation(title.getId(), "has_subject", "SUBJECT", 1); String subject = (subjectList.size() == 0) ? null : subjectList.get(0).getOwnValue(); currentRs.add(new ResultEntry02(title, witness, subject, alias.getOwnValue(), alias2Person)); putTitleWitnessKeyList(title.getId(), witness.getId()); count++; if(count >= MAX_RS){ break; } } } } Collections.sort(currentRs); return currentRs; } private void putTitleWitnessKeyList(Long titleId, Long witness){ titleWitnessKeyList.add(new SRelLongKey(titleId, witness)); } private boolean containsTitleWitnessKeyList(Long titleId, Long witnessId){ return titleWitnessKeyList.contains(new SRelLongKey(titleId, witnessId)); } private List<ResultEntry> execute01(String titleName){ List<SEntity> entFilters = new ArrayList<SEntity>(); List<SRelation> relFilters = new ArrayList<SRelation>(); SEntity text = new SEntity(0, "TEXT"); if(StringUtils.isNotEmpty(titleName)){ text.addAtt(new SAttributeMultipleName(titleName, "full_title_translit", "full_title")); } entFilters.add(text); SEntity witness = new SEntity(1, "WITNESS"); entFilters.add(witness); SRelationUniqueName is_exemplar_of = new SRelationUniqueName(witness, text, "is_exemplar_of"); relFilters.add(is_exemplar_of); return this.appBean.getSS().search(entFilters, relFilters); } private List<ResultEntry> execute02(String titleName){ List<SEntity> entFilters = new ArrayList<SEntity>(); List<SRelation> relFilters = new ArrayList<SRelation>(); SEntity text = new SEntity(0, "TEXT"); entFilters.add(text); SEntity alias = new SEntity(1, "ALIAS"); alias.addAtt(new SAttributeUniqueName("alias", titleName)); entFilters.add(alias); SEntity witness = new SEntity(2, "WITNESS"); entFilters.add(witness); SRelationMultipleName is_alias = new SRelationMultipleName(alias, text, "is_prime_alias_title_of", "is_alias_title_of", "is_alias_explicit_of", "is_alias_incipit_of"); SRelationUniqueName is_exemplar_of = new SRelationUniqueName(witness, text, "is_exemplar_of"); relFilters.add(is_exemplar_of); relFilters.add(is_alias); return this.appBean.getSS().search(entFilters, relFilters); } public class ResultEntry02 implements Comparable<ResultEntry02>, Serializable{ private static final long serialVersionUID = -2672042198162179468L; public Long titleId; public String titleOv; public String titleNOv; public String alias; public String alias2Title; public Long witnessId; public String witnessOv; public String witnessNOv; public String subject; public ResultEntry02(Entity title, Entity witness, String subject){ this.set(title, witness, subject); } public ResultEntry02(Entity title, Entity witness, String subject, String alias, String alias2Title){ this.set(title, witness, subject); this.alias = alias; this.alias2Title = alias2Title; } private void set(Entity title, Entity witness, String subject){ this.subject = subject; this.titleId = title.getId(); this.titleOv = title.getOwnValue(); this.titleNOv = title.getNormalizedOwnValue(); this.witnessId = witness.getId(); this.witnessOv = witness.getOwnValue(); this.witnessNOv = witness.getNormalizedOwnValue(); } @Override public int compareTo(ResultEntry02 o) { if(!this.titleId.equals(o.titleId)){ //comparing subject if(StringUtils.isNotEmpty(subject) && StringUtils.isNotEmpty(o.subject)){ int comparisonSubject = this.subject.compareTo(o.subject); if(comparisonSubject != 0){ return comparisonSubject; } }else{ if(StringUtils.isNotEmpty(subject)){ return -1; }else if(StringUtils.isNotEmpty(o.subject)){ return 1; } } //comparing title int comparisonTitle = OldNormalizerUtils.normalizedToCompare(titleNOv).compareTo( OldNormalizerUtils.normalizedToCompare(o.titleNOv)); if(comparisonTitle != 0){ return comparisonTitle; } }else{ if(!this.witnessId.equals(o.witnessId)){ //comparing witness int comparisonWitness = OldNormalizerUtils.normalizedToCompare(titleNOv).compareTo( OldNormalizerUtils.normalizedToCompare(o.titleNOv)); return comparisonWitness; } } return 0; } public Long getTitleId() { return titleId; } public String getTitleOv() { return titleOv; } public String getTitleNOv() { return titleNOv; } public String getAlias() { return alias; } public String getAlias2Title() { return alias2Title; } public Long getWitnessId() { return witnessId; } public String getWitnessOv() { return witnessOv; } public String getWitnessNOv() { return witnessNOv; } public String getSubject() { return subject; } } public String getTitleName() { return titleName; } public void setTitleName(String titleName) { this.titleName = titleName; } }