Mercurial > hg > ismi-richfaces
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}"