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

(none)
author jurzua
date Wed, 29 Oct 2014 14:00:28 +0000
parents
children
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/CodexOwnershipQuery.java	Wed Oct 29 14:00:28 2014 +0000
@@ -0,0 +1,219 @@
+package de.mpiwg.itgroup.ismi.search.beans;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.mpi.openmind.cache.WrapperService;
+import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.bo.Relation;
+import org.mpi.openmind.search.utils.ResultEntry;
+import org.mpi.openmind.search.utils.SAttributeMultipleName;
+import org.mpi.openmind.search.utils.SEntity;
+import org.mpi.openmind.search.utils.SRelation;
+
+import de.mpiwg.itgroup.ismi.entry.beans.ApplicationBean;
+
+public class CodexOwnershipQuery  extends AbstractQuery{
+
+	private static final long serialVersionUID = 5481872257359678512L;
+
+	private String personName;
+	private String codexShelfMark;
+	
+	public CodexOwnershipQuery(ApplicationBean appBean){
+		super(appBean);
+		this.exportUrlRoot = ApplicationBean.urlISMIExportServiceAuthors;
+	}
+	
+	@Override
+	public void reset(){
+		super.reset();
+		this.rs = null;
+		this.personName = null;
+		this.codexShelfMark = null;
+	}
+	
+	@Override
+	protected void search() throws Exception{
+		
+		List<Relation> wasOwnerByList = appBean.getWrapper().getRelation("owned_by", "CODEX", "PERSON");
+		List<Long> personCandidates = null;
+		List<Long> codexCadidates = null;
+		
+		if(StringUtils.isNotEmpty(personName)){
+			personCandidates = getPersonCadidates(personName);	
+		}
+		if(StringUtils.isNotEmpty(codexShelfMark)){
+			codexCadidates = getCodexCadidates(codexShelfMark);	
+		}
+		
+		rs = this.loadResultSet(wasOwnerByList, personCandidates, codexCadidates);
+		
+		/*
+		 * TODO there is report for it???
+		List<Long> idLongList = new ArrayList<Long>();
+		for(Object e : rs){
+			Titles4PersonEntry entry = (Titles4PersonEntry)e;
+			if(!idLongList.contains(entry.getPersonId()))
+				idLongList.add(entry.getPersonId());
+		}
+		this.idList = ApplicationBean.generateIdList(idLongList);
+		
+		this.exportDirkUrl = ApplicationBean.generateExportURL(exportUrlRoot, idList, "xml");
+		*/
+	}
+	
+	private List<CodexOwnershipEntry> loadResultSet(List<Relation> wasOwnerByList, 
+			List<Long> personCandidates, 
+			List<Long> codexCadidates){
+		
+		List<CodexOwnershipEntry> list = new ArrayList<CodexOwnershipQuery.CodexOwnershipEntry>();
+		
+		if(!wasOwnerByList.isEmpty()){
+			for(Relation rel : wasOwnerByList){
+				if((codexCadidates == null || codexCadidates.contains(rel.getSourceId())) && 
+						(personCandidates == null ||personCandidates.contains(rel.getTargetId()))){
+					list.add(new CodexOwnershipEntry(
+							appBean.getWrapper().getEntityById(rel.getSourceId()), appBean.getWrapper().getEntityById(rel.getTargetId()),
+							appBean.getWrapper()));
+				}
+			}
+		}
+		
+		return list;
+	}
+	
+	
+	public String getPersonName() {
+		return personName;
+	}
+
+	public void setPersonName(String personName) {
+		this.personName = personName;
+	}
+
+	public String getCodexShelfMark() {
+		return codexShelfMark;
+	}
+
+	public void setCodexShelfMark(String codexShelfMark) {
+		this.codexShelfMark = codexShelfMark;
+	}
+
+	private List<Long> getPersonCadidates(String personName){
+		List<SEntity> entFilters = new ArrayList<SEntity>();
+		
+		//TODO
+		//alias, "is_prime_alias_name_of", "PERSON"
+		//alias, "is_alias_name_of", "PERSON"
+		SEntity person = new SEntity(0, "PERSON");
+		if(StringUtils.isNotEmpty(personName)){
+			person.addAtt(new SAttributeMultipleName(personName, "name_translit", "name"));
+		}
+		entFilters.add(person);
+		
+		List<Long> idList = new ArrayList<Long>();
+		for(ResultEntry entry : this.appBean.getSS().search(entFilters, new ArrayList<SRelation>())){
+			idList.add(entry.getEntMap().get(0));
+		}
+		return idList;		
+	}
+
+	private List<Long> getCodexCadidates(String shelfMark){
+		
+		List<SEntity> entFilters = new ArrayList<SEntity>();
+		
+		SEntity codex = new SEntity(0, "CODEX");
+		if(StringUtils.isNotEmpty(shelfMark)){
+			codex.addAtt(new SAttributeMultipleName(shelfMark, "identifier"));
+		}
+		entFilters.add(codex);
+		
+		List<Long> idList = new ArrayList<Long>();
+		for(ResultEntry entry : this.appBean.getSS().search(entFilters, new ArrayList<SRelation>())){
+			idList.add(entry.getEntMap().get(0));
+		}
+		return idList;		
+	}
+	
+	public class CodexOwnershipEntry implements Serializable{
+		
+		private static final long serialVersionUID = -6118835259154299870L;
+		
+		private Long personId;
+		private String personOv;
+		private Long codexId;
+		private String codexOv;
+		private String shelfMark;
+		private String collection;
+		
+		public CodexOwnershipEntry(Entity codex, Entity person, WrapperService ws){
+			this.personId = person.getId();
+			this.personOv = person.getOwnValue();
+			this.codexId = codex.getId();
+			this.codexOv = codex.getOwnValue();
+			//this.shelfMark = (codex.getAttributeByName("identifier") != null) ? codex.getAttributeByName("identifier").getOwnValue() : null;
+			try{
+				String[] array = this.codexOv.split("_");
+				if(array.length > 0){
+					this.collection = array[0];
+					this.shelfMark = array[1];
+				}
+			}catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+
+		public Long getPersonId() {
+			return personId;
+		}
+
+		public void setPersonId(Long personId) {
+			this.personId = personId;
+		}
+
+		public String getPersonOv() {
+			return personOv;
+		}
+
+		public void setPersonOv(String personOv) {
+			this.personOv = personOv;
+		}
+
+		public Long getCodexId() {
+			return codexId;
+		}
+
+		public void setCodexId(Long codexId) {
+			this.codexId = codexId;
+		}
+
+		public String getCodexOv() {
+			return codexOv;
+		}
+
+		public void setCodexOv(String codexOv) {
+			this.codexOv = codexOv;
+		}
+
+		public String getShelfMark() {
+			return shelfMark;
+		}
+
+		public void setShelfMark(String shelfMark) {
+			this.shelfMark = shelfMark;
+		}
+
+		public String getCollection() {
+			return collection;
+		}
+
+		public void setCollection(String collection) {
+			this.collection = collection;
+		}
+	}
+	
+	
+}