- Change in ccm-docrepo for compatibility with Wildfly 10
    - removed scope for hibernate libraries to provided (Wildfly provides them)
    - moved classes related to user management in ccm-core com.arsdigita.ui.admin.usersgroupsroles to subpackage
    - first part of UI for Group management for Admin application


git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3989 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-04-13 15:37:46 +00:00
parent b458a61aca
commit ca72a68542
22 changed files with 148 additions and 94 deletions

View File

@ -42,20 +42,24 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope>
</dependency>
<!--

View File

@ -18,6 +18,7 @@
*/
package com.arsdigita.ui.admin.usersgroupsroles;
import com.arsdigita.ui.admin.usersgroupsroles.users.UserAdmin;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label;
@ -29,6 +30,7 @@ import com.arsdigita.bebop.list.ListModel;
import com.arsdigita.bebop.list.ListModelBuilder;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.toolbox.ui.LayoutPanel;
import com.arsdigita.ui.admin.usersgroupsroles.groups.GroupAdmin;
import com.arsdigita.util.Assert;
import com.arsdigita.util.LockableImpl;
@ -63,8 +65,8 @@ public class UsersGroupsRolesTab extends LayoutPanel {
// final BoxPanel usersPanel = new BoxPanel();
// usersPanel.add(new Label("Users Panel"));
final BoxPanel groupsPanel = new BoxPanel();
groupsPanel.add(new Label("Groups Panel"));
// final BoxPanel groupsPanel = new BoxPanel();
// groupsPanel.add(new Label("Groups Panel"));
final BoxPanel rolesPanel = new BoxPanel();
rolesPanel.add(new Label("Roles Panel"));
@ -80,7 +82,7 @@ public class UsersGroupsRolesTab extends LayoutPanel {
new Label(new GlobalizedMessage(
"ui.admin.users_groups_roles.groups.title",
ADMIN_BUNDLE)),
groupsPanel,
new GroupAdmin(),
body);
addSection(
new Label(new GlobalizedMessage(

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.BoxPanel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.table.TableModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.table.TableModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.table.TableModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.PropertySheetModel;
import com.arsdigita.globalization.GlobalizedMessage;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui.admin.usersgroupsroles;
package com.arsdigita.ui.admin.usersgroupsroles.users;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
@ -205,7 +205,7 @@ public class UsersTable extends Table {
return user.getName();
default:
throw new IllegalArgumentException(
"No a valid column index.");
"Not a valid column index.");
}
}

View File

@ -54,30 +54,34 @@ import javax.xml.bind.annotation.XmlRootElement;
@Table(name = "GROUPS", schema = DB_SCHEMA)
@NamedQueries({
@NamedQuery(name = "Group.findByName",
query = "SELECT g FROM Group g WHERE g.name = :name"),
query = "SELECT g FROM Group g WHERE g.name = :name "
+ "ORDER BY g.name"),
@NamedQuery(name = "Group.searchByName",
query = "SELECT g FROM Group g "
+ "WHERE LOWER(g.name) LIKE '%:name%'")
+ "WHERE LOWER(g.name) LIKE '%:name%' "
+ "ORDER BY g.name"),
@NamedQuery(name = "Group.findAllOrderedByGroupName",
query = "SELECT g FROM Group g ORDER BY g.name")
})
@NamedEntityGraphs({
@NamedEntityGraph(
name = "Group.withMembersAndRoleMemberships",
attributeNodes = {
@NamedAttributeNode(value = "memberships"),
@NamedAttributeNode(value = "roleMemberships",
subgraph = "role")},
subgraphs = {
@NamedSubgraph(
name = "role",
attributeNodes = {
@NamedAttributeNode(value = "role",
subgraph = "permissions")
}),
@NamedSubgraph(
name = "permissions",
attributeNodes = {
@NamedAttributeNode(value = "permissions")})
})
name = "Group.withMembersAndRoleMemberships",
attributeNodes = {
@NamedAttributeNode(value = "memberships"),
@NamedAttributeNode(value = "roleMemberships",
subgraph = "role")},
subgraphs = {
@NamedSubgraph(
name = "role",
attributeNodes = {
@NamedAttributeNode(value = "role",
subgraph = "permissions")
}),
@NamedSubgraph(
name = "permissions",
attributeNodes = {
@NamedAttributeNode(value = "permissions")})
})
})
@DefaultEntityGraph("Group.withMembersAndRoleMemberships")
@XmlRootElement(name = "user-group", namespace = CORE_XML_NS)

View File

@ -81,4 +81,11 @@ public class GroupRepository extends AbstractEntityRepository<Long, Group> {
return query.getResultList();
}
public List<Group> findAllOrderedByGroupName() {
final TypedQuery<Group> query = getEntityManager().createNamedQuery(
"Group.findAllOrderedByGroupName", Group.class);
return query.getResultList();
}
}

View File

@ -64,46 +64,54 @@ import javax.xml.bind.annotation.XmlTransient;
@Table(name = "USERS", schema = DB_SCHEMA)
@NamedQueries({
@NamedQuery(name = "User.findByName",
query = "SELECT u FROM User u WHERE u.name = :name"),
query = "SELECT u FROM User u WHERE u.name = :name "
+ "ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address"),
@NamedQuery(name = "User.findByEmailAddress",
query = "SELECT u FROM User u WHERE "
+ "u.primaryEmailAddress.address = :emailAddress"),
+ "u.primaryEmailAddress.address = :emailAddress "
+ "ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address"),
@NamedQuery(
name = "User.filterByNameAndEmail",
query = "SELECT u FROM User u WHERE "
+ "LOWER(u.name) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.givenName) LIKE CONCAT(LOWER(:term), '%') "
name = "User.filterByNameAndEmail",
query = "SELECT u FROM User u WHERE "
+ "LOWER(u.name) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.givenName) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.familyName) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.primaryEmailAddress.address) LIKE CONCAT('%', LOWER(:term), '%')"),
+ "OR LOWER(u.primaryEmailAddress.address) LIKE CONCAT('%', LOWER(:term), '%')"),
@NamedQuery(
name = "User.findAllOrderedByUsername",
query = "SELECT u FROM User u ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address")
name = "User.findAllOrderedByUsername",
query = "SELECT u FROM User u ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address")
})
@NamedEntityGraphs({
@NamedEntityGraph(
name = "User.withGroupAndRoleMemberships",
attributeNodes = {
@NamedAttributeNode(
value = "groupMemberships"),
@NamedAttributeNode(
value = "roleMemberships",
subgraph = "role")},
subgraphs = {
@NamedSubgraph(
name = "role",
attributeNodes = {
@NamedAttributeNode(value = "role",
subgraph = "permissions")
}),
@NamedSubgraph(
name = "permissions",
attributeNodes = {
@NamedAttributeNode(value = "permissions")}
)
})
name = "User.withGroupAndRoleMemberships",
attributeNodes = {
@NamedAttributeNode(
value = "groupMemberships"),
@NamedAttributeNode(
value = "roleMemberships",
subgraph = "role")},
subgraphs = {
@NamedSubgraph(
name = "role",
attributeNodes = {
@NamedAttributeNode(value = "role",
subgraph = "permissions")
}),
@NamedSubgraph(
name = "permissions",
attributeNodes = {
@NamedAttributeNode(value = "permissions")}
)
})
})
@DefaultEntityGraph("User.withGroupAndRoleMemberships")
@XmlRootElement(name = "user", namespace = CORE_XML_NS)
@ -133,12 +141,12 @@ public class User extends Party implements Serializable {
*/
@Embedded
@AssociationOverride(
name = "USER_PRIMARY_EMAIL_ADDRESSES",
joinTable = @JoinTable(name = "USER_PRIMARY_EMAIL_ADDRESSES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_ID")
}))
name = "USER_PRIMARY_EMAIL_ADDRESSES",
joinTable = @JoinTable(name = "USER_PRIMARY_EMAIL_ADDRESSES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_ID")
}))
@NotNull
@XmlElement(name = "primary-email-address", namespace = CORE_XML_NS)
private EmailAddress primaryEmailAddress;
@ -267,7 +275,7 @@ public class User extends Party implements Serializable {
}
protected void setGroupMemberships(
final Set<GroupMembership> groupMemberships) {
final Set<GroupMembership> groupMemberships) {
this.groupMemberships = groupMemberships;
}
@ -276,7 +284,7 @@ public class User extends Party implements Serializable {
}
protected void removeGroupMembership(
final GroupMembership groupMembership) {
final GroupMembership groupMembership) {
groupMemberships.remove(groupMembership);
}
@ -324,19 +332,19 @@ public class User extends Party implements Serializable {
@Override
public String toString(final String data) {
return super.toString(String.format(
", givenName = \"%s\", "
+ "familyName = \"%s\", "
+ "primaryEmailAddress = { %s }, "
+ "emailAddresses = { %s }, "
+ "banned = %b, "
+ "passwordResetRequired = %b%s",
givenName,
familyName,
Objects.toString(primaryEmailAddress),
Objects.toString(emailAddresses),
banned,
passwordResetRequired,
data
", givenName = \"%s\", "
+ "familyName = \"%s\", "
+ "primaryEmailAddress = { %s }, "
+ "emailAddresses = { %s }, "
+ "banned = %b, "
+ "passwordResetRequired = %b%s",
givenName,
familyName,
Objects.toString(primaryEmailAddress),
Objects.toString(emailAddresses),
banned,
passwordResetRequired,
data
));
}

View File

@ -239,3 +239,9 @@ ui.admin.user.edit_group_memberships=Edit group memberships for user {0}
ui.admin.user.edit_group_memberships.back_to_user_details=Back to user details
ui.admin.user_edit_role_memberships=Edit role memberships for user {0}
ui.admin.user.edit_role_memberships.back_to_user_details=Back to user details
ui.admin.groups.table.filter.term=Filter groups
ui.admin.groups.filter.submit=Apply
ui.admin.groups.table.filter.clear=Clear filter
ui.admin.groups.table.no_groups=No groups available
ui.admin.groups.table.name=Name
ui.admin.groups.table.delete=Delete

View File

@ -239,3 +239,9 @@ ui.admin.user.edit_group_memberships=Gruppen f\u00fcr Benutzer {0} bearbeiten
ui.admin.user.edit_group_memberships.back_to_user_details=Zur\u00fcck zu den Eigenschaften des Benutzers
ui.admin.user_edit_role_memberships=Rollen f\u00fcr Benutzer {0} bearbeiten
ui.admin.user.edit_role_memberships.back_to_user_details=Zur\u00fcck zu den Eigenschaften des Benutzers
ui.admin.groups.table.filter.term=Gruppen filtern
ui.admin.groups.filter.submit=Anwenden
ui.admin.groups.table.filter.clear=Filter zur\u00fccksetzen
ui.admin.groups.table.no_groups=Keine Gruppen gefunden
ui.admin.groups.table.name=Name
ui.admin.groups.table.delete=Delete

View File

@ -212,3 +212,9 @@ ui.admin.user.edit_group_memberships=Edit group memberships for user {0}
ui.admin.user.edit_group_memberships.back_to_user_details=Back to user details
ui.admin.user_edit_role_memberships=Edit role memberships for user {0}
ui.admin.user.edit_role_memberships.back_to_user_details=Back to user details
ui.admin.groups.table.filter.term=Filter groups
ui.admin.groups.filter.submit=Apply
ui.admin.groups.table.filter.clear=Clear filter
ui.admin.groups.table.no_groups=No groups available
ui.admin.groups.table.name=Name
ui.admin.groups.table.delete=Delete

View File

@ -203,3 +203,9 @@ ui.admin.user.edit_group_memberships=Edit group memberships for user {0}
ui.admin.user.edit_group_memberships.back_to_user_details=Back to user details
ui.admin.user_edit_role_memberships=Edit role memberships for user {0}
ui.admin.user.edit_role_memberships.back_to_user_details=Back to user details
ui.admin.groups.table.filter.term=Filter groups
ui.admin.groups.filter.submit=Apply
ui.admin.groups.table.filter.clear=Clear filter
ui.admin.groups.table.no_groups=No groups available
ui.admin.groups.table.name=Name
ui.admin.groups.table.delete=Delete

View File

@ -48,11 +48,13 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
</dependency>
<!-- Dependencies for log4j 2 including adapter for the log4j 1.2 API -->

View File

@ -36,21 +36,13 @@ import org.junit.runner.RunWith;
import org.libreccm.docrepo.File;
import org.libreccm.docrepo.FileMarshaller;
import org.libreccm.docrepo.FileRepository;
import org.libreccm.portation.Format;
import org.libreccm.portation.Marshals;
import org.libreccm.tests.categories.IntegrationTest;
import javax.inject.Inject;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
*
@ -160,6 +152,8 @@ public class FilePortationTest {
.getPackage())
.addAsLibraries(libs)
.addAsLibraries(coreLibs)
.addAsResource("META-INF/jboss-deployment-structure.xml",
"META-INF/jboss-deployment-structure.xml")
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.dom4j"/>
</dependencies>
</deployment>
</jboss-deployment-structure>