Repository for Series

pull/1/head
Jens Pelzetter 2019-10-19 14:12:31 +02:00
parent 9364e43bd2
commit 0be1ad37c0
4 changed files with 97 additions and 5 deletions

View File

@ -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);
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
public class PublisherRepository
extends AbstractEntityRepository<Long, Publisher> {

View File

@ -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);
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
public class SeriesRepository
extends AbstractEntityRepository<Long, Series> {
@Override
public Class<Series> 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<Series> 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<Series> findByTitle(final String title) {
return getEntityManager()
.createNamedQuery("Series.findByTitle", Series.class)
.setParameter("title", title)
.getResultList();
}
}