DocumentFolder entries listing

Former-commit-id: 2917078e55
pull/10/head
Jens Pelzetter 2021-01-26 21:08:12 +01:00
parent 008f57ca16
commit 81a6e93ddb
6 changed files with 101 additions and 156 deletions

View File

@ -150,15 +150,12 @@ public class ContentSectionController {
ItemPrivileges.EDIT, section.getRootDocumentsFolder() ItemPrivileges.EDIT, section.getRootDocumentsFolder()
)) { )) {
contentSectionModel.setSection(section); contentSectionModel.setSection(section);
LOGGER.info("Checked in permisisons in {} ms.", System LOGGER.info(
.currentTimeMillis() - permissionCheckStart); "Checked in permisisons in {} ms.",
System.currentTimeMillis() - permissionCheckStart
);
final long objectsStart = System.currentTimeMillis(); final long objectsStart = System.currentTimeMillis();
// final List<CcmObject> objects = folderRepo
// .findObjectsInFolder(
// section.getRootDocumentsFolder(), firstResult,
// maxResults
// );
final List<DocumentFolderEntry> folderEntries = folderRepo final List<DocumentFolderEntry> folderEntries = folderRepo
.getDocumentFolderEntries( .getDocumentFolderEntries(
section.getRootDocumentsFolder(), section.getRootDocumentsFolder(),
@ -166,11 +163,11 @@ public class ContentSectionController {
maxResults, maxResults,
"" ""
); );
LOGGER.info("Retrieved objects in {} ms", System LOGGER.info(
.currentTimeMillis() - objectsStart); "Retrieved objects in {} ms",
System.currentTimeMillis() - objectsStart
);
documentFolderModel.setCount( documentFolderModel.setCount(
// folderRepo
// .countObjectsInFolder(section.getRootDocumentsFolder())
folderRepo.countDocumentFolderEntries( folderRepo.countDocumentFolderEntries(
section.getRootDocumentsFolder(), "" section.getRootDocumentsFolder(), ""
) )
@ -183,12 +180,6 @@ public class ContentSectionController {
); );
final long rowsStart = System.currentTimeMillis(); final long rowsStart = System.currentTimeMillis();
// documentFolderModel.setRows(
// objects
// .stream()
// .map(object -> buildRowModel(section, object))
// .collect(Collectors.toList())
// );
documentFolderModel.setRows( documentFolderModel.setRows(
folderEntries folderEntries
.stream() .stream()
@ -320,7 +311,7 @@ public class ContentSectionController {
.folderIsDeletable(folder) .folderIsDeletable(folder)
== FolderManager.FolderIsDeletable.YES == FolderManager.FolderIsDeletable.YES
); );
row.setIsFolder(true); row.setFolder(true);
row.setLanguages(Collections.emptySortedSet()); row.setLanguages(Collections.emptySortedSet());
row.setLastEditPublished(false); row.setLastEditPublished(false);
row.setLastEdited(""); row.setLastEdited("");
@ -348,7 +339,7 @@ public class ContentSectionController {
) )
); );
row.setDeletable(!itemManager.isLive(contentItem)); row.setDeletable(!itemManager.isLive(contentItem));
row.setIsFolder(false); row.setFolder(false);
row.setLanguages( row.setLanguages(
new TreeSet<>( new TreeSet<>(
itemL10NManager itemL10NManager

View File

@ -52,6 +52,14 @@ public class DocumentFolderModel {
protected void setMaxResults(final int maxResults) { protected void setMaxResults(final int maxResults) {
this.maxResults = maxResults; this.maxResults = maxResults;
} }
public long getNumberOfPages() {
return (long) Math.ceil((double) count / maxResults);
}
public long getCurrentPage() {
return (long) Math.ceil((double) firstResult / maxResults ) + 1;
}
public List<DocumentFolderRowModel> getRows() { public List<DocumentFolderRowModel> getRows() {
return Collections.unmodifiableList(rows); return Collections.unmodifiableList(rows);

View File

@ -18,7 +18,7 @@ public class DocumentFolderRowModel {
private boolean deletable; private boolean deletable;
private boolean isFolder; private boolean folder;
private SortedSet<String> languages; private SortedSet<String> languages;
@ -50,12 +50,12 @@ public class DocumentFolderRowModel {
this.deletable = deletable; this.deletable = deletable;
} }
public boolean isIsFolder() { public boolean isFolder() {
return isFolder; return folder;
} }
protected void setIsFolder(final boolean isFolder) { protected void setFolder(final boolean folder) {
this.isFolder = isFolder; this.folder = folder;
} }
public SortedSet<String> getLanguages() { public SortedSet<String> getLanguages() {

View File

@ -18,50 +18,9 @@
<div class="container-fluid"> <div class="container-fluid">
<h1>#{CmsAdminMessages.getMessage("contentsection.documentfolder.heading", [ContentSectionModel.sectionName])}</h1> <h1>#{CmsAdminMessages.getMessage("contentsection.documentfolder.heading", [ContentSectionModel.sectionName])}</h1>
<div class="row"> <div class="row">
<nav class="col-sm-3 documentfolder"> <nav class="col-sm-3 documentfolder">
<!-- <ul class="nav flex-column border">
<li class="nav-item">
<a class="nav-link" href="#">Folder 1</a>
</li>
<li class="nav-item">
<div class="d-flex">
<button class="btn btn-light pr-0 subfolders-toggler"
data-toggle="collapse"
data-target="#folder-2-subfolders"
aria-expanded="false"
aria-controls="folder-2-subfolders"
type="button">
<bootstrap:svgIcon icon="caret-right-fill" />
<span class="sr-only">
#{CmsAdminMessages['contentsection.documentfolder.foldersnav.subfolders.expand']}
</span>
</button>
<a class="nav-link pl-0" href="#">Folder 2</a>
</div>
<ul class="nav flex-column collapse"
id="folder-2-subfolders">
<li class="nav-item">
<a class="nav-link" href="#">Folder 2-1</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Folder 2-2</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Folder 2-3</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Folder 3</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Folder 4</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Folder 5</a>
</li>
</ul>-->
<ul class="list-group"> <ul class="list-group">
<li class="list-group-item"> <li class="list-group-item">
<a class="" href="#">Folder 1</a> <a class="" href="#">Folder 1</a>
@ -106,6 +65,11 @@
</ul> </ul>
</nav> </nav>
<div class="col-sm-9"> <div class="col-sm-9">
<div class="d-flex">
<p>
${CmsAdminMessages.getMessage("contentsection.documentfolder.pageof", [DocumentFolderModel.currentPage, DocumentFolderModel.numberOfPages, DocumentFolderModel.maxResults, DocumentFolderModel.count])}
</p>
</div>
<table class="table table-hover documentfolder"> <table class="table table-hover documentfolder">
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
@ -142,109 +106,89 @@
</td> </td>
<td>#{row.title}</td> <td>#{row.title}</td>
<td>#{row.type}</td> <td>#{row.type}</td>
<td>#{row.created}</td> <td><c:if test="#{!row.folder}">#{row.created}</c:if></td>
<td> <td>
<span>#{row.lastEdited}</span> <c:if test="#{!row.folder}">
<c:if test="#{row.lastEdited != null}"> <span>#{row.lastEdited}</span>
<c:choose> <c:if test="#{row.lastEdited != null}">
<c:when test="#{row.lastEditPublished}"> <c:choose>
<span aria-describedby="#{row.name}-publication-state-desc"> <c:when test="#{row.lastEditPublished}">
<bootstrap:svgIcon icon="eye" /> <span aria-describedby="#{row.name}-publication-state-desc">
</span> <bootstrap:svgIcon icon="eye" />
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.published']}</span> </span>
</c:when> <span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.published']}</span>
<c:otherwise> </c:when>
<span aria-describedby="#{row.name}-publication-state-desc"> <c:otherwise>
<bootstrap:svgIcon icon="eye-slash" /> <span aria-describedby="#{row.name}-publication-state-desc">
</span> <bootstrap:svgIcon icon="eye-slash" />
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.unpublished']}</span> </span>
</c:otherwise> <span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.unpublished']}</span>
</c:choose> </c:otherwise>
</c:choose>
</c:if>
</c:if> </c:if>
</td> </td>
<td> <td>
<c:if test="#{row.deletable}"> <c:if test="#{row.deletable}">
<button class="btn btn-danger">
<bootstrap:svgIcon icon="x-circle" />
<span>${CmsAdminMessages['contentsection.documentfolder.actions.delete.button.label']}</span>
</button>
</c:if> </c:if>
</td> </td>
</tr> </tr>
</c:forEach> </c:forEach>
<!-- <tr>
<td><a href="#">folder-1</a></td>
<td></td>
<td>Folder 1</td>
<td>Ordner</td>
<td>2021-01-20 08:59</td>
<td>2021-01-20 08:59</td>
<td></td>
</tr>
<tr>
<td><a href="#">an-item</a></td>
<td>de, en</td>
<td>An item</td>
<td>Article</td>
<td>2021-01-20 09:03</td>
<td>
<span>2021-01-20 10:11</span>
<span aria-describedby="an-item-publication-state-desc">
<bootstrap:svgIcon icon="eye" />
</span>
<span class="sr-only" id="an-item-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.published']}</span>
</td>
<td>
<button class="btn btn-danger"
type="button">
<bootstrap:svgIcon icon="x-circle" />
<span>#{CmsAdminMessages['contentsection.documentfolder.actions.delete.button.label']}</span>
</button>
</td>
</tr>
<tr>
<td><a href="#">unpublished-item</a></td>
<td>de, en</td>
<td>Unppublished item item</td>
<td>Article</td>
<td>2021-01-20 10:31</td>
<td>
<span>2021-01-20 10:34</span>
<span aria-describedby="unpublished-item-publication-state-desc">
<bootstrap:svgIcon icon="eye-slash" />
</span>
<span class="sr-only" id="unpublished-item-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.unpublished']}</span>
</td>
<td>
<button class="btn btn-danger"
type="button">
<bootstrap:svgIcon icon="x-circle" />
<span>#{CmsAdminMessages['contentsection.documentfolder.actions.delete.button.label']}</span>
</button>
</td>
</tr>-->
</tbody> </tbody>
</table> </table>
<nav aria-label="#{CmsAdminMessages['contentsection.documentfolder.pagination.label']}"> <nav aria-label="#{CmsAdminMessages['contentsection.documentfolder.pagination.label']}">
<ul class="justify-content-center pagination"> <ul class="justify-content-center pagination">
<li class="page-item disabled" tabindex="-1" aria-disabled="true"> <c:choose>
<a class="page-link" href="#"> <c:when test="${DocumentFolderModel.currentPage gt 1}">
<bootstrap:svgIcon icon="caret-left" /> <li class="page-item">
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_page']}</span> <a class="page-link"
</a> href="?firstResult=#{(DocumentFolderModel.currentPage - 1) * DocumentFolderModel.maxResults}&amp;maxResults=${DocumentFolderModel.maxResults}">
</li> <bootstrap:svgIcon icon="caret-left" />
<li> <span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_page']}</span>
<a class="page-link" href="#">1</a> </a>
</li> </li>
<li> </c:when>
<a class="page-link" href="#">2</a> <c:otherwise>
</li> <li class="page-item disabled" tabindex="-1" aria-disabled="true">
<li> <a class="page-link"
<a class="page-link" href="#">3</a> href="#">
</li> <bootstrap:svgIcon icon="caret-left" />
<li> <span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_page']}</span>
<a class="page-link" href="#"> </a>
<bootstrap:svgIcon icon="caret-right" /> </li>
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.next_page']}</span> </c:otherwise>
</a> </c:choose>
</li> <c:forEach begin="1"
end="${DocumentFolderModel.numberOfPages}"
var="page">
<li class="page-item ${page == DocumentFolderModel.currentPage ? 'active' : ''}">
<a class="page-link"
href="?firstResult=#{(page - 1) * DocumentFolderModel.maxResults}&amp;maxResults=${DocumentFolderModel.maxResults}">${page}</a>
</li>
</c:forEach>
<c:choose>
<c:when test="#{DocumentFolderModel.currentPage lt (DocumentFolderModel.numberOfPages)}">
<li class="page-item">
<a class="page-link"
href="?firstResult=${(DocumentFolderModel.currentPage + 1) * DocumentFolderModel.maxResults}&amp;maxResults=${DocumentFolderModel.maxResults}">
<bootstrap:svgIcon icon="caret-right" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.next_page']}</span>
</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item disabled" tabindex="-1" aria-disabled="true">
<a class="page-link" href="#">
<bootstrap:svgIcon icon="caret-right" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.next_page']}</span>
</a>
</li>
</c:otherwise>
</c:choose>
</ul> </ul>
</nav> </nav>
</div> </div>

View File

@ -44,3 +44,4 @@ contentsection.documentfolder.pagination.next_page=Next page
contentsection.not_found=No content section identifed by {0} available. contentsection.not_found=No content section identifed by {0} available.
contentsection.accessdenied=Your are not permitted to access content section {0}. contentsection.accessdenied=Your are not permitted to access content section {0}.
contentsection.documentfolder.types.folder=Folder contentsection.documentfolder.types.folder=Folder
contentsection.documentfolder.pageof=Page {0} of {1}. Showing max. {2} of {3} documents per page.

View File

@ -44,3 +44,4 @@ contentsection.documentfolder.pagination.next_page=Eine Seite weiter
contentsection.not_found=Keine Content Section mit dem Identifier {0} gefunden. contentsection.not_found=Keine Content Section mit dem Identifier {0} gefunden.
contentsection.accessdenied=Sind sind nicht berechtigt auf die Content Section {0} zuzugreifen. contentsection.accessdenied=Sind sind nicht berechtigt auf die Content Section {0} zuzugreifen.
contentsection.documentfolder.types.folder=Ordner contentsection.documentfolder.types.folder=Ordner
contentsection.documentfolder.pageof=Seite {0} von {1}. Zeige max. {2} von {3} Dokumenten pro Seite.