view src/main/java/de/mpiwg/itgroup/ismi/merge/NonpublicEntitiesBean.java @ 190:b36a57a452a6

new Clean UI to find non-public references and witnesses and make them public.
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Fri, 09 Nov 2018 15:13:32 +0100
parents 34ac2e1b323a
children dedd218ad565
line wrap: on
line source

package de.mpiwg.itgroup.ismi.merge;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.mpi.openmind.repository.bo.Entity;
import org.mpi.openmind.repository.bo.Relation;
import org.mpi.openmind.repository.services.utils.RelationFilter;
import org.richfaces.event.ItemChangeEvent;

import de.mpiwg.itgroup.ismi.browse.EntityRepositoryBean;
import de.mpiwg.itgroup.ismi.browse.FullEntityRepositoryBean;
import de.mpiwg.itgroup.ismi.entry.beans.AbstractISMIBean;
import de.mpiwg.itgroup.ismi.entry.utils.PrivacityUtils;

public class NonpublicEntitiesBean extends AbstractISMIBean implements Serializable{
	
	private static Logger logger = Logger.getLogger(NonpublicEntitiesBean.class);
	
	private static final long serialVersionUID = 1L;
		
	protected FullEntityRepositoryBean browseBean;

    protected String selectedTab = "aut";
	
	
	public NonpublicEntitiesBean(){
		//logger.info("AdvancedSearchBean");
		this.reset();
	}
	
	public synchronized void reset(){
		logger.info("NonpublicEntitiesBean.reset()");
	    browseBean = new FullEntityRepositoryBean();	    
        logger.info("NonpublicEntitiesBean.reset() Done.");
	}
	
	
	/**
	 * Find non-public DIGITALIZATIONs of public CODEXs.
	 */
	public void actionFindNonpublicDigitalizations() {
		logger.debug("Start findNonpublicDigitalizations...");
		List<RelationFilter> relFilters = new ArrayList<RelationFilter>();
		/*
		 * find DIGITALIZATION is_digitalization_of CODEX relation
		 */
        browseBean = new FullEntityRepositoryBean();
	    browseBean.setObjectClass(DIGITALIZATION);
	    RelationFilter relFilter = new RelationFilter();
	    relFilter.relObjectClass = "is_digitalization_of";
	    relFilter.tarObjectClass = "CODEX";
	    relFilters.add(relFilter);
	    try {
	    	// search all digitalizations
            browseBean.searchByRelations(relFilters);
            // filter out non-public DIGITALIZATIONs of public CODEXs
            List<Entity> entities = browseBean.getEntities();
            List<Entity> nonpublicEntities = new ArrayList<Entity>();
            for (Entity ent : entities) {
            	if (!ent.getIsPublic()) {
            		List<Relation> rels = ent.getSourceRelations("is_digitalization_of", CODEX);
            		for (Relation rel : rels) {
            			Entity tar = getWrapper().getEntityById(rel.getTargetId());
            			if (tar.getIsPublic()) {
            				nonpublicEntities.add(ent);
            				break;
            			}
            		}
            	}
            }
            browseBean.updateEntities(nonpublicEntities);
            
        } catch (Exception e) {
            logger.error(e);
        }
		logger.debug("Done findNonpublicDigitalizations.");
	}
	
    /**
     * Makes the selected Entities public.
     * Uses PrivacityUtils.changeEntityPrivacity().
     * @return
     */
    public String actionMakeSelectedEntitiesPublic() {
        logger.info("MAKE SELECTED ENTITIES PUBLIC");
        List<String> textMsg = new ArrayList<String>();
        try {
            List<Entity> entities = browseBean.getEntities();
            if (entities.size() == 0) return null;
            for (Entity ent : entities) {
            		PrivacityUtils.changeEntityPrivacity(ent, true, getWrapper());
                    textMsg.add("Set public=true on "+ent.getShortString()+"\n");
            }
            // save only public state
            getWrapper().saveEntityListAsNodeWithoutContent(entities, null);
        } catch (Exception e) {
            logger.error(e);
        }
        for (String msg : textMsg) {
            this.addGeneralMsg(msg);
            logger.debug(msg);
        }
        addGeneralMsg(browseBean.getEntities().size() + " Entities were made public!");            
        return null;
    }
    
	/**
	 * Find non-public REFERENCEs of public Entities.
	 */
	public void actionFindNonpublicReferences() {
		logger.debug("Start findNonpublicReferences...");
		List<RelationFilter> relFilters = new ArrayList<RelationFilter>();
		/*
		 * find REFERENCE is_reference_of * relations
		 */
        browseBean = new FullEntityRepositoryBean();
	    browseBean.setObjectClass(REFERENCE);
	    RelationFilter relFilter = new RelationFilter();
	    relFilter.relObjectClass = "is_reference_of";
	    relFilter.tarObjectClass = "*";
	    relFilters.add(relFilter);
	    try {
	    	// search all References
            browseBean.searchByRelations(relFilters);
            // filter out non-public REFERENCEs of public Entities
            List<Entity> entities = browseBean.getEntities();
            List<Entity> nonpublicEntities = new ArrayList<Entity>();
            for (Entity ent : entities) {
            	if (!ent.getIsPublic()) {
            		List<Relation> rels = ent.getSourceRelations("is_reference_of", "*");
            		for (Relation rel : rels) {
            			Entity tar = getWrapper().getEntityById(rel.getTargetId());
            			if (tar.getIsPublic()) {
            				nonpublicEntities.add(ent);
            				break;
            			}
            		}
            	}
            }
            browseBean.updateEntities(nonpublicEntities);
            
        } catch (Exception e) {
            logger.error(e);
        }
		logger.debug("Done findNonpublicReferences.");
	}
	
	/**
	 * Find non-public WITNESSes of public TEXTs.
	 */
	public void actionFindNonpublicWitnesses() {
		logger.debug("Start findNonpublicWitnesses...");
		List<RelationFilter> relFilters = new ArrayList<RelationFilter>();
		/*
		 * find WITNESS is_exemplar_of TEXT relation
		 */
        browseBean = new FullEntityRepositoryBean();
	    browseBean.setObjectClass(WITNESS);
	    RelationFilter relFilter = new RelationFilter();
	    relFilter.relObjectClass = "is_exemplar_of";
	    relFilter.tarObjectClass = "TEXT";
	    relFilters.add(relFilter);
	    try {
	    	// search all Witnesses
            browseBean.searchByRelations(relFilters);
            // filter out non-public Witnesses of public CODEXs
            List<Entity> entities = browseBean.getEntities();
            List<Entity> nonpublicEntities = new ArrayList<Entity>();
            for (Entity ent : entities) {
            	if (!ent.getIsPublic()) {
            		List<Relation> rels = ent.getSourceRelations("is_exemplar_of", TEXT);
            		for (Relation rel : rels) {
            			Entity tar = getWrapper().getEntityById(rel.getTargetId());
            			if (tar.getIsPublic()) {
            				nonpublicEntities.add(ent);
            				break;
            			}
            		}
            	}
            }
            browseBean.updateEntities(nonpublicEntities);
            
        } catch (Exception e) {
            logger.error(e);
        }
		logger.debug("Done findNonpublicWitnesses.");
	}
	
    
    public EntityRepositoryBean getBrowseBean() {
        return browseBean;
    }

    public void listenerTabChange(ItemChangeEvent event) {
        reset();
    	String url = "?formIndex=" + selectedTab;
    	redirect(null, url);
    }

    public String getSelectedTab() {
    	return selectedTab;
    }

    public void setSelectedTab(String selectedMissingRelationsTab) {
    	selectedTab = selectedMissingRelationsTab;
    }


}