changeset 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 be6bc580b137
children 8aff920ec7c0
files src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java src/main/java/de/mpiwg/itgroup/ismi/entry/beans/SessionBean.java src/main/java/de/mpiwg/itgroup/ismi/merge/NonpublicEntitiesBean.java src/main/webapp/clean/components/nonpublicDigitalization.xhtml src/main/webapp/clean/nonpublicEntities.xhtml src/main/webapp/templates/main_template.xhtml
diffstat 6 files changed, 354 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java	Tue Oct 30 20:09:59 2018 +0100
+++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java	Tue Nov 06 20:05:49 2018 +0100
@@ -97,19 +97,29 @@
         // sort List (by attribute)
         Collections.sort(resultList,
                 getEntityAttributeComparator(this.sortAttributeName, this.sortAttributeNumerically));
-        this.entities = resultList;
+
+        updateEntities(resultList);
+        logger.debug("Done sortByAttributes.");
+    }
 
-        if (resultList.size() > 0) {
-            this.resultSummaryMsg = resultList.size() + " items were found!";
+	/**
+	 * Update paginator and summary message with new entities list.
+	 * 
+	 * @param resultList
+	 */
+	public void updateEntities(List<Entity> resultList) {
+        this.entities = resultList;
+		if (resultList.size() > 0) {
+            int entitiesCount = this.entities.size();
+            this.resultSummaryMsg = entitiesCount + " 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!";
+            this.currentEntities = resultList;
         }
-        logger.debug("Done sortByAttributes.");
-    }
+	}
 
     /**
      * Returns Comparator for Entities that uses the Attribute attname.
@@ -230,16 +240,8 @@
         
         // sort List (by ownValue)
         Collections.sort(entities);
-
-        if (entities.size() > 0) {
-            int entitiesCount = entities.size();
-            this.resultSummaryMsg = entitiesCount + " items were found!";
-            this.advancedPaginator.setCurrentPage(0);
-            this.advancedPaginator.resetNumberOfPages(entitiesCount);
-            this.updateAdvancedEntities();
-        } else {
-            this.resultSummaryMsg = "No items were found!";
-        }
+        
+        updateEntities(entities);
         logger.debug("Done searchByRelations.");
     }
 
--- a/src/main/java/de/mpiwg/itgroup/ismi/entry/beans/SessionBean.java	Tue Oct 30 20:09:59 2018 +0100
+++ b/src/main/java/de/mpiwg/itgroup/ismi/entry/beans/SessionBean.java	Tue Nov 06 20:05:49 2018 +0100
@@ -28,6 +28,7 @@
 import de.mpiwg.itgroup.ismi.merge.GeneralMerge;
 import de.mpiwg.itgroup.ismi.merge.ImportMerge;
 import de.mpiwg.itgroup.ismi.merge.MissingRelationsBean;
+import de.mpiwg.itgroup.ismi.merge.NonpublicEntitiesBean;
 import de.mpiwg.itgroup.ismi.merge.PublicByAuthorBean;
 import de.mpiwg.itgroup.ismi.merge.ReferenceMerge;
 import de.mpiwg.itgroup.ismi.publicView.DynamicPageEditor;
@@ -51,6 +52,7 @@
 	private transient AdvancedSearchBean advancedSearch = new AdvancedSearchBean();
 	private transient PublicByAuthorBean publicByAuthor = new PublicByAuthorBean();
 	private transient MissingRelationsBean missingRelations = new MissingRelationsBean();
+	private transient NonpublicEntitiesBean nonpublicEntities = new NonpublicEntitiesBean();
 	
 	private EntityDetailsBean entDetailsForm = new EntityDetailsBean();
 	
@@ -1123,6 +1125,14 @@
 	public void setMissingRelations(MissingRelationsBean missingRelations) {
 		this.missingRelations = missingRelations;
 	}
+
+	public NonpublicEntitiesBean getNonpublicEntities() {
+		return nonpublicEntities;
+	}
+
+	public void setNonpublicEntities(NonpublicEntitiesBean nonpublicEntities) {
+		this.nonpublicEntities = nonpublicEntities;
+	}
 	
 	
 	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/ismi/merge/NonpublicEntitiesBean.java	Tue Nov 06 20:05:49 2018 +0100
@@ -0,0 +1,127 @@
+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;
+    }
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/clean/components/nonpublicDigitalization.xhtml	Tue Nov 06 20:05:49 2018 +0100
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:a4j="http://richfaces.org/a4j"
+	xmlns:rich="http://richfaces.org/rich">
+
+<body>
+	<ui:composition>
+
+        <h2 style="color:black">non-public Digitalizations of public Codices</h2>
+
+		<h:panelGrid columns="3" styleClass="displayPanel"
+			columnClasses="displayPanelColumn01,displayPanelColumn02">
+
+            <a4j:commandButton value="show non-public digitalizations"
+                actionListener="#{Session.nonpublicEntities.actionFindNonpublicDigitalizations}"
+                render="showDigiPanel" />
+            <h:outputText/>
+            <h:outputText/>
+
+			<a4j:commandButton value="make all these digitalizations public"
+				actionListener="#{Session.nonpublicEntities.actionMakeDigitalizationsPublic}"
+				render="showDigiPanel" />
+            <h:outputText/>
+            <h:outputText/>
+
+		</h:panelGrid>
+
+		<h:panelGrid id="showDigiPanel" columns="1"
+			style="margin-left: auto; margin-right: auto; text-align: center; width: 100%;">
+
+			<h:outputText
+				value="#{Session.nonpublicEntities.browseBean.resultSummaryMsg}"
+				rendered="#{!empty Session.nonpublicEntities.browseBean.resultSummaryMsg}"
+				styleClass="summaryMsg" />
+
+			<h:column
+				rendered="#{!empty Session.nonpublicEntities.browseBean.entities}">
+				<h:outputText value="go to page" styleClass="sumaryMsg" />
+				<h:inputText value="#{Session.nonpublicEntities.browseBean.page}"
+					size="4" />
+				<h:commandButton value="submit"
+					actionListener="#{Session.nonpublicEntities.browseBean.actionGoToPageAdvancedResult}" />
+				<h:outputText value=" #{Session.nonpublicEntities.browseBean.pageMsg}"
+					rendered="#{!empty Session.nonpublicEntities.browseBean.pageMsg}"
+					style="color:red" />
+			</h:column>
+
+
+			<h:column
+				rendered="#{!empty Session.nonpublicEntities.browseBean.entities}">
+				<h:panelGroup>
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-first.gif"
+						style="border:none;" title="First Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedFirst}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
+						style="border:none;" title="Fast Backwards"
+						action="#{Session.nonpublicEntities.browseBean.advancedFastRewind}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-previous.gif"
+						style="border:none;" title="Previous Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedPrevious}" />
+
+					<h:outputText
+						value="#{Session.nonpublicEntities.browseBean.advancedPaginator.recordStatus}"
+						styleClass="sumaryMsg" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-next.gif"
+						style="border:none;" title="Next Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedNext}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
+						style="border:none;" title="Fast Forward"
+						action="#{Session.nonpublicEntities.browseBean.advancedFastForward}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-last.gif"
+						style="border:none;" title="Last Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedLast}" />
+				</h:panelGroup>
+			</h:column>
+
+			<rich:dataTable id="digiDataTable" rows="30"
+				value="#{Session.nonpublicEntities.browseBean.currentEntities}"
+				rendered="#{!empty Session.nonpublicEntities.browseBean.currentEntities}"
+				var="entity" styleClass="rsPanel" columnClasses="rsPanelColumn">
+				<h:column style="text-align:left">
+                    <f:facet name="header">Text</f:facet>
+                    <h:outputLink target="_blank"
+                        value="#{ApplicationBean1.root}/browse/entityDetails.xhtml?eid=#{entity.id}">
+                        <h:outputText
+                            value="#{entity.ownValue} [#{entity.id}]" />
+                    </h:outputLink>
+					<h:commandButton
+						action="#{Session.nonpublicEntities.browseBean.actionEdit}"
+						rendered="#{Session.canEdit}"
+						image="/resources/css/xp/css-images/edit16.gif"
+						title="Edit this entity" />
+				</h:column>
+                <h:column style="text-align:left">
+                    <f:facet name="header">State</f:facet>
+                    <h:outputText value="#{entity.privacity}" />
+                </h:column>
+			</rich:dataTable>
+
+			<h:column
+				rendered="#{!empty Session.nonpublicEntities.browseBean.entities}">
+				<h:panelGroup>
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-first.gif"
+						style="border:none;" title="First Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedFirst}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
+						style="border:none;" title="Fast Backwards"
+						action="#{Session.nonpublicEntities.browseBean.advancedFastRewind}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-previous.gif"
+						style="border:none;" title="Previous Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedPrevious}" />
+
+					<h:outputText
+						value="#{Session.nonpublicEntities.browseBean.advancedPaginator.recordStatus}"
+						styleClass="sumaryMsg" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-next.gif"
+						style="border:none;" title="Next Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedNext}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
+						style="border:none;" title="Fast Forward"
+						action="#{Session.nonpublicEntities.browseBean.advancedFastForward}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-last.gif"
+						style="border:none;" title="Last Page"
+						action="#{Session.nonpublicEntities.browseBean.advancedLast}" />
+				</h:panelGroup>
+			</h:column>
+
+
+		</h:panelGrid>
+
+
+
+	</ui:composition>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/clean/nonpublicEntities.xhtml	Tue Nov 06 20:05:49 2018 +0100
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:a4j="http://richfaces.org/a4j"
+	xmlns:rich="http://richfaces.org/rich">
+
+<body>
+	<ui:composition template="/templates/privateTemplate.xhtml">
+
+        <h:outputStylesheet name="/css/ismi-db/repository.css" />
+
+		<ui:define name="privateContent">
+			
+			<div id="pageTitle">
+				<h:outputText value="Find Non-Public Entities" />
+			</div>
+
+			<h:panelGrid columns="1"
+				styleClass="mainPanel">
+
+				<rich:tabPanel id="tabPanel"
+    				itemChangeListener="#{Session.nonpublicEntities.listenerTabChange}"
+					activeItem="#{Session.nonpublicEntities.selectedTab}">
+				
+                    <rich:tab header="Digitalization" name="aut">
+                        <ui:include src="components/nonpublicDigitalization.xhtml" />
+                    </rich:tab>
+                </rich:tabPanel>
+
+			</h:panelGrid>
+
+
+		</ui:define>
+	</ui:composition>
+
+</body>
+</html>
\ No newline at end of file
--- a/src/main/webapp/templates/main_template.xhtml	Tue Oct 30 20:09:59 2018 +0100
+++ b/src/main/webapp/templates/main_template.xhtml	Tue Nov 06 20:05:49 2018 +0100
@@ -181,6 +181,10 @@
                 <rich:menuItem label="Find Missing Relations"
                     onclick="document.location.href='#{ApplicationBean1.root}/clean/missingRelations.xhtml'">
                 </rich:menuItem>
+
+                <rich:menuItem label="Find Non-Public Entities"
+                    onclick="document.location.href='#{ApplicationBean1.root}/clean/nonpublicEntities.xhtml'">
+                </rich:menuItem>
 			</rich:dropDownMenu>
 
 			<h:outputLink  rendered="#{Session.canCreate}"