From 61e6971152cc3a152cde7813bba6e0be0bd58720 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 6 Jun 2015 18:19:53 +0000 Subject: [PATCH] CCM NG: Current status git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3464 8810af33-2d31-482b-a856-94f89814c4df --- ccm-core/pom.xml | 284 +++++++++++++++++- .../org/libreccm/categorization/Domain.java | 3 +- .../core/AbstractEntityRepository.java | 48 ++- .../java/org/libreccm/core/CcmObject.java | 20 +- .../java/org/libreccm/core/CoreConstants.java | 4 +- .../java/org/libreccm/core/EmailAddress.java | 8 +- .../org/libreccm/core/GroupMembership.java | 4 +- .../main/java/org/libreccm/core/Party.java | 10 +- .../java/org/libreccm/core/Permission.java | 13 +- .../java/org/libreccm/core/PersonName.java | 12 +- .../java/org/libreccm/core/Privilege.java | 6 +- .../src/main/java/org/libreccm/core/User.java | 16 +- .../java/org/libreccm/core/UserGroup.java | 12 +- .../EntityManagerProducer.java | 5 +- .../utils}/MimeTypeConverter.java | 2 +- .../{jpautils => jpa/utils}/UriConverter.java | 2 +- .../org/libreccm/messaging/Attachment.java | 2 +- .../java/org/libreccm/messaging/Message.java | 2 +- .../java/org/libreccm/web/Application.java | 2 +- .../core/CcmObjectRepositoryTest.java | 210 +++++++++++++ .../jpautils/MimeTypeConverterTest.java | 1 + .../libreccm/jpautils/UriConverterTest.java | 1 + .../tests/categories/IntegrationTest.java | 27 ++ .../resources-tomee-embedded/arquillian.xml | 35 +++ .../resources-tomee-embedded/jndi.properties | 4 + .../test-persistence.xml | 31 ++ .../arquillian.xml | 35 +++ .../test-persistence.xml | 32 ++ .../CcmObjectRepositoryTest/after-delete.json | 13 + .../after-save-changed.json | 17 ++ .../after-save-new.json | 21 ++ .../core/CcmObjectRepositoryTest/data.json | 17 ++ .../src/test/resources/scripts/h2-cleanup.sql | 1 + 33 files changed, 828 insertions(+), 72 deletions(-) rename ccm-core/src/main/java/org/libreccm/{jpautils => jpa}/EntityManagerProducer.java (75%) rename ccm-core/src/main/java/org/libreccm/{jpautils => jpa/utils}/MimeTypeConverter.java (98%) rename ccm-core/src/main/java/org/libreccm/{jpautils => jpa/utils}/UriConverter.java (98%) create mode 100644 ccm-core/src/test/java/org/libreccm/core/CcmObjectRepositoryTest.java create mode 100644 ccm-core/src/test/java/org/libreccm/tests/categories/IntegrationTest.java create mode 100644 ccm-core/src/test/resources-tomee-embedded/arquillian.xml create mode 100644 ccm-core/src/test/resources-tomee-embedded/jndi.properties create mode 100644 ccm-core/src/test/resources-tomee-embedded/test-persistence.xml create mode 100644 ccm-core/src/test/resources-wildfly8-embedded/arquillian.xml create mode 100644 ccm-core/src/test/resources-wildfly8-embedded/test-persistence.xml create mode 100644 ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-delete.json create mode 100644 ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-changed.json create mode 100644 ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/after-save-new.json create mode 100644 ccm-core/src/test/resources/datasets/org/libreccm/core/CcmObjectRepositoryTest/data.json create mode 100644 ccm-core/src/test/resources/scripts/h2-cleanup.sql 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