diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml
index 7a6c65041..3e15cb3dc 100644
--- a/ccm-core/pom.xml
+++ b/ccm-core/pom.xml
@@ -379,11 +379,12 @@
**/AbstractConfig.java
**/AbstractParameter.java
- **/AbstractParameterContext
+ **/AbstractParameterContext.java
**/Assert.java
- **/Classes.java
**/CCMApplicationContextListener.java
**/CCMResourceManager.java
+ **/Classes.java
+ **/ClassParameter.java
**/ClassParameterReader.java
**/CompoundParameterReader.java
**/ConfigError.java
@@ -391,8 +392,8 @@
**/Converters.java
**/CSVParameterReader.java
**/DateFormatter.java
- **/DataFormatterConfig.java
- **/DateTimeFormatter
+ **/DateFormatterConfig.java
+ **/DateTimeFormatter.java
**/Document.java
**/Element.java
**/EmailParameter.java
@@ -416,9 +417,10 @@
**/SecurityConfig.java
**/SecurityHelper.java
**/SingletonParameter.java
+ **/SpecificClassParameter.java
**/StringParameter.java
**/TimeFormatter.java
- **/UncheckedWrapperException
+ **/UncheckedWrapperException.java
**/XML.java
diff --git a/ccm-core/src/main/java/org/libreccm/core/GroupManager.java b/ccm-core/src/main/java/org/libreccm/core/GroupManager.java
index 3c5dc58a8..02bcdb77f 100644
--- a/ccm-core/src/main/java/org/libreccm/core/GroupManager.java
+++ b/ccm-core/src/main/java/org/libreccm/core/GroupManager.java
@@ -95,19 +95,19 @@ public class GroupManager {
"Can't remove a user from group null");
}
- GroupMembership membershipToDelete = null;
+ GroupMembership delete = null;
for(final GroupMembership membership : group.getMembers()) {
if (membership.getUser().equals(user)) {
- membershipToDelete = membership;
+ delete = membership;
break;
}
}
- if (membershipToDelete != null) {
- group.removeMember(membershipToDelete);
- user.removeGroupMembership(membershipToDelete);
+ if (delete != null) {
+ group.removeMember(delete);
+ user.removeGroupMembership(delete);
- entityManager.remove(membershipToDelete);
+ entityManager.remove(delete);
}
}
diff --git a/ccm-core/src/main/java/org/libreccm/core/PermissionManager.java b/ccm-core/src/main/java/org/libreccm/core/PermissionManager.java
index 38591ce04..f1c62b0e1 100644
--- a/ccm-core/src/main/java/org/libreccm/core/PermissionManager.java
+++ b/ccm-core/src/main/java/org/libreccm/core/PermissionManager.java
@@ -63,12 +63,18 @@ public class PermissionManager {
* Checks if the the provided {@code subject} has a permission granting the
* provided {@code privilege} on the provided {@code object}.
*
+ * If the provided subject is {@code null} the method will try to retrieve
+ * the public user from the database. If there is no public user the method
+ * will return {@code false}.
+ *
* @param privilege The privilege to check.
* @param object The object on which the privilege is granted.
* @param subject The subject to which the privilege is granted.
*
* @return {@code true} of the subject has a permission granting
* {@code privilege} on {@code object}, either explicit or implicit.
+ *
+ * @see UserRepository#retrievePublicUser()
*/
public boolean isPermitted(final Privilege privilege,
final CcmObject object,
@@ -80,6 +86,10 @@ public class PermissionManager {
* Checks if the the provided {@code subject} has a permission granting the
* provided {@code privilege} on the provided {@code object}.
*
+ * If the provided subject is {@code null} the method will try to retrieve
+ * the public user from the database. If there is no public user the method
+ * will return {@code false}.
+ *
* @param privilege The privilege to check.
* @param object The object on which the privilege is granted.
* @param subject The subject to which the privilege is granted.
@@ -88,6 +98,8 @@ public class PermissionManager {
* {@code privilege} on {@code object}
* to {@code subject}
*
+ * @see #isPermitted(org.libreccm.core.Privilege,
+ * org.libreccm.core.CcmObject, org.libreccm.core.Subject)
*/
public void checkPermission(final Privilege privilege,
final CcmObject object,
diff --git a/ccm-core/src/main/java/org/libreccm/core/Privilege.java b/ccm-core/src/main/java/org/libreccm/core/Privilege.java
index d55559318..3a5551f3d 100644
--- a/ccm-core/src/main/java/org/libreccm/core/Privilege.java
+++ b/ccm-core/src/main/java/org/libreccm/core/Privilege.java
@@ -54,8 +54,9 @@ import javax.xml.bind.annotation.XmlRootElement;
query = "SELECT p FROM Privilege p "
+ "WHERE p.privilege = :name"),
@NamedQuery(name = "isPrivilegeInUse",
- query = "SELECT COUNT(p) FROM Permission p JOIN Privilege r "
- + "WHERE r.privilege = :name")
+ query = "SELECT COUNT(p) FROM Permission p "
+ + " JOIN p.grantedPrivilege g "
+ + " WHERE g.privilege = :name")
})
@XmlRootElement(name = "privilege", namespace = CORE_XML_NS)
public class Privilege implements Serializable {
diff --git a/ccm-core/src/main/java/org/libreccm/core/PrivilegeRepository.java b/ccm-core/src/main/java/org/libreccm/core/PrivilegeRepository.java
index 2646c04c5..39dd19ffd 100644
--- a/ccm-core/src/main/java/org/libreccm/core/PrivilegeRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/core/PrivilegeRepository.java
@@ -21,6 +21,7 @@ package org.libreccm.core;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;
/**
@@ -40,16 +41,24 @@ public class PrivilegeRepository {
/**
* Finds the {@link Privilege} identified by {@code name}.
*
- * @param privilege The name of the privilege to return.
+ * @param name The name of the privilege to return.
*
- * @return
+ * @return The requested privilege.
+ *
+ * @throws UnknownPrivilegeException if there is no privilege identified by
+ * the provided {@code name}.
*/
- public Privilege retrievePrivilege(final String privilege) {
+ public Privilege retrievePrivilege(final String name) {
final TypedQuery query = entityManager.createNamedQuery(
"findPrivilegeByName", Privilege.class);
- query.setParameter("name", privilege);
+ query.setParameter("name", name);
- return query.getSingleResult();
+ try {
+ return query.getSingleResult();
+ } catch (NoResultException ex) {
+ throw new UnknownPrivilegeException(String.format(
+ "There is no privilege \"%s\".", name), ex);
+ }
}
/**
@@ -78,26 +87,34 @@ public class PrivilegeRepository {
* ToDo: Check if current user is system user.
*
* @param privilegeName The privilege to delete.
+ *
+ * @throws UnknownPrivilegeException if there is no privilege identified by
+ * the provided {@code name}.
*/
public void deletePrivilege(final String privilegeName) {
- final Privilege privilege = retrievePrivilege(privilegeName);
-
if (isPrivilegeInUse(privilegeName)) {
throw new IllegalArgumentException(
"Provided privilage can't be removed because its still in use");
}
- if (privilege != null) {
- entityManager.remove(privilege);
- }
+ final Privilege privilege = retrievePrivilege(privilegeName);
+ entityManager.remove(privilege);
}
+ /**
+ * Checks a {@link Privilege} is in use.
+ *
+ * @param privilegeName The name of the privilege to check.
+ *
+ * @return {@code true} if the privilege is in use (there is a least one
+ * permission using it), {@code false} otherwise.
+ */
public boolean isPrivilegeInUse(final String privilegeName) {
- final TypedQuery query = entityManager.createNamedQuery(
- "isPrivilegeInUse", Integer.class);
+ final TypedQuery query = entityManager.createNamedQuery(
+ "isPrivilegeInUse", Long.class);
query.setParameter("name", privilegeName);
- final Integer result = query.getSingleResult();
+ final Long result = query.getSingleResult();
return result > 0;
}
diff --git a/ccm-core/src/main/java/org/libreccm/core/ResourceType.java b/ccm-core/src/main/java/org/libreccm/core/ResourceType.java
index 7bad64868..e6b7071e3 100644
--- a/ccm-core/src/main/java/org/libreccm/core/ResourceType.java
+++ b/ccm-core/src/main/java/org/libreccm/core/ResourceType.java
@@ -39,6 +39,11 @@ import org.libreccm.l10n.LocalizedString;
@Entity
@Table(name = "resource_types")
@Inheritance(strategy = InheritanceType.JOINED)
+@SuppressWarnings({"PMD.CyclomaticComplexity",
+ "PMD.StdCyclomaticComplexity",
+ "PMD.ModifiedCyclomaticComplexity",
+ "PMD.NPathComplexity",
+ "PMD.LongVariable"})
public class ResourceType implements Serializable {
private static final long serialVersionUID = 4563584142251370627L;
@@ -52,10 +57,10 @@ public class ResourceType implements Serializable {
@Embedded
@AssociationOverride(
- name = "values",
- joinTable = @JoinTable(name = "resource_type_descriptions",
- joinColumns = {
- @JoinColumn(name = "resource_type_id")}))
+ name = "values",
+ joinTable = @JoinTable(name = "resource_type_descriptions",
+ joinColumns = {
+ @JoinColumn(name = "resource_type_id")}))
private LocalizedString description;
@Column(name = "workspace_app")
@@ -73,7 +78,7 @@ public class ResourceType implements Serializable {
public ResourceType() {
description = new LocalizedString();
}
-
+
public long getResourceTypeId() {
return resourceTypeId;
}
@@ -157,25 +162,25 @@ public class ResourceType implements Serializable {
return false;
}
- if (this.resourceTypeId != other.resourceTypeId) {
+ if (this.resourceTypeId != other.getResourceTypeId()) {
return false;
}
- if (!Objects.equals(this.title, other.title)) {
+ if (!Objects.equals(this.title, other.getTitle())) {
return false;
}
- if (!Objects.equals(this.description, other.description)) {
+ if (!Objects.equals(this.description, other.getDescription())) {
return false;
}
- if (this.workspaceApplication != other.workspaceApplication) {
+ if (this.workspaceApplication != other.isWorkspaceApplication()) {
return false;
}
- if (this.viewableAsFullPage != other.viewableAsFullPage) {
+ if (this.viewableAsFullPage != other.isViewableAsFullPage()) {
return false;
}
- if (this.viewableAsEmbedded != other.viewableAsEmbedded) {
+ if (this.viewableAsEmbedded != other.isViewableAsEmbedded()) {
return false;
}
- return this.singleton == other.singleton;
+ return this.singleton == other.isSingleton();
}
public boolean canEqual(final Object obj) {
@@ -189,14 +194,14 @@ public class ResourceType implements Serializable {
public String toString(final String data) {
return String.format("%s{ "
- + "resourceTypeId = %d, "
- + "title = \"%s\", "
- + "description = { %s }, "
- + "workspaceApplication = %b, "
- + "viewableAsFullPage = %b, "
- + "viewableAsEmbedded = %b, "
- + "singleton = %b%s"
- + " }",
+ + "resourceTypeId = %d, "
+ + "title = \"%s\", "
+ + "description = { %s }, "
+ + "workspaceApplication = %b, "
+ + "viewableAsFullPage = %b, "
+ + "viewableAsEmbedded = %b, "
+ + "singleton = %b%s"
+ + " }",
super.toString(),
resourceTypeId,
title,
@@ -207,4 +212,5 @@ public class ResourceType implements Serializable {
singleton,
data);
}
+
}
diff --git a/ccm-core/src/main/java/org/libreccm/core/UnknownPrivilegeException.java b/ccm-core/src/main/java/org/libreccm/core/UnknownPrivilegeException.java
new file mode 100644
index 000000000..4808c78a7
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/core/UnknownPrivilegeException.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2015 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 org.libreccm.core;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnknownPrivilegeException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new instance of UnknownPrivilegeException without
+ * detail message.
+ */
+ public UnknownPrivilegeException() {
+ super();
+ }
+
+ /**
+ * Constructs an instance of UnknownPrivilegeException with the
+ * specified detail message.
+ *
+ * @param msg The detail message.
+ */
+ public UnknownPrivilegeException(final String msg) {
+ super(msg);
+ }
+
+ /**
+ * Constructs an instance of UnknownPrivilegeException which
+ * wraps the specified exception.
+ *
+ * @param exception The exception to wrap.
+ */
+ public UnknownPrivilegeException(final Exception exception) {
+ super(exception);
+ }
+
+ /**
+ * Constructs an instance of UnknownPrivilegeException with the
+ * specified message which also wraps the specified exception.
+ *
+ * @param msg The detail message.
+ * @param exception The exception to wrap.
+ */
+ public UnknownPrivilegeException(final String msg, final Exception exception) {
+ super(msg, exception);
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/core/UserRepository.java b/ccm-core/src/main/java/org/libreccm/core/UserRepository.java
index c14646039..38b281191 100644
--- a/ccm-core/src/main/java/org/libreccm/core/UserRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/core/UserRepository.java
@@ -43,6 +43,29 @@ public class UserRepository extends AbstractEntityRepository {
return entity.getSubjectId() == 0;
}
+ /**
+ * Retrieves the internal system user which is permitted to execute almost
+ * every operation.
+ *
+ * @return The internal system user.
+ */
+ public User retrieveSystemUser() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Retrieves the public user. The public user is used to represent the
+ * privileges of a user which is not logged in. The public user is a
+ * ordinary user account in the database with the screen name
+ * {@code public-user}.
+ *
+ * @return The public user or {@code null} if there is no account for the
+ * public user.
+ */
+ public User retrievePublicUser() {
+ throw new UnsupportedOperationException();
+ }
+
public User findByScreenName(final String screenname) {
final TypedQuery query = getEntityManager().createNamedQuery(
"findUserByScreenName", User.class);
@@ -55,21 +78,21 @@ public class UserRepository extends AbstractEntityRepository {
//screen_name column has a unique constraint.
if (result.isEmpty()) {
return null;
- } else {
+ } else {
return result.get(0);
- }
+ }
}
public User findByEmailAddress(final String emailAddress) {
final TypedQuery query = getEntityManager().createNamedQuery(
"findUserByEmailAddress", User.class);
query.setParameter("emailAddress", emailAddress);
-
+
final List result = query.getResultList();
-
+
if (result.isEmpty()) {
return null;
- } else if(result.size() == 1) {
+ } else if (result.size() == 1) {
return result.get(0);
} else {
throw new MultipleMatchingUserException(String.format(
@@ -79,5 +102,4 @@ public class UserRepository extends AbstractEntityRepository {
}
}
-
}
diff --git a/ccm-core/src/main/java/org/libreccm/web/ApplicationType.java b/ccm-core/src/main/java/org/libreccm/web/ApplicationType.java
index 43b7840ae..1947f2e2f 100644
--- a/ccm-core/src/main/java/org/libreccm/web/ApplicationType.java
+++ b/ccm-core/src/main/java/org/libreccm/web/ApplicationType.java
@@ -40,6 +40,7 @@ import org.libreccm.core.ResourceType;
*/
@Entity
@Table(name = "application_types")
+@SuppressWarnings("PMD.LongVariable")
public class ApplicationType extends ResourceType implements Serializable {
private static final long serialVersionUID = -1175728067001112457L;
diff --git a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
index bed9f9e55..0e6e89cd1 100644
--- a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
+++ b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java
@@ -58,6 +58,9 @@ public class DatasetsTest extends DatasetsVerifier {
"/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json",
"/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json",
"/datasets/org/libreccm/core/PermissionRepositoryTest/data.json",
+ "/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-create.json",
+ "/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-delete.json",
+ "/datasets/org/libreccm/core/PrivilegeRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/after-delete.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/after-save-changed.json",
diff --git a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
index 985fa4066..3054d493d 100644
--- a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
+++ b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java
@@ -106,10 +106,10 @@ public class PermissionRepositoryTest {
@Deployment
public static WebArchive createDeployment() {
final PomEquippedResolveStage pom = Maven
- .resolver()
- .loadPomFromFile("pom.xml");
+ .resolver()
+ .loadPomFromFile("pom.xml");
final PomEquippedResolveStage dependencies = pom.
- importCompileAndRuntimeDependencies();
+ importCompileAndRuntimeDependencies();
final File[] libs = dependencies.resolve().withTransitivity().asFile();
for (File lib : libs) {
@@ -118,31 +118,31 @@ public class PermissionRepositoryTest {
}
return ShrinkWrap
- .create(WebArchive.class,
- "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
- .addPackage(User.class.getPackage())
- .addPackage(org.libreccm.web.Application.class.getPackage())
- .addPackage(org.libreccm.categorization.Category.class.
- getPackage())
- .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
- addPackage(org.libreccm.jpa.EntityManagerProducer.class
- .getPackage())
- .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
- .getPackage())
- .addPackage(org.libreccm.testutils.EqualsVerifier.class.
- getPackage())
- .addPackage(org.libreccm.tests.categories.IntegrationTest.class
- .getPackage())
- .addAsLibraries(libs)
- .addAsResource("test-persistence.xml",
- "META-INF/persistence.xml")
- .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
- .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
+ .create(WebArchive.class,
+ "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
+ .addPackage(User.class.getPackage())
+ .addPackage(org.libreccm.web.Application.class.getPackage())
+ .addPackage(org.libreccm.categorization.Category.class.
+ getPackage())
+ .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
+ addPackage(org.libreccm.jpa.EntityManagerProducer.class
+ .getPackage())
+ .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
+ .getPackage())
+ .addPackage(org.libreccm.testutils.EqualsVerifier.class.
+ getPackage())
+ .addPackage(org.libreccm.tests.categories.IntegrationTest.class
+ .getPackage())
+ .addAsLibraries(libs)
+ .addAsResource("test-persistence.xml",
+ "META-INF/persistence.xml")
+ .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
}
@Test
- @UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ @UsingDataSet("datasets/org/libreccm/core/PermissionRepositoryTest/"
+ + "data.json")
@InSequence(10)
public void findPermissionsForSubject() {
final User jdoe = userRepository.findByScreenName("jdoe");
@@ -158,7 +158,7 @@ public class PermissionRepositoryTest {
assertThat(authors, is(not(nullValue())));
final List permissionsJdoe = permissionRepository
- .findPermissionsForSubject(jdoe);
+ .findPermissionsForSubject(jdoe);
assertThat(permissionsJdoe.size(), is(1));
assertThat(permissionsJdoe.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 2")));
@@ -166,18 +166,18 @@ public class PermissionRepositoryTest {
is(equalTo("read")));
final List permissionsMmuster = permissionRepository
- .findPermissionsForSubject(mmuster);
+ .findPermissionsForSubject(mmuster);
assertThat(permissionsMmuster.size(), is(0));
final List permissionsAdmins = permissionRepository
- .findPermissionsForSubject(admins);
+ .findPermissionsForSubject(admins);
assertThat(permissionsAdmins.size(), is(1));
assertThat(permissionsAdmins.get(0).getObject(), is(nullValue()));
assertThat(permissionsAdmins.get(0).getGrantedPrivilege().getPrivilege(),
is("admin"));
final List permissionsUsers = permissionRepository
- .findPermissionsForSubject(users);
+ .findPermissionsForSubject(users);
assertThat(permissionsUsers.size(), is(1));
assertThat(permissionsUsers.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1")));
@@ -185,7 +185,7 @@ public class PermissionRepositoryTest {
is(equalTo("read")));
final List permissionsAuthors = permissionRepository
- .findPermissionsForSubject(authors);
+ .findPermissionsForSubject(authors);
assertThat(permissionsAuthors.size(), is(2));
assertThat(permissionsAuthors.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1")));
@@ -193,16 +193,16 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1")));
final Set privileges = new HashSet<>();
privileges.add(permissionsAuthors.get(0).getGrantedPrivilege()
- .getPrivilege());
+ .getPrivilege());
privileges.add(permissionsAuthors.get(1).getGrantedPrivilege()
- .getPrivilege());
+ .getPrivilege());
assertThat(privileges, hasItem("read"));
assertThat(privileges, hasItem("write"));
}
@Test(expected = IllegalArgumentException.class)
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldThrowException(IllegalArgumentException.class)
@InSequence(11)
public void findPermissionsForNullSubject() {
@@ -211,7 +211,7 @@ public class PermissionRepositoryTest {
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(20)
public void findPermissionsForUser() {
final User jdoe = userRepository.findByScreenName("jdoe");
@@ -220,7 +220,7 @@ public class PermissionRepositoryTest {
assertThat(mmuster, is(not(nullValue())));
final List jdoePermissions = permissionRepository
- .findPermissionsForUser(jdoe);
+ .findPermissionsForUser(jdoe);
assertThat(jdoePermissions.size(), is(4));
Collections.sort(jdoePermissions, new Comparator() {
@@ -228,20 +228,20 @@ public class PermissionRepositoryTest {
public int compare(final Permission permission1,
final Permission permission2) {
int result = permission1.getGrantedPrivilege().getPrivilege()
- .compareToIgnoreCase(permission2.getGrantedPrivilege()
- .getPrivilege());
+ .compareToIgnoreCase(permission2.getGrantedPrivilege()
+ .getPrivilege());
if (result == 0) {
result = permission1.getObject().getDisplayName().compareTo(
- permission2.getObject().getDisplayName());
+ permission2.getObject().getDisplayName());
} else {
return result;
}
if (result == 0) {
return permission1.getGrantee().getClass().getName()
- .compareTo(permission2.getGrantee().getClass().
- getName());
+ .compareTo(permission2.getGrantee().getClass().
+ getName());
} else {
return result;
}
@@ -268,17 +268,17 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1")));
final List mmusterPermissions = permissionRepository
- .findPermissionsForUser(mmuster);
+ .findPermissionsForUser(mmuster);
assertThat(mmusterPermissions.size(), is(1));
assertThat(mmusterPermissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("admin")));
assertThat(mmusterPermissions.get(0).getObject(), is(nullValue()));
}
@Test(expected = IllegalArgumentException.class)
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldThrowException(IllegalArgumentException.class)
@InSequence(21)
public void findPermissionsForNullUser() {
@@ -287,7 +287,7 @@ public class PermissionRepositoryTest {
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(30)
public void findPermissionsForCcmObject() {
final CcmObject object1 = ccmObjectRepository.findById(-10L);
@@ -295,7 +295,7 @@ public class PermissionRepositoryTest {
final CcmObject object3 = ccmObjectRepository.findById(-30L);
final List object1Permissions = permissionRepository
- .findPermissionsForCcmObject(object1);
+ .findPermissionsForCcmObject(object1);
assertThat(object1Permissions.size(), is(3));
Collections.sort(object1Permissions, new Comparator() {
@@ -308,21 +308,21 @@ public class PermissionRepositoryTest {
});
assertThat(object1Permissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object1Permissions.get(0).getGrantee(),
is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(0).getGrantee()).getName(),
is(equalTo("authors")));
assertThat(object1Permissions.get(1).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("write")));
assertThat(object1Permissions.get(1).getGrantee(),
is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(1).getGrantee()).getName(),
is(equalTo("authors")));
assertThat(object1Permissions.get(2).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object1Permissions.get(2).getGrantee(),
is(instanceOf(Group.class)));
@@ -330,25 +330,25 @@ public class PermissionRepositoryTest {
is(equalTo("users")));
final List object2Permissions = permissionRepository
- .findPermissionsForCcmObject(object2);
+ .findPermissionsForCcmObject(object2);
assertThat(object2Permissions.size(), is(1));
assertThat(object2Permissions.get(0).getGrantedPrivilege()
- .getPrivilege(),
+ .getPrivilege(),
is(equalTo("read")));
assertThat(object2Permissions.get(0).getGrantee(),
is(instanceOf(User.class)));
assertThat(((User) object2Permissions.get(0).getGrantee())
- .getScreenName(),
+ .getScreenName(),
is(equalTo("jdoe")));
final List object3Permissions = permissionRepository
- .findPermissionsForCcmObject(object3);
+ .findPermissionsForCcmObject(object3);
assertThat(object3Permissions, is(empty()));
}
@Test(expected = IllegalArgumentException.class)
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldThrowException(IllegalArgumentException.class)
@InSequence(31)
public void findPermissionsForNullObject() {
@@ -357,20 +357,20 @@ public class PermissionRepositoryTest {
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
- + "PermissionRepositoryTest/after-save-new.json",
+ + "PermissionRepositoryTest/after-save-new.json",
excludeColumns = {"permission_id"})
@InSequence(40)
public void saveNewPermission() {
final User mmuster = userRepository.findByScreenName("mmuster");
final TypedQuery query1 = entityManager.createQuery(
- "SELECT p FROM Privilege p WHERE p.privilege = 'read'",
- Privilege.class);
+ "SELECT p FROM Privilege p WHERE p.privilege = 'read'",
+ Privilege.class);
final TypedQuery query2 = entityManager.createQuery(
- "SELECT p FROM Privilege p WHERE p.privilege = 'write'",
- Privilege.class);
+ "SELECT p FROM Privilege p WHERE p.privilege = 'write'",
+ Privilege.class);
final CcmObject object = ccmObjectRepository.findById(-40L);
@@ -405,9 +405,9 @@ public class PermissionRepositoryTest {
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
- + "PermissionRepositoryTest/after-save-changed.json",
+ + "PermissionRepositoryTest/after-save-changed.json",
excludeColumns = {"permission_id"})
@InSequence(50)
public void saveChangedPermission() {
@@ -424,9 +424,9 @@ public class PermissionRepositoryTest {
@Test
@UsingDataSet(
- "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
+ "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
- + "PermissionRepositoryTest/after-delete.json",
+ + "PermissionRepositoryTest/after-delete.json",
excludeColumns = {"permission_id"})
@InSequence(60)
public void deletePermission() {
@@ -441,4 +441,5 @@ public class PermissionRepositoryTest {
public void deleteNullPermission() {
permissionRepository.delete(null);
}
+
}
diff --git a/ccm-core/src/test/java/org/libreccm/core/PrivilegeRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/core/PrivilegeRepositoryTest.java
new file mode 100644
index 000000000..46b45c5b0
--- /dev/null
+++ b/ccm-core/src/test/java/org/libreccm/core/PrivilegeRepositoryTest.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2015 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 org.libreccm.core;
+
+import static org.hamcrest.Matchers.*;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.ShouldThrowException;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.arquillian.persistence.PersistenceTest;
+import org.jboss.arquillian.persistence.ShouldMatchDataSet;
+import org.jboss.arquillian.persistence.UsingDataSet;
+import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
+import org.jboss.arquillian.transaction.api.annotation.Transactional;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.libreccm.tests.categories.IntegrationTest;
+
+import java.io.File;
+
+import javax.inject.Inject;
+
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Category(IntegrationTest.class)
+@RunWith(Arquillian.class)
+@PersistenceTest
+@Transactional(TransactionMode.COMMIT)
+public class PrivilegeRepositoryTest {
+
+ @Inject
+ private transient PrivilegeRepository privilegeRepository;
+
+ public PrivilegeRepositoryTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() {
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ @Deployment
+ public static WebArchive createDeployment() {
+ final PomEquippedResolveStage pom = Maven
+ .resolver()
+ .loadPomFromFile("pom.xml");
+ final PomEquippedResolveStage dependencies = pom.
+ importCompileAndRuntimeDependencies();
+ final File[] libs = dependencies.resolve().withTransitivity().asFile();
+
+ for (File lib : libs) {
+ System.err.printf("Adding file '%s' to test archive...%n",
+ lib.getName());
+ }
+
+ return ShrinkWrap
+ .create(WebArchive.class,
+ "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
+ .addPackage(User.class.getPackage())
+ .addPackage(org.libreccm.web.Application.class.getPackage())
+ .addPackage(org.libreccm.categorization.Category.class.
+ getPackage())
+ .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
+ addPackage(org.libreccm.jpa.EntityManagerProducer.class
+ .getPackage())
+ .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
+ .getPackage())
+ .addPackage(org.libreccm.testutils.EqualsVerifier.class.
+ getPackage())
+ .addPackage(org.libreccm.tests.categories.IntegrationTest.class
+ .getPackage())
+ .addAsLibraries(libs)
+ .addAsResource("test-persistence.xml",
+ "META-INF/persistence.xml")
+ .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
+ }
+
+ @Test
+ @UsingDataSet("datasets/org/libreccm/core/PrivilegeRepositoryTest/"
+ + "data.json")
+ @InSequence(10)
+ public void retrievePrivilege() {
+ final Privilege admin = privilegeRepository.retrievePrivilege("admin");
+ final Privilege read = privilegeRepository.retrievePrivilege("read");
+ final Privilege write = privilegeRepository.retrievePrivilege("write");
+
+ assertThat(admin, is(not(nullValue())));
+ assertThat(read, is(not(nullValue())));
+ assertThat(write, is(not(nullValue())));
+
+ assertThat(admin.getPrivilege(), is(equalTo("admin")));
+ assertThat(read.getPrivilege(), is(equalTo("read")));
+ assertThat(write.getPrivilege(), is(equalTo("write")));
+ }
+
+ @Test(expected = UnknownPrivilegeException.class)
+ @UsingDataSet("datasets/org/libreccm/core/PrivilegeRepositoryTest/"
+ + "data.json")
+ @ShouldThrowException(UnknownPrivilegeException.class)
+ @InSequence(20)
+ public void retrieveNotExitingPrivilege() {
+ privilegeRepository.retrievePrivilege("publish");
+ }
+
+ @Test
+ @UsingDataSet("datasets/org/libreccm/core/PrivilegeRepositoryTest/"
+ + "data.json")
+ @ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
+ + "PrivilegeRepositoryTest/after-create.json",
+ excludeColumns = {"privilege_id"})
+ @InSequence(30)
+ public void createNewPrivilege() {
+ privilegeRepository.createPrivilege("publish");
+ }
+
+ @Test
+ @UsingDataSet("datasets/org/libreccm/core/PrivilegeRepositoryTest/"
+ + "data.json")
+ @ShouldMatchDataSet(value = "datasets/org/libreccm/core/"
+ + "PrivilegeRepositoryTest/after-delete.json",
+ excludeColumns = {"privilege_id"})
+ @InSequence(40)
+ public void deletePrivilege() {
+ privilegeRepository.deletePrivilege("write");
+ }
+
+ @Test(expected = UnknownPrivilegeException.class)
+ @UsingDataSet("datasets/org/libreccm/core/PrivilegeRepositoryTest/"
+ + "data.json")
+ @ShouldThrowException(UnknownPrivilegeException.class)
+ @InSequence(41)
+ public void deleteNullPrivilege() {
+ privilegeRepository.deletePrivilege(null);
+ }
+
+ @Test
+ @UsingDataSet("datasets/org/libreccm/core/PermissionRepositoryTest/"
+ + "data.json")
+ @InSequence(50)
+ public void checkIsPermissionInUse() {
+ assertThat(privilegeRepository.isPrivilegeInUse("admin"), is(true));
+ assertThat(privilegeRepository.isPrivilegeInUse("write"), is(true));
+ assertThat(privilegeRepository.isPrivilegeInUse("read"), is(true));
+ assertThat(privilegeRepository.isPrivilegeInUse("used"), is(false));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ @UsingDataSet("datasets/org/libreccm/core/PermissionRepositoryTest/"
+ + "data.json")
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(60)
+ public void deleteInUsePrivilege() {
+ privilegeRepository.deletePrivilege("admin");
+ }
+
+}
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json
index f7a7c3969..fa83060ea 100644
--- a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json
@@ -103,6 +103,10 @@
{
"privilege_id": -30,
"privilege": "write"
+ },
+ {
+ "privilege_id": -40,
+ "privilege": "unused"
}
],
"ccm_objects":
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json
index 938d78e6e..2d9b862aa 100644
--- a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json
@@ -103,6 +103,10 @@
{
"privilege_id": -30,
"privilege": "write"
+ },
+ {
+ "privilege_id": -40,
+ "privilege": "unused"
}
],
"ccm_objects":
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json
index cb9927517..69f2af189 100644
--- a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json
@@ -103,6 +103,10 @@
{
"privilege_id": -30,
"privilege": "write"
+ },
+ {
+ "privilege_id": -40,
+ "privilege": "unused"
}
],
"ccm_objects":
@@ -167,7 +171,7 @@
"object_id": -40
},
{
- "permission_id": -50,
+ "permission_id": -60,
"granted_privilege_id": -30,
"grantee_id": -50,
"object_id": -40
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/data.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/data.json
index 7a1c0348a..02a64ad3d 100644
--- a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/data.json
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/data.json
@@ -103,6 +103,10 @@
{
"privilege_id": -30,
"privilege": "write"
+ },
+ {
+ "privilege_id": -40,
+ "privilege": "unused"
}
],
"ccm_objects":
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-create.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-create.json
new file mode 100644
index 000000000..74e45a1e1
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-create.json
@@ -0,0 +1,21 @@
+{
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ },
+ {
+ "privilege_id": -30,
+ "privilege": "write"
+ },
+ {
+ "privilege_id": -40,
+ "privilege": "publish"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-delete.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-delete.json
new file mode 100644
index 000000000..74a440b00
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/after-delete.json
@@ -0,0 +1,13 @@
+{
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/data.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/data.json
new file mode 100644
index 000000000..4a1bcef27
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PrivilegeRepositoryTest/data.json
@@ -0,0 +1,17 @@
+{
+ "ccm_privileges":
+ [
+ {
+ "privilege_id": -10,
+ "privilege": "admin"
+ },
+ {
+ "privilege_id": -20,
+ "privilege": "read"
+ },
+ {
+ "privilege_id": -30,
+ "privilege": "write"
+ }
+ ]
+}
\ No newline at end of file