CCM NG: First part of infrastructure for DbThemeProvider
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5331 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
bed824cde7
commit
3e0bcee187
|
|
@ -590,6 +590,7 @@ drop sequence if exists HIBERNATE_SEQUENCE;
|
|||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID bigint,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -592,6 +592,7 @@ drop sequence if exists HIBERNATE_SEQUENCE;
|
|||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID int8,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Lob;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
/**
|
||||
* A file inside the directory structure of a theme stored in the database.
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "THEME_DATA_FILES", schema = CoreConstants.DB_SCHEMA)
|
||||
public class DataFile extends ThemeFile {
|
||||
|
||||
private static final long serialVersionUID = 7513785608453872667L;
|
||||
|
||||
@Column(name = "TYPE")
|
||||
private String type;
|
||||
|
||||
@Column(name = "FILE_SIZE")
|
||||
private long size;
|
||||
|
||||
@Column(name = "CREATION_DATE")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date creationDate;
|
||||
|
||||
@Column(name = "LAST_MODIFIED")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date lastModified;
|
||||
|
||||
@Column(name = "FILE_DATA")
|
||||
@Lob
|
||||
private byte[] data;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(final String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public void setSize(final long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public Date getCreationDate() {
|
||||
if (creationDate == null) {
|
||||
return null;
|
||||
} else {
|
||||
return new Date(creationDate.getTime());
|
||||
}
|
||||
}
|
||||
|
||||
protected void setCreationDate(final Date creationDate) {
|
||||
if (creationDate == null) {
|
||||
this.creationDate = null;
|
||||
} else {
|
||||
this.creationDate = new Date(creationDate.getTime());
|
||||
}
|
||||
}
|
||||
|
||||
public Date getLastModified() {
|
||||
if (lastModified == null) {
|
||||
return null;
|
||||
} else {
|
||||
return new Date(lastModified.getTime());
|
||||
}
|
||||
}
|
||||
|
||||
protected void setLastModified(final Date lastModified) {
|
||||
if (lastModified == null) {
|
||||
this.lastModified = null;
|
||||
} else {
|
||||
this.lastModified = new Date(lastModified.getTime());
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
if (data == null) {
|
||||
return null;
|
||||
} else {
|
||||
return Arrays.copyOf(data, data.length);
|
||||
}
|
||||
}
|
||||
|
||||
public void setData(final byte[] data) {
|
||||
if (data == null) {
|
||||
this.data = null;
|
||||
} else {
|
||||
this.data = Arrays.copyOf(data, data.length);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = super.hashCode();
|
||||
hash = 47 * hash + Objects.hashCode(type);
|
||||
hash = 47 * hash + (int) (size ^ (size >>> 32));
|
||||
if (creationDate == null) {
|
||||
hash = 47 * hash + 0;
|
||||
} else {
|
||||
hash = 47 * hash + Objects.hashCode(creationDate.getTime());
|
||||
}
|
||||
if (lastModified == null) {
|
||||
hash = 47 * hash + 0;
|
||||
} else {
|
||||
hash = 47 * hash + Objects.hashCode(lastModified.getTime());
|
||||
}
|
||||
hash = 47 * hash + Arrays.hashCode(data);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!super.equals(obj)) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof DataFile)) {
|
||||
return false;
|
||||
}
|
||||
final DataFile other = (DataFile) obj;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
if (size != other.getSize()) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(type, other.getType())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(creationDate, other.getCreationDate())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(lastModified, other.getLastModified())) {
|
||||
return false;
|
||||
}
|
||||
return Arrays.equals(data, other.getData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEqual(final Object other) {
|
||||
return other instanceof DataFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(final String toStringData) {
|
||||
return super.toString(String.format(", size = %d, "
|
||||
+ "type = \"%s\", "
|
||||
+ "creationDate = %tF %<tT, "
|
||||
+ "lastModified = %tF %<tT%s",
|
||||
size,
|
||||
type,
|
||||
creationDate,
|
||||
lastModified,
|
||||
toStringData));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.OrderBy;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
* Directory in the file structure of a theme stored in the database.
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "theme_directories", schema = CoreConstants.DB_SCHEMA)
|
||||
public class Directory extends ThemeFile {
|
||||
|
||||
private static final long serialVersionUID = 3553722448470575337L;
|
||||
|
||||
@OneToMany(mappedBy = "parent")
|
||||
@OrderBy("name ASC")
|
||||
private List<ThemeFile> files;
|
||||
|
||||
public List<ThemeFile> getFiles() {
|
||||
return Collections.unmodifiableList(files);
|
||||
}
|
||||
|
||||
protected void setFiles(final List<ThemeFile> files) {
|
||||
this.files = new ArrayList<>(files);
|
||||
}
|
||||
|
||||
protected void addFile(final ThemeFile file) {
|
||||
files.add(file);
|
||||
}
|
||||
|
||||
protected void removeFile(final ThemeFile file) {
|
||||
files.remove(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = super.hashCode();
|
||||
hash = 47 * hash;
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!super.equals(obj)) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof Directory)) {
|
||||
return false;
|
||||
}
|
||||
final Directory other = (Directory) obj;
|
||||
return other.canEqual(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEqual(final Object other) {
|
||||
return other instanceof Directory;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.NamedQueries;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "THEMES", schema = CoreConstants.DB_SCHEMA)
|
||||
@NamedQueries({
|
||||
@NamedQuery(name = "Theme.findByUuid",
|
||||
query = "SELECT t FROM Theme t "
|
||||
+ "WHERE t.uuid = :uuid "
|
||||
+ "AND t.version = :version")
|
||||
,
|
||||
@NamedQuery(name = "Theme.findByName",
|
||||
query = "SELECT t FROM Theme t "
|
||||
+ "WHERE t.name = :name "
|
||||
+ "AND t.version = :version")
|
||||
})
|
||||
public class Theme implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -5229641158755727717L;
|
||||
|
||||
@Id
|
||||
@Column(name = "THEME_ID")
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private long themeId;
|
||||
|
||||
@Column(name = "NAME", length = 255)
|
||||
private String name;
|
||||
|
||||
@Column(name = "UUID")
|
||||
private String uuid;
|
||||
|
||||
@Column(name = "VERSION")
|
||||
@Enumerated(EnumType.STRING)
|
||||
private ThemeVersion version;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "ROOT_DIRECTORY_ID")
|
||||
private Directory rootDirectory;
|
||||
|
||||
public long getThemeId() {
|
||||
return themeId;
|
||||
}
|
||||
|
||||
protected void setThemeId(final long themeId) {
|
||||
this.themeId = themeId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
protected void setUuid(final String uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public ThemeVersion getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
protected void setVersion(final ThemeVersion version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public Directory getRootDirectory() {
|
||||
return rootDirectory;
|
||||
}
|
||||
|
||||
protected void setRootDirectory(final Directory rootDirectory) {
|
||||
this.rootDirectory = rootDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 79 * hash + (int) (themeId ^ (themeId >>> 32));
|
||||
hash = 79 * hash + Objects.hashCode(name);
|
||||
hash = 79 * hash + Objects.hashCode(uuid);
|
||||
hash = 79 * hash + Objects.hashCode(version);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof Theme)) {
|
||||
return false;
|
||||
}
|
||||
final Theme other = (Theme) obj;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
if (themeId != other.getThemeId()) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(name, other.getName())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(uuid, other.getUuid())) {
|
||||
return false;
|
||||
}
|
||||
return version == other.getVersion();
|
||||
}
|
||||
|
||||
public boolean canEqual(final Object other) {
|
||||
return other instanceof Theme;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return toString("");
|
||||
}
|
||||
|
||||
public String toString(final String data) {
|
||||
return String.format("%s{ "
|
||||
+ "themeId = %d, "
|
||||
+ "name = \"%s\", "
|
||||
+ "uuid = %s, "
|
||||
+ "version = %s%s"
|
||||
+ " }",
|
||||
super.toString(),
|
||||
themeId,
|
||||
name,
|
||||
uuid,
|
||||
Objects.toString(version),
|
||||
data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,208 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.NamedQueries;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* Basic class for files of theme stored in the database.
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "THEME_FILES", schema = CoreConstants.DB_SCHEMA)
|
||||
@Inheritance(strategy = InheritanceType.JOINED)
|
||||
@NamedQueries({
|
||||
@NamedQuery(name = "ThemeFile.findByUuid",
|
||||
query = "SELECT f FROM ThemeFile f "
|
||||
+ "WHERE f.uuid = :uuid "
|
||||
+ "AND f.version = :version")
|
||||
,
|
||||
@NamedQuery(name = "ThemeFile.findByPath",
|
||||
query = "SELECT f FROM ThemeFile f "
|
||||
+ "WHERE f.path = :path "
|
||||
+ "AND f.version = :version")
|
||||
,
|
||||
@NamedQuery(name = "ThemeFile.findByNameAndParent",
|
||||
query = "SELECT f FROM ThemeFile f "
|
||||
+ "WHERE f.name = :name "
|
||||
+ "AND f.parent = :parent")
|
||||
})
|
||||
public class ThemeFile implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -622867075507267065L;
|
||||
|
||||
@Id
|
||||
@Column(name = "FILE_ID")
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private long fileId;
|
||||
|
||||
@Column(name = "UUID", nullable = false)
|
||||
@NotNull
|
||||
private String uuid;
|
||||
|
||||
@Column(name = "NAME", length = 255, nullable = false)
|
||||
@NotNull
|
||||
private String name;
|
||||
|
||||
@Column(name = "VERSION")
|
||||
@Enumerated(EnumType.STRING)
|
||||
private ThemeVersion version;
|
||||
|
||||
@Column(name = "FILE_PATH", length = 8192, nullable = false)
|
||||
@NotNull
|
||||
private String path;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "PARENT_DIRECTORY_ID")
|
||||
private Directory parent;
|
||||
|
||||
public long getFileId() {
|
||||
return fileId;
|
||||
}
|
||||
|
||||
public void setFileId(long fileId) {
|
||||
this.fileId = fileId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
protected void setPath(final String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
protected void setUuid(final String uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public ThemeVersion getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
protected void setVersion(final ThemeVersion version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public Directory getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
protected void setParent(final Directory parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 37 * hash + (int) (fileId ^ (fileId >>> 32));
|
||||
hash = 37 * hash + Objects.hashCode(name);
|
||||
hash = 37 * hash + Objects.hashCode(path);
|
||||
hash = 37 * hash + Objects.hashCode(uuid);
|
||||
hash = 37 * hash + Objects.hashCode(parent);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof ThemeFile)) {
|
||||
return false;
|
||||
}
|
||||
final ThemeFile other = (ThemeFile) obj;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
if (fileId != other.getFileId()) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(name, other.getName())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(path, other.getPath())) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(uuid, other.getUuid())) {
|
||||
return false;
|
||||
}
|
||||
return Objects.equals(parent, other.getParent());
|
||||
}
|
||||
|
||||
public boolean canEqual(final Object other) {
|
||||
return other instanceof ThemeFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return toString("");
|
||||
}
|
||||
|
||||
public String toString(final String data) {
|
||||
return String.format("%s{ "
|
||||
+ "fileId = %d, "
|
||||
+ "name = \"%s\", "
|
||||
+ "path = \"%s\", "
|
||||
+ "uuid = \"%s\"%s"
|
||||
+ " }",
|
||||
super.toString(),
|
||||
fileId,
|
||||
name,
|
||||
path,
|
||||
uuid,
|
||||
data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.AbstractEntityRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.persistence.NoResultException;
|
||||
import javax.persistence.TypedQuery;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ThemeFileRepository extends AbstractEntityRepository<Long, ThemeFile> {
|
||||
|
||||
private static final long serialVersionUID = -490998638396765429L;
|
||||
|
||||
@Override
|
||||
public Class<ThemeFile> getEntityClass() {
|
||||
return ThemeFile.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdAttributeName() {
|
||||
return "fileId";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getIdOfEntity(final ThemeFile entity) {
|
||||
return entity.getFileId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNew(final ThemeFile entity) {
|
||||
return entity.getFileId() == 0;
|
||||
}
|
||||
|
||||
public Optional<ThemeFile> findByUuid(final String uuid,
|
||||
final ThemeVersion version) {
|
||||
|
||||
final TypedQuery<ThemeFile> query = getEntityManager()
|
||||
.createNamedQuery("ThemeFile.findByUuid", ThemeFile.class);
|
||||
query.setParameter("uuid", uuid);
|
||||
query.setParameter("version", version);
|
||||
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public Optional<ThemeFile> findByPath(final String path,
|
||||
final ThemeVersion version) {
|
||||
|
||||
final TypedQuery<ThemeFile> query = getEntityManager()
|
||||
.createNamedQuery("ThemeFile.findByPath", ThemeFile.class);
|
||||
query.setParameter("path", path);
|
||||
query.setParameter("version", version);
|
||||
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public Optional<ThemeFile> findByNameAndParent(final String name,
|
||||
final Directory parent) {
|
||||
|
||||
final TypedQuery<ThemeFile> query = getEntityManager()
|
||||
.createNamedQuery("ThemeFile.findByNameAndParent", ThemeFile.class);
|
||||
query.setParameter("name", name);
|
||||
query.setParameter("parent", parent);
|
||||
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.libreccm.core.AbstractEntityRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.persistence.NoResultException;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ThemeRepository extends AbstractEntityRepository<Long, Theme> {
|
||||
|
||||
private static final long serialVersionUID = 2243313600794241908L;
|
||||
|
||||
@Override
|
||||
public Class<Theme> getEntityClass() {
|
||||
return Theme.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdAttributeName() {
|
||||
return "themeId";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getIdOfEntity(final Theme entity) {
|
||||
return entity.getThemeId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNew(final Theme entity) {
|
||||
return entity.getThemeId() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(final Theme theme) {
|
||||
super.save(theme);;
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public Optional<Theme> findThemeByUuid(final String uuid,
|
||||
final ThemeVersion version) {
|
||||
|
||||
final TypedQuery<Theme> query = getEntityManager()
|
||||
.createNamedQuery("Theme.findByUuid", Theme.class);
|
||||
query.setParameter("uuid", uuid);
|
||||
query.setParameter("version", version);
|
||||
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public Optional<Theme> findThemeByName(final String name,
|
||||
final ThemeVersion version) {
|
||||
|
||||
final TypedQuery<Theme> query = getEntityManager()
|
||||
.createNamedQuery("Theme.findByName", Theme.class);
|
||||
query.setParameter("name", name);
|
||||
query.setParameter("version", version);
|
||||
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public enum ThemeVersion {
|
||||
|
||||
DRAFT,
|
||||
LIVE
|
||||
|
||||
}
|
||||
|
|
@ -18,6 +18,7 @@
|
|||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID bigint,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,38 @@
|
|||
create table CCM_CORE.THEME_DATA_FILES (
|
||||
CREATION_DATE timestamp,
|
||||
FILE_DATA blob,
|
||||
LAST_MODIFIED timestamp,
|
||||
FILE_SIZE bigint,
|
||||
TYPE varchar(255),
|
||||
FILE_ID bigint not null,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
||||
create table CCM_CORE.theme_directories (
|
||||
FILE_ID bigint not null,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
||||
create table CCM_CORE.THEME_FILES (
|
||||
FILE_ID bigint not null,
|
||||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID bigint,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
||||
create table CCM_CORE.THEMES (
|
||||
THEME_ID bigint not null,
|
||||
NAME varchar(255),
|
||||
UUID varchar(255),
|
||||
VERSION varchar(255),
|
||||
ROOT_DIRECTORY_ID bigint,
|
||||
primary key (THEME_ID)
|
||||
);
|
||||
|
||||
|
||||
alter table CCM_CORE.THEME_DATA_FILES
|
||||
add constraint FK630m2y2p7pp487ofowbefrm89
|
||||
foreign key (FILE_ID)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (C) 2018 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.theming.db;
|
||||
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.libreccm.tests.categories.UnitTest;
|
||||
import org.libreccm.testutils.EqualsVerifier;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@RunWith(Parameterized.class)
|
||||
@org.junit.experimental.categories.Category(UnitTest.class)
|
||||
public class EqualsAndHashCodeTest extends EqualsVerifier {
|
||||
|
||||
@Parameterized.Parameters(name = "{0}")
|
||||
public static Collection<Class<?>> data() {
|
||||
return Arrays.asList(new Class<?>[]{
|
||||
Directory.class,
|
||||
DataFile.class,
|
||||
Theme.class,
|
||||
ThemeFile.class
|
||||
});
|
||||
}
|
||||
|
||||
public EqualsAndHashCodeTest(final Class<?> entityClass) {
|
||||
super(entityClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addPrefabValues(
|
||||
final nl.jqno.equalsverifier.EqualsVerifier<?> verifier) {
|
||||
|
||||
Objects.requireNonNull(verifier);
|
||||
|
||||
final DataFile dataFile1 = new DataFile();
|
||||
dataFile1.setFileId(1);
|
||||
dataFile1.setName("file1");
|
||||
|
||||
final DataFile dataFile2 = new DataFile();
|
||||
dataFile2.setFileId(2);
|
||||
dataFile2.setName("file2");
|
||||
|
||||
final Directory directory1 = new Directory();
|
||||
directory1.setName("directory1");
|
||||
|
||||
final Directory directory2 = new Directory();
|
||||
directory2.setName("directory2");
|
||||
|
||||
verifier
|
||||
.withPrefabValues(DataFile.class, dataFile1, dataFile2)
|
||||
.withPrefabValues(Directory.class, directory1, directory2);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -589,6 +589,7 @@ drop sequence if exists HIBERNATE_SEQUENCE;
|
|||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID bigint,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -589,6 +589,7 @@ drop sequence if exists HIBERNATE_SEQUENCE;
|
|||
NAME varchar(255) not null,
|
||||
FILE_PATH varchar(8192) not null,
|
||||
UUID varchar(255) not null,
|
||||
VERSION varchar(255),
|
||||
PARENT_DIRECTORY_ID int8,
|
||||
primary key (FILE_ID)
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue