diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java
index d8b716d..ccaa73b 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java
@@ -25,11 +25,14 @@ import javax.transaction.Transactional;
@RequestScoped
public class PublicationManager {
+ @Inject
+ private EntityManager entityManager;
+
@Inject
private PublicationRepository publicationRepository;
@Inject
- private EntityManager entityManager;
+ private SeriesRepository seriesRepository;
@AuthorizationRequired
@RequiresPrivilege(ItemPrivileges.EDIT)
@@ -341,7 +344,7 @@ public class PublicationManager {
volume.setSeries(series);
volume.setVolumeOfSeries(volumeInSeries);
publication.addSeries(volume);
- series.addVolume(volumeInSeries);
+ series.addVolume(volume);
seriesRepository.save(series);
publicationRepository.save(publication);
}
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 105601a..0138818 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublisherRepository.java
@@ -11,6 +11,7 @@ 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;
@@ -18,6 +19,7 @@ import javax.transaction.Transactional;
*
* @author Jens Pelzetter
*/
+@RequestScoped
public class PublisherRepository
extends AbstractEntityRepository {
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Series.java b/sci-publications/src/main/java/org/scientificcms/publications/Series.java
index 658371d..73c8327 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/Series.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/Series.java
@@ -24,6 +24,7 @@ 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;
@@ -36,7 +37,19 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Entity
@Table(name = "SERIES", schema = DB_SCHEMA)
@Audited
-@NamedQueries({})
+@NamedQueries({
+ @NamedQuery(
+ name = "Series.findByUuid",
+ query = "SELECT s FROM Series s WHERE s.uuid = :uuid"
+ ),
+ @NamedQuery(
+ name = "Series.findByTitle",
+ query = "SELECT DISTINCT s "
+ + "FROM Series s "
+ + "JOIN s.title.values t "
+ + "WHERE lower(t) LIKE CONCAT ('%', :title, '%')"
+ )
+})
public class Series implements Serializable {
private static final long serialVersionUID = 1L;
@@ -123,11 +136,11 @@ public class Series implements Serializable {
return Collections.unmodifiableList(volumes);
}
}
-
+
protected void addVolume(final VolumeInSeries volume) {
volumes.add(volume);
}
-
+
protected void removeVolume(final VolumeInSeries volume) {
volumes.remove(volume);
}
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/SeriesRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/SeriesRepository.java
new file mode 100644
index 0000000..1e48b60
--- /dev/null
+++ b/sci-publications/src/main/java/org/scientificcms/publications/SeriesRepository.java
@@ -0,0 +1,74 @@
+/*
+ * 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.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 SeriesRepository
+ extends AbstractEntityRepository {
+
+ @Override
+ public Class getEntityClass() {
+ return Series.class;
+ }
+
+ @Override
+ public String getIdAttributeName() {
+ return "seriesId";
+ }
+
+ @Override
+ public Long getIdOfEntity(final Series entity) {
+ return entity.getSeriesId();
+ }
+
+ @Override
+ public boolean isNew(final Series entity) {
+ return entity.getSeriesId() == 0;
+ }
+
+ @Override
+ public void initNewEntity(final Series entity) {
+ entity.setUuid(UUID.randomUUID().toString());
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Optional findByUuid(final String uuid) {
+ try {
+ return Optional.of(
+ getEntityManager()
+ .createNamedQuery("Series.findByUuid", Series.class)
+ .setParameter("uuid", uuid)
+ .getSingleResult()
+ );
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List findByTitle(final String title) {
+ return getEntityManager()
+ .createNamedQuery("Series.findByTitle", Series.class)
+ .setParameter("title", title)
+ .getResultList();
+ }
+
+}