diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Journal.java b/sci-publications/src/main/java/org/scientificcms/publications/Journal.java
index c13c34f..bfda684 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/Journal.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/Journal.java
@@ -23,6 +23,8 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@@ -35,6 +37,17 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Entity
@Table(name = "JOURNALS", schema = DB_SCHEMA)
@Audited
+@NamedQueries({
+ @NamedQuery(
+ name = "Journal.findByUuid",
+ query = "SELECT j FROM Journal j WHERE j.uuid = :uuid"
+ ),
+ @NamedQuery(
+ name = "Journal.findByTitle",
+ query = "SELECT j FROM Journal j "
+ + "WHERE LOWER(j.title) LIKE CONCAT('%', :title, '%')"
+ )
+})
public class Journal implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/JournalRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/JournalRepository.java
index 2d86063..8e443eb 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/JournalRepository.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/JournalRepository.java
@@ -7,13 +7,18 @@ package org.scientificcms.publications;
import org.libreccm.core.AbstractEntityRepository;
+import java.util.List;
+import java.util.Optional;
import java.util.UUID;
+import javax.persistence.NoResultException;
+import javax.transaction.Transactional;
+
/**
*
* @author Jens Pelzetter
*/
-public class JournalRepository extends AbstractEntityRepository{
+public class JournalRepository extends AbstractEntityRepository {
private static final long serialVersionUID = 1L;
@@ -41,6 +46,28 @@ public class JournalRepository extends AbstractEntityRepository{
protected void initNewEntity(final Journal entity) {
entity.setUuid(UUID.randomUUID().toString());
}
-
-
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByUuid(final String uuid) {
+
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Journal.findByUuid", Journal.class)
+ .setParameter("uuid", uuid)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List findByTitle(final String title) {
+ return getEntityManager()
+ .createNamedQuery("Journal.findByTitle", Journal.class)
+ .setParameter("title", title)
+ .getResultList();
+ }
+
}
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Publication.java b/sci-publications/src/main/java/org/scientificcms/publications/Publication.java
index 8f9b97c..022e150 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/Publication.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/Publication.java
@@ -5,6 +5,8 @@
*/
package org.scientificcms.publications;
+import org.hibernate.annotations.NamedQueries;
+import org.hibernate.annotations.NamedQuery;
import org.hibernate.envers.Audited;
import org.libreccm.l10n.LocalizedString;
@@ -43,6 +45,50 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Table(name = "PUBLICATIONS", schema = DB_SCHEMA)
@Inheritance(strategy = InheritanceType.JOINED)
@Audited
+@NamedQueries({
+ @NamedQuery(
+ name = "Publication.findByIdAndType",
+ query = "SELECT p FROM Publication p "
+ + "WHERE p.publicationId = :publicationId "
+ + "AND TYPE(p) = :type"
+ ),
+ @NamedQuery(
+ name = "Publication.findByUuid",
+ query = "SELECT p FROM Publication p WHERE p.uuid = :uuid"
+ ),
+ @NamedQuery(
+ name = "Publication.findByUuidAndType",
+ query = "SELECT p FROM Publication p "
+ + "WHERE p.uuid = :uuid "
+ + "AND TYPE(p) = :type"
+ ),
+ @NamedQuery(
+ name = "Publication.findByTitle",
+ query = "SELECT DISTINCT p "
+ + "FROM Publication p JOIN p.title.values t "
+ + "WHERE LOWER(t) LIKE CONCAT('%', :title, '%')"
+ ),
+ @NamedQuery(
+ name = "Publication.findByTitleAndType",
+ query = "SELECT DISTINCT p "
+ + "FROM Publication p JOIN p.title.values t "
+ + "WHERE LOWER(t) LIKE CONCAT('%', :title, '%') "
+ + "AND TYPE(p) = :type"
+ ),
+ @NamedQuery(
+ name = "Publication.findByAuthor",
+ query = "SELECT DISTINCT p "
+ + "FROM Publication p JOIN p.authorships a "
+ + "WHERE a.author = :author"
+ ),
+ @NamedQuery(
+ name = "Publication.findByAuthorAndType",
+ query = "SELECT DISTINCT p "
+ + "FROM Publication p JOIN p.authorships a "
+ + "WHERE a.author = :author "
+ + "AND TYPE(p) = :type"
+ )
+})
public class Publication implements Serializable {
private static final long serialVersionUID = 1L;
@@ -58,7 +104,7 @@ public class Publication implements Serializable {
@Column(name = "YEAR_OF_PUBLICATION")
private Integer yearOfPublication;
- @OneToMany(cascade = CascadeType.ALL,
+ @OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "author",
orphanRemoval = true)
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
index 416a17a..6072c21 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
@@ -6,17 +6,22 @@
package org.scientificcms.publications;
import org.libreccm.core.AbstractEntityRepository;
+import org.librecms.assets.Person;
+import java.util.List;
+import java.util.Optional;
import java.util.UUID;
import javax.enterprise.context.RequestScoped;
+import javax.persistence.NoResultException;
+import javax.transaction.Transactional;
/**
*
* @author Jens Pelzetter
*/
@RequestScoped
-public class PublicationRepository
+public class PublicationRepository
extends AbstractEntityRepository {
private static final long serialVersionUID = 1L;
@@ -40,11 +45,96 @@ public class PublicationRepository
public Class getEntityClass() {
return Publication.class;
}
-
+
@Override
public void initNewEntity(final Publication entity) {
final String uuid = UUID.randomUUID().toString();
entity.setUuid(uuid);
}
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByIdAndType(
+ final long publicationId, final Class type
+ ) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Publication.findByIdAndType", type)
+ .setParameter("publicationId", publicationId)
+ .setParameter("type", type)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByUuid(final String uuid) {
+
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Publication.findByUuid",
+ Publication.class)
+ .setParameter("uuid", uuid)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByUuidAndType(
+ final String uuid, final Class type
+ ) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Publication.findByUuidAndType", type)
+ .setParameter("uuid", uuid)
+ .setParameter("type", type)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ public List findByTitle(final String title) {
+
+ return getEntityManager()
+ .createNamedQuery("Publication.findByTitle", Publication.class)
+ .setParameter("title", title)
+ .getResultList();
+ }
+
+ public List findByTitleAndType(
+ final String title, final Class type
+ ) {
+ return getEntityManager()
+ .createNamedQuery("Publication.findByTitleAndType", type)
+ .setParameter("title", title)
+ .setParameter("type", type)
+ .getResultList();
+ }
+
+ public List findByAuthor(final Person author) {
+ return getEntityManager()
+ .createNamedQuery("Publication.findByAuthor", Publication.class)
+ .setParameter("author", author)
+ .getResultList();
+ }
+
+ public List findByAuthorAndType(
+ final Person author, final Class type
+ ) {
+ return getEntityManager()
+ .createNamedQuery("Publication.findByAuthorAndType", type)
+ .setParameter("author", author)
+ .setParameter("type", type)
+ .getResultList();
+ }
+
}
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisher.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisher.java
index a94975f..afdd89b 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisher.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisher.java
@@ -17,6 +17,8 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.Table;
import static org.scientificcms.publications.SciPublicationsConstants.*;
@@ -28,6 +30,29 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Entity
@Table(name = "PUBLICATIONS_WITH_PUBLISHER")
@Audited
+@NamedQueries({
+ @NamedQuery(
+ name = "PublicationWithPublisher.findByPublisher",
+ query = "SELECT p FROM PublicationWithPublisher p "
+ + "WHERE p.publisher = :publisher"
+ ),
+ @NamedQuery(
+ name = "PublicationWithPublisher.findByPublisherAndType",
+ query = "SELECT p FROM PublicationWithPublisher p "
+ + "WHERE p.publisher = :publisher "
+ + "AND TYPE(p) = :type"
+ ),
+ @NamedQuery(
+ name = "PublicationWithPublisher.findByISBN10",
+ query = "SELECT p FROM PublicationWithPublisher p "
+ + "WHERE p.isbn10 = :isbn"
+ ),
+ @NamedQuery(
+ name = "PublicationWithPublisher.findByISBN13",
+ query = "SELECT p FROM PublicationWithPublisher p "
+ + "WHERE p.isbn13 = :isbn"
+ )
+})
public class PublicationWithPublisher extends Publication {
private static final long serialVersionUID = 1L;
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisherRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisherRepository.java
new file mode 100644
index 0000000..74e4887
--- /dev/null
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationWithPublisherRepository.java
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.publications;
+
+import org.libreccm.core.AbstractEntityRepository;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.NoResultException;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@RequestScoped
+public class PublicationWithPublisherRepository
+ extends AbstractEntityRepository
+ implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Inject
+ private PublicationRepository publicationRepository;
+
+ @Override
+ public Class getEntityClass() {
+ return PublicationWithPublisher.class;
+ }
+
+ @Override
+ public String getIdAttributeName() {
+ return publicationRepository.getIdAttributeName();
+ }
+
+ @Override
+ public Long getIdOfEntity(final PublicationWithPublisher entity) {
+ return publicationRepository.getIdOfEntity(entity);
+ }
+
+ @Override
+ public boolean isNew(final PublicationWithPublisher entity) {
+ return publicationRepository.isNew(entity);
+ }
+
+ @Override
+ public void initNewEntity(final PublicationWithPublisher entity) {
+ publicationRepository.initNewEntity(entity);
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List findByPublisher(
+ final Publisher publisher
+ ) {
+ return getEntityManager()
+ .createNamedQuery("PublicationWithPublisher.findByPublisher",
+ PublicationWithPublisher.class)
+ .setParameter("publisher", publisher)
+ .getResultList();
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List findByPublisherAndType(
+ final Publisher publisher, final Class type
+ ) {
+ return getEntityManager()
+ .createNamedQuery("PublicationWithPublisher.findByPublisherAndType",
+ type)
+ .setParameter("publisher", publisher)
+ .setParameter("type", type)
+ .getResultList();
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByIsbn10(final String isbn) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("PublicationWithPublisher.findByISBN10",
+ PublicationWithPublisher.class)
+ .setParameter("isbn", isbn)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByIsbn13(final String isbn) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("PublicationWithPublisher.findByISBN13",
+ PublicationWithPublisher.class)
+ .setParameter("isbn", isbn)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+}
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Publisher.java b/sci-publications/src/main/java/org/scientificcms/publications/Publisher.java
index 7881eac..dc47da0 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/Publisher.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/Publisher.java
@@ -18,6 +18,8 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@@ -30,6 +32,17 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Entity
@Table(name = "PUBLISHERS", schema = DB_SCHEMA)
@Audited
+@NamedQueries({
+ @NamedQuery(
+ name = "Publisher.findByUuid",
+ query = "SELECT p FROM Publisher p WHERE p.uuid = :uuid"
+ ),
+ @NamedQuery(
+ name = "Publisher.findByName",
+ query = "SELECT p FROM Publisher p "
+ + "WHERE p.name LIKE CONCAT('%', :name, '%')"
+ )
+})
public class Publisher implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java
index 9d1f102..105601a 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java
@@ -7,8 +7,13 @@ package org.scientificcms.publications;
import org.libreccm.core.AbstractEntityRepository;
+import java.util.List;
+import java.util.Optional;
import java.util.UUID;
+import javax.persistence.NoResultException;
+import javax.transaction.Transactional;
+
/**
*
* @author Jens Pelzetter
@@ -43,4 +48,26 @@ public class PublisherRepository
entity.setUuid(UUID.randomUUID().toString());
}
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByUuid(final String uuid) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Publisher.findByUuid", Publisher.class)
+ .setParameter("uuid", uuid)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List findByName(final String name) {
+ return getEntityManager()
+ .createNamedQuery("Publisher.findByName", Publisher.class)
+ .setParameter("name", name)
+ .getResultList();
+ }
+
}