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(); + } + +}