ImExporters for Publication entities

master
Jens Pelzetter 2022-11-23 19:53:51 +01:00
parent 059f9f8607
commit 08fc4f8e6c
35 changed files with 611 additions and 36 deletions

View File

@ -0,0 +1,42 @@
package org.scientificcms.publications;
import org.libreccm.imexport.AbstractEntityImExporter;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
* @param <T> The publication type.
*/
public abstract class AbstractPublicationImExporter<T extends Publication>
extends AbstractEntityImExporter<T> {
@Inject
private PublicationRepository publicationRepo;
@Override
protected void saveImportedEntity(final Publication publication) {
publicationRepo.save(publication);
}
@Override
protected T reloadEntity(final T publication) {
return publicationRepo
.findByIdAndType(
publication.getPublicationId(),
getEntityClass()
)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No publication of type %s with ID %d found in "
+ "the database.",
publication.getClass().getName(),
publication.getPublicationId()
)
)
);
}
}

View File

@ -0,0 +1,28 @@
package org.scientificcms.publications;
import java.util.Set;
import javax.annotation.PostConstruct;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
* @param <T> Type of publication.
*/
public abstract class AbstractPublicationWithPublisherImExporter<T extends PublicationWithPublisher>
extends AbstractPublicationImExporter<T> {
@Override
@PostConstruct
protected final void init() {
addRequiredEntities(
Set.of(
Publisher.class
)
);
initPublicationWithPublisherImExporter();
}
protected abstract void initPublicationWithPublisherImExporter();
}

View File

@ -0,0 +1,24 @@
package org.scientificcms.publications;
import org.librecms.assets.Organization;
import java.util.Set;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
* @param <T> Subtype of {@link UnPublished}.
*/
public abstract class AbstractUnPublishedImExporter<T extends UnPublished>
extends AbstractPublicationImExporter<T> {
@Override
protected final void init() {
addRequiredEntities(
Set.of(Organization.class)
);
}
protected abstract void initUnPublishedImExporter();
}

View File

@ -1,8 +1,3 @@
/*
* 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 com.fasterxml.jackson.annotation.JsonIdentityInfo;

View File

@ -0,0 +1,36 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(ArticleInCollectedVolume.class)
public class ArticleInCollectedVolumeImExporter
extends AbstractPublicationImExporter<ArticleInCollectedVolume>{
@Override
public Class<ArticleInCollectedVolume> getEntityClass() {
return ArticleInCollectedVolume.class;
}
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(
CollectedVolume.class
)
);
}
}

View File

@ -1,8 +1,3 @@
/*
* 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 com.fasterxml.jackson.annotation.JsonIdentityInfo;

View File

@ -0,0 +1,34 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(ArticleInJournal.class)
public class ArticleInJournalImExporter
extends AbstractPublicationImExporter<ArticleInJournal> {
@Override
public Class<ArticleInJournal> getEntityClass() {
return ArticleInJournal.class;
}
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(
Journal.class
)
);
}
}

View File

@ -18,6 +18,7 @@ import org.scientificcms.publications.contenttypes.WorkingPaperItem;
import java.util.Objects;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
@ -37,6 +38,7 @@ public class AuthorshipImExporter
private EntityManager entityManager;
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(

View File

@ -1,8 +1,3 @@
/*
* 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 com.fasterxml.jackson.annotation.JsonIdentityInfo;

View File

@ -0,0 +1,26 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(CollectedVolume.class)
public class CollectedVolumeImExporter
extends AbstractPublicationWithPublisherImExporter<CollectedVolume> {
@Override
public Class<CollectedVolume> getEntityClass() {
return CollectedVolume.class;
}
@Override
protected void initPublicationWithPublisherImExporter() {
// Nothing
}
}

View File

@ -0,0 +1,35 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import org.librecms.assets.Organization;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Expertise.class)
public class ExpertiseImExporter
extends AbstractPublicationImExporter<Expertise>{
@Override
public Class<Expertise> getEntityClass() {
return Expertise.class;
}
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(
Organization.class
)
);
}
}

View File

@ -0,0 +1,28 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(GreyLiterature.class)
public class GreyLiteratureImExporter
extends AbstractUnPublishedImExporter<GreyLiterature> {
@Override
public Class<GreyLiterature> getEntityClass() {
return GreyLiterature.class;
}
@Override
@PostConstruct
protected void initUnPublishedImExporter() {
// Nothing
}
}

View File

@ -0,0 +1,34 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(InProceedings.class)
public class InProceedingsImExporter
extends AbstractPublicationImExporter<InProceedings> {
@Override
public Class<InProceedings> getEntityClass() {
return InProceedings.class;
}
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(
Proceedings.class
)
);
}
}

View File

@ -0,0 +1,31 @@
package org.scientificcms.publications;
import org.librecms.assets.Organization;
import java.util.Set;
import javax.annotation.PostConstruct;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class InternetArticleImExporter
extends AbstractPublicationImExporter<InternetArticle> {
@Override
public Class<InternetArticle> getEntityClass() {
return InternetArticle.class;
}
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(
Organization.class
)
);
}
}

View File

@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.envers.Audited;
import org.libreccm.imexport.Exportable;
import org.libreccm.l10n.LocalizedString;
import java.io.Serializable;
@ -56,7 +57,7 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
resolver = JournalIdResolver.class,
property = "uuid"
)
public class Journal implements Serializable {
public class Journal implements Exportable, Serializable {
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,54 @@
package org.scientificcms.publications;
import org.libreccm.imexport.AbstractEntityImExporter;
import org.libreccm.imexport.Processes;
import java.util.Objects;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Journal.class)
public class JournalImExporter
extends AbstractEntityImExporter<Journal> {
@Inject
private JournalRepository journalRepo;
@Override
public Class<Journal> getEntityClass() {
return Journal.class;
}
@PostConstruct
@Override
protected void init() {
// Nothing
}
@Override
protected void saveImportedEntity(final Journal journal) {
journalRepo.save(journal);
}
@Override
protected Journal reloadEntity(final Journal journal) {
return journalRepo
.findById(Objects.requireNonNull(journal.getJournalId()))
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No Journal with ID %d found in the database.",
journal.getJournalId()
)
)
);
}
}

View File

@ -0,0 +1,28 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Monograph.class)
public class MonographImExporter
extends AbstractPublicationWithPublisherImExporter<Monograph> {
@Override
public Class<Monograph> getEntityClass() {
return Monograph.class;
}
@Override
@PostConstruct
protected void initPublicationWithPublisherImExporter() {
// Nothing
}
}

View File

@ -0,0 +1,28 @@
package org.scientificcms.publications;
import org.librecms.assets.Organization;
import java.util.Set;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class ProceedingsImExporter
extends AbstractPublicationWithPublisherImExporter<Proceedings> {
@Override
public Class<Proceedings> getEntityClass() {
return Proceedings.class;
}
@Override
protected void initPublicationWithPublisherImExporter() {
addRequiredEntities(
Set.of(
Organization.class
)
);
}
}

View File

@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;
import org.hibernate.envers.Audited;
import org.libreccm.imexport.Exportable;
import org.libreccm.l10n.LocalizedString;
import java.io.Serializable;
@ -101,7 +102,7 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
resolver = PublicationIdResolver.class,
property = "uuid"
)
public class Publication implements Serializable {
public class Publication implements Exportable, Serializable {
private static final long serialVersionUID = 1L;

View File

@ -7,8 +7,6 @@ package org.scientificcms.publications;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.envers.Audited;
import org.libreccm.l10n.LocalizedString;

View File

@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.envers.Audited;
import org.libreccm.imexport.Exportable;
import java.io.Serializable;
import java.util.ArrayList;
@ -51,7 +52,7 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
resolver = PublisherIdResolver.class,
property = "uuid"
)
public class Publisher implements Serializable {
public class Publisher implements Exportable, Serializable {
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,51 @@
package org.scientificcms.publications;
import org.libreccm.imexport.AbstractEntityImExporter;
import org.libreccm.imexport.Processes;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Publisher.class)
public class PublisherImExporter extends AbstractEntityImExporter<Publisher> {
@Inject
private PublisherRepository publisherRepo;
@Override
public Class<Publisher> getEntityClass() {
return Publisher.class;
}
@Override
@PostConstruct
protected void init() {
// Nothing
}
@Override
protected void saveImportedEntity(final Publisher publisher) {
publisherRepo.save(publisher);
}
@Override
protected Publisher reloadEntity(final Publisher publisher) {
return publisherRepo
.findById(publisher.getPublisherId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No Publisher with ID %d found in the database.",
publisher.getPublisherId()
)
)
);
}
}

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.envers.Audited;
import org.libreccm.imexport.Exportable;
import org.libreccm.l10n.LocalizedString;
import java.io.Serializable;
@ -50,7 +51,7 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
resolver = SeriesIdResolver.class,
property = "uuid"
)
public class Series implements Serializable {
public class Series implements Exportable, Serializable {
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,53 @@
package org.scientificcms.publications;
import org.libreccm.imexport.AbstractEntityImExporter;
import org.libreccm.imexport.Processes;
import java.util.Objects;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Series.class)
public class SeriesImExporter extends AbstractEntityImExporter<Series> {
@Inject
private SeriesRepository seriesRepo;
@Override
public Class<Series> getEntityClass() {
return Series.class;
}
@Override
@PostConstruct
protected void init() {
// Nothing
}
@Override
protected void saveImportedEntity(final Series series) {
seriesRepo.save(series);
}
@Override
protected Series reloadEntity(final Series series) {
return seriesRepo
.findById(Objects.requireNonNull(series).getSeriesId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No Series with ID %d found in the database.",
series.getSeriesId()
)
)
);
}
}

View File

@ -0,0 +1,27 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Talk.class)
public class TalkImExporter extends AbstractPublicationImExporter<Talk> {
@Override
public Class<Talk> getEntityClass() {
return Talk.class;
}
@Override
@PostConstruct
protected void init() {
// Nothing
}
}

View File

@ -18,6 +18,7 @@ import org.scientificcms.publications.contenttypes.WorkingPaperItem;
import java.util.Objects;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
@ -37,6 +38,7 @@ public class VolumeInSeriesImExporter
private EntityManager entityManager;
@Override
@PostConstruct
protected void init() {
addRequiredEntities(
Set.of(

View File

@ -1,8 +1,3 @@
/*
* 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 com.fasterxml.jackson.annotation.JsonIdentityInfo;

View File

@ -0,0 +1,28 @@
package org.scientificcms.publications;
import org.libreccm.imexport.Processes;
import javax.enterprise.context.RequestScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(WorkingPaper.class)
public class WorkingPaperImExporter
extends AbstractUnPublishedImExporter<WorkingPaper>{
@Override
public Class<WorkingPaper> getEntityClass() {
return WorkingPaper.class;
}
@Override
protected void initUnPublishedImExporter() {
// Nothing
}
}

View File

@ -1,5 +1,6 @@
package org.scientificcms.publications.assets;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.assets.AssetType;
import org.librecms.contentsection.Asset;
@ -48,6 +49,7 @@ public class CollectedVolumeAsset
CascadeType.REFRESH
})
@JoinColumn(name = "COLLECTED_VOLUME_ID")
@JsonIdentityReference(alwaysAsId = true)
private CollectedVolume collectedVolume;
@Override

View File

@ -6,6 +6,7 @@
package org.scientificcms.publications.assets;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.assets.AssetType;
import org.librecms.contentsection.Asset;
@ -53,6 +54,7 @@ public class JournalAsset extends Asset {
CascadeType.REFRESH
})
@JoinColumn(name = "JOURNAL_ID")
@JsonIdentityReference(alwaysAsId = true)
private Journal journal;
public Journal getJournal() {

View File

@ -1,5 +1,6 @@
package org.scientificcms.publications.assets;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.assets.AssetType;
import org.librecms.contentsection.Asset;
@ -48,6 +49,7 @@ public class ProceedingsAsset
CascadeType.REFRESH
})
@JoinColumn(name = "PROCEEDINGS_ID")
@JsonIdentityReference(alwaysAsId = true)
private Proceedings proceedings;
@Override

View File

@ -1,5 +1,6 @@
package org.scientificcms.publications.assets;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.assets.AssetType;
import org.librecms.contentsection.Asset;
@ -48,6 +49,7 @@ public class PublisherAsset extends Asset {
CascadeType.REFRESH
})
@JoinColumn(name = "PUBLISHER_ID")
@JsonIdentityReference(alwaysAsId = true)
private Publisher publisher;
public Publisher getPublisher() {

View File

@ -5,6 +5,7 @@
*/
package org.scientificcms.publications.assets;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.assets.AssetType;
import org.librecms.contentsection.Asset;
@ -51,6 +52,7 @@ public class SeriesAsset extends Asset {
CascadeType.REFRESH
})
@JoinColumn(name = "SERIES_ID")
@JsonIdentityReference(alwaysAsId = true)
private Series series;
public Series getSeries() {

View File

@ -1,8 +1,3 @@
/*
* 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.contenttypes;
import org.librecms.contenttypes.ContentTypeDescription;

View File

@ -1,10 +1,6 @@
/*
* 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.contenttypes;
import com.fasterxml.jackson.annotation.JsonIdentityReference;
import org.hibernate.envers.Audited;
import org.librecms.contentsection.ContentItem;
import org.scientificcms.publications.Publication;
@ -49,6 +45,7 @@ public class PublicationItem<T extends Publication> extends ContentItem {
fetch = FetchType.LAZY,
targetEntity = Publication.class
)
@JsonIdentityReference(alwaysAsId = true)
private T publication;
public T getPublication() {