JPA migration: Some more entities
git-svn-id: https://svn.libreccm.org/ccm/jpa@3364 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
a749e9d63b
commit
4e89a8a1a0
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* 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.categorization;
|
||||
|
||||
import org.libreccm.core.CcmObject;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "categories")
|
||||
public class Category extends CcmObject implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -7250208963391878547L;
|
||||
|
||||
}
|
||||
|
|
@ -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.categorization;
|
||||
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.net.URI;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.AssociationOverride;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Embedded;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "domains")
|
||||
public class Domain extends CcmObject implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 4012590760598188732L;
|
||||
|
||||
@Column(name = "domain_key", nullable = false, unique = true)
|
||||
private String domainKey;
|
||||
|
||||
@Column(name = "uri", nullable = false, unique = true)
|
||||
private URI uri;
|
||||
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "category_titles",
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "object_id")}))
|
||||
private LocalizedString title;
|
||||
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "category_descriptions",
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "object_id")}))
|
||||
private LocalizedString description;
|
||||
|
||||
@Column(name = "version", nullable = false)
|
||||
private String version;
|
||||
|
||||
@Column(name = "released")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date released;
|
||||
|
||||
@ManyToOne
|
||||
private Category root;
|
||||
|
||||
public String getDomainKey() {
|
||||
return domainKey;
|
||||
}
|
||||
|
||||
public void setDomainKey(final String domainKey) {
|
||||
this.domainKey = domainKey;
|
||||
}
|
||||
|
||||
public URI getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public void setUri(final URI uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public LocalizedString getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(final LocalizedString title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public LocalizedString getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(final LocalizedString description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public Date getReleased() {
|
||||
return new Date(released.getTime());
|
||||
}
|
||||
|
||||
public void setReleased(final Date released) {
|
||||
this.released = new Date(released.getTime());
|
||||
}
|
||||
|
||||
public Category getRoot() {
|
||||
return root;
|
||||
}
|
||||
|
||||
protected void setRoot(final Category root) {
|
||||
this.root = root;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 41 * hash + Objects.hashCode(domainKey);
|
||||
hash = 41 * hash + Objects.hashCode(uri);
|
||||
hash = 41 * hash + Objects.hashCode(title);
|
||||
hash = 41 * hash + Objects.hashCode(description);
|
||||
hash = 41 * hash + Objects.hashCode(version);
|
||||
hash = 41 * hash + Objects.hashCode(released);
|
||||
hash = 41 * hash + Objects.hashCode(root);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final Domain other = (Domain) obj;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (!Objects.equals(domainKey, other.getDomainKey())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(uri, other.getUri())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(title, other.getTitle())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(description, other.getDescription())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(version, other.getVersion())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(released, other.getReleased())) {
|
||||
return false;
|
||||
}
|
||||
return Objects.equals(root, other.getRoot());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEqual(final Object obj) {
|
||||
return obj instanceof Domain;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(final String data) {
|
||||
return String.format(
|
||||
", domainKey = \"%s\", "
|
||||
+ "uri = \"%s\", "
|
||||
+ "title = \"%s\", "
|
||||
+ "version = \"%s\", "
|
||||
+ "released = %tF %<tT, "
|
||||
+ "root = \"%s\"%s",
|
||||
domainKey,
|
||||
uri.toString(),
|
||||
title.toString(),
|
||||
version,
|
||||
released,
|
||||
root.toString(),
|
||||
data
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ public class CcmObject implements Serializable {
|
|||
return objectId;
|
||||
}
|
||||
|
||||
public void setObjectId(long objectId) {
|
||||
public void setObjectId(final long objectId) {
|
||||
this.objectId = objectId;
|
||||
}
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ public class CcmObject implements Serializable {
|
|||
return displayName;
|
||||
}
|
||||
|
||||
public void setDisplayName(String displayName) {
|
||||
public void setDisplayName(final String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,10 +18,25 @@
|
|||
*/
|
||||
package org.libreccm.core;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.AssociationOverride;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Embedded;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -31,17 +46,142 @@ import javax.persistence.Table;
|
|||
@Table(name = "resources")
|
||||
public class Resource extends CcmObject implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 201502291330L;
|
||||
private static final long serialVersionUID = 7345482620613842781L;
|
||||
|
||||
private long resourceId;
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "resource_titles",
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "object_id")}))
|
||||
private LocalizedString title;
|
||||
|
||||
public long getResourceId() {
|
||||
return resourceId;
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "resource_descriptions",
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "object_id")}))
|
||||
private LocalizedString description;
|
||||
|
||||
@Column(name = "created")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date created;
|
||||
|
||||
@OneToMany(mappedBy = "parent")
|
||||
private List<Resource> childs;
|
||||
|
||||
@ManyToOne
|
||||
private Resource parent;
|
||||
|
||||
// @Column(name = "resource_type")
|
||||
// private String resourceType;
|
||||
|
||||
public LocalizedString getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setResourceId(long resourceId) {
|
||||
this.resourceId = resourceId;
|
||||
public void setTitle(LocalizedString title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public LocalizedString getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(LocalizedString description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return new Date(created.getTime());
|
||||
}
|
||||
|
||||
public void setCreated(final Date created) {
|
||||
this.created = new Date(created.getTime());
|
||||
}
|
||||
|
||||
public List<Resource> getChilds() {
|
||||
return Collections.unmodifiableList(childs);
|
||||
}
|
||||
|
||||
protected void setChilds(final List<Resource> childs) {
|
||||
this.childs = childs;
|
||||
}
|
||||
|
||||
protected void addChild(final Resource child) {
|
||||
childs.add(child);
|
||||
}
|
||||
|
||||
protected void removeChild(final Resource child) {
|
||||
childs.remove(child);
|
||||
}
|
||||
|
||||
public Resource getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
protected void setParent(Resource parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
// public String getResourceType() {
|
||||
// return resourceType;
|
||||
// }
|
||||
//
|
||||
// public void setResourceType(final String resourceType) {
|
||||
// this.resourceType = resourceType;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
hash = 29 * hash + Objects.hashCode(title);
|
||||
hash = 29 * hash + Objects.hashCode(description);
|
||||
hash = 29 * hash + Objects.hashCode(created);
|
||||
hash = 29 * hash + Objects.hashCode(parent);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final Resource other = (Resource) obj;
|
||||
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Objects.equals(title, other.getTitle())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(description, other.getDescription())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(created, other.getCreated())) {
|
||||
return false;
|
||||
}
|
||||
return Objects.equals(parent, other.getParent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEqual(final Object obj) {
|
||||
return obj instanceof Resource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(final String data) {
|
||||
return super.toString(
|
||||
String.format(", title = %s, "
|
||||
+ "created = %tF %<tT%s",
|
||||
title.toString(),
|
||||
created,
|
||||
data));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* 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.l10n;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.Lob;
|
||||
import javax.persistence.MapKeyColumn;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* A helper class for localisable string properties. This class is declared as
|
||||
* embeddable, so that it can be used in every other entity. The localised
|
||||
* values are stored in a {@link Map}. This class is <em>not</em> designed to be
|
||||
* overwritten. But because it is an entity class we can't make the class final.
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Embeddable
|
||||
@XmlRootElement
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class LocalizedString implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 7378282657084330425L;
|
||||
|
||||
/**
|
||||
* The localised values of the string.
|
||||
*/
|
||||
@ElementCollection
|
||||
@MapKeyColumn(name = "locale")
|
||||
@Column(name = "value")
|
||||
@Lob
|
||||
@XmlElementWrapper(name = "values")
|
||||
@XmlElement(name = "value")
|
||||
private Map<Locale, String> values;
|
||||
|
||||
/**
|
||||
* Constructor. Only creates the initial, empty map for new instances.
|
||||
*/
|
||||
public LocalizedString() {
|
||||
values = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all localised values.
|
||||
*
|
||||
* @return A unmodifiable {@code Map} containing all localised values of
|
||||
* this localised string.
|
||||
*/
|
||||
public Map<Locale, String> getValues() {
|
||||
if (values == null) {
|
||||
return null;
|
||||
} else {
|
||||
return Collections.unmodifiableMap(values);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for replacing the complete {@code Map} of values. Only to be used
|
||||
* by JPA and the Repository classes in the package.
|
||||
*
|
||||
* @param values The new map of values.
|
||||
*/
|
||||
protected void setValues(final Map<Locale, String> values) {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the values for the default locale.
|
||||
*
|
||||
* @return The localised value for the default locale of the system the
|
||||
* application is running on. In most cases this is not what you
|
||||
* want. Use {@link #getValue(java.util.Locale)} instead.
|
||||
*/
|
||||
public String getValue() {
|
||||
return getValue(Locale.getDefault());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the localised value of a locale.
|
||||
*
|
||||
* @param locale The locale for which the value shall be retrieved.
|
||||
*
|
||||
* @return The localised for the {@code locale} or {@code null} if there is
|
||||
* no value for the provided locale.
|
||||
*/
|
||||
public String getValue(final Locale locale) {
|
||||
return values.get(locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new localised value for a locale. If there is already a value for
|
||||
* the provided locale the value is replaced with the new value.
|
||||
*
|
||||
* @param locale The locale of the provided value.
|
||||
* @param value The localised value for the provided locale.
|
||||
*/
|
||||
public void addValue(final Locale locale, final String value) {
|
||||
values.put(locale, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the value for the provided locale.
|
||||
*
|
||||
* @param locale The locale for which the value shall be removed.
|
||||
*/
|
||||
public void removeValue(final Locale locale) {
|
||||
values.remove(locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a localised string instance has a value for a locale.
|
||||
*
|
||||
* @param locale The locale.
|
||||
*
|
||||
* @return {@code true} if this localised string has a value for the
|
||||
* provided locale, {@code false} if not.
|
||||
*/
|
||||
public boolean hasValue(final Locale locale) {
|
||||
return values.containsKey(locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves all present locales.
|
||||
*
|
||||
* @return A {@link Set} containing all locales for which this localised
|
||||
* string has values.
|
||||
*/
|
||||
public Set<Locale> getAvailableLocales() {
|
||||
return values.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
"%s{ "
|
||||
+ "%s"
|
||||
+ " }",
|
||||
super.toString(),
|
||||
values.toString());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue