view src/main/java/de/mpiwg/itgroup/ismi/search/beans/DisplayBean.java @ 83:e07e9f5afaa3

fix display bug when WITNESS has no CODEX.
author casties
date Mon, 26 Sep 2016 17:25:43 +0200
parents 985dcecba904
children
line wrap: on
line source

package de.mpiwg.itgroup.ismi.search.beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;
import org.mpi.openmind.repository.bo.Entity;

import de.mpiwg.itgroup.ismi.auxObjects.SelectItem0;
import de.mpiwg.itgroup.ismi.entry.beans.AbstractISMIBean;
import de.mpiwg.itgroup.ismi.entry.utils.PrivacityUtils;
import de.mpiwg.itgroup.ismi.utils.templates.TitleTemplate;
import de.mpiwg.itgroup.ismi.utils.templates.WitnessTemplate;

public class DisplayBean  extends AbstractISMIBean {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1296816397468908012L;

	private static Logger logger = Logger.getLogger(DisplayBean.class);
	
	protected TitleTemplate title;
	protected WitnessTemplate witness;
	
	//Witness elements
	protected List<SelectItem0> witnessItems = new ArrayList<SelectItem0>();
	protected Long selectedWitnessId;
	protected boolean showWitnessesWithScans = false;
	
	//Title elements
	protected Long selectedTitleId;
	protected List<SelectItem0> titleItems = new ArrayList<SelectItem0>();
	
	protected void resetDisplay(){
		this.witness = null;
		this.selectedWitnessId = null;
		this.title = null;
		this.selectedTitleId = null;
		this.witnessItems = new ArrayList<SelectItem0>();
	}
	
	public void showTitle(Long textId){
		this.selectedTitleId = textId;
		
		this.witness = null;
		this.witnessItems = new ArrayList<SelectItem0>();
		this.selectedWitnessId = null;
		
		long start = System.currentTimeMillis();
		
		Entity entTitle = getWrapper().getEntityById(this.selectedTitleId);
		
		if(this.selectedTitleId != null){
			
			this.titleItems = SelectItem0.valueChange(titleItems, textId);
			this.title = new TitleTemplate(entTitle, getWrapper(), false);
			
			//****** getting witnesses **********************
			long startWitness = System.currentTimeMillis();
			List<Entity> list = new ArrayList<Entity>();
			List<Entity> allwits = getWrapper().getSourcesForTargetRelation(selectedTitleId, is_exemplar_of, WITNESS, -1);
			boolean hasScans = false;
            for (Entity witness : allwits) {
                // get CODEX for WITNESS
                List<Entity> codices = getWrapper().getTargetsForSourceRelation(witness.getId(), is_part_of, CODEX, 1);
                if (codices.isEmpty()) {
                    logger.error("WITNESS ["+witness.getId()+"] has no CODEX!");
                } else {
                    Entity codex = codices.get(0);
                    // look at DIGITALIZATION of CODEX
                    List<Entity> digis = getWrapper().getSourcesForTargetRelation(codex.getId(), is_digitalization_of, DIGITALIZATION, 1);
                    hasScans = !digis.isEmpty();
                    if (this.showWitnessesWithScans && !hasScans) {
                        continue;
                    }
                }
                String witlabel = witness.getOwnValue() + " [" + witness.getId() + "]" + (hasScans ? "+S" : "");
                SelectItem0 item = new SelectItem0(witness.getId(), witlabel, true);
                this.witnessItems.add(item);
                list.add(witness);
            }
			
			if(list.size() > 0){
				this.showWitness(list.get(0).getId());
			}
			
			long diff = System.currentTimeMillis() - startWitness;
			if(diff > 1000){
				logger.info("Time - listenerShowTitle().getSourcesForTargetRelation(title, 'X', WITNESS, -1) = " + diff + " [ms], Text id= " + this.selectedTitleId);
				
			}
			//************************************************ 
		}
		long diff = System.currentTimeMillis() - start;
		
		if(diff > 1000){
			logger.info("Time - listenerShowTitle() " + diff + " [ms], Text id= " + this.selectedTitleId);
		}
	}
	
	
	public void listenerShowWitness0(ActionEvent event){
		SelectItem0 item = (SelectItem0)getRequestBean("witnessItem");
		if (item != null) {
			this.redirect(null, "?textId=" + selectedTitleId + "&witnessId=" + item.getValue() + "#witnesses");
		}
	}
	
		
	public void showWitness(Long selectedWitnessId) {
		
		this.selectedWitnessId = selectedWitnessId;
		
		if (this.selectedWitnessId != null) {
			this.witnessItems = SelectItem0.valueChange(witnessItems, selectedWitnessId);
			Entity entWitness = getWrapper().getEntityById(selectedWitnessId);
			
			if (entWitness != null) {
				this.witness = new WitnessTemplate(entWitness, getWrapper(), true);
			}	
		}
	}
	
    /**
     * This method is called from the result of the simple search. It will set the title(text) into the currentText to be edited.
     * @return
     */
    public String actionEditTitle() {
    	if(this.selectedTitleId != null){
        	getSessionBean().editEntity(getWrapper().getEntityById(selectedTitleId));
        	return "entry_edit_entity";
    	}
    	return "";
    }
	
	/**
	 * This method is called from the result of the simple search. It will set
	 * the witness into the currentWitness to be edited.
	 * 
	 * @return
	 */
	public String actionEditWitness() {
		if (this.selectedWitnessId != null) {
			getSessionBean().editEntity(getWrapper().getEntityById(selectedWitnessId));
			return "entry_edit_entity";
		}
		return "";
	}
	
	//Privacity titles
	public void changePrivacity4Title(ActionEvent event){
		try {
			if(selectedTitleId != null){
				List<Entity> saveList = PrivacityUtils.changePrivacity4Title(getWrapper().getEntityById(selectedTitleId), null, getWrapper());
				getWrapper().saveEntityListAsNodeWithoutContent(saveList, getUserName());
				this.showTitle(selectedTitleId);
			}			
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			printInternalError(e);
		}
	}
	
	//Privacity witnesses
	public void changePrivacity4Witness(ActionEvent event){
		try {
			if(selectedWitnessId != null){
				List<Entity> saveList = PrivacityUtils.changePrivacity4Witness(getWrapper().getEntityById(selectedWitnessId), null, getWrapper());
				getWrapper().saveEntityListAsNodeWithoutContent(saveList, getUserName());
				this.showWitness(selectedWitnessId);
			}	
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			printInternalError(e);
		}
		
	}
	
	private void changeAllWitnesses(boolean privacity) throws Exception{
		List<Entity> saveList = new ArrayList<Entity>();
		for(SelectItem item : witnessItems){
			Long id = (Long)item.getValue();
			Entity witness = getWrapper().getEntityById(id);
			saveList.addAll(PrivacityUtils.changePrivacity4Witness(witness, privacity, getWrapper()));
		}
		getWrapper().saveEntityListAsNodeWithoutContent(saveList, getUserName());
		this.showWitness(selectedWitnessId);
	}
	
	public void listenerMakeAllWitnessesPublic(ActionEvent event){
		try {
			this.changeAllWitnesses(true);	
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			printInternalError(e);
		}
	}
	
	public void listenerMakeAllWitnessesPrivate(ActionEvent event){
		try {
			this.changeAllWitnesses(false);	
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			printInternalError(e);
		}
		
	}
	
	
	public void changeShowWitnessesWithScans() {
	    if (this.selectedTitleId != null) {
	        showTitle(this.selectedTitleId);
	    }
	}
	
	public int getWitnessItemsSize() {
		if(witnessItems != null)
			return witnessItems.size();
		return 0;
	}

	public TitleTemplate getTitle() {
		return title;
	}

	public WitnessTemplate getWitness() {
		return witness;
	}

	public List<SelectItem0> getWitnessItems() {
		return witnessItems;
	}

	public Long getSelectedWitnessId() {
		return selectedWitnessId;
	}

	public Long getSelectedTitleId() {
		return selectedTitleId;
	}

	public void setSelectedWitnessId(Long selectedWitnessId) {
		this.selectedWitnessId = selectedWitnessId;
	}

	public void setSelectedTitleId(Long selectedTitleId) {
		this.selectedTitleId = selectedTitleId;
	}

    public boolean isShowWitnessesWithScans() {
        return showWitnessesWithScans;
    }

    public void setShowWitnessesWithScans(boolean showWitnessesWithScans) {
        this.showWitnessesWithScans = showWitnessesWithScans;
    }
}