From 30193979057e514100eb8fae7e0cc1aad83ddc6f Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 5 Jun 2015 17:59:12 +0000 Subject: [PATCH] CCM NG: org.libreccm.core package: Annotations for JAXB git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3462 8810af33-2d31-482b-a856-94f89814c4df --- ccm-core/pom.xml | 13 +++++++ .../core/AbstractEntityRepository.java | 6 ++-- .../java/org/libreccm/core/CcmObject.java | 14 ++++++-- .../java/org/libreccm/core/CoreConstants.java | 34 +++++++++++++++++++ .../java/org/libreccm/core/EmailAddress.java | 8 +++++ .../org/libreccm/core/GroupMembership.java | 11 ++++++ .../main/java/org/libreccm/core/Party.java | 10 ++++++ .../java/org/libreccm/core/Permission.java | 11 ++++++ .../java/org/libreccm/core/PersonName.java | 10 ++++++ .../java/org/libreccm/core/Privilege.java | 7 ++++ .../src/main/java/org/libreccm/core/User.java | 17 ++++++++++ .../java/org/libreccm/core/UserGroup.java | 14 ++++++++ .../java/org/libreccm/core/package-info.java | 32 +++++++++++++++++ 13 files changed, 181 insertions(+), 6 deletions(-) create mode 100644 ccm-core/src/main/java/org/libreccm/core/CoreConstants.java create mode 100644 ccm-core/src/main/java/org/libreccm/core/package-info.java diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index e16ff2f4e..112a48be3 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -87,6 +87,19 @@ ${project.build.sourceEncoding} + org.apache.maven.plugins maven-surefire-plugin 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 33119ebef..ba4457bde 100644 --- a/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java +++ b/ccm-core/src/main/java/org/libreccm/core/AbstractEntityRepository.java @@ -24,9 +24,7 @@ public abstract class AbstractEntityRepository { public abstract Class getEntityClass(); - public abstract boolean isNew(final E entity) { - - } + public abstract boolean isNew(final E entity); public void save(final E entity) { if (isNew(entity)) { @@ -36,7 +34,7 @@ public abstract class AbstractEntityRepository { } } - public List findById(final K entityId) { + public E findById(final K entityId) { return entityManager.find(getEntityClass(), entityId); } 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 2308801d6..6c30287d4 100644 --- a/ccm-core/src/main/java/org/libreccm/core/CcmObject.java +++ b/ccm-core/src/main/java/org/libreccm/core/CcmObject.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Category; import org.libreccm.categorization.DomainOwnership; @@ -38,6 +40,7 @@ import javax.persistence.InheritanceType; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; /** @@ -60,7 +63,7 @@ import javax.xml.bind.annotation.XmlRootElement; @Entity @Table(name = "ccm_objects") @Inheritance(strategy = InheritanceType.JOINED) -@XmlRootElement(name = "ccm-object", namespace = "http://core.libreccm.org") +@XmlRootElement(name = "ccm-object", namespace = 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. @@ -77,28 +80,35 @@ public class CcmObject implements Serializable { @Id @Column(name = "object_id") @GeneratedValue(strategy = GenerationType.AUTO) - @XmlElement(name = "object-id") + @XmlElement(name = "object-id", namespace = XML_NS) private long objectId; /** * A human readable name identifying this {@code CcmObject} */ @Column(name = "display_name") + @XmlElement(name = "display-name", namespace = XML_NS) private String displayName; @OneToMany(mappedBy = "object") + @XmlElementWrapper(name = "permissions", namespace = XML_NS) + @XmlElement(name = "permission", namespace = 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) 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) 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 new file mode 100644 index 000000000..a1d80a1ab --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/core/CoreConstants.java @@ -0,0 +1,34 @@ +/* + * 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; + +/** + * Some constants for the Core package + * + * @author Jens Pelzetter + */ +public final class CoreConstants { + + 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 b2c06ad52..6f87c29df 100644 --- a/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java +++ b/ccm-core/src/main/java/org/libreccm/core/EmailAddress.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotBlank; @@ -26,6 +28,8 @@ import java.util.Objects; import javax.persistence.Column; import javax.persistence.Embeddable; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; /** * An embeddable entity for storing email addresses. @@ -41,19 +45,23 @@ import javax.persistence.Embeddable; * @author Jens Pelzetter */ @Embeddable +@XmlRootElement(name = "email-address", namespace = 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) @NotBlank @Email private String address; @Column(name = "bouncing") + @XmlElement(name = "bouncing", namespace = XML_NS) private boolean bouncing; @Column(name = "verified") + @XmlElement(name = "verified", namespace = 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 24736a5a9..6678a33b1 100644 --- a/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java +++ b/ccm-core/src/main/java/org/libreccm/core/GroupMembership.java @@ -18,8 +18,11 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.util.Objects; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -27,6 +30,9 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; /** * An association class for the association between a group and it members. @@ -35,6 +41,8 @@ import javax.persistence.Table; */ @Entity @Table(name = "group_memberships") +@XmlRootElement(name = "group-membership", + namespace = XML_NS) public class GroupMembership implements Serializable { private static final long serialVersionUID = 1897274442468035089L; @@ -42,12 +50,15 @@ public class GroupMembership implements Serializable { @Id @Column(name = "membership_id") @GeneratedValue(strategy = GenerationType.AUTO) + @XmlElement(name = "membership-id", namespace = XML_NS) private long membershipId; @ManyToOne + @XmlTransient private UserGroup group; @ManyToOne + @XmlTransient private User user; public long getMembershipId() { 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 26f469cc9..20eebd883 100644 --- a/ccm-core/src/main/java/org/libreccm/core/Party.java +++ b/ccm-core/src/main/java/org/libreccm/core/Party.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.security.acl.Group; import java.util.ArrayList; @@ -32,6 +34,9 @@ import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; /** * Internal basic class for {@link User} and {@link Group}. @@ -40,6 +45,7 @@ import javax.validation.constraints.Size; */ @Entity @Table(name = "parties") +@XmlRootElement(name = "party", namespace = XML_NS) public class Party extends CcmObject implements Serializable { private static final long serialVersionUID = 6303836654273293979L; @@ -49,11 +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) 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) 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 21998f5f4..cd408f0fe 100644 --- a/ccm-core/src/main/java/org/libreccm/core/Permission.java +++ b/ccm-core/src/main/java/org/libreccm/core/Permission.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.util.Date; import java.util.Objects; @@ -33,6 +35,9 @@ import javax.persistence.OneToOne; import javax.persistence.Table; 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; /** * @@ -44,6 +49,7 @@ import javax.persistence.TemporalType; @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.StdCyclomaticComplexity", "PMD.ModifiedCyclomaticComplexity"}) +@XmlRootElement(name = "permission", namespace = XML_NS) public class Permission implements Serializable { private static final long serialVersionUID = -2368935232499907547L; @@ -51,6 +57,7 @@ public class Permission implements Serializable { @Id @Column(name = "permission_id") @GeneratedValue(strategy = GenerationType.AUTO) + @XmlElement(name = "permission-id", namespace = XML_NS) private long permissionId; @ManyToOne @@ -59,6 +66,7 @@ public class Permission implements Serializable { @OneToOne @JoinColumn(name = "granted_privilege_id") + @XmlElement(name = "privilege", namespace = XML_NS) private Privilege grantedPrivilege; @ManyToOne @@ -67,13 +75,16 @@ public class Permission implements Serializable { @ManyToOne @JoinColumn(name = "creation_user_id") + @XmlElement(name = "creation-user", namespace = XML_NS) private User creationUser; @Column(name = "creation_date") @Temporal(TemporalType.TIMESTAMP) + @XmlElement(name = "creation-date", namespace = XML_NS) private Date creationDate; @Column(name = "creation_ip") + @XmlElement(name = "creation-ip", namespace = 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 57ca21c0b..ed14c4226 100644 --- a/ccm-core/src/main/java/org/libreccm/core/PersonName.java +++ b/ccm-core/src/main/java/org/libreccm/core/PersonName.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import org.hibernate.validator.constraints.NotBlank; import java.io.Serializable; @@ -25,6 +27,8 @@ import java.util.Objects; import javax.persistence.Column; import javax.persistence.Embeddable; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; /** * An embeddable entity representing a person's name. @@ -32,25 +36,31 @@ import javax.persistence.Embeddable; * @author Jens Pelzetter */ @Embeddable +@XmlRootElement(name = "person-name", namespace = 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) private String titlePre; @Column(name = "given_name", length = 512) @NotBlank + @XmlElement(name = "given-name", namespace = XML_NS) private String givenName; @Column(name = "middle_name", length = 512) + @XmlElement(name = "middle-name", namespace = XML_NS) private String middleName; @Column(name = "family_name", length = 512) @NotBlank + @XmlElement(name = "family-name", namespace = XML_NS) private String familyName; @Column(name = "title_post", length = 512) + @XmlElement(name = "title-post", namespace = 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 83528132e..07357f27c 100644 --- a/ccm-core/src/main/java/org/libreccm/core/Privilege.java +++ b/ccm-core/src/main/java/org/libreccm/core/Privilege.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.util.Objects; @@ -27,6 +29,8 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; /** * @@ -34,6 +38,7 @@ import javax.persistence.Table; */ @Entity @Table(name = "ccm_privileges") +@XmlRootElement(name = "privilege", namespace = XML_NS) public class Privilege implements Serializable { private static final long serialVersionUID = -3986038536996049440L; @@ -41,11 +46,13 @@ public class Privilege implements Serializable { @Id @Column(name = "privilege_id") @GeneratedValue(strategy = GenerationType.AUTO) + @XmlElement(name = "privilege-id", namespace = 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) 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 8786302dc..e869115ee 100644 --- a/ccm-core/src/main/java/org/libreccm/core/User.java +++ b/ccm-core/src/main/java/org/libreccm/core/User.java @@ -18,6 +18,8 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.util.Objects; @@ -37,6 +39,10 @@ import java.util.Collections; import java.util.List; import javax.persistence.OneToMany; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; /** * @@ -44,6 +50,7 @@ import javax.persistence.OneToMany; */ @Entity @Table(name = "users") +@XmlRootElement(name = "user", namespace = 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", @@ -60,31 +67,41 @@ public class User extends Party implements Serializable { joinTable = @JoinTable(name = "user_names", joinColumns = { @JoinColumn(name = " user_id")})) + @XmlElement(name = "person-name", namespace = XML_NS) private PersonName name; @Column(name = "screen_name", length = 255, nullable = false) @NotBlank + @XmlElement(name = "screen-name", namespace = XML_NS) private String screenName; @Column(name = "banned") + @XmlElement(name = "banned", namespace = XML_NS) private boolean banned; @Column(name = "sso_login", length = 512) + @XmlElement(name = "sso-login", namespace = XML_NS) private String ssoLogin; @Column(name = "password", length = 2048) + @XmlTransient private String password; @Column(name = "salt", length = 2048) + @XmlTransient private String salt; @Column(name = "password_question", length = 2048) + @XmlElement(name = "password-question", namespace = XML_NS) private String passwordQuestion; @Column(name = "password_answer", length = 2048) + @XmlElement(name = "password-answer", namespace = XML_NS) private String passwordAnswer; @OneToMany(mappedBy = "user") + @XmlElementWrapper(name = "group-memberships") + @XmlElement(name = "group-membership", namespace = 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 5fc060d75..f9f0b9907 100644 --- a/ccm-core/src/main/java/org/libreccm/core/UserGroup.java +++ b/ccm-core/src/main/java/org/libreccm/core/UserGroup.java @@ -18,36 +18,50 @@ */ package org.libreccm.core; +import static org.libreccm.core.CoreConstants.*; + import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.OneToMany; import javax.persistence.Table; + import org.hibernate.validator.constraints.NotBlank; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; + /** * * @author Jens Pelzetter */ @Entity @Table(name = "user_groups") +@XmlRootElement(name = "user-group", namespace = 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) private String name; @OneToMany(mappedBy = "sourceGroup") + @XmlElementWrapper(name = "roles", namespace = XML_NS) + @XmlElement(name ="role", namespace = XML_NS) private List roles; @OneToMany(mappedBy = "group") + @XmlElementWrapper(name = "group-memberships", namespace = XML_NS) + @XmlElement(name = "group-membership", namespace = XML_NS) private List members; public UserGroup() { diff --git a/ccm-core/src/main/java/org/libreccm/core/package-info.java b/ccm-core/src/main/java/org/libreccm/core/package-info.java new file mode 100644 index 000000000..acfa74b1c --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/core/package-info.java @@ -0,0 +1,32 @@ +/* + * 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 + */ + +/** + * This package provides some base classes for LibreCCM. + */ +@XmlSchema(xmlns = {@XmlNs(prefix = "ccmcore", + namespaceURI = "http://core.libreccm.org")}) +@XmlAccessorType(XmlAccessType.NONE) +package org.libreccm.core; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlNs; +import javax.xml.bind.annotation.XmlSchema; +