Mercurial > hg > ismi-richfaces
diff src/main/java/de/mpiwg/itgroup/ismi/search/beans/AdvancedSearchBean.java @ 1:2e911857a759
(none)
author | jurzua |
---|---|
date | Wed, 29 Oct 2014 14:00:28 +0000 |
parents | |
children | 3c83f42a8a39 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/ismi/search/beans/AdvancedSearchBean.java Wed Oct 29 14:00:28 2014 +0000 @@ -0,0 +1,392 @@ +package de.mpiwg.itgroup.ismi.search.beans; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.faces.event.ValueChangeEvent; +import javax.faces.model.SelectItem; + +import org.apache.log4j.Logger; +import org.mpi.openmind.repository.bo.Attribute; +import org.mpi.openmind.search.utils.ResultEntry; +import org.mpi.openmind.search.utils.SAttribute; +import org.mpi.openmind.search.utils.SAttributeMultipleName; +import org.mpi.openmind.search.utils.SAttributeMultipleValue; +import org.mpi.openmind.search.utils.SAttributeUniqueName; +import org.mpi.openmind.search.utils.SEntity; +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.AbstractISMIBean; +import de.mpiwg.itgroup.ismi.entry.beans.SessionBean; +import de.mpiwg.itgroup.ismi.util.guiComponents.Calendar; + +public class AdvancedSearchBean extends AbstractISMIBean implements Serializable{ + + private static Logger logger = Logger.getLogger(AdvancedSearchBean.class); + + private static final long serialVersionUID = 1L; + + private String currentTemplate; + private static List<SelectItem> templateList; + + private transient Witness4TitleQuery witness4TitleQuery; + //private SampleSearch06 sample06; + private SampleSearch07 sample07; + private Titles4PersonQuery titles4PersonQuery; + private CodexOwnershipQuery codexOwnershipQuery; + + static{ + templateList = new ArrayList<SelectItem>(); + //templateList.add(new SelectItem("sample01")); + templateList.add(new SelectItem("witness4Title", "Witnesses for a title")); + //templateList.add(new SelectItem("sample03")); + //templateList.add(new SelectItem("sample04")); + //templateList.add(new SelectItem("sample05")); + templateList.add(new SelectItem("titles4Person", "Titles for a person")); + templateList.add(new SelectItem("codexOwnership", "Codex ownership")); + //templateList.add(new SelectItem("sample07")); + //templateList.add(new SelectItem("sample08")); + //templateList.add(new SelectItem("sample09")); + } + + public AdvancedSearchBean(){ + //logger.info("AdvancedSearchBean"); + this.reset(); + } + + public void reset(){ + //logger.info("AdvancedSearchBean.reset()"); + this.witness4TitleQuery = new Witness4TitleQuery(getAppBean()); + this.titles4PersonQuery = new Titles4PersonQuery(getAppBean()); + this.sample07 = new SampleSearch07(getAppBean()); + this.codexOwnershipQuery = new CodexOwnershipQuery(getAppBean()); + currentTemplate = "witness4Title"; + } + + public void listenerChange(ValueChangeEvent event){ + /* + logger.info(event.getOldValue()); + logger.info(event.getNewValue()); + */ + } + + public String actionSearch(){ + this.search(); + return null; + } + + public SampleSearch07 getSample07() { + return sample07; + } + + public CodexOwnershipQuery getCodexOwnershipQuery() { + return codexOwnershipQuery; + } + + public Witness4TitleQuery getWitness4TitleQuery() { + return witness4TitleQuery; + } + + public void search(){ + long start = System.currentTimeMillis(); + + List<ResultEntry> rs = sample06(); + + //printRs(rs); + + long end = System.currentTimeMillis(); + logger.info("execution time [ms] = " + (end - start)); + logger.info("Search resultSet size= " + rs.size()); + } + + + private List<ResultEntry> test01(){ + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + SEntity e1 = new SEntity(0, "PERSON"); + e1.addAtt(new SAttributeUniqueName("name_translit", "abu")); + entFilters.add(e1); + + SEntity e2 = new SEntity(1, "ROLE"); + e2.addAtt(new SAttributeUniqueName("name", "Author")); + entFilters.add(e2); + + SEntity e3 = new SEntity(2, "PLACE"); + e3.addAtt(new SAttributeUniqueName("name", "Spain")); + entFilters.add(e3); + + SEntity e4 = new SEntity(3, "ALIAS"); + e4.addAtt(new SAttributeUniqueName("alias", "Samuel")); + entFilters.add(e4); + + SRelationUniqueName has_role = new SRelationUniqueName(e1.getIndex(), e2.getIndex(), "has_role"); + SRelationUniqueName was_born_in = new SRelationUniqueName(e1.getIndex(), e3.getIndex(), "was_born_in"); + SRelationUniqueName is_prime_alias_name_of = new SRelationUniqueName(e4.getIndex(), e1.getIndex(), "is_prime_alias_name_of"); + relFilters.add(has_role); + relFilters.add(was_born_in); + relFilters.add(is_prime_alias_name_of); + + return getAppBean().getSS().search(entFilters, relFilters); + + } + + private List<ResultEntry> test02(){ + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + SEntity e2 = new SEntity(1, "ALIAS"); + e2.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(e2); + + SEntity e1 = new SEntity(0, "TEXT"); + e1.addAtt(new SAttributeUniqueName("full_title_translit", "abu")); + entFilters.add(e1); + + + SRelationMultipleName hasAlias = new SRelationMultipleName(e2.getIndex(), e1.getIndex(), + "is_prime_alias_title_of", + "is_alias_title_of", + "is_alias_incipit_of", + "is_alias_explicit_of"); + relFilters.add(hasAlias); + + return getAppBean().getSS().search(entFilters, relFilters); + } + + private List<ResultEntry> sample01(){ + + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + SEntity role = new SEntity(0, "ROLE"); + role.addAtt(new SAttributeUniqueName("name", "Author")); + entFilters.add(role); + + //alias, "is_prime_alias_name_of", "PERSON" + //alias, "is_alias_name_of", "PERSON" + SEntity person = new SEntity(1, "PERSON"); + person.addAtt(new SAttributeMultipleName("a", "name_translit", "name")); + entFilters.add(person); + + /* + SEntity alias = new SEntity(1, "ALIAS"); + alias.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(alias); + */ + + SEntity title = new SEntity(2, "TEXT"); + //title.addAtt(new SAttributeMultipleName("abu", "full_title_translit", "full_title")); + entFilters.add(title); + + + SRelationUniqueName has_role = new SRelationUniqueName(person, role, "has_role"); + SRelationUniqueName was_created_by = new SRelationUniqueName(title, person, "was_created_by"); + relFilters.add(was_created_by); + relFilters.add(has_role); + + List<ResultEntry> rs = getAppBean().getSS().search(entFilters, relFilters); + + return rs; + } + + /** + * 5) List of all people who had other “roles” associated with a title (e.g. copyists , owners, patrons, teachers, students, etc.) + * @return + */ + private List<ResultEntry> sample05(){ + + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + SEntity role = new SEntity(0, "ROLE"); + role.addAtt(new SAttributeMultipleValue("name", "Annotator", "Copyist", "Corrector", "Dedicatee", "Illuminator", "Illustrator", "Owner", "Patron", "inspector")); + entFilters.add(role); + + //alias, "is_prime_alias_name_of", "PERSON" + //alias, "is_alias_name_of", "PERSON" + SEntity person = new SEntity(1, "PERSON"); + person.addAtt(new SAttributeMultipleName("a", "name_translit", "name")); + entFilters.add(person); + + /* + SEntity alias = new SEntity(1, "ALIAS"); + alias.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(alias); + */ + + SEntity title = new SEntity(2, "TEXT"); + //title.addAtt(new SAttributeMultipleName("abu", "full_title_translit", "full_title")); + entFilters.add(title); + + + SRelationUniqueName has_role = new SRelationUniqueName(person, role, "has_role"); + SRelationMultipleName title_to_person = new SRelationMultipleName(title, person, "had_patron", "was_dedicated_to", "was_created_by"); + relFilters.add(title_to_person); + relFilters.add(has_role); + + List<ResultEntry> rs = getAppBean().getSS().search(entFilters, relFilters); + + return rs; + } + + /** + * 6) Bring up people associated with a particular title (not just one huge list of people, but be able to distinguish author, student, teacher) + * @return + */ + private List<ResultEntry> sample06(){ + + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + //The user can select between: + //"Author", "Annotator", "Copyist", "Corrector", "Dedicatee", "Illuminator", "Illustrator", "Owner", "Patron", "inspector" + SEntity role = new SEntity(0, "ROLE"); + role.addAtt(new SAttributeUniqueName("name", "Annotator")); + entFilters.add(role); + + //alias, "is_prime_alias_name_of", "PERSON" + //alias, "is_alias_name_of", "PERSON" + SEntity person = new SEntity(1, "PERSON"); + person.addAtt(new SAttributeMultipleName("a", "name_translit", "name")); + entFilters.add(person); + + /* + SEntity alias = new SEntity(1, "ALIAS"); + alias.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(alias); + */ + + SEntity title = new SEntity(2, "TEXT"); + title.addAtt(new SAttributeMultipleName("abu", "full_title_translit", "full_title")); + entFilters.add(title); + + + SRelationUniqueName has_role = new SRelationUniqueName(person, role, "has_role"); + SRelationMultipleName title_to_person = new SRelationMultipleName(title, person, "had_patron", "was_dedicated_to", "was_created_by"); + relFilters.add(title_to_person); + relFilters.add(has_role); + + List<ResultEntry> rs = getAppBean().getSS().search(entFilters, relFilters); + + return rs; + + } + + /** + * 7) Bring up people associated with a particular witness (not just one huge list of people, but be able to distinguish owner, say, from commentator) + * @return + */ + private List<ResultEntry> sample07(){ + + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + //The user can select between: + //"Author", "Annotator", "Copyist", "Corrector", "Dedicatee", "Illuminator", "Illustrator", "Owner", "Patron", "inspector" + SEntity role = new SEntity(0, "ROLE"); + role.addAtt(new SAttributeUniqueName("name", "Owner")); + entFilters.add(role); + + //alias, "is_prime_alias_name_of", "PERSON" + //alias, "is_alias_name_of", "PERSON" + SEntity person = new SEntity(1, "PERSON"); + person.addAtt(new SAttributeMultipleName("a", "name_translit", "name")); + entFilters.add(person); + + /* + SEntity alias = new SEntity(1, "ALIAS"); + alias.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(alias); + */ + + SEntity witness = new SEntity(2, "WITNESS"); + //witness.addAtt(new SAttributeMultipleName("abu", "full_title_translit", "full_title")); + entFilters.add(witness); + + + SRelationUniqueName has_role = new SRelationUniqueName(person, role, "has_role"); + SRelationMultipleName witness_to_person = new SRelationMultipleName(witness, person, "had_patron", "was_copied_by", "was_created_by", "was_studied_by"); + relFilters.add(witness_to_person); + relFilters.add(has_role); + + List<ResultEntry> rs = getAppBean().getSS().search(entFilters, relFilters); + + return rs; + + } + + /** + * 9) Bring up all owners of a particular codex + * @return + */ + private List<ResultEntry> sample08(){ + + List<SEntity> entFilters = new ArrayList<SEntity>(); + List<SRelation> relFilters = new ArrayList<SRelation>(); + + //The user can select between: + //"Author", "Annotator", "Copyist", "Corrector", "Dedicatee", "Illuminator", "Illustrator", "Owner", "Patron", "inspector" + SEntity role = new SEntity(0, "ROLE"); + role.addAtt(new SAttributeUniqueName("name", "Owner")); + entFilters.add(role); + + //alias, "is_prime_alias_name_of", "PERSON" + //alias, "is_alias_name_of", "PERSON" + SEntity person = new SEntity(1, "PERSON"); + person.addAtt(new SAttributeMultipleName("a", "name_translit", "name")); + entFilters.add(person); + + /* + SEntity alias = new SEntity(1, "ALIAS"); + alias.addAtt(new SAttributeUniqueName("alias", "abu")); + entFilters.add(alias); + */ + + SEntity codex = new SEntity(2, "CODEX"); + //witness.addAtt(new SAttributeMultipleName("abu", "full_title_translit", "full_title")); + entFilters.add(codex); + + SRelationUniqueName has_role = new SRelationUniqueName(person, role, "has_role"); + SRelationUniqueName was_owned_by = new SRelationUniqueName(codex, person, "was_owned_by"); + relFilters.add(was_owned_by); + relFilters.add(has_role); + + List<ResultEntry> rs = getAppBean().getSS().search(entFilters, relFilters); + + return rs; + + } + + /* + private void printRs(List<ResultEntry> rs){ + logger.info("--------------"); + for(ResultEntry entry : rs){ + for(Entry<Integer, Long> ent : entry.getEntMap().entrySet()){ + logger.info(ent.getKey() + ") " + getWrapper().getEntityById(ent.getValue()).toSmallString()); + } + } + logger.info("--------------"); + }*/ + + public String getCurrentTemplate() { + return currentTemplate; + } + + public void setCurrentTemplate(String currentTemplate) { + this.currentTemplate = currentTemplate; + } + + public List<SelectItem> getTemplateList() { + return templateList; + } + + public Titles4PersonQuery getTitles4PersonQuery() { + return titles4PersonQuery; + } +}