diff src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java @ 1:2e911857a759

(none)
author jurzua
date Wed, 29 Oct 2014 14:00:28 +0000
parents
children 20c76ff72cf2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java	Wed Oct 29 14:00:28 2014 +0000
@@ -0,0 +1,546 @@
+package de.mpiwg.itgroup.ismi.browse;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.model.SelectItem;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.mpi.openmind.repository.bo.Attribute;
+import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.services.utils.AttributeFilter;
+
+import de.mpiwg.itgroup.ismi.util.guiComponents.DataPaginator;
+
+public class AbstractEntityRepositoryBean extends AbstractBrowse {
+
+	private static final long serialVersionUID = 3154642100627969159L;
+
+	private static Logger logger = Logger.getLogger(AbstractEntityRepositoryBean.class);
+	
+	public static String MODE_ADVANCED = "advanced";
+	public static String MODE_ALL = "all";
+	public static String MODE_NONE = "none";
+	
+
+	private String objectClass = null;
+	private List<Entity> entities = new ArrayList<Entity>();
+	private List<Entity> currentEntities = new ArrayList<Entity>();
+
+	private List<SelectItem> definitions = new ArrayList<SelectItem>();
+	
+	private transient DataPaginator advancedPaginator = new DataPaginator();
+
+	private String ocTerm;
+	private String currentTab;
+	
+	private String textFullTitle;
+	private String textFullTitleTranslit;
+	private String textShortTitle;
+
+	private String personName;
+	private String personNameTranslit;
+
+	private String codexIdentifier;
+	
+	private String collectionName;
+
+	private String placeName;
+	
+	private String aliasAlias;
+	
+	private String repositoryName;
+	
+	private String witnessFullTitle;
+	private String witnessFullTitleTranslit;
+	private String witnessAhlwardtNo;
+
+	private boolean advancedSearch = false;
+	private String resultMode = MODE_NONE;
+	private String resultSummaryMsg;
+	
+	private String subjectType;
+	private List<SelectItem> suggestedSubjectTypes = new ArrayList<SelectItem>();
+
+	private String page;
+	private String pageMsg;
+	
+	public static String main_subject = "main_subject";
+	public static String sub_subject = "sub_subject";
+	
+	public AbstractEntityRepositoryBean(){
+		suggestedSubjectTypes.add(new SelectItem(null, "-- choose --"));
+		suggestedSubjectTypes.add(new SelectItem(main_subject, main_subject));
+		suggestedSubjectTypes.add(new SelectItem(sub_subject, sub_subject));
+		this.updateDefinitions(getWrapper().getLWDefinitions());		
+	}
+	
+	private void updateAdvancedEntities() {
+		if (StringUtils.isNotEmpty(getObjectClass())) {
+			this.advancedPaginator.initCount();
+			int startRecord = this.advancedPaginator.getCurrentPage()
+					* this.advancedPaginator.getItemsPerPage();
+			if((this.advancedPaginator.getCurrentPage() + 1) == this.advancedPaginator.getNumberOfPages()){
+				int mod = this.entities.size() % advancedPaginator.getItemsPerPage();
+				if(mod == 0){
+					this.currentEntities = entities.subList(startRecord, startRecord + this.advancedPaginator.getItemsPerPage());
+				}else{
+					this.currentEntities = entities.subList(startRecord, startRecord + mod);	
+				}
+				
+			}else{
+				this.currentEntities = entities.subList(startRecord, startRecord + this.advancedPaginator.getItemsPerPage());	
+			}
+			
+		} else
+			this.currentEntities = new ArrayList<Entity>();
+	}
+	
+	public String advancedFirst() {
+		this.advancedPaginator.first();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public String advancedLast() {
+		this.advancedPaginator.last();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public String advancedFastForward() {
+		this.advancedPaginator.fastForward();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public String advancedFastRewind() {
+		this.advancedPaginator.fastRewind();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public String advancedPrevious() {
+		this.advancedPaginator.previous();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public String advancedNext() {
+		this.advancedPaginator.next();
+		this.updateAdvancedEntities();
+		return GOTO_ENTITY_REPOSITORY;
+	}
+	
+	public void reset(){
+		this.entities = new ArrayList<Entity>();
+		this.currentEntities = new ArrayList<Entity>();
+		this.resultSummaryMsg = new String();
+	}
+	
+	public void actionGoToPageAdvancedResult(ActionEvent event){
+    	this.pageMsg = "";
+    	try{
+    		Integer page = new Integer(getPage());
+    		this.advancedPaginator.goToPage(page - 1);
+    		this.updateAdvancedEntities();
+    	}catch(Exception e){
+    		this.pageMsg = "page is invalid!";
+    	}
+    }
+	
+	public DataPaginator getAdvancedPaginator() {
+		return advancedPaginator;
+	}
+
+	public void setAdvancedPaginator(DataPaginator advancedPaginator) {
+		this.advancedPaginator = advancedPaginator;
+	}
+	
+	public void updateDefinitions(List<Entity> defs) {
+		this.definitions = new ArrayList<SelectItem>();
+		SelectItem option = null;
+		for (Entity def : defs) {
+			if (def.getOwnValue() != null) {
+				option = new SelectItem(def.getOwnValue());
+				this.definitions.add(option);
+			}
+		}
+		this.setEntities(new ArrayList<Entity>());
+		if (defs.size() > 0) {
+			this.objectClass = defs.get(0).getOwnValue();
+		}
+	}
+
+	public void actionDisplayAdvancedSearch(ActionEvent event) {
+		this.advancedSearch = true;
+	}
+
+	public void actionHideAdvancedSearch(ActionEvent event) {
+		this.advancedSearch = false;
+	}
+
+	public void actionChangeDefinition(ValueChangeEvent event) {
+		this.objectClass = (String) event.getNewValue();
+	}
+	
+	public void searchByOwnvalue(){
+		this.resultMode = MODE_ADVANCED;
+		this.setPage("");
+		this.currentEntities = new ArrayList<Entity>();
+		this.entities = getWrapper().searchEntityByOwnValue(objectClass, ocTerm);
+		this.resultSummaryMsg = "";
+		
+		if(this.entities.size() > 0){
+			
+			this.advancedPaginator.setCurrentPage(0);
+			int entitiesCount = this.entities.size();
+			this.advancedPaginator.resetNumberOfPages(entitiesCount);
+			this.updateAdvancedEntities();	
+		}else {
+			this.resultSummaryMsg = "No items were found!";
+		}
+	}
+	
+
+	public void searchByAttributes() throws Exception{
+		this.resultMode = MODE_ADVANCED;
+		this.setPage("");
+		this.entities = new ArrayList<Entity>();
+		this.currentEntities = new ArrayList<Entity>();
+		
+		List<AttributeFilter> filterList = new ArrayList<AttributeFilter>();
+
+		this.resultSummaryMsg = "";
+		Map<Entity, Attribute> resultMap = new HashMap<Entity, Attribute>();
+		if (this.objectClass.equals(TEXT)) {
+			if (StringUtils.isNotEmpty(textFullTitle)) {
+				filterList.add(new AttributeFilter("full_title",
+						this.textFullTitle, TEXT));
+			}
+			if (StringUtils.isNotEmpty(textFullTitleTranslit)) {
+				filterList.add(new AttributeFilter("full_title_translit",
+						textFullTitleTranslit, TEXT));
+			}
+			if (StringUtils.isNotEmpty(textShortTitle)) {
+				List<Entity> l = getWrapper().searchEntityByAttributeOfTarRelation(TEXT, "is_prime_alias_title_of", ALIAS, "alias", textShortTitle, 20);
+				for(Entity e : l){
+					this.entities.add(e);
+				}
+			}
+		} else if (this.objectClass.equals(WITNESS)) {
+			//witnessAhlwardtNo
+			if(StringUtils.isNotEmpty(this.witnessAhlwardtNo)){
+				filterList.add(new AttributeFilter("ahlwardt_no", this.witnessAhlwardtNo,
+				WITNESS));
+			}
+		} else if (this.objectClass.equals(SUBJECT)) {
+			if(StringUtils.isNotEmpty(this.subjectType)){
+				filterList.add(new AttributeFilter("type", this.subjectType,
+				SUBJECT));
+			}
+		} else if (this.objectClass.equals(ALIAS)) {
+			if(StringUtils.isNotEmpty(this.aliasAlias)){
+				filterList.add(new AttributeFilter("alias", this.aliasAlias,
+				ALIAS));
+			}
+		} else if (this.objectClass.equals(COLLECTION)) {
+			if(StringUtils.isNotEmpty(this.collectionName)){
+				filterList.add(new AttributeFilter("name", this.collectionName,
+				COLLECTION));
+			}
+		} else if (this.objectClass.equals(REPOSITORY)) {
+			if(StringUtils.isNotEmpty(this.repositoryName)){
+				filterList.add(new AttributeFilter("name", this.repositoryName,
+				REPOSITORY));
+			}
+		} else if (this.objectClass.equals(PLACE)) {
+			if(StringUtils.isNotEmpty(this.placeName)){
+				filterList.add(new AttributeFilter("name", this.placeName,
+				PLACE));
+			}
+		} else if (this.objectClass.equals(CODEX)) {
+			if(StringUtils.isNotEmpty(this.codexIdentifier)){
+				filterList.add(new AttributeFilter("identifier", this.codexIdentifier,
+				CODEX));
+			}
+			
+		} else if (this.objectClass.equals(PERSON)) {
+			if (StringUtils.isNotEmpty(this.personName)) {
+				filterList.add(new AttributeFilter("name", this.personName,
+						PERSON));
+			}
+			if (StringUtils.isNotEmpty(this.personNameTranslit)) {
+				filterList.add(new AttributeFilter("name_translit",
+						this.personNameTranslit, PERSON));
+			}
+		}
+		if (filterList.size() > 0) {
+			resultMap = getWrapper().searchEntityByAttributeFilter(
+					filterList, 500);
+			for (Entity ent : resultMap.keySet()) {
+				this.entities.add(ent);
+			}
+			Collections.sort(entities);
+		}
+
+		if (resultMap.size() > 0) {
+			this.resultSummaryMsg = resultMap.size() + " items were found!";
+			this.advancedPaginator.setCurrentPage(0);
+			int entitiesCount = this.entities.size();
+			this.advancedPaginator.resetNumberOfPages(entitiesCount);
+			this.updateAdvancedEntities();
+		} else {
+			this.resultSummaryMsg = "No items were found!";
+		}
+	}
+	
+	public boolean isRenderedSearch(){
+		if(StringUtils.isNotEmpty(this.objectClass) && (
+				objectClass.equals(SUBJECT) ||
+				objectClass.equals(REPOSITORY) ||
+				objectClass.equals(ALIAS) || 
+				objectClass.equals(COLLECTION) ||
+				objectClass.equals(TEXT) ||
+				objectClass.equals(PERSON) ||
+				objectClass.equals(CODEX) ||
+				objectClass.equals(WITNESS) ||
+				objectClass.equals(PLACE))){
+			return true;
+		}
+		return false;
+	}
+	
+	public String actionSearchByAttributes() {
+		try {
+			this.searchByAttributes();	
+		} catch (Exception e) {
+			printInternalError(e);
+			logger.error(e.getMessage(), e);
+		}
+		
+		return GOTO_ENTITY_REPOSITORY;
+	}
+	
+	public String actionSearchByOwnvalue(){
+		try {
+			this.searchByOwnvalue();	
+		} catch (Exception e) {
+			printInternalError(e);
+			logger.error(e.getMessage(), e);
+		}
+		
+		return GOTO_ENTITY_REPOSITORY;
+	}
+
+	public boolean isAdvancedSearch() {
+		return advancedSearch;
+	}
+
+	public void setAdvancedSearch(boolean advancedSearch) {
+		this.advancedSearch = advancedSearch;
+	}
+
+	public String getTextFullTitle() {
+		return textFullTitle;
+	}
+
+	public void setTextFullTitle(String textFullTitle) {
+		this.textFullTitle = textFullTitle;
+	}
+
+	public String getTextFullTitleTranslit() {
+		return textFullTitleTranslit;
+	}
+
+	public void setTextFullTitleTranslit(String textFullTitleTranslit) {
+		this.textFullTitleTranslit = textFullTitleTranslit;
+	}
+
+	public String getTextShortTitle() {
+		return textShortTitle;
+	}
+
+	public void setTextShortTitle(String textShortTitle) {
+		this.textShortTitle = textShortTitle;
+	}
+
+	public String getPersonName() {
+		return personName;
+	}
+
+	public void setPersonName(String personName) {
+		this.personName = personName;
+	}
+
+	public String getPersonNameTranslit() {
+		return personNameTranslit;
+	}
+
+	public void setPersonNameTranslit(String personNameTranslit) {
+		this.personNameTranslit = personNameTranslit;
+	}
+
+	public String getObjectClass() {
+		return objectClass;
+	}
+
+	public void setObjectClass(String objectClass) {
+		this.objectClass = objectClass;
+	}
+
+	public List<Entity> getEntities() {
+		return this.entities;
+	}
+
+	public void setEntities(List<Entity> entities) {
+		this.entities = entities;
+	}
+
+	public List<SelectItem> getDefinitions() {
+		return definitions;
+	}
+
+	public void setDefinitions(List<SelectItem> definitions) {
+		this.definitions = definitions;
+	}
+
+	public String getResultMode() {
+		return resultMode;
+	}
+
+	public void setResultMode(String resultMode) {
+		this.resultMode = resultMode;
+	}
+
+	public String getResultSummaryMsg() {
+		return resultSummaryMsg;
+	}
+
+	public void setResultSummaryMsg(String resultSummaryMsg) {
+		this.resultSummaryMsg = resultSummaryMsg;
+	}
+	
+	public String getPage() {
+		return page;
+	}
+
+	public void setPage(String page) {
+		this.page = page;
+	}
+
+	public String getPageMsg() {
+		return pageMsg;
+	}
+
+	public void setPageMsg(String pageMsg) {
+		this.pageMsg = pageMsg;
+	}
+	public String getCodexIdentifier() {
+		return codexIdentifier;
+	}
+	public void setCodexIdentifier(String codexIdentifier) {
+		this.codexIdentifier = codexIdentifier;
+	}
+	public String getPlaceName() {
+		return placeName;
+	}
+	public void setPlaceName(String placeName) {
+		this.placeName = placeName;
+	}
+
+	public String getCollectionName() {
+		return collectionName;
+	}
+
+	public void setCollectionName(String collectionName) {
+		this.collectionName = collectionName;
+	}
+
+	public String getAliasAlias() {
+		return aliasAlias;
+	}
+
+	public void setAliasAlias(String aliasAlias) {
+		this.aliasAlias = aliasAlias;
+	}
+
+	public String getRepositoryName() {
+		return repositoryName;
+	}
+
+	public void setRepositoryName(String repositoryName) {
+		this.repositoryName = repositoryName;
+	}
+    
+    public String getSubjectType() {
+		return subjectType;
+	}
+
+	public void setSubjectType(String subjectType) {
+		this.subjectType = subjectType;
+	}
+
+	public List<SelectItem> getSuggestedSubjectTypes() {
+		return suggestedSubjectTypes;
+	}
+
+	public void setSuggestedSubjectTypes(List<SelectItem> suggestedTypes) {
+		this.suggestedSubjectTypes = suggestedTypes;
+	}
+	public List<Entity> getCurrentEntities() {
+		return currentEntities;
+	}
+
+	public void setCurrentEntities(List<Entity> currentEntities) {
+		this.currentEntities = currentEntities;
+	}
+
+	public String getWitnessFullTitle() {
+		return witnessFullTitle;
+	}
+
+	public void setWitnessFullTitle(String witnessFullTitle) {
+		this.witnessFullTitle = witnessFullTitle;
+	}
+
+	public String getWitnessFullTitleTranslit() {
+		return witnessFullTitleTranslit;
+	}
+
+	public void setWitnessFullTitleTranslit(String witnessFullTitleTranslit) {
+		this.witnessFullTitleTranslit = witnessFullTitleTranslit;
+	}
+
+	public String getWitnessAhlwardtNo() {
+		return witnessAhlwardtNo;
+	}
+
+	public void setWitnessAhlwardtNo(String witnessAhlwardtNo) {
+		this.witnessAhlwardtNo = witnessAhlwardtNo;
+	}
+
+	public String getOcTerm() {
+		return ocTerm;
+	}
+
+	public void setOcTerm(String ocTerm) {
+		this.ocTerm = ocTerm;
+	}
+
+	public String getCurrentTab() {
+		return currentTab;
+	}
+
+	public void setCurrentTab(String currentTab) {
+		this.currentTab = currentTab;
+	}
+	
+	
+}