From fbb36ae9d53dde366781552068a1ad22151bca95 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sun, 16 Aug 2020 12:40:41 +0200 Subject: [PATCH] created concept of auto load macros, these are macro files which are loaded automatically on startup and can be used in any template changed assignable post config to be a full emote instead --- .../AssignableRolePlaceServiceBean.java | 2 +- .../templates/AssignablePostConfigRole.java | 6 ++--- .../config/FreemarkerConfiguration.java | 11 +++++++++ .../repository/AutoLoadMacroRepository.java | 9 +++++++ .../AutoLoadMacroManagementServiceBean.java | 20 ++++++++++++++++ .../migrations/1.0-templating/collection.xml | 1 + .../templating-seedData/auto_load_macro.xml | 18 ++++++++++++++ .../templating-seedData/data.xml | 10 ++++++++ .../templating-tables/auto_load_macro.xml | 21 ++++++++++++++++ .../templating-tables/tables.xml | 1 + .../model/database/AutoLoadMacro.java | 24 +++++++++++++++++++ .../AutoLoadMacroManagementService.java | 9 +++++++ 12 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/repository/AutoLoadMacroRepository.java create mode 100644 abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementServiceBean.java create mode 100644 abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/auto_load_macro.xml create mode 100644 abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/data.xml create mode 100644 abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/auto_load_macro.xml create mode 100644 abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/model/database/AutoLoadMacro.java create mode 100644 abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementService.java diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceServiceBean.java b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceServiceBean.java index b75c73906..b38ed734a 100644 --- a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceServiceBean.java +++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceServiceBean.java @@ -510,7 +510,7 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic AssignablePostConfigRole postRole = AssignablePostConfigRole .builder() .description(role.getDescription()) - .emote(jdaEmoteForRole) + .emote(FullEmote.builder().fakeEmote(emoteForRole).emote(jdaEmoteForRole).build()) .position(role.getPosition()) .awardedRole(jdaRole) .build(); diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostConfigRole.java b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostConfigRole.java index 4b90c7e8b..64f67e2d0 100644 --- a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostConfigRole.java +++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostConfigRole.java @@ -1,21 +1,19 @@ package dev.sheldan.abstracto.assignableroles.models.templates; -import dev.sheldan.abstracto.core.models.database.ARole; +import dev.sheldan.abstracto.core.models.FullEmote; import lombok.Builder; import lombok.Getter; import lombok.Setter; -import net.dv8tion.jda.api.entities.Emote; import net.dv8tion.jda.api.entities.Role; @Getter @Setter @Builder public class AssignablePostConfigRole { - private Emote emote; private String description; private Integer position; private Boolean inline; - private ARole role; + private FullEmote emote; private Role awardedRole; } diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/config/FreemarkerConfiguration.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/config/FreemarkerConfiguration.java index 72a8eae9b..3b2b726db 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/config/FreemarkerConfiguration.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/config/FreemarkerConfiguration.java @@ -4,6 +4,8 @@ import dev.sheldan.abstracto.templating.loading.DatabaseTemplateLoader; import dev.sheldan.abstracto.templating.methods.DurationMethod; import dev.sheldan.abstracto.templating.methods.DateMethod; import dev.sheldan.abstracto.templating.methods.SafeFieldIterations; +import dev.sheldan.abstracto.templating.model.database.AutoLoadMacro; +import dev.sheldan.abstracto.templating.service.management.AutoLoadMacroManagementService; import freemarker.template.Configuration; import freemarker.template.TemplateException; import org.springframework.beans.factory.annotation.Autowired; @@ -11,7 +13,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; import java.io.IOException; +import java.util.Arrays; +import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; /** * Configuration bean used to provide the {@link Configuration} bean to the spring context. @@ -31,6 +36,9 @@ public class FreemarkerConfiguration { @Autowired private SafeFieldIterations safeFieldIterations; + @Autowired + private AutoLoadMacroManagementService macroManagementService; + /** * Creates a {@link Configuration} bean with the appropriate configuration which includes: * The correct compatibility version and the provided formatter methods to be used in the templates. @@ -45,6 +53,9 @@ public class FreemarkerConfiguration { configuration.setSharedVariable("fmtDuration", durationMethod); configuration.setSharedVariable("formatDate", instantMethod); configuration.setSharedVariable("safeFieldLength", safeFieldIterations); + List macrosToLoad = macroManagementService.loadAllMacros().stream() + .map(AutoLoadMacro::getKey).collect(Collectors.toList()); + configuration.setAutoIncludes(macrosToLoad); configuration.setEncoding(Locale.getDefault(), "utf-8"); // needed to support default methods in interfaces configuration.setIncompatibleImprovements(Configuration.VERSION_2_3_29); diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/repository/AutoLoadMacroRepository.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/repository/AutoLoadMacroRepository.java new file mode 100644 index 000000000..46c62e34c --- /dev/null +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/repository/AutoLoadMacroRepository.java @@ -0,0 +1,9 @@ +package dev.sheldan.abstracto.templating.repository; + +import dev.sheldan.abstracto.templating.model.database.AutoLoadMacro; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AutoLoadMacroRepository extends JpaRepository { +} diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementServiceBean.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementServiceBean.java new file mode 100644 index 000000000..49c4396ad --- /dev/null +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementServiceBean.java @@ -0,0 +1,20 @@ +package dev.sheldan.abstracto.templating.service.management; + +import dev.sheldan.abstracto.templating.model.database.AutoLoadMacro; +import dev.sheldan.abstracto.templating.repository.AutoLoadMacroRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class AutoLoadMacroManagementServiceBean implements AutoLoadMacroManagementService { + + @Autowired + private AutoLoadMacroRepository repository; + + @Override + public List loadAllMacros() { + return repository.findAll(); + } +} diff --git a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/collection.xml b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/collection.xml index 8776a71ff..1b878676f 100644 --- a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/collection.xml +++ b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/collection.xml @@ -7,4 +7,5 @@ http://www.liquibase.org/xml/ns/dbchangelog-ext ../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/pro ../dbchangelog-3.8.xsd" > + \ No newline at end of file diff --git a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/auto_load_macro.xml b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/auto_load_macro.xml new file mode 100644 index 000000000..2e7b1cf6d --- /dev/null +++ b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/auto_load_macro.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/data.xml b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/data.xml new file mode 100644 index 000000000..3b141fdfe --- /dev/null +++ b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-seedData/data.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/auto_load_macro.xml b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/auto_load_macro.xml new file mode 100644 index 000000000..9eea27075 --- /dev/null +++ b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/auto_load_macro.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/tables.xml b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/tables.xml index a27f40853..6421c1623 100644 --- a/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/tables.xml +++ b/abstracto-application/templating/templating-impl/src/main/resources/migrations/1.0-templating/templating-tables/tables.xml @@ -7,4 +7,5 @@ http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > + \ No newline at end of file diff --git a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/model/database/AutoLoadMacro.java b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/model/database/AutoLoadMacro.java new file mode 100644 index 000000000..a32b0428e --- /dev/null +++ b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/model/database/AutoLoadMacro.java @@ -0,0 +1,24 @@ +package dev.sheldan.abstracto.templating.model.database; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Builder +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "auto_load_macro") +@Getter +public class AutoLoadMacro { + + @Id + private String key; + + @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @PrimaryKeyJoinColumn + private Template template; +} diff --git a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementService.java b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementService.java new file mode 100644 index 000000000..d676e9feb --- /dev/null +++ b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/service/management/AutoLoadMacroManagementService.java @@ -0,0 +1,9 @@ +package dev.sheldan.abstracto.templating.service.management; + +import dev.sheldan.abstracto.templating.model.database.AutoLoadMacro; + +import java.util.List; + +public interface AutoLoadMacroManagementService { + List loadAllMacros(); +}