From 2c2773949e0e59d9b2c8293fe6852f1010c95977 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Tue, 27 Sep 2022 20:22:58 +0200 Subject: [PATCH] Basic structure for sci department content type --- pom.xml | 1 + sci-types-department/pom.xml | 350 ++++++++++++++++++ .../scidepartment/SciDepartment.java | 121 ++++++ .../scidepartment/SciDepartmentConstants.java | 18 + .../SciDepartmentIdResolver.java | 57 +++ .../scidepartment/SciDepartmentModule.java | 46 +++ .../ui/SciDepartmentCreateStep.java | 45 +++ .../ui/SciDepartmentDescriptionStep.java | 26 ++ .../SciDepartmentExtendedPropertiesStep.java | 26 ++ .../ui/SciDepartmentPropertiesStep.java | 26 ++ .../ui/SciDepartmentStepsConstants.java | 16 + .../contenttypes/SciDepartment.properties | 3 + .../contenttypes/SciDepartment_de.properties | 3 + .../sciproject/SciProjectRepository.java | 1 - 14 files changed, 738 insertions(+), 1 deletion(-) create mode 100644 sci-types-department/pom.xml create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartment.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentConstants.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentIdResolver.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentModule.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentCreateStep.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentDescriptionStep.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentExtendedPropertiesStep.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentPropertiesStep.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentStepsConstants.java create mode 100644 sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment.properties create mode 100644 sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment_de.properties diff --git a/pom.xml b/pom.xml index c08ddc3..c1a68d7 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ + sci-types-department sci-types-project scientificcms sci-publications diff --git a/sci-types-department/pom.xml b/sci-types-department/pom.xml new file mode 100644 index 0000000..18241a6 --- /dev/null +++ b/sci-types-department/pom.xml @@ -0,0 +1,350 @@ + + + 4.0.0 + + + UTF-8 + ${maven.build.timestamp} + yyyy-MM-dd'T'HH:mm:ss'Z'Z + + + + org.scientificcms + scientificcms-parent + 7.0.0-SNAPSHOT + + + org.scientificcms + sci-types-department + 7.0.0-SNAPSHOT + + ScientificCMS SciDepartment Content Type + + + + + javax + javaee-api + jar + provided + + + + org.libreccm + ccm-core + ${project.parent.version} + provided + + + + org.librecms + ccm-cms + ${project.parent.version} + provided + + + + org.hibernate + hibernate-core + provided + + + + org.hibernate + hibernate-envers + provided + + + + org.hibernate.validator + hibernate-validator + provided + + + + org.apache.logging.log4j + log4j-api + provided + + + + junit + junit + test + + + + org.hamcrest + hamcrest-core + test + + + org.hamcrest + hamcrest-library + test + + + + org.libreccm + ccm-testutils + ${project.parent.version} + test + + + + nl.jqno.equalsverifier + equalsverifier + test + + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + org.jboss.arquillian.extension + arquillian-persistence-dbunit + test + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + + + + com.h2database + h2 + test + + + + + + sci-types-department + + + + src/main/resources + true + + + ./target/generated-resources + + + + + + src/test/resources + + + ${project.build.directory}/generated-resources + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + true + true + ${project.build.sourceEncoding} + + + + + com.github.eirslett + frontend-maven-plugin + + ../node + + + + Install node.js and NPM + + install-node-and-npm + + + v16.14.2 + + + + npm install + + npm + + + --userconfig ../libreccm.npmrc install + + + + build + + npm + + + run build + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + org.libreccm.tests.categories.UnitTest + + + + + org.jacoco + jacoco-maven-plugin + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + + + + de.jpdigital + hibernate53-ddl-maven-plugin + + + h2 + oracle12c + postgresql9 + + + org.libreccm + org.librecms + org.scientificcms + + true + ${basedir}/src/main/resources/META-INF/persistence-ddl.xml + + + + + gen-ddl + + process-classes + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + true + + http://docs.oracle.com/javase/7/docs/api/ + http://docs.oracle.com/javaee/7/api/ + http://docs.jboss.org/hibernate/orm/4.3/javadocs/ + + private + true + UTF-8 + UTF-8 + UTF-8 + true + true + true + true + false + + + + + org.apache.maven.plugins + maven-jxr-plugin + + + org.apache.maven.plugins + maven-surefire-report-plugin + + + org.jacoco + jacoco-maven-plugin + + + org.codehaus.mojo + findbugs-maven-plugin + + + + org.apache.maven.plugins + maven-pmd-plugin + + true + utf-8 + 1.8 + + + + + org.codehaus.mojo + javancss-maven-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + dependencies + licenses + + + + + false + + + + + + diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartment.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartment.java new file mode 100644 index 0000000..a4914b3 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartment.java @@ -0,0 +1,121 @@ +package org.scientificcms.contenttypes.scidepartment; + +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.l10n.LocalizedString; +import org.librecms.contentsection.ContentItem; +import org.librecms.contenttypes.ContentTypeDescription; +import org.librecms.ui.contentsections.documents.MvcAuthoringKit; +import org.scientificcms.contenttypes.scidepartment.ui.SciDepartmentCreateStep; +import org.scientificcms.contenttypes.scidepartment.ui.SciDepartmentDescriptionStep; +import org.scientificcms.contenttypes.scidepartment.ui.SciDepartmentExtendedPropertiesStep; +import org.scientificcms.contenttypes.scidepartment.ui.SciDepartmentPropertiesStep; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +import javax.persistence.AssociationOverride; +import javax.persistence.CascadeType; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; + +import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstants.DB_SCHEMA; + +/** + * + * @author Jens Pelzetter + */ +@Entity +@Audited +@Table(name = "DEPARTMENTS", schema = DB_SCHEMA) +@ContentTypeDescription( + labelBundle = "org.scientificcms.contenttypes.SciDepartment", + descriptionBundle = "org.scientificcms.contenttypes.SciDepartment" +) +@MvcAuthoringKit( + createStep = SciDepartmentCreateStep.class, + authoringSteps = { + SciDepartmentPropertiesStep.class, + SciDepartmentExtendedPropertiesStep.class, + SciDepartmentDescriptionStep.class + } +) +@JsonIdentityInfo( + generator = ObjectIdGenerators.PropertyGenerator.class, + resolver = SciDepartmentIdResolver.class, + property = "uuid" +) +public class SciDepartment extends ContentItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @Embedded + @AssociationOverride( + name = "values", + joinTable = @JoinTable( + name = "DEPARTMENT_SHORT_DESCS", + schema = DB_SCHEMA, + joinColumns = { + @JoinColumn(name = "OBJECT_ID") + } + ) + ) + private LocalizedString shortDescription; + + @Embedded + @AssociationOverride( + name = "values", + joinTable = @JoinTable( + name = "DEPARTMENT_DESCS", + schema = DB_SCHEMA, + joinColumns = { + @JoinColumn(name = "OBJECT_ID") + } + ) + ) + private LocalizedString departmentDescription; + + @Embedded + @AssociationOverride( + name = "values", + joinTable = @JoinTable( + name = "DEPARTMENT_ADDENDUM", + schema = DB_SCHEMA, + joinColumns = { + @JoinColumn(name = "OBJECT_ID") + } + ) + ) + private LocalizedString addendum; + + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "department") + @OrderBy("order ASC") + @JsonIgnore + private Map additionalTexts; + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "department") + @OrderBy("order ASC") + @JsonIgnore + private List contacts; + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "project") + @OrderBy("member ASC") + @JsonIgnore + private List members; + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "project") + @OrderBy("member ASC") + @JsonIgnore + private List projects; + + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentConstants.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentConstants.java new file mode 100644 index 0000000..86678b9 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentConstants.java @@ -0,0 +1,18 @@ +package org.scientificcms.contenttypes.scidepartment; + +/** + * + * @author Jens Pelzetter + */ +public final class SciDepartmentConstants { + + public static final String DB_SCHEMA = "SCI_TYPES_DEPARTMENT"; + + public static final String SCI_PROJECT_BUNDLE + = "org.scientificcms.contenttypes.SciDepartmentResources"; + + private SciDepartmentConstants() { + // Nothing + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentIdResolver.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentIdResolver.java new file mode 100644 index 0000000..74eb517 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentIdResolver.java @@ -0,0 +1,57 @@ +package org.scientificcms.contenttypes.scidepartment; + +import com.fasterxml.jackson.annotation.ObjectIdGenerator; +import com.fasterxml.jackson.annotation.ObjectIdResolver; +import org.libreccm.cdi.utils.CdiUtil; +import org.librecms.contentsection.ContentItemRepository; + +import java.io.Serializable; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class SciDepartmentIdResolver implements Serializable, ObjectIdResolver { + + private static final long serialVersionUID = 1L; + + @Override + public void bindItem( + final ObjectIdGenerator.IdKey idKey, + final Object object + ) { + // According to the Jackson JavaDoc, this method can be used to keep + // track of objects directly in a resolver implementation. We don't need + // this here therefore this method is empty. + } + + @Override + public Object resolveId(final ObjectIdGenerator.IdKey id) { + return CdiUtil + .createCdiUtil() + .findBean(ContentItemRepository.class) + .findByUuid(id.key.toString(), SciDepartment.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No SciDepartment with UUID %s found in the datbase.", + id.key.toString() + ) + ) + ); + } + + @Override + public ObjectIdResolver newForDeserialization(final Object context) { + return new SciDepartmentIdResolver(); + } + + @Override + public boolean canUseFor(final ObjectIdResolver resolverType) { + return resolverType instanceof SciDepartmentIdResolver; + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentModule.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentModule.java new file mode 100644 index 0000000..2ba9218 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentModule.java @@ -0,0 +1,46 @@ +package org.scientificcms.contenttypes.scidepartment; + +import org.libreccm.modules.CcmModule; +import org.libreccm.modules.InitEvent; +import org.libreccm.modules.InstallEvent; +import org.libreccm.modules.RequiredModule; +import org.libreccm.modules.ShutdownEvent; +import org.libreccm.modules.UnInstallEvent; +import org.librecms.contenttypes.ContentTypes; + +/** + * + * @author Jens Pelzetter + */ +@org.libreccm.modules.Module( + requiredModules = { + @RequiredModule(module = org.libreccm.core.CcmCore.class), + @RequiredModule(module = org.librecms.Cms.class) + } +) +@ContentTypes({ + SciDepartment.class +}) +public class SciDepartmentModule implements CcmModule { + + @Override + public void install(final InstallEvent event) { + //ToDo Create initial data for the module if neccessary + } + + @Override + public void init(final InitEvent event) { + //ToDo Add initialisation logic necessary for your module + } + + @Override + public void shutdown(final ShutdownEvent event) { + //ToDo Add shutdown logic if necessary + } + + @Override + public void uninstall(final UnInstallEvent event) { + //ToDo Remove module data + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentCreateStep.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentCreateStep.java new file mode 100644 index 0000000..1978b4e --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentCreateStep.java @@ -0,0 +1,45 @@ +package org.scientificcms.contenttypes.scidepartment.ui; + +import org.librecms.ui.contentsections.documents.AbstractMvcDocumentCreateStep; +import org.scientificcms.contenttypes.scidepartment.SciDepartment; + +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciDepartmentCreateStep") +public class SciDepartmentCreateStep + extends AbstractMvcDocumentCreateStep{ + + @Override + public String showCreateStep() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public String createItem(Map maps) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public String getDocumentType() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public String getDescription() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public String getBundle() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentDescriptionStep.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentDescriptionStep.java new file mode 100644 index 0000000..0342ed8 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentDescriptionStep.java @@ -0,0 +1,26 @@ +package org.scientificcms.contenttypes.scidepartment.ui; + +import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.scientificcms.contenttypes.scidepartment.SciDepartment; + +import javax.enterprise.context.RequestScoped; +import javax.mvc.Controller; +import javax.ws.rs.Path; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "scidepartment-description") +@Controller +@MvcAuthoringStepDef( + bundle = SciDepartmentStepsConstants.BUNDLE, + descriptionKey = "authoringsteps.description.description", + labelKey = "authoringsteps.description.label", + supportedDocumentType = SciDepartment.class +) +public class SciDepartmentDescriptionStep { + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentExtendedPropertiesStep.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentExtendedPropertiesStep.java new file mode 100644 index 0000000..2de024b --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentExtendedPropertiesStep.java @@ -0,0 +1,26 @@ +package org.scientificcms.contenttypes.scidepartment.ui; + +import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.scientificcms.contenttypes.scidepartment.SciDepartment; + +import javax.enterprise.context.RequestScoped; +import javax.mvc.Controller; +import javax.ws.rs.Path; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "scidepartment-extendedproperties") +@Controller +@MvcAuthoringStepDef( + bundle = SciDepartmentStepsConstants.BUNDLE, + descriptionKey = "authoringsteps.extendedproperties.description", + labelKey = "authoringsteps.extendedproperties.label", + supportedDocumentType = SciDepartment.class +) +public class SciDepartmentExtendedPropertiesStep { + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentPropertiesStep.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentPropertiesStep.java new file mode 100644 index 0000000..9092fb3 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentPropertiesStep.java @@ -0,0 +1,26 @@ +package org.scientificcms.contenttypes.scidepartment.ui; + +import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.scientificcms.contenttypes.scidepartment.SciDepartment; + +import javax.enterprise.context.RequestScoped; +import javax.mvc.Controller; +import javax.ws.rs.Path; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "scidepartment-basicproperties") +@Controller +@MvcAuthoringStepDef( + bundle = SciDepartmentStepsConstants.BUNDLE, + descriptionKey = "authoringsteps.basicproperties.description", + labelKey = "authoringsteps.basicproperties.label", + supportedDocumentType = SciDepartment.class +) +public class SciDepartmentPropertiesStep { + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentStepsConstants.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentStepsConstants.java new file mode 100644 index 0000000..9a0b90d --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ui/SciDepartmentStepsConstants.java @@ -0,0 +1,16 @@ +package org.scientificcms.contenttypes.scidepartment.ui; + +/** + * + * @author Jens Pelzetter + */ +public final class SciDepartmentStepsConstants { + + private SciDepartmentStepsConstants() { + // Nothing + } + + public static final String BUNDLE + = "org.scientificcms.contenttypes.scidepartment.ui.SciDepartmentBundle"; + +} diff --git a/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment.properties b/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment.properties new file mode 100644 index 0000000..85689ad --- /dev/null +++ b/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment.properties @@ -0,0 +1,3 @@ + +label=Department +description=Describes a department. diff --git a/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment_de.properties b/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment_de.properties new file mode 100644 index 0000000..15c3876 --- /dev/null +++ b/sci-types-department/src/main/resources/org/scientificcms/contenttypes/SciDepartment_de.properties @@ -0,0 +1,3 @@ + +label=Abteillung +description=Beschreibung einer Abteilung oder eines Lehrstuhls. diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectRepository.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectRepository.java index 030a9b1..8420cfb 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectRepository.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectRepository.java @@ -11,7 +11,6 @@ import org.librecms.contentsection.ContentItemRepository; import java.io.Serializable; import java.time.LocalDate; import java.util.List; -import java.util.Optional; import javax.enterprise.context.RequestScoped; import javax.inject.Inject;