diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml
index 112a48be3..f181ebc71 100644
--- a/ccm-core/pom.xml
+++ b/ccm-core/pom.xml
@@ -70,6 +70,34 @@
equalsverifier
test
+
+
+ org.jboss.arquillian.junit
+ arquillian-junit-container
+ test
+
+
+ org.jboss.arquillian.extension
+ arquillian-persistence-dbunit
+ test
+
+
+ org.jboss.arquillian.extension
+ arquillian-transaction-impl-base
+ test
+
+
+ org.jboss.shrinkwrap.resolver
+ shrinkwrap-resolver-impl-maven
+ test
+
+
+
+ com.h2database
+ h2
+ test
+
+
@@ -111,7 +139,7 @@
org.jacoco
jacoco-maven-plugin
- 0.7.4.201502262128
+ 0.7.5.201505241946
default-prepare-agent
@@ -180,7 +208,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 2.10.2
+ 2.10.3
true
true
@@ -225,7 +253,7 @@
org.jacoco
jacoco-maven-plugin
- 0.7.4.201502262128
+ 0.7.5.201505241946
org.codehaus.mojo
@@ -288,4 +316,254 @@
+
+
+ tomee-embedded
+
+
+ org.apache.openejb
+ arquillian-tomee-embedded
+ 1.7.2
+ test
+
+
+ org.apache.openejb
+ tomee-embedded
+ 1.7.2
+ test
+
+
+ org.apache.bval
+ bval-core
+
+
+ org.apache.bval
+ bval-jsr303
+
+
+ org.apache.openjpa
+ openjpa-persistence
+
+
+ org.apache.openjpa
+ openjpa-kernel
+
+
+ org.apache.openjpa
+ openjpa-lib
+
+
+ org.apache.openjpa
+ openjpa-parent
+
+
+
+
+ org.jboss.logmanager
+ jboss-logmanager
+ 1.5.4.Final
+ test
+
+
+
+
+
+
+
+
+
+
+
+ src/test/resources
+
+
+ src/test/resources-tomee-embedded
+
+
+
+
+
+ de.jpdigital
+ hibernate4-ddl-maven-plugin
+ 1.0.0-alpha.1
+
+
+ h2
+ mysql5_innodb
+ postgresql9
+
+
+ de.jpdigital.research.accessibilitystudy
+
+ true
+
+
+
+
+ gen-ddl
+
+ process-classes
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.18.1
+
+ always
+ 999
+ true
+
+ org.jboss.logmanager.LogManager
+ ${project.basedir}/target/wildfly-8.2.0.Final
+ ${project.basedir}/target/wildfly-8.2.0.Final/modules
+
+ false
+
+ org.libreccm.tests.categories.UnitTests,
+ org.libreccm.tests.categories.IntegrationTest
+
+
+
+
+
+
+
+
+ wildfly8-embedded
+
+
+ org.wildfly
+ wildfly-arquillian-container-embedded
+ 8.2.0.Final
+ test
+
+
+ org.wildfly
+ wildfly-embedded
+ 8.2.0.Final
+
+
+ org.jacoco
+ org.jacoco.core
+ 0.7.5.201505241946
+ test
+
+
+
+
+
+
+
+ src/test/resources
+
+
+ src/test/resources-wildfly8-embedded
+
+
+
+
+
+ de.jpdigital
+ hibernate4-ddl-maven-plugin
+ 1.0.0-alpha.1
+
+
+ h2
+ mysql5_innodb
+ postgresql9
+
+
+ de.jpdigital.research.accessibilitystudy
+
+ true
+
+
+
+
+ gen-ddl
+
+ process-classes
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 2.10
+
+
+ unpack
+ process-test-classes
+
+ unpack
+
+
+
+
+ org.wildfly
+ wildfly-dist
+ 8.2.0.Final
+ zip
+ false
+ target
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.18.1
+
+ always
+ 999
+ true
+
+ org.jboss.logmanager.LogManager
+ ${project.basedir}/target/wildfly-8.2.0.Final
+ ${project.basedir}/target/wildfly-8.2.0.Final/modules
+
+ false
+
+ org.libreccm.tests.categories.UnitTest,
+ org.libreccm.tests.categories.IntegrationTest
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/src/main/java/org/libreccm/categorization/Domain.java b/ccm-core/src/main/java/org/libreccm/categorization/Domain.java
index 6f8dbcc70..251283aa4 100644
--- a/ccm-core/src/main/java/org/libreccm/categorization/Domain.java
+++ b/ccm-core/src/main/java/org/libreccm/categorization/Domain.java
@@ -21,7 +21,7 @@ package org.libreccm.categorization;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.URL;
import org.libreccm.core.CcmObject;
-import org.libreccm.jpautils.UriConverter;
+import org.libreccm.jpa.utils.UriConverter;
import org.libreccm.l10n.LocalizedString;
import java.io.Serializable;
@@ -45,6 +45,7 @@ import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Pattern;
+
import org.omg.CORBA.DomainManager;
/**
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 ba4457bde..d14fd1565 100644
--- a/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java
@@ -6,26 +6,52 @@
package org.libreccm.core;
import java.util.List;
+
import javax.inject.Inject;
import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
/**
*
* @author Jens Pelzetter
+ * @param
+ * @param
*/
public abstract class AbstractEntityRepository {
-
+
@Inject
private transient EntityManager entityManager;
-
+
protected EntityManager getEntityManager() {
return entityManager;
}
-
+
public abstract Class getEntityClass();
-
+
+ public E findById(final K entityId) {
+ return entityManager.find(getEntityClass(), entityId);
+ }
+
+ public List findAll() {
+ // We are using the Critiera API here because otherwise we can't
+ // pass the type of the entity dynmacially.
+ final CriteriaBuilder criteriaBuilder = entityManager
+ .getCriteriaBuilder();
+ final CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(
+ getEntityClass());
+ final Root root = criteriaQuery.from(getEntityClass());
+ criteriaQuery.select(root);
+
+ final TypedQuery query = entityManager.createQuery(criteriaQuery);
+
+ return query.getResultList();
+ }
+
public abstract boolean isNew(final E entity);
-
+
public void save(final E entity) {
if (isNew(entity)) {
entityManager.persist(entity);
@@ -33,10 +59,12 @@ public abstract class AbstractEntityRepository {
entityManager.merge(entity);
}
}
-
- public E findById(final K entityId) {
- return entityManager.find(getEntityClass(), entityId);
+
+ public void delete(final E entity) {
+ if (entity == null) {
+ throw new IllegalArgumentException("Can't delete a null entity.");
+ }
+
+ entityManager.remove(entity);
}
-
- public abstract List findAll();
}
diff --git a/ccm-core/src/main/java/org/libreccm/core/CcmObject.java b/ccm-core/src/main/java/org/libreccm/core/CcmObject.java
index 6c30287d4..87b9cee85 100644
--- a/ccm-core/src/main/java/org/libreccm/core/CcmObject.java
+++ b/ccm-core/src/main/java/org/libreccm/core/CcmObject.java
@@ -22,7 +22,9 @@ import static org.libreccm.core.CoreConstants.*;
import org.libreccm.categorization.Categorization;
import org.libreccm.categorization.Category;
+import org.libreccm.categorization.Domain;
import org.libreccm.categorization.DomainOwnership;
+import org.omg.CORBA.DomainManager;
import java.io.Serializable;
import java.util.ArrayList;
@@ -63,7 +65,7 @@ import javax.xml.bind.annotation.XmlRootElement;
@Entity
@Table(name = "ccm_objects")
@Inheritance(strategy = InheritanceType.JOINED)
-@XmlRootElement(name = "ccm-object", namespace = XML_NS)
+@XmlRootElement(name = "ccm-object", namespace = CORE_XML_NS)
//False warning (?). Because this class has been migrated from the old PDL style
//persistence system we can't yet refactor it to make PMD happy. Also I think
//this is a false warning.
@@ -80,35 +82,35 @@ public class CcmObject implements Serializable {
@Id
@Column(name = "object_id")
@GeneratedValue(strategy = GenerationType.AUTO)
- @XmlElement(name = "object-id", namespace = XML_NS)
+ @XmlElement(name = "object-id", namespace = CORE_XML_NS)
private long objectId;
/**
* A human readable name identifying this {@code CcmObject}
*/
@Column(name = "display_name")
- @XmlElement(name = "display-name", namespace = XML_NS)
+ @XmlElement(name = "display-name", namespace = CORE_XML_NS)
private String displayName;
@OneToMany(mappedBy = "object")
- @XmlElementWrapper(name = "permissions", namespace = XML_NS)
- @XmlElement(name = "permission", namespace = XML_NS)
+ @XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
+ @XmlElement(name = "permission", namespace = CORE_XML_NS)
private List permissions;
/**
* Category Domains owned by this {@code CcmObject}.
*/
@OneToMany(mappedBy = "owner")
- @XmlElementWrapper(name = "domains", namespace = XML_NS)
- @XmlElement(name = "domain", namespace = XML_NS)
+ @XmlElementWrapper(name = "domains", namespace = CORE_XML_NS)
+ @XmlElement(name = "domain", namespace = CORE_XML_NS)
private List domains;
/**
* Categories which have been assigned to this {@code CcmObject}.
*/
@OneToMany(mappedBy = "categorizedObject")
- @XmlElementWrapper(name = "categories", namespace = XML_NS)
- @XmlElement(name = "category", namespace = XML_NS)
+ @XmlElementWrapper(name = "categories", namespace = CORE_XML_NS)
+ @XmlElement(name = "category", namespace = CORE_XML_NS)
private List categories;
public CcmObject() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/CoreConstants.java b/ccm-core/src/main/java/org/libreccm/core/CoreConstants.java
index a1d80a1ab..1ea2d4bf0 100644
--- a/ccm-core/src/main/java/org/libreccm/core/CoreConstants.java
+++ b/ccm-core/src/main/java/org/libreccm/core/CoreConstants.java
@@ -25,10 +25,10 @@ package org.libreccm.core;
*/
public final class CoreConstants {
+ public static final String CORE_XML_NS = "http://core.libreccm.org";
+
private CoreConstants() {
//Nothing
}
- public static final String XML_NS = "http://core.libreccm.org";
-
}
diff --git a/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java b/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java
index 6f87c29df..06b0e9930 100644
--- a/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java
+++ b/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java
@@ -45,23 +45,23 @@ import javax.xml.bind.annotation.XmlRootElement;
* @author Jens Pelzetter
*/
@Embeddable
-@XmlRootElement(name = "email-address", namespace = XML_NS)
+@XmlRootElement(name = "email-address", namespace = CORE_XML_NS)
public class EmailAddress implements Serializable {
private static final long serialVersionUID = -4076089589412432766L;
@Column(name = "email_address", length = 512, nullable = false)
- @XmlElement(name = "address", namespace = XML_NS, required = true)
+ @XmlElement(name = "address", namespace = CORE_XML_NS, required = true)
@NotBlank
@Email
private String address;
@Column(name = "bouncing")
- @XmlElement(name = "bouncing", namespace = XML_NS)
+ @XmlElement(name = "bouncing", namespace = CORE_XML_NS)
private boolean bouncing;
@Column(name = "verified")
- @XmlElement(name = "verified", namespace = XML_NS)
+ @XmlElement(name = "verified", namespace = CORE_XML_NS)
private boolean verified;
public String getAddress() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java b/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java
index 6678a33b1..4b8139e1c 100644
--- a/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java
+++ b/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java
@@ -42,7 +42,7 @@ import javax.xml.bind.annotation.XmlTransient;
@Entity
@Table(name = "group_memberships")
@XmlRootElement(name = "group-membership",
- namespace = XML_NS)
+ namespace = CORE_XML_NS)
public class GroupMembership implements Serializable {
private static final long serialVersionUID = 1897274442468035089L;
@@ -50,7 +50,7 @@ public class GroupMembership implements Serializable {
@Id
@Column(name = "membership_id")
@GeneratedValue(strategy = GenerationType.AUTO)
- @XmlElement(name = "membership-id", namespace = XML_NS)
+ @XmlElement(name = "membership-id", namespace = CORE_XML_NS)
private long membershipId;
@ManyToOne
diff --git a/ccm-core/src/main/java/org/libreccm/core/Party.java b/ccm-core/src/main/java/org/libreccm/core/Party.java
index 20eebd883..2cf01ab52 100644
--- a/ccm-core/src/main/java/org/libreccm/core/Party.java
+++ b/ccm-core/src/main/java/org/libreccm/core/Party.java
@@ -45,7 +45,7 @@ import javax.xml.bind.annotation.XmlRootElement;
*/
@Entity
@Table(name = "parties")
-@XmlRootElement(name = "party", namespace = XML_NS)
+@XmlRootElement(name = "party", namespace = CORE_XML_NS)
public class Party extends CcmObject implements Serializable {
private static final long serialVersionUID = 6303836654273293979L;
@@ -55,15 +55,15 @@ public class Party extends CcmObject implements Serializable {
joinColumns = {
@JoinColumn(name = "party_id")})
@Size(min = 1)
- @XmlElementWrapper(name = "email-addresses", namespace = XML_NS)
- @XmlElement(name = "email-address", namespace = XML_NS)
+ @XmlElementWrapper(name = "email-addresses", namespace = CORE_XML_NS)
+ @XmlElement(name = "email-address", namespace = CORE_XML_NS)
private List emailAddresses;
@OneToMany(mappedBy = "grantee")
//Can't shorten this variable name without reducing descriptiveness
@SuppressWarnings("PMD.LongVariable")
- @XmlElementWrapper(name = "granted-permissions", namespace = XML_NS)
- @XmlElement(name = "granted-permission", namespace = XML_NS)
+ @XmlElementWrapper(name = "granted-permissions", namespace = CORE_XML_NS)
+ @XmlElement(name = "granted-permission", namespace = CORE_XML_NS)
private List grantedPermissions;
public Party() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/Permission.java b/ccm-core/src/main/java/org/libreccm/core/Permission.java
index cd408f0fe..816dcae00 100644
--- a/ccm-core/src/main/java/org/libreccm/core/Permission.java
+++ b/ccm-core/src/main/java/org/libreccm/core/Permission.java
@@ -37,7 +37,6 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
/**
*
@@ -49,7 +48,7 @@ import javax.xml.bind.annotation.XmlTransient;
@SuppressWarnings({"PMD.CyclomaticComplexity",
"PMD.StdCyclomaticComplexity",
"PMD.ModifiedCyclomaticComplexity"})
-@XmlRootElement(name = "permission", namespace = XML_NS)
+@XmlRootElement(name = "permission", namespace = CORE_XML_NS)
public class Permission implements Serializable {
private static final long serialVersionUID = -2368935232499907547L;
@@ -57,7 +56,7 @@ public class Permission implements Serializable {
@Id
@Column(name = "permission_id")
@GeneratedValue(strategy = GenerationType.AUTO)
- @XmlElement(name = "permission-id", namespace = XML_NS)
+ @XmlElement(name = "permission-id", namespace = CORE_XML_NS)
private long permissionId;
@ManyToOne
@@ -66,7 +65,7 @@ public class Permission implements Serializable {
@OneToOne
@JoinColumn(name = "granted_privilege_id")
- @XmlElement(name = "privilege", namespace = XML_NS)
+ @XmlElement(name = "privilege", namespace = CORE_XML_NS)
private Privilege grantedPrivilege;
@ManyToOne
@@ -75,16 +74,16 @@ public class Permission implements Serializable {
@ManyToOne
@JoinColumn(name = "creation_user_id")
- @XmlElement(name = "creation-user", namespace = XML_NS)
+ @XmlElement(name = "creation-user", namespace = CORE_XML_NS)
private User creationUser;
@Column(name = "creation_date")
@Temporal(TemporalType.TIMESTAMP)
- @XmlElement(name = "creation-date", namespace = XML_NS)
+ @XmlElement(name = "creation-date", namespace = CORE_XML_NS)
private Date creationDate;
@Column(name = "creation_ip")
- @XmlElement(name = "creation-ip", namespace = XML_NS)
+ @XmlElement(name = "creation-ip", namespace = CORE_XML_NS)
private String creationIp;
public long getPermissionId() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/PersonName.java b/ccm-core/src/main/java/org/libreccm/core/PersonName.java
index ed14c4226..bff1139f3 100644
--- a/ccm-core/src/main/java/org/libreccm/core/PersonName.java
+++ b/ccm-core/src/main/java/org/libreccm/core/PersonName.java
@@ -36,31 +36,31 @@ import javax.xml.bind.annotation.XmlRootElement;
* @author Jens Pelzetter
*/
@Embeddable
-@XmlRootElement(name = "person-name", namespace = XML_NS)
+@XmlRootElement(name = "person-name", namespace = CORE_XML_NS)
public class PersonName implements Serializable {
private static final long serialVersionUID = -5805626320605809172L;
@Column(name = "title_pre", length = 512)
- @XmlElement(name = "title-pre", namespace = XML_NS)
+ @XmlElement(name = "title-pre", namespace = CORE_XML_NS)
private String titlePre;
@Column(name = "given_name", length = 512)
@NotBlank
- @XmlElement(name = "given-name", namespace = XML_NS)
+ @XmlElement(name = "given-name", namespace = CORE_XML_NS)
private String givenName;
@Column(name = "middle_name", length = 512)
- @XmlElement(name = "middle-name", namespace = XML_NS)
+ @XmlElement(name = "middle-name", namespace = CORE_XML_NS)
private String middleName;
@Column(name = "family_name", length = 512)
@NotBlank
- @XmlElement(name = "family-name", namespace = XML_NS)
+ @XmlElement(name = "family-name", namespace = CORE_XML_NS)
private String familyName;
@Column(name = "title_post", length = 512)
- @XmlElement(name = "title-post", namespace = XML_NS)
+ @XmlElement(name = "title-post", namespace = CORE_XML_NS)
private String titlePost;
public String getTitlePre() {
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 07357f27c..756194b6f 100644
--- a/ccm-core/src/main/java/org/libreccm/core/Privilege.java
+++ b/ccm-core/src/main/java/org/libreccm/core/Privilege.java
@@ -38,7 +38,7 @@ import javax.xml.bind.annotation.XmlRootElement;
*/
@Entity
@Table(name = "ccm_privileges")
-@XmlRootElement(name = "privilege", namespace = XML_NS)
+@XmlRootElement(name = "privilege", namespace = CORE_XML_NS)
public class Privilege implements Serializable {
private static final long serialVersionUID = -3986038536996049440L;
@@ -46,13 +46,13 @@ public class Privilege implements Serializable {
@Id
@Column(name = "privilege_id")
@GeneratedValue(strategy = GenerationType.AUTO)
- @XmlElement(name = "privilege-id", namespace = XML_NS)
+ @XmlElement(name = "privilege-id", namespace = CORE_XML_NS)
private long privilegeId;
@Column(name = "privilege", length = 255, nullable = false)
//Field is named like this in the old PDL class, don't want to change it now
@SuppressWarnings("PMD.AvoidFieldNameMatchingTypeName")
- @XmlElement(name = "privilege", namespace = XML_NS)
+ @XmlElement(name = "privilege", namespace = CORE_XML_NS)
private String privilege;
public long getPrivilegeId() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/User.java b/ccm-core/src/main/java/org/libreccm/core/User.java
index e869115ee..95b581524 100644
--- a/ccm-core/src/main/java/org/libreccm/core/User.java
+++ b/ccm-core/src/main/java/org/libreccm/core/User.java
@@ -50,7 +50,7 @@ import javax.xml.bind.annotation.XmlTransient;
*/
@Entity
@Table(name = "users")
-@XmlRootElement(name = "user", namespace = XML_NS)
+@XmlRootElement(name = "user", namespace = CORE_XML_NS)
//Supressing a few warnings from PMD because they misleading here.
//User is perfectly fine class name, and the complexity is not to high...
@SuppressWarnings({"PMD.ShortClassName",
@@ -67,20 +67,20 @@ public class User extends Party implements Serializable {
joinTable = @JoinTable(name = "user_names",
joinColumns = {
@JoinColumn(name = " user_id")}))
- @XmlElement(name = "person-name", namespace = XML_NS)
+ @XmlElement(name = "person-name", namespace = CORE_XML_NS)
private PersonName name;
@Column(name = "screen_name", length = 255, nullable = false)
@NotBlank
- @XmlElement(name = "screen-name", namespace = XML_NS)
+ @XmlElement(name = "screen-name", namespace = CORE_XML_NS)
private String screenName;
@Column(name = "banned")
- @XmlElement(name = "banned", namespace = XML_NS)
+ @XmlElement(name = "banned", namespace = CORE_XML_NS)
private boolean banned;
@Column(name = "sso_login", length = 512)
- @XmlElement(name = "sso-login", namespace = XML_NS)
+ @XmlElement(name = "sso-login", namespace = CORE_XML_NS)
private String ssoLogin;
@Column(name = "password", length = 2048)
@@ -92,16 +92,16 @@ public class User extends Party implements Serializable {
private String salt;
@Column(name = "password_question", length = 2048)
- @XmlElement(name = "password-question", namespace = XML_NS)
+ @XmlElement(name = "password-question", namespace = CORE_XML_NS)
private String passwordQuestion;
@Column(name = "password_answer", length = 2048)
- @XmlElement(name = "password-answer", namespace = XML_NS)
+ @XmlElement(name = "password-answer", namespace = CORE_XML_NS)
private String passwordAnswer;
@OneToMany(mappedBy = "user")
@XmlElementWrapper(name = "group-memberships")
- @XmlElement(name = "group-membership", namespace = XML_NS)
+ @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
private List groupMemberships;
public User() {
diff --git a/ccm-core/src/main/java/org/libreccm/core/UserGroup.java b/ccm-core/src/main/java/org/libreccm/core/UserGroup.java
index f9f0b9907..65e074c8e 100644
--- a/ccm-core/src/main/java/org/libreccm/core/UserGroup.java
+++ b/ccm-core/src/main/java/org/libreccm/core/UserGroup.java
@@ -44,24 +44,24 @@ import javax.xml.bind.annotation.XmlRootElement;
*/
@Entity
@Table(name = "user_groups")
-@XmlRootElement(name = "user-group", namespace = XML_NS)
+@XmlRootElement(name = "user-group", namespace = CORE_XML_NS)
public class UserGroup extends Party implements Serializable {
private static final long serialVersionUID = -5555063356689597270L;
@Column(name = "name", length = 512, nullable = false)
@NotBlank
- @XmlElement(name = "name", namespace = XML_NS)
+ @XmlElement(name = "name", namespace = CORE_XML_NS)
private String name;
@OneToMany(mappedBy = "sourceGroup")
- @XmlElementWrapper(name = "roles", namespace = XML_NS)
- @XmlElement(name ="role", namespace = XML_NS)
+ @XmlElementWrapper(name = "roles", namespace = CORE_XML_NS)
+ @XmlElement(name ="role", namespace = CORE_XML_NS)
private List roles;
@OneToMany(mappedBy = "group")
- @XmlElementWrapper(name = "group-memberships", namespace = XML_NS)
- @XmlElement(name = "group-membership", namespace = XML_NS)
+ @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
+ @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
private List members;
public UserGroup() {
diff --git a/ccm-core/src/main/java/org/libreccm/jpautils/EntityManagerProducer.java b/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java
similarity index 75%
rename from ccm-core/src/main/java/org/libreccm/jpautils/EntityManagerProducer.java
rename to ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java
index eccbc4221..acc13b036 100644
--- a/ccm-core/src/main/java/org/libreccm/jpautils/EntityManagerProducer.java
+++ b/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java
@@ -1,6 +1,7 @@
-package org.libreccm.jpautils;
+package org.libreccm.jpa;
import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -9,8 +10,10 @@ import javax.persistence.PersistenceContext;
* @author Jens Pelzetter
*/
@ApplicationScoped
+@SuppressWarnings("PMD.UnusedPrivateField")
public class EntityManagerProducer {
+ @Produces
@PersistenceContext(name = "LibreCCM")
private EntityManager entityManager;
diff --git a/ccm-core/src/main/java/org/libreccm/jpautils/MimeTypeConverter.java b/ccm-core/src/main/java/org/libreccm/jpa/utils/MimeTypeConverter.java
similarity index 98%
rename from ccm-core/src/main/java/org/libreccm/jpautils/MimeTypeConverter.java
rename to ccm-core/src/main/java/org/libreccm/jpa/utils/MimeTypeConverter.java
index 4e6f91c20..885a411fe 100644
--- a/ccm-core/src/main/java/org/libreccm/jpautils/MimeTypeConverter.java
+++ b/ccm-core/src/main/java/org/libreccm/jpa/utils/MimeTypeConverter.java
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
-package org.libreccm.jpautils;
+package org.libreccm.jpa.utils;
import javax.activation.MimeType;
diff --git a/ccm-core/src/main/java/org/libreccm/jpautils/UriConverter.java b/ccm-core/src/main/java/org/libreccm/jpa/utils/UriConverter.java
similarity index 98%
rename from ccm-core/src/main/java/org/libreccm/jpautils/UriConverter.java
rename to ccm-core/src/main/java/org/libreccm/jpa/utils/UriConverter.java
index 9001a01f9..f77ab85c4 100644
--- a/ccm-core/src/main/java/org/libreccm/jpautils/UriConverter.java
+++ b/ccm-core/src/main/java/org/libreccm/jpa/utils/UriConverter.java
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
-package org.libreccm.jpautils;
+package org.libreccm.jpa.utils;
import java.net.URI;
import java.net.URISyntaxException;
diff --git a/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java b/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java
index d989eed99..19e7b3562 100644
--- a/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java
+++ b/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java
@@ -18,7 +18,7 @@
*/
package org.libreccm.messaging;
-import org.libreccm.jpautils.MimeTypeConverter;
+import org.libreccm.jpa.utils.MimeTypeConverter;
import java.io.Serializable;
import java.util.Arrays;
diff --git a/ccm-core/src/main/java/org/libreccm/messaging/Message.java b/ccm-core/src/main/java/org/libreccm/messaging/Message.java
index ebbee8630..02b5a7c0a 100644
--- a/ccm-core/src/main/java/org/libreccm/messaging/Message.java
+++ b/ccm-core/src/main/java/org/libreccm/messaging/Message.java
@@ -20,7 +20,7 @@ package org.libreccm.messaging;
import org.libreccm.core.CcmObject;
import org.libreccm.core.Party;
-import org.libreccm.jpautils.MimeTypeConverter;
+import org.libreccm.jpa.utils.MimeTypeConverter;
import java.io.Serializable;
import java.util.Collections;
diff --git a/ccm-core/src/main/java/org/libreccm/web/Application.java b/ccm-core/src/main/java/org/libreccm/web/Application.java
index 90e3bb6bd..b9db8b57d 100644
--- a/ccm-core/src/main/java/org/libreccm/web/Application.java
+++ b/ccm-core/src/main/java/org/libreccm/web/Application.java
@@ -20,7 +20,7 @@ package org.libreccm.web;
import org.libreccm.core.Resource;
import org.libreccm.core.UserGroup;
-import org.libreccm.jpautils.UriConverter;
+import org.libreccm.jpa.utils.UriConverter;
import java.io.Serializable;
import java.net.URI;
diff --git a/ccm-core/src/test/java/org/libreccm/core/CcmObjectRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/core/CcmObjectRepositoryTest.java
new file mode 100644
index 000000000..c46c2efcc
--- /dev/null
+++ b/ccm-core/src/test/java/org/libreccm/core/CcmObjectRepositoryTest.java
@@ -0,0 +1,210 @@
+/*
+ * 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 org.dbunit.util.fileloader.DataFileLoader;
+
+import static org.hamcrest.CoreMatchers.*;
+
+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 java.util.List;
+
+import javax.ejb.EJBTransactionRolledbackException;
+import javax.inject.Inject;
+
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Category(IntegrationTest.class)
+@RunWith(Arquillian.class)
+@PersistenceTest
+@Transactional(TransactionMode.COMMIT)
+public class CcmObjectRepositoryTest {
+
+ @Inject
+ private transient CcmObjectRepository ccmObjectRepository;
+
+ public CcmObjectRepositoryTest() {
+ }
+
+ @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.CcmObjectRepositoryTest.war")
+ .addPackage(CcmObject.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(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json")
+ @InSequence(10)
+ public void findCcmObjectById() {
+ final CcmObject obj1 = ccmObjectRepository.findById(-10L);
+ final CcmObject obj2 = ccmObjectRepository.findById(-20L);
+ final CcmObject obj3 = ccmObjectRepository.findById(-30L);
+ final CcmObject none = ccmObjectRepository.findById(-999L);
+
+ assertThat(obj1, is(not(nullValue())));
+ assertThat(obj1.getObjectId(), is(-10L));
+ assertThat(obj1.getDisplayName(), is(equalTo("Test Object 1")));
+
+ assertThat(obj2, is(not(nullValue())));
+ assertThat(obj2.getObjectId(), is(-20L));
+ assertThat(obj2.getDisplayName(), is(equalTo("Test Object 2")));
+
+ assertThat(obj3, is(not(nullValue())));
+ assertThat(obj3.getObjectId(), is(-30L));
+ assertThat(obj3.getDisplayName(), is(equalTo("Test Object 3")));
+
+ assertThat(none, is(nullValue()));
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json")
+ @InSequence(10)
+ public void findAllCcmObjects() {
+ final List objects = ccmObjectRepository.findAll();
+
+ assertThat(objects.size(), is(3));
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json")
+ @ShouldMatchDataSet(value
+ = "datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-new.json",
+ excludeColumns = {"object_id"})
+ @InSequence(300)
+ public void saveNewCcmObject() {
+ final CcmObject obj = new CcmObject();
+ obj.setDisplayName("Test Object 4");
+
+ ccmObjectRepository.save(obj);
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json")
+ @ShouldMatchDataSet(value
+ = "datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-changed.json",
+ excludeColumns = {"object_id"})
+ @InSequence(400)
+ public void saveChangedCcmObject() {
+ final CcmObject obj = ccmObjectRepository.findById(-20L);
+ obj.setDisplayName("Second Test Object");
+
+ ccmObjectRepository.save(obj);
+ }
+
+ @Test(expected = EJBTransactionRolledbackException.class)
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(500)
+ public void saveNullValue() {
+ ccmObjectRepository.save(null);
+ }
+
+ @Test
+ @UsingDataSet(
+ "datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json")
+ @ShouldMatchDataSet(value
+ = "datasets/org/libreccm/core/CcmObjectRepositoryTest/after-delete.json",
+ excludeColumns = {"object_id"})
+ @InSequence(600)
+ public void deleteCcmObject() {
+ final CcmObject obj = ccmObjectRepository.findById(-20L);
+
+ ccmObjectRepository.delete(obj);
+ }
+
+ @Test(expected = EJBTransactionRolledbackException.class)
+ @ShouldThrowException(IllegalArgumentException.class)
+ @InSequence(700)
+ public void deleteNullValue() {
+ ccmObjectRepository.delete(null);
+ }
+
+}
diff --git a/ccm-core/src/test/java/org/libreccm/jpautils/MimeTypeConverterTest.java b/ccm-core/src/test/java/org/libreccm/jpautils/MimeTypeConverterTest.java
index bc9b50347..fbd47ba4d 100644
--- a/ccm-core/src/test/java/org/libreccm/jpautils/MimeTypeConverterTest.java
+++ b/ccm-core/src/test/java/org/libreccm/jpautils/MimeTypeConverterTest.java
@@ -18,6 +18,7 @@
*/
package org.libreccm.jpautils;
+import org.libreccm.jpa.utils.MimeTypeConverter;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
diff --git a/ccm-core/src/test/java/org/libreccm/jpautils/UriConverterTest.java b/ccm-core/src/test/java/org/libreccm/jpautils/UriConverterTest.java
index 0809d86b6..10aa92060 100644
--- a/ccm-core/src/test/java/org/libreccm/jpautils/UriConverterTest.java
+++ b/ccm-core/src/test/java/org/libreccm/jpautils/UriConverterTest.java
@@ -18,6 +18,7 @@
*/
package org.libreccm.jpautils;
+import org.libreccm.jpa.utils.UriConverter;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
diff --git a/ccm-core/src/test/java/org/libreccm/tests/categories/IntegrationTest.java b/ccm-core/src/test/java/org/libreccm/tests/categories/IntegrationTest.java
new file mode 100644
index 000000000..11fbdd771
--- /dev/null
+++ b/ccm-core/src/test/java/org/libreccm/tests/categories/IntegrationTest.java
@@ -0,0 +1,27 @@
+/*
+ * 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.tests.categories;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public interface IntegrationTest {
+
+}
diff --git a/ccm-core/src/test/resources-tomee-embedded/arquillian.xml b/ccm-core/src/test/resources-tomee-embedded/arquillian.xml
new file mode 100644
index 000000000..cf1ca4d0f
--- /dev/null
+++ b/ccm-core/src/test/resources-tomee-embedded/arquillian.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ target/deployments
+
+
+
+ testdb
+
+
+ NONE
+
+ true
+ target
+
+
+
+ json
+ org.dbunit.ext.h2.H2DataTypeFactory
+ true
+
+
+
+ scripts/h2-cleanup.sql
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/src/test/resources-tomee-embedded/jndi.properties b/ccm-core/src/test/resources-tomee-embedded/jndi.properties
new file mode 100644
index 000000000..182dab1a8
--- /dev/null
+++ b/ccm-core/src/test/resources-tomee-embedded/jndi.properties
@@ -0,0 +1,4 @@
+# Test database
+testdatabase = new://Resource?type=DataSource
+testdatabase.JdbcDriver = org.h2.Driver
+testdatabase.JdbcUrl = jdbc:h2:mem:testdatabase
\ No newline at end of file
diff --git a/ccm-core/src/test/resources-tomee-embedded/test-persistence.xml b/ccm-core/src/test/resources-tomee-embedded/test-persistence.xml
new file mode 100644
index 000000000..e794c29c3
--- /dev/null
+++ b/ccm-core/src/test/resources-tomee-embedded/test-persistence.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+
+ testdb
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/src/test/resources-wildfly8-embedded/arquillian.xml b/ccm-core/src/test/resources-wildfly8-embedded/arquillian.xml
new file mode 100644
index 000000000..54897ccfd
--- /dev/null
+++ b/ccm-core/src/test/resources-wildfly8-embedded/arquillian.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ target/deployments
+
+
+
+ java:/jboss/datasources/ExampleDS
+
+
+ NONE
+
+ true
+ target
+
+
+
+ json
+ org.dbunit.ext.h2.H2DataTypeFactory
+ true
+
+
+
+ scripts/h2-cleanup.sql
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/src/test/resources-wildfly8-embedded/test-persistence.xml b/ccm-core/src/test/resources-wildfly8-embedded/test-persistence.xml
new file mode 100644
index 000000000..b59fd75d3
--- /dev/null
+++ b/ccm-core/src/test/resources-wildfly8-embedded/test-persistence.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+
+ java:/jboss/datasources/ExampleDS
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-delete.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-delete.json
new file mode 100644
index 000000000..43b08997d
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-delete.json
@@ -0,0 +1,13 @@
+{
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-changed.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-changed.json
new file mode 100644
index 000000000..16a42f46b
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-changed.json
@@ -0,0 +1,17 @@
+{
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Second Test Object"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-new.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-new.json
new file mode 100644
index 000000000..627c3cf19
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-new.json
@@ -0,0 +1,21 @@
+{
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Test Object 2"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ },
+ {
+ "object_id": -40,
+ "display_name": "Test Object 4"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json
new file mode 100644
index 000000000..e2c043379
--- /dev/null
+++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json
@@ -0,0 +1,17 @@
+{
+ "ccm_objects":
+ [
+ {
+ "object_id": -10,
+ "display_name": "Test Object 1"
+ },
+ {
+ "object_id": -20,
+ "display_name": "Test Object 2"
+ },
+ {
+ "object_id": -30,
+ "display_name": "Test Object 3"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ccm-core/src/test/resources/scripts/h2-cleanup.sql b/ccm-core/src/test/resources/scripts/h2-cleanup.sql
new file mode 100644
index 000000000..d9cc30c68
--- /dev/null
+++ b/ccm-core/src/test/resources/scripts/h2-cleanup.sql
@@ -0,0 +1 @@
+DELETE FROM ccm_objects;
\ No newline at end of file