From d524e7d9fc09466039b7ac29e4effef18cb32c90 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 3 May 2017 09:12:48 +0000 Subject: [PATCH] CCM NG/ccm-core: Some JavaDoc for CategoryRepository and DomainRepository git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4702 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/usersgroupsroles/UsersGroupsRoles.java | 38 +++++++++++++++++-- .../UsersTableDataProvider.java | 20 +++++++--- .../categorization/CategoryRepository.java | 5 +++ .../categorization/DomainRepository.java | 4 ++ .../core/AbstractEntityRepository.java | 3 ++ 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java index 18118cdfc..92fd6842b 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java @@ -20,14 +20,19 @@ package org.libreccm.admin.ui.usersgroupsroles; import com.arsdigita.ui.admin.AdminUiConstants; +import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.Grid; +import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.TabSheet; +import com.vaadin.ui.TextField; import com.vaadin.ui.UI; +import com.vaadin.ui.components.grid.HeaderCell; +import com.vaadin.ui.components.grid.HeaderRow; +import com.vaadin.ui.themes.ValoTheme; import org.libreccm.admin.ui.AdminView; import org.libreccm.security.User; -import java.util.List; import java.util.ResourceBundle; /** @@ -49,6 +54,7 @@ public class UsersGroupsRoles extends CustomComponent { private final TabSheet tabSheet; private final Grid usersTable; + private UsersTableDataProvider usersTableDataProvider; public UsersGroupsRoles(final AdminView view) { @@ -86,8 +92,34 @@ public class UsersGroupsRoles extends CustomComponent { }) .setId(COL_BANNED) .setCaption("Banned?"); + + final HeaderRow filterRow = usersTable.appendHeaderRow(); + final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME); + final TextField userNameFilter = new TextField(); + userNameFilter.setPlaceholder("User name"); + userNameFilter.setDescription("Filter users by username"); + userNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY); + userNameFilter + .addValueChangeListener(event -> { + usersTableDataProvider + .setUserNameFilter(event.getValue().toLowerCase()); + }); + userNameFilterCell.setComponent(userNameFilter); - + final HeaderRow actionsRow = usersTable.prependHeaderRow(); + final HeaderCell actionsCell = actionsRow.join(COL_USER_NAME, + COL_GIVEN_NAME, + COL_FAMILY_NAME, + COL_EMAIL, + COL_BANNED); + final Button clearFiltersButton = new Button("Clear filters"); + clearFiltersButton.addClickListener(event -> { + usersTableDataProvider.setUserNameFilter(null); + }); + final HorizontalLayout actionsLayout = new HorizontalLayout( + clearFiltersButton); + actionsCell.setComponent(actionsLayout); + tabSheet.addTab(usersTable, "Users"); setCompositionRoot(tabSheet); @@ -97,8 +129,8 @@ public class UsersGroupsRoles extends CustomComponent { // public void setUsers(final List users) { // usersTable.setItems(users); // } - public void setDataProvider(final UsersTableDataProvider dataProvider) { + this.usersTableDataProvider = dataProvider; usersTable.setDataProvider(dataProvider); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersTableDataProvider.java b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersTableDataProvider.java index 7693a72d8..a81130ce1 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersTableDataProvider.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersTableDataProvider.java @@ -45,6 +45,8 @@ public class UsersTableDataProvider extends AbstractDataProvider { @Inject private EntityManager entityManager; + private String userNameFilter; + @Override public boolean isInMemory() { return false; @@ -58,11 +60,9 @@ public class UsersTableDataProvider extends AbstractDataProvider { CriteriaQuery criteriaQuery = builder .createQuery(Long.class); final Root from = criteriaQuery.from(User.class); - + criteriaQuery = criteriaQuery.select(builder.count(from)); - - return entityManager .createQuery(criteriaQuery) .getSingleResult() @@ -77,8 +77,13 @@ public class UsersTableDataProvider extends AbstractDataProvider { final CriteriaQuery criteriaQuery = builder .createQuery(User.class); final Root from = criteriaQuery.from(User.class); - - + + if (userNameFilter != null && !userNameFilter.trim().isEmpty()) { + criteriaQuery + .where(builder.like(builder.lower(from.get("name")), + String.format("%s%%", userNameFilter))); + } + return entityManager .createQuery(criteriaQuery) .setMaxResults(query.getLimit()) @@ -87,4 +92,9 @@ public class UsersTableDataProvider extends AbstractDataProvider { .stream(); } + public void setUserNameFilter(final String userNameFilter) { + this.userNameFilter = userNameFilter; + refreshAll(); + } + } diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java index 9a8b88df4..c8579a4a3 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java @@ -36,6 +36,11 @@ import javax.persistence.TypedQuery; import javax.transaction.Transactional; /** + * Provides CRUB operations for {@link Category} objects. + * + * Note: This repository class does no permission checks when retrieving + * categories. This is the responsibility of the application which uses the + * retrieved categories. * * @author Jens Pelzetter */ diff --git a/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java b/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java index 591bc2d76..e54c0c918 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java @@ -38,6 +38,10 @@ import javax.transaction.Transactional; /** * A repository for executing CRUD operations on {@link Domain} objects. * + * Note: This repository does the permission checks when retrieving + * {@link Domain}s from the database. This is the responsibility of the + * application using the {@link Domain}. + * * @author Jens Pelzetter */ @RequestScoped diff --git a/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java b/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java index 56ebc103c..6220a36da 100644 --- a/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java +++ b/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java @@ -136,12 +136,14 @@ public abstract class AbstractEntityRepository { */ @Transactional(Transactional.TxType.REQUIRED) public Optional findById(final K entityId) { + return Optional.ofNullable(entityManager.find(getEntityClass(), entityId)); } @Transactional(Transactional.TxType.REQUIRED) public Optional findById(final K entityId, final String entityGraphName) { + @SuppressWarnings("unchecked") final EntityGraph entityGraph = (EntityGraph) entityManager. getEntityGraph(entityGraphName); @@ -151,6 +153,7 @@ public abstract class AbstractEntityRepository { @Transactional(Transactional.TxType.REQUIRED) public Optional findById(final K entityId, final EntityGraph entityGraph) { + final Map hints = new HashMap<>(); hints.put(FETCH_GRAPH_HINT_KEY, entityGraph); return Optional.ofNullable(entityManager.find(getEntityClass(),