CCM NG/ccm-core: Fixed some LazyInitizationExceptions
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4796 8810af33-2d31-482b-a856-94f89814c4df
parent
2438e125ad
commit
b66556aabb
|
|
@ -33,6 +33,6 @@ public class ToolboxConstants {
|
|||
}
|
||||
|
||||
public static final String TOOLBOX_BUNDLE
|
||||
= "com.arsdigita.toolbox.ui.ToolboxResources";
|
||||
= "com.arsdigita.toolbox.ToolboxResources";
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import com.arsdigita.bebop.Label;
|
|||
import com.arsdigita.bebop.table.TableModel;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -32,8 +33,8 @@ import java.util.Set;
|
|||
import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
||||
|
||||
/**
|
||||
* Model for the {@link GroupsRolesTable}.
|
||||
*
|
||||
* Model for the {@link GroupsRolesTable}.
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
class GroupsRolesTableModel implements TableModel {
|
||||
|
|
@ -89,19 +90,13 @@ class GroupsRolesTableModel implements TableModel {
|
|||
case COL_LABEL:
|
||||
return new Label(new GlobalizedMessage("ui.admin.user.groups",
|
||||
ADMIN_BUNDLE));
|
||||
case COL_VALUE:
|
||||
final List<String> groupNames = new ArrayList<>();
|
||||
user.getGroupMemberships().forEach(m -> {
|
||||
groupNames.add(m.getGroup().getName());
|
||||
});
|
||||
|
||||
groupNames.sort((name1, name2) -> {
|
||||
return name1.compareTo(name2);
|
||||
});
|
||||
|
||||
return String.join(
|
||||
", ", groupNames.toArray(new String[groupNames.size()]));
|
||||
case COL_VALUE: {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final UsersGroupsRolesController controller = cdiUtil
|
||||
.findBean(UsersGroupsRolesController.class);
|
||||
|
||||
return controller.getNamesOfAssignedGroups(user);
|
||||
}
|
||||
case COL_ACTION:
|
||||
return new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.groups.edit", ADMIN_BUNDLE));
|
||||
|
|
@ -115,19 +110,13 @@ class GroupsRolesTableModel implements TableModel {
|
|||
case COL_LABEL:
|
||||
return new Label(new GlobalizedMessage("ui.admin.user.roles",
|
||||
ADMIN_BUNDLE));
|
||||
case COL_VALUE:
|
||||
final List<String> roleNames = new ArrayList<>();
|
||||
user.getRoleMemberships().forEach(m -> {
|
||||
roleNames.add(m.getRole().getName());
|
||||
});
|
||||
|
||||
roleNames.sort((name1, name2) -> {
|
||||
return name1.compareTo(name2);
|
||||
});
|
||||
|
||||
return String.join(
|
||||
", ", roleNames.toArray(new String[roleNames.size()]));
|
||||
case COL_VALUE: {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final UsersGroupsRolesController controller = cdiUtil
|
||||
.findBean(UsersGroupsRolesController.class);
|
||||
|
||||
return controller.getNamesOfAssignedGroups(user);
|
||||
}
|
||||
case COL_ACTION:
|
||||
return new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.roles.edit", ADMIN_BUNDLE));
|
||||
|
|
@ -141,26 +130,13 @@ class GroupsRolesTableModel implements TableModel {
|
|||
case COL_LABEL:
|
||||
return new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.all_roles", ADMIN_BUNDLE));
|
||||
case COL_VALUE:
|
||||
final Set<String> roleNames = new HashSet<>();
|
||||
user.getRoleMemberships().forEach(m -> {
|
||||
roleNames.add(m.getRole().getName());
|
||||
});
|
||||
|
||||
user.getGroupMemberships().forEach(m -> {
|
||||
m.getGroup().getRoleMemberships().forEach(r -> {
|
||||
roleNames.add(r.getRole().getName());
|
||||
});
|
||||
});
|
||||
|
||||
final List<String> allRoleNames = new ArrayList<>(roleNames);
|
||||
allRoleNames.sort((name1, name2) -> {
|
||||
return name1.compareTo(name2);
|
||||
});
|
||||
|
||||
return String.join(", ", allRoleNames.toArray(
|
||||
new String[allRoleNames.size()]));
|
||||
case COL_VALUE: {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final UsersGroupsRolesController controller = cdiUtil
|
||||
.findBean(UsersGroupsRolesController.class);
|
||||
|
||||
return controller.getNamesOfAllAssignedRoles(user);
|
||||
}
|
||||
case COL_ACTION:
|
||||
return "";
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Copyright (C) 2017 LibreCCM Foundation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
package com.arsdigita.ui.admin.usersgroupsroles.users;
|
||||
|
||||
import org.libreccm.security.Group;
|
||||
import org.libreccm.security.GroupMembership;
|
||||
import org.libreccm.security.Role;
|
||||
import org.libreccm.security.RoleMembership;
|
||||
import org.libreccm.security.User;
|
||||
import org.libreccm.security.UserRepository;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@RequestScoped
|
||||
class UsersGroupsRolesController {
|
||||
|
||||
@Inject
|
||||
private UserRepository userRepo;
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
protected String getNamesOfAssignedGroups(final User user) {
|
||||
|
||||
final User theUser = userRepo
|
||||
.findById(user.getPartyId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No User with ID %d in the database.",
|
||||
user.getPartyId())));
|
||||
|
||||
return theUser
|
||||
.getGroupMemberships()
|
||||
.stream()
|
||||
.map(GroupMembership::getGroup)
|
||||
.map(Group::getName)
|
||||
.sorted((name1, name2) -> name1.compareTo(name2))
|
||||
.collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public String getNamesOfAssignedRoles(final User user) {
|
||||
|
||||
final User theUser = userRepo
|
||||
.findById(user.getPartyId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No User with ID %d in the database.",
|
||||
user.getPartyId())));
|
||||
|
||||
return theUser
|
||||
.getRoleMemberships()
|
||||
.stream()
|
||||
.map(RoleMembership::getRole)
|
||||
.map(Role::getName)
|
||||
.sorted((name1, name2) -> name1.compareTo(name2))
|
||||
.collect(Collectors.joining(", "));
|
||||
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public String getNamesOfAllAssignedRoles(final User user) {
|
||||
|
||||
final User theUser = userRepo
|
||||
.findById(user.getPartyId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No User with ID %d in the database.",
|
||||
user.getPartyId())));
|
||||
|
||||
final Set<Role> rolesFromGroups = new HashSet<>();
|
||||
theUser
|
||||
.getGroupMemberships()
|
||||
.stream()
|
||||
.map(GroupMembership::getGroup)
|
||||
.forEach(group -> {
|
||||
group
|
||||
.getRoleMemberships()
|
||||
.stream()
|
||||
.map(RoleMembership::getRole)
|
||||
.forEach(role -> rolesFromGroups.add(role));
|
||||
});
|
||||
|
||||
return Stream.concat(
|
||||
theUser
|
||||
.getRoleMemberships()
|
||||
.stream()
|
||||
.map(RoleMembership::getRole)
|
||||
.map(Role::getName),
|
||||
rolesFromGroups
|
||||
.stream()
|
||||
.map(Role::getName)
|
||||
.sorted((name1, name2) -> name1.compareTo(name2)))
|
||||
.collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -203,6 +203,7 @@ public class GroupDetails extends Window {
|
|||
});
|
||||
}));
|
||||
userSelector.center();
|
||||
userSelector.setWidth("80%");
|
||||
UI.getCurrent().addWindow(userSelector);
|
||||
});
|
||||
final HeaderCell membersGridHeaderCell = membersGridHeader
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ import javax.inject.Inject;
|
|||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Expression;
|
||||
import javax.persistence.criteria.Root;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
|
|
@ -63,7 +62,8 @@ public class UserSelectorDataProvider extends AbstractDataProvider<User, String>
|
|||
final Root<User> from = criteriaQuery.from(User.class);
|
||||
|
||||
criteriaQuery = criteriaQuery.select(builder.count(from));
|
||||
|
||||
criteriaQuery = criteriaQuery.distinct(true);
|
||||
|
||||
if (userNameFilter != null && !userNameFilter.trim().isEmpty()) {
|
||||
criteriaQuery
|
||||
.where(builder.like(builder.lower(from.get("name")),
|
||||
|
|
@ -84,9 +84,10 @@ public class UserSelectorDataProvider extends AbstractDataProvider<User, String>
|
|||
@Override
|
||||
public Stream<User> fetch(final Query<User, String> query) {
|
||||
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||
final CriteriaQuery<User> criteriaQuery = builder
|
||||
CriteriaQuery<User> criteriaQuery = builder
|
||||
.createQuery(User.class);
|
||||
final Root<User> from = criteriaQuery.from(User.class);
|
||||
criteriaQuery = criteriaQuery.distinct(true);
|
||||
|
||||
if (userNameFilter != null && !userNameFilter.trim().isEmpty()) {
|
||||
criteriaQuery
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ public class AssignableTaskRepository
|
|||
final User user, final Workflow workflow) {
|
||||
final TypedQuery<AssignableTask> query = getEntityManager()
|
||||
.createNamedQuery(
|
||||
"UserTask.findEnabledTasksForWorkflow", AssignableTask.class);
|
||||
"AssignableTask.findEnabledTasksForWorkflow", AssignableTask.class);
|
||||
query.setParameter("user", user);
|
||||
query.setParameter("workflow", workflow);
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ public class AssignableTaskRepository
|
|||
final Workflow workflow) {
|
||||
final TypedQuery<AssignableTask> query = getEntityManager()
|
||||
.createNamedQuery(
|
||||
"UserTask.findAssignedTasks", AssignableTask.class);
|
||||
"AssignableTask.findAssignedTasks", AssignableTask.class);
|
||||
final List<Role> roles = user.getRoleMemberships()
|
||||
.stream()
|
||||
.map(membership -> membership.getRole())
|
||||
|
|
|
|||
|
|
@ -132,16 +132,24 @@ public class WorkflowManager {
|
|||
workflow.setName(name);
|
||||
|
||||
final LocalizedString description = new LocalizedString();
|
||||
template.getDescription().getValues().forEach(
|
||||
(locale, str) -> description.addValue(locale, str));
|
||||
template
|
||||
.getDescription()
|
||||
.getValues()
|
||||
.forEach((locale, str) -> description.addValue(locale, str));
|
||||
workflow.setDescription(description);
|
||||
|
||||
final Map<Long, Task> tasks = new HashMap<>();
|
||||
|
||||
template.getTasks().forEach(taskTemplate -> createTask(taskTemplate,
|
||||
tasks));
|
||||
template.getTasks().forEach(taskTemplate -> fixTaskDependencies(
|
||||
taskTemplate, tasks.get(taskTemplate.getTaskId()), tasks));
|
||||
template
|
||||
.getTasks()
|
||||
.forEach(taskTemplate -> createTask(workflow, taskTemplate, tasks));
|
||||
template
|
||||
.getTasks()
|
||||
.forEach(taskTemplate -> {
|
||||
fixTaskDependencies(taskTemplate,
|
||||
tasks.get(taskTemplate.getTaskId()),
|
||||
tasks);
|
||||
});
|
||||
|
||||
workflow.setObject(object);
|
||||
workflow.setState(WorkflowState.INIT);
|
||||
|
|
@ -161,7 +169,10 @@ public class WorkflowManager {
|
|||
* @param template The template for the task from the workflow template.
|
||||
* @param tasks A map for storing the new tasks.
|
||||
*/
|
||||
private void createTask(final Task template, final Map<Long, Task> tasks) {
|
||||
private void createTask(final Workflow workflow,
|
||||
final Task template,
|
||||
final Map<Long, Task> tasks) {
|
||||
|
||||
final Class<? extends Task> templateClass = template.getClass();
|
||||
final Task task;
|
||||
try {
|
||||
|
|
@ -214,6 +225,8 @@ public class WorkflowManager {
|
|||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
workflow.addTask(task);
|
||||
task.setWorkflow(workflow);
|
||||
tasks.put(template.getTaskId(), task);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue