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

View File

@ -52,6 +52,14 @@ public class DocumentFolderModel {
protected void setMaxResults(final int 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() {
return Collections.unmodifiableList(rows);

View File

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

View File

@ -18,50 +18,9 @@
<div class="container-fluid">
<h1>#{CmsAdminMessages.getMessage("contentsection.documentfolder.heading", [ContentSectionModel.sectionName])}</h1>
<div class="row">
<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">
<li class="list-group-item">
<a class="" href="#">Folder 1</a>
@ -106,6 +65,11 @@
</ul>
</nav>
<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">
<thead class="thead-light">
<tr>
@ -142,109 +106,89 @@
</td>
<td>#{row.title}</td>
<td>#{row.type}</td>
<td>#{row.created}</td>
<td><c:if test="#{!row.folder}">#{row.created}</c:if></td>
<td>
<span>#{row.lastEdited}</span>
<c:if test="#{row.lastEdited != null}">
<c:choose>
<c:when test="#{row.lastEditPublished}">
<span aria-describedby="#{row.name}-publication-state-desc">
<bootstrap:svgIcon icon="eye" />
</span>
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.published']}</span>
</c:when>
<c:otherwise>
<span aria-describedby="#{row.name}-publication-state-desc">
<bootstrap:svgIcon icon="eye-slash" />
</span>
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.unpublished']}</span>
</c:otherwise>
</c:choose>
<c:if test="#{!row.folder}">
<span>#{row.lastEdited}</span>
<c:if test="#{row.lastEdited != null}">
<c:choose>
<c:when test="#{row.lastEditPublished}">
<span aria-describedby="#{row.name}-publication-state-desc">
<bootstrap:svgIcon icon="eye" />
</span>
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.published']}</span>
</c:when>
<c:otherwise>
<span aria-describedby="#{row.name}-publication-state-desc">
<bootstrap:svgIcon icon="eye-slash" />
</span>
<span class="sr-only" id="#{row.name}-publication-state-desc">#{CmsAdminMessages['contentsection.documentfolder.cols.lastedit.unpublished']}</span>
</c:otherwise>
</c:choose>
</c:if>
</c:if>
</td>
<td>
<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>
</td>
</tr>
</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>
</table>
<nav aria-label="#{CmsAdminMessages['contentsection.documentfolder.pagination.label']}">
<ul class="justify-content-center pagination">
<li class="page-item disabled" tabindex="-1" aria-disabled="true">
<a class="page-link" href="#">
<bootstrap:svgIcon icon="caret-left" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_page']}</span>
</a>
</li>
<li>
<a class="page-link" href="#">1</a>
</li>
<li>
<a class="page-link" href="#">2</a>
</li>
<li>
<a class="page-link" href="#">3</a>
</li>
<li>
<a class="page-link" href="#">
<bootstrap:svgIcon icon="caret-right" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.next_page']}</span>
</a>
</li>
<c:choose>
<c:when test="${DocumentFolderModel.currentPage gt 1}">
<li class="page-item">
<a class="page-link"
href="?firstResult=#{(DocumentFolderModel.currentPage - 1) * DocumentFolderModel.maxResults}&amp;maxResults=${DocumentFolderModel.maxResults}">
<bootstrap:svgIcon icon="caret-left" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_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-left" />
<span class="sr-only">#{CmsAdminMessages['contentsection.documentfolder.pagination.previous_page']}</span>
</a>
</li>
</c:otherwise>
</c:choose>
<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>
</nav>
</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.accessdenied=Your are not permitted to access content section {0}.
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.accessdenied=Sind sind nicht berechtigt auf die Content Section {0} zuzugreifen.
contentsection.documentfolder.types.folder=Ordner
contentsection.documentfolder.pageof=Seite {0} von {1}. Zeige max. {2} von {3} Dokumenten pro Seite.