changeset 169:0b5d02012299 public_by_author

more work on publicByAuthor feature.
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Thu, 31 May 2018 20:26:10 +0200
parents e9ab943ec528
children 8604b368ec19
files src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java src/main/java/de/mpiwg/itgroup/ismi/merge/PublicByAuthorBean.java src/main/webapp/clean/components/findAuthor.xhtml src/main/webapp/clean/components/publicFindAuthor.xhtml src/main/webapp/clean/components/publicShowSubjects.xhtml src/main/webapp/clean/publicByAuthor.xhtml
diffstat 8 files changed, 406 insertions(+), 217 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java	Wed May 30 20:23:45 2018 +0200
+++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java	Thu May 31 20:26:10 2018 +0200
@@ -22,57 +22,57 @@
 
 	private static final long serialVersionUID = 3154642100627969159L;
 
-	private static Logger logger = Logger.getLogger(AbstractEntityRepositoryBean.class);
+	protected static Logger logger = Logger.getLogger(AbstractEntityRepositoryBean.class);
 	
 	public static String MODE_ADVANCED = "advanced";
 	public static String MODE_ALL = "all";
 	public static String MODE_NONE = "none";
 	
 
-	private String objectClass = null;
-	private List<Entity> entities = new ArrayList<Entity>();
-	private List<Entity> currentEntities = new ArrayList<Entity>();
+	protected String objectClass = null;
+	protected List<Entity> entities = new ArrayList<Entity>();
+	protected List<Entity> currentEntities = new ArrayList<Entity>();
 
-	private List<SelectItem> definitions = new ArrayList<SelectItem>();
+	protected List<SelectItem> definitions = new ArrayList<SelectItem>();
 	
-	private transient DataPaginator advancedPaginator = new DataPaginator();
+	protected transient DataPaginator advancedPaginator = new DataPaginator();
 
-	private String ocTerm;
-	private String currentTab;
+	protected String ocTerm;
+	protected String currentTab;
 	
-	private String textFullTitle;
-	private String textFullTitleTranslit;
-	private String textShortTitle;
+	protected String textFullTitle;
+	protected String textFullTitleTranslit;
+	protected String textShortTitle;
 
-	private String personName;
-	private String personNameTranslit;
+	protected String personName;
+	protected String personNameTranslit;
 
-	private String codexIdentifier;
+	protected String codexIdentifier;
 	
-	private String collectionName;
+	protected String collectionName;
 
-	private String placeName;
-	private String placeType;
+	protected String placeName;
+	protected String placeType;
 	
-	private String aliasAlias;
+	protected String aliasAlias;
 	
-	private String repositoryName;
+	protected String repositoryName;
 	
-	private String witnessFullTitle;
-	private String witnessFullTitleTranslit;
-	private String witnessAhlwardtNo;
+	protected String witnessFullTitle;
+	protected String witnessFullTitleTranslit;
+	protected String witnessAhlwardtNo;
 
-	private boolean advancedSearch = false;
-	private String resultMode = MODE_NONE;
-	private String resultSummaryMsg;
+	protected boolean advancedSearch = false;
+	protected String resultMode = MODE_NONE;
+	protected String resultSummaryMsg;
 	
-	private String subjectType;
-	private List<SelectItem> suggestedSubjectTypes = new ArrayList<SelectItem>();
+	protected String subjectType;
+	protected List<SelectItem> suggestedSubjectTypes = new ArrayList<SelectItem>();
 	
-	private String referenceBibIdNo;
+	protected String referenceBibIdNo;
 
-	private String page;
-	private String pageMsg;
+	protected String page;
+	protected String pageMsg;
 	
 	public static String main_subject = "main_subject";
 	public static String sub_subject = "sub_subject";
@@ -87,7 +87,7 @@
     /**
      * Put the current subset of this.entites in this.currentEntities.
      */
-    private void updateAdvancedEntities() {
+    protected void updateAdvancedEntities() {
         if (StringUtils.isNotEmpty(getObjectClass())) {
             this.advancedPaginator.initCount();
             int startRecord = this.advancedPaginator.getCurrentPage() * this.advancedPaginator.getItemsPerPage();
--- a/src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java	Wed May 30 20:23:45 2018 +0200
+++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java	Thu May 31 20:26:10 2018 +0200
@@ -23,7 +23,7 @@
     
 	private static final long serialVersionUID = -2380877853539157567L;
 	
-	private transient DataPaginator paginator = new DataPaginator();
+	protected transient DataPaginator paginator = new DataPaginator();
 	
 	public EntityRepositoryBean(){
 		super();
@@ -36,7 +36,7 @@
 	}
 
 
-    private void updateEntities() {
+    protected void updateEntities() {
         if (StringUtils.isNotEmpty(getObjectClass())) {
             this.paginator.initCount();
             int startRecord = this.paginator.getCurrentPage() * this.paginator.getItemsPerPage();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java	Thu May 31 20:26:10 2018 +0200
@@ -0,0 +1,55 @@
+package de.mpiwg.itgroup.ismi.browse;
+
+import java.util.ArrayList;
+
+import org.apache.commons.lang.StringUtils;
+import org.mpi.openmind.cache.WrapperService;
+import org.mpi.openmind.repository.bo.Entity;
+
+/**
+ * EntityRepositoryBean for full Entities with Attributes and Relations loaded.
+ * 
+ * @author casties
+ *
+ */
+public class FullEntityRepositoryBean extends EntityRepositoryBean {
+
+    private static final long serialVersionUID = 8022526185079972610L;
+
+    /* (non-Javadoc)
+     * @see de.mpiwg.itgroup.ismi.browse.AbstractEntityRepositoryBean#updateAdvancedEntities()
+     */
+    @Override
+    protected void updateAdvancedEntities() {
+        if (StringUtils.isNotEmpty(getObjectClass())) {
+            this.advancedPaginator.initCount();
+            int startRecord = this.advancedPaginator.getCurrentPage() * this.advancedPaginator.getItemsPerPage();
+            if ((this.advancedPaginator.getCurrentPage() + 1) == this.advancedPaginator.getNumberOfPages()) {
+                int mod = this.entities.size() % advancedPaginator.getItemsPerPage();
+                if (mod == 0) {
+                    this.currentEntities = entities.subList(startRecord,
+                            startRecord + this.advancedPaginator.getItemsPerPage());
+                } else {
+                    this.currentEntities = entities.subList(startRecord, startRecord + mod);
+                }
+
+            } else {
+                this.currentEntities = entities.subList(startRecord,
+                        startRecord + this.advancedPaginator.getItemsPerPage());
+            }
+        } else {
+            // empty object_class
+            this.currentEntities = new ArrayList<Entity>();
+        }
+        // make sure all entities are loaded
+        WrapperService store = getWrapper();
+        for (Entity ent : this.currentEntities) {
+            if (ent.isLightweight()) {
+               store.getEntityContent(ent);
+            }
+        }
+    }
+
+    
+    
+}
--- a/src/main/java/de/mpiwg/itgroup/ismi/merge/PublicByAuthorBean.java	Wed May 30 20:23:45 2018 +0200
+++ b/src/main/java/de/mpiwg/itgroup/ismi/merge/PublicByAuthorBean.java	Thu May 31 20:26:10 2018 +0200
@@ -1,13 +1,18 @@
 package de.mpiwg.itgroup.ismi.merge;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.faces.event.ActionEvent;
 import javax.faces.event.ValueChangeEvent;
 
 import org.apache.log4j.Logger;
+import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.bo.Relation;
 
 import de.mpiwg.itgroup.ismi.browse.EntityRepositoryBean;
+import de.mpiwg.itgroup.ismi.browse.FullEntityRepositoryBean;
 import de.mpiwg.itgroup.ismi.entry.beans.AbstractISMIBean;
 
 public class PublicByAuthorBean extends AbstractISMIBean implements Serializable{
@@ -17,8 +22,13 @@
 	private static final long serialVersionUID = 1L;
 	
 	private String findAuthorName = "";
-	private long timeExecution;
-
+	protected Long selectedPersonId = 0l;
+	
+	protected Entity selectedPerson;
+	protected List<Entity> selectedPersonTexts;
+    protected List<Entity> selectedPersonSubjects;
+	
+	
 	private EntityRepositoryBean browseBean;
 	
 	
@@ -29,34 +39,49 @@
 	
 	public void reset(){
 		//logger.info("AdvancedSearchBean.reset()");
-	    browseBean = new EntityRepositoryBean();
+	    browseBean = new FullEntityRepositoryBean();
 	    browseBean.setObjectClass("PERSON");
-	}
-	
-	public void listenerChange(ValueChangeEvent event){
-		/*
-		logger.info(event.getOldValue());
-		logger.info(event.getNewValue());
-		*/
+	    
+	    selectedPersonTexts = new ArrayList<Entity>();
 	}
 	
-	public void listenerFindAuthorSearch(ActionEvent event){
-		try {
-			long start = System.currentTimeMillis();
-			this.search();
-			long end = System.currentTimeMillis();
-			this.timeExecution = end - start;
-			logger.info(toString() + " time execution=" + (timeExecution));
-		} catch (Exception e) {
-			logger.error(e.getMessage(), e);
-			printInternalError(e);
-		}
+	public void listenerAuthorIdSearch(ActionEvent event) {
+        setSelectedPersonById();
+	}
 
+    private void setSelectedPersonById() {
+        Entity ent = getWrapper().getEntityById(selectedPersonId);
+        if (ent != null) {
+            ent = getWrapper().getEntityContent(ent);
+            selectedPerson = ent;
+            updateSelectedPerson();
+        }
+    }
+	
+    
+
+	public void updateSelectedPerson() {
+	    // load all texts by this author
+	    selectedPersonTexts = new ArrayList<Entity>();
+	    List<Relation> textRels = selectedPerson.getTargetRelations("was_created_by", "TEXT");
+	    for (Relation rel : textRels) {
+	        Long textID = rel.getSourceId();
+	        Entity text = getWrapper().getEntityByIdWithContent(textID);
+	        selectedPersonTexts.add(text);
+	    }
 	}
 	
 
+	public String actionSelectPerson() {
+       Entity entity = (Entity) getRequestBean("entity");
+       selectedPersonId = entity.getId();
+       setSelectedPersonById();
+       // switch tab
+       getSessionBean().setSelectedPublicByAuthorTab("02");
+       return null;
+	}
 	
-	public String actionSearch(){
+    public String actionSearch(){
 		this.search();
 		return null;
 	}
@@ -90,4 +115,45 @@
         return browseBean;
     }
 
+    /**
+     * @return the selectedPersonId
+     */
+    public long getSelectedPersonId() {
+        return selectedPersonId;
+    }
+
+    /**
+     * @param selectedPersonId the selectedPersonId to set
+     */
+    public void setSelectedPersonId(long selectedPersonId) {
+        this.selectedPersonId = selectedPersonId;
+    }
+    /**
+     * @return the selectedPerson
+     */
+    public Entity getSelectedPerson() {
+        return selectedPerson;
+    }
+
+    /**
+     * @return the selectedPersonTexts
+     */
+    public List<Entity> getSelectedPersonTexts() {
+        return selectedPersonTexts;
+    }
+
+    /**
+     * @return the selectedPersonSubjects
+     */
+    public List<Entity> getSelectedPersonSubjects() {
+        return selectedPersonSubjects;
+    }
+
+    /**
+     * @param selectedPersonId the selectedPersonId to set
+     */
+    public void setSelectedPersonId(Long selectedPersonId) {
+        this.selectedPersonId = selectedPersonId;
+    }
+
 }
--- a/src/main/webapp/clean/components/findAuthor.xhtml	Wed May 30 20:23:45 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-<!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>
-
-
-
-		<h:panelGrid columns="2" styleClass="displayPanel"
-			columnClasses="displayPanelColumn01,displayPanelColumn02">
-
-			<h:panelGrid columns="1">
-				<h:outputLabel value="Person name" />
-				<h:outputLabel value="(name_translit)" />
-			</h:panelGrid>
-			<h:inputText value="#{Session.publicByAuthor.browseBean.personNameTranslit}" />
-
-            <a4j:commandButton value="show all"
-                actionListener="#{Session.publicByAuthor.listenerAllAuthorSearch}"
-                render="selectPersonPanel" />
-
-			<a4j:commandButton value="search"
-				actionListener="#{Session.publicByAuthor.browseBean.actionSearchByAttributes}"
-				render="selectPersonPanel" />
-
-
-		</h:panelGrid>
-
-		<h:panelGrid id="selectPersonPanel" columns="1"
-			style="margin-left: auto; margin-right: auto; text-align: center; width: 100%;"
-			>
-
-
-			<h:outputText
-				value="#{Session.publicByAuthor.browseBean.resultSummaryMsg}"
-				rendered="#{!empty Session.publicByAuthor.browseBean.resultSummaryMsg}"
-				styleClass="sumaryMsg" />
-
-			<h:column
-				rendered="#{!empty Session.publicByAuthor.browseBean.entities}">
-				<h:outputText value="go to page" styleClass="sumaryMsg" />
-				<h:inputText value="#{Session.publicByAuthor.browseBean.page}"
-					size="4" />
-				<h:commandButton value="submit"
-					actionListener="#{Session.publicByAuthor.browseBean.actionGoToPageAdvancedResult}" />
-				<h:outputText value=" #{Session.publicByAuthor.browseBean.pageMsg}"
-					rendered="#{!empty Session.publicByAuthor.browseBean.pageMsg}"
-					style="color:red" />
-			</h:column>
-
-
-			<h:column
-				rendered="#{!empty Session.publicByAuthor.browseBean.entities}">
-				<h:panelGroup>
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-first.gif"
-						style="border:none;" title="First Page"
-						action="#{Session.publicByAuthor.browseBean.advancedFirst}" />
-
-					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
-						style="border:none;" title="Fast Backwards"
-						action="#{Session.publicByAuthor.browseBean.advancedFastRewind}" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-previous.gif"
-						style="border:none;" title="Previous Page"
-						action="#{Session.publicByAuthor.browseBean.advancedPrevious}" />
-
-					<h:outputText
-						value="#{Session.publicByAuthor.browseBean.advancedPaginator.recordStatus}"
-						styleClass="sumaryMsg" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-next.gif"
-						style="border:none;" title="Next Page"
-						action="#{Session.publicByAuthor.browseBean.advancedNext}" />
-
-					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
-						style="border:none;" title="Fast Forward"
-						action="#{Session.publicByAuthor.browseBean.advancedFastForward}" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-last.gif"
-						style="border:none;" title="Last Page"
-						action="#{Session.publicByAuthor.browseBean.advancedLast}" />
-				</h:panelGroup>
-			</h:column>
-
-			<rich:dataTable id="advancedDataTable" rows="10"
-				value="#{Session.publicByAuthor.browseBean.currentEntities}"
-				rendered="#{!empty Session.publicByAuthor.browseBean.currentEntities}"
-				var="entity" styleClass="rsPanel" columnClasses="rsPanelColumn">
-				<h:column>
-					<h:outputText value="[#{entity.objectClass}] " />
-					<h:outputLink
-						value="#{ApplicationBean1.root}/browse/entityDetails.xhtml?eid=#{entity.id}">
-						<h:outputText
-							value="#{entity.ownValue} - [#{entity.id}, #{entity.privacity}]" />
-					</h:outputLink>
-					<h:commandButton
-						action="#{Session.publicByAuthor.browseBean.actionEdit}"
-						rendered="#{Session.canEdit}"
-						image="/resources/css/xp/css-images//edit16.gif"
-						title="Edit this entity" />
-				</h:column>
-			</rich:dataTable>
-
-			<h:column
-				rendered="#{!empty Session.publicByAuthor.browseBean.entities}">
-				<h:panelGroup>
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-first.gif"
-						style="border:none;" title="First Page"
-						action="#{Session.publicByAuthor.browseBean.advancedFirst}" />
-
-					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
-						style="border:none;" title="Fast Backwards"
-						action="#{Session.publicByAuthor.browseBean.advancedFastRewind}" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-previous.gif"
-						style="border:none;" title="Previous Page"
-						action="#{Session.publicByAuthor.browseBean.advancedPrevious}" />
-
-					<h:outputText
-						value="#{Session.publicByAuthor.browseBean.advancedPaginator.recordStatus}"
-						styleClass="sumaryMsg" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-next.gif"
-						style="border:none;" title="Next Page"
-						action="#{Session.publicByAuthor.browseBean.advancedNext}" />
-
-					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
-						style="border:none;" title="Fast Forward"
-						action="#{Session.publicByAuthor.browseBean.advancedFastForward}" />
-
-					<h:commandButton
-						image="/resources/css/xp/css-images/arrow-last.gif"
-						style="border:none;" title="Last Page"
-						action="#{Session.publicByAuthor.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/components/publicFindAuthor.xhtml	Thu May 31 20:26:10 2018 +0200
@@ -0,0 +1,173 @@
+<!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>
+
+   <!-- <h:outputStylesheet name="/css/ismi-db/repository.css" /> -->
+            
+
+
+		<h:panelGrid columns="2" styleClass="displayPanel"
+			columnClasses="displayPanelColumn01,displayPanelColumn02">
+
+			<h:panelGrid columns="1">
+				<h:outputLabel value="Person name" />
+				<h:outputLabel value="(name_translit)" />
+			</h:panelGrid>
+			<h:inputText value="#{Session.publicByAuthor.browseBean.personNameTranslit}" />
+
+            <a4j:commandButton value="show all"
+                actionListener="#{Session.publicByAuthor.listenerAllAuthorSearch}"
+                render="selectPersonPanel" />
+
+			<a4j:commandButton value="search"
+				actionListener="#{Session.publicByAuthor.browseBean.actionSearchByAttributes}"
+				render="selectPersonPanel" />
+
+
+		</h:panelGrid>
+
+		<h:panelGrid id="selectPersonPanel" columns="1"
+			style="margin-left: auto; margin-right: auto; text-align: center; width: 100%;"
+			>
+
+
+			<h:outputText
+				value="#{Session.publicByAuthor.browseBean.resultSummaryMsg}"
+				rendered="#{!empty Session.publicByAuthor.browseBean.resultSummaryMsg}"
+				styleClass="sumaryMsg" />
+
+			<h:column
+				rendered="#{!empty Session.publicByAuthor.browseBean.entities}">
+				<h:outputText value="go to page" styleClass="sumaryMsg" />
+				<h:inputText value="#{Session.publicByAuthor.browseBean.page}"
+					size="4" />
+				<h:commandButton value="submit"
+					actionListener="#{Session.publicByAuthor.browseBean.actionGoToPageAdvancedResult}" />
+				<h:outputText value=" #{Session.publicByAuthor.browseBean.pageMsg}"
+					rendered="#{!empty Session.publicByAuthor.browseBean.pageMsg}"
+					style="color:red" />
+			</h:column>
+
+
+			<h:column
+				rendered="#{!empty Session.publicByAuthor.browseBean.entities}">
+				<h:panelGroup>
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-first.gif"
+						style="border:none;" title="First Page"
+						action="#{Session.publicByAuthor.browseBean.advancedFirst}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
+						style="border:none;" title="Fast Backwards"
+						action="#{Session.publicByAuthor.browseBean.advancedFastRewind}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-previous.gif"
+						style="border:none;" title="Previous Page"
+						action="#{Session.publicByAuthor.browseBean.advancedPrevious}" />
+
+					<h:outputText
+						value="#{Session.publicByAuthor.browseBean.advancedPaginator.recordStatus}"
+						styleClass="sumaryMsg" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-next.gif"
+						style="border:none;" title="Next Page"
+						action="#{Session.publicByAuthor.browseBean.advancedNext}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
+						style="border:none;" title="Fast Forward"
+						action="#{Session.publicByAuthor.browseBean.advancedFastForward}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-last.gif"
+						style="border:none;" title="Last Page"
+						action="#{Session.publicByAuthor.browseBean.advancedLast}" />
+				</h:panelGroup>
+			</h:column>
+
+			<rich:dataTable id="advancedDataTable" rows="10"
+				value="#{Session.publicByAuthor.browseBean.currentEntities}"
+				rendered="#{!empty Session.publicByAuthor.browseBean.currentEntities}"
+				var="entity" styleClass="rsPanel" columnClasses="rsPanelColumn">
+                <h:column style="text-align:left">
+                    <f:facet name="header">MAMS</f:facet>
+                    <h:outputText value="#{entity.getAttributeByName('mams_number').getValue()}" />
+                </h:column>
+				<h:column style="text-align:left">
+                    <f:facet name="header">Person</f:facet>
+					<h:commandLink
+					    rerender="tabPanel"
+						action="#{Session.publicByAuthor.actionSelectPerson}">
+						<h:outputText
+							value="#{entity.ownValue}" />
+					</h:commandLink>
+                    <h:outputLink
+                        value="#{ApplicationBean1.root}/browse/entityDetails.xhtml?eid=#{entity.id}">
+                        <h:outputText
+                            value=" - [#{entity.id}]" />
+                    </h:outputLink>
+					<h:commandButton
+						action="#{Session.publicByAuthor.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.publicByAuthor.browseBean.entities}">
+				<h:panelGroup>
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-first.gif"
+						style="border:none;" title="First Page"
+						action="#{Session.publicByAuthor.browseBean.advancedFirst}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-fr.gif"
+						style="border:none;" title="Fast Backwards"
+						action="#{Session.publicByAuthor.browseBean.advancedFastRewind}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-previous.gif"
+						style="border:none;" title="Previous Page"
+						action="#{Session.publicByAuthor.browseBean.advancedPrevious}" />
+
+					<h:outputText
+						value="#{Session.publicByAuthor.browseBean.advancedPaginator.recordStatus}"
+						styleClass="sumaryMsg" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-next.gif"
+						style="border:none;" title="Next Page"
+						action="#{Session.publicByAuthor.browseBean.advancedNext}" />
+
+					<h:commandButton image="/resources/css/xp/css-images/arrow-ff.gif"
+						style="border:none;" title="Fast Forward"
+						action="#{Session.publicByAuthor.browseBean.advancedFastForward}" />
+
+					<h:commandButton
+						image="/resources/css/xp/css-images/arrow-last.gif"
+						style="border:none;" title="Last Page"
+						action="#{Session.publicByAuthor.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/components/publicShowSubjects.xhtml	Thu May 31 20:26:10 2018 +0200
@@ -0,0 +1,49 @@
+<!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>
+
+   <!-- <h:outputStylesheet name="/css/ismi-db/repository.css" /> -->
+            
+
+
+		<h:panelGrid columns="3" styleClass="displayPanel"
+			columnClasses="displayPanelColumn01,displayPanelColumn02">
+
+			<h:outputLabel value="Person ID" />
+			<h:inputText value="#{Session.publicByAuthor.selectedPersonId}" />
+            <h:outputText value="#{Session.publicByAuthor.selectedPerson.ownValue}" />
+
+            <a4j:commandButton value="search"
+                actionListener="#{Session.publicByAuthor.listenerAuthorIdSearch}"
+                render="selectSubjectPanel" />
+
+		</h:panelGrid>
+
+		<h:panelGrid id="selectSubjectPanel" columns="1"
+			style="margin-left: auto; margin-right: auto; text-align: center; width: 100%;"
+			>
+	                 <rich:dataTable
+                        rendered="#{!empty Session.publicByAuthor.selectedPersonTexts}"
+                        value="#{Session.publicByAuthor.selectedPersonTexts}" var="titleItem"
+                        styleClass="select">
+                        <rich:column>
+                                <div>#{titleItem.ownValue}</div>
+                        </rich:column>
+                    </rich:dataTable>
+
+			
+			
+		</h:panelGrid>
+
+
+
+	</ui:composition>
+</body>
+</html>
--- a/src/main/webapp/clean/publicByAuthor.xhtml	Wed May 30 20:23:45 2018 +0200
+++ b/src/main/webapp/clean/publicByAuthor.xhtml	Thu May 31 20:26:10 2018 +0200
@@ -9,10 +9,10 @@
 <body>
 	<ui:composition template="/templates/privateTemplate.xhtml">
 
+        <h:outputStylesheet name="/css/ismi-db/repository.css" />
+
 		<ui:define name="privateContent">
 			
-			<h:outputStylesheet name="/css/ismi-db/display.css" />
-			
 			<div id="pageTitle">
 				<h:outputText value="Public by Author Form" />
 			</div>
@@ -20,14 +20,17 @@
 			<h:panelGrid columns="1"
 				styleClass="mainPanel">
 
-				<rich:tabPanel
+				<rich:tabPanel id="tabPanel"
 					activeItem="#{Session.selectedPublicByAuthorTab}"
 					itemChangeListener="#{Session.listenerPublicByAuthorTabChange}">
 				
-					<rich:tab header="Public by Author" name="01">
-						<ui:include src="components/findAuthor.xhtml" />
+					<rich:tab header="Find Author" name="01">
+						<ui:include src="components/publicFindAuthor.xhtml" />
 					</rich:tab>
 					
+                    <rich:tab header="Select Subject" name="02">
+                        <ui:include src="components/publicShowSubjects.xhtml" />
+                    </rich:tab>
 				</rich:tabPanel>
 
 			</h:panelGrid>