view src/main/java/de/mpiwg/itgroup/ismi/merge/NonpublicEntitiesBean.java @ 188:34ac2e1b323a

new Clean UI to find non-public digitalizations of public codices and make them public.
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Tue, 06 Nov 2018 20:05:49 +0100
parents
children b36a57a452a6
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("MissingRelationsBean.reset()");
	    browseBean = new FullEntityRepositoryBean();	    
        logger.info("MissingRelationsBean.reset() Done.");
	}
	
	
	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 digitalizations public.
     * Uses PrivacityUtils.setTextAndMorePrivacity().
     * @return
     */
    public String actionMakeDigitalizationsPublic() {
        logger.info("MAKE DIGITALIZATIONS 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() + " DIGITALIZATIONS were made public!");            
        return null;
    }
    
    
    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;
    }


}