diff --git a/pom.xml b/pom.xml index ab26dac6..1019d98a 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,9 @@ 2.8.2 2.17 4.1.3 + 3.0.0 + + ${main.basedir}/modules/Fading Suns Revised Edition/json diff --git a/think-machine-random/pom.xml b/think-machine-random/pom.xml index 489561e8..c00b4646 100644 --- a/think-machine-random/pom.xml +++ b/think-machine-random/pom.xml @@ -13,6 +13,8 @@ ${basedir}/.. + ${main.basedir}/think-machine-random/target/classes/Fading Suns Revised Edition/json + @@ -29,7 +31,48 @@ false + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + compile + + java + + + + + com.softwaremagico.tm.cache.FactoryCacheGenerator + false + true + + + + maven-antrun-plugin + ${maven-antrun-plugin.version} + + + compile + + false + + + + + + + + + run + + + + + diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/cache/FactoryCacheGenerator.java b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/FactoryCacheGenerator.java new file mode 100644 index 00000000..0ae5a1db --- /dev/null +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/FactoryCacheGenerator.java @@ -0,0 +1,58 @@ +package com.softwaremagico.tm.cache; + +/*- + * #%L + * Think Machine (Rules) + * %% + * Copyright (C) 2017 - 2021 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.file.modules.ModuleManager; +import com.softwaremagico.tm.log.ConfigurationLog; +import com.softwaremagico.tm.log.MachineModulesLog; +import com.softwaremagico.tm.log.MachineXmlReaderLog; +import com.softwaremagico.tm.random.predefined.characters.NpcFactory; +import org.reflections.Reflections; +import org.slf4j.LoggerFactory; + +public class FactoryCacheGenerator { + + public static void main(String[] args) throws InvalidXmlElementException { + disableLogs(); + final NpcFactoryCacheLoader npcFactoryCacheLoader = new NpcFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + npcFactoryCacheLoader.save(NpcFactory.class, moduleName, NpcFactory.getInstance().getTranslatorFile()); + } + } + + private static void disableLogs() { + Logger logger = (Logger) LoggerFactory.getLogger(MachineXmlReaderLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(ConfigurationLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(MachineModulesLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(Reflections.class); + logger.setLevel(Level.OFF); + } +} diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/cache/ModuleLoaderEnforcer.java b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/ModuleLoaderEnforcer.java new file mode 100644 index 00000000..88e59e7b --- /dev/null +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/ModuleLoaderEnforcer.java @@ -0,0 +1,74 @@ +package com.softwaremagico.tm.cache; + +/*- + * #%L + * Think Machine (Random Generator) + * %% + * Copyright (C) 2017 - 2021 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.log.MachineLog; +import com.softwaremagico.tm.random.party.RandomPartyFactory; +import com.softwaremagico.tm.random.predefined.characters.NpcFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicInteger; + +public class ModuleLoaderEnforcer { + + public static int loadAllFactories(String language, String moduleName) { + final long startTime = System.nanoTime(); + final AtomicInteger loadedElements = new AtomicInteger(0); + + loadedElements.addAndGet(com.softwaremagico.tm.file.modules.ModuleLoaderEnforcer.loadAllFactories(language, moduleName)); + + List> futures = new ArrayList<>(); + + futures.add(CompletableFuture.runAsync(() -> { + try { + loadedElements.addAndGet(RandomPartyFactory.getInstance().getElements(language, moduleName).size()); + } catch (InvalidXmlElementException e) { + MachineLog.errorMessage(com.softwaremagico.tm.file.modules.ModuleLoaderEnforcer.class.getName(), e); + } + })); + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + futures = new ArrayList<>(); + + //Second level + futures.add(CompletableFuture.runAsync(() -> { + try { + loadedElements.addAndGet(NpcFactory.getInstance().getElements(language, moduleName).size()); + } catch (InvalidXmlElementException e) { + MachineLog.errorMessage(com.softwaremagico.tm.file.modules.ModuleLoaderEnforcer.class.getName(), e); + } + })); + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + + + final long duration = (System.nanoTime() - startTime); + MachineLog.info(com.softwaremagico.tm.file.modules.ModuleLoaderEnforcer.class.getName(), + "All factories loaded! Total {} elements loaded in {} milliseconds.", + loadedElements.get(), duration / 1000000); + return loadedElements.get(); + } +} diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryCacheLoader.java b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryCacheLoader.java new file mode 100644 index 00000000..8f79d958 --- /dev/null +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryCacheLoader.java @@ -0,0 +1,98 @@ +package com.softwaremagico.tm.cache; + +/*- + * #%L + * Think Machine (Rules) + * %% + * Copyright (C) 2017 - 2021 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.google.gson.GsonBuilder; +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.character.benefices.AvailableBenefice; +import com.softwaremagico.tm.character.benefices.BeneficeDefinition; +import com.softwaremagico.tm.character.blessings.Blessing; +import com.softwaremagico.tm.character.characteristics.Characteristic; +import com.softwaremagico.tm.character.characteristics.CharacteristicDefinition; +import com.softwaremagico.tm.character.equipment.DamageType; +import com.softwaremagico.tm.character.equipment.armours.Armour; +import com.softwaremagico.tm.character.equipment.shields.Shield; +import com.softwaremagico.tm.character.equipment.weapons.Accessory; +import com.softwaremagico.tm.character.equipment.weapons.Ammunition; +import com.softwaremagico.tm.character.equipment.weapons.Weapon; +import com.softwaremagico.tm.character.factions.Faction; +import com.softwaremagico.tm.character.occultism.OccultismPath; +import com.softwaremagico.tm.character.races.Race; +import com.softwaremagico.tm.character.skills.AvailableSkill; +import com.softwaremagico.tm.json.*; +import com.softwaremagico.tm.json.factories.FactoryElements; +import com.softwaremagico.tm.json.factories.cache.FactoryCacheLoader; +import com.softwaremagico.tm.json.factories.cache.InvalidCacheFile; +import com.softwaremagico.tm.random.predefined.characters.Npc; +import com.softwaremagico.tm.random.predefined.characters.NpcFactory; +import com.softwaremagico.tm.random.selectors.IRandomPreference; + +import java.util.List; + +public class NpcFactoryCacheLoader extends FactoryCacheLoader { + + @Override + public List load(String language, String moduleName) { + try { + final FactoryElements factoryElements = load(NpcFactory.class, NpcFactoryElements.class, language, moduleName); + if (factoryElements != null && !factoryElements.getElements().isEmpty()) { + return factoryElements.getElements(); + } + } catch (InvalidCacheFile invalidCacheFile) { + // Not cache file on this module. + } + return null; + } + + @Override + protected FactoryElements getFactoryElements(String moduleName, String language) throws InvalidXmlElementException { + return new NpcFactoryElements(language, moduleName); + } + + @Override + protected GsonBuilder initGsonBuilder(final String language, final String moduleName) { + final GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.setPrettyPrinting(); + gsonBuilder.registerTypeAdapter(AvailableSkill.class, new AvailableSkillAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(CharacteristicDefinition.class, new CharacteristicDefinitionAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Characteristic.class, new CharacteristicAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Accessory.class, new AccessoryAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(DamageType.class, new DamageTypeAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Ammunition.class, new AmmunitionAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Race.class, new RaceAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Faction.class, new FactionAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Weapon.class, new WeaponAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Armour.class, new ArmourAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Shield.class, new ShieldAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(BeneficeDefinition.class, new BeneficeDefinitionAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(AvailableBenefice.class, new AvailableBeneficeAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(Blessing.class, new BlessingAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(OccultismPath.class, new OccultismPathAdapter(language, moduleName)); + gsonBuilder.registerTypeAdapter(IRandomPreference.class, new RandomPreferenceAdapter()); + return gsonBuilder; + } + + +} diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryElements.java b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryElements.java new file mode 100644 index 00000000..eab2c83e --- /dev/null +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/NpcFactoryElements.java @@ -0,0 +1,57 @@ +package com.softwaremagico.tm.cache; + +/*- + * #%L + * Think Machine (Rules) + * %% + * Copyright (C) 2017 - 2021 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.json.factories.FactoryElements; +import com.softwaremagico.tm.json.factories.cache.FactoryCacheLoader; +import com.softwaremagico.tm.random.predefined.characters.Npc; +import com.softwaremagico.tm.random.predefined.characters.NpcFactory; + +import java.sql.Timestamp; +import java.util.Date; + +public class NpcFactoryElements extends FactoryElements { + + public NpcFactoryElements() { + super(); + creationTime = new Timestamp(new Date().getTime()); + } + + public NpcFactoryElements(String language, String moduleName) throws InvalidXmlElementException { + this(); + creationTime = new Timestamp(new Date().getTime()); + + //Skip Json generation in loop. + final NpcFactory npcFactory = new NpcFactory() { + @Override + public FactoryCacheLoader getFactoryCacheLoader() { + return null; + } + }; + + setElements(npcFactory.getElements(language, moduleName)); + } +} diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/cache/RandomPreferenceAdapter.java b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/RandomPreferenceAdapter.java new file mode 100644 index 00000000..3b303fea --- /dev/null +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/cache/RandomPreferenceAdapter.java @@ -0,0 +1,67 @@ +package com.softwaremagico.tm.cache; + +/*- + * #%L + * Think Machine (Core) + * %% + * Copyright (C) 2017 - 2018 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.google.gson.*; +import com.softwaremagico.tm.random.selectors.IRandomPreference; +import org.reflections.Reflections; + +import java.lang.reflect.Type; +import java.util.Set; + +public class RandomPreferenceAdapter implements JsonSerializer, JsonDeserializer { + private static final String PREFERENCE = "preference"; + private static final String VALUE = "value"; + private final Set> classes; + + public RandomPreferenceAdapter() { + final Reflections reflections = new Reflections("com.softwaremagico.tm"); + classes = reflections.getSubTypesOf(IRandomPreference.class); + } + + + @Override + public JsonElement serialize(IRandomPreference element, Type elementType, JsonSerializationContext jsonSerializationContext) { + final JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty(PREFERENCE, element.getClass().getSimpleName()); + jsonObject.addProperty(VALUE, element.name()); + return jsonObject; + } + + @Override + public IRandomPreference deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + final JsonObject jsonObject = jsonElement.getAsJsonObject(); + for (final Class preference : classes) { + if (preference.getSimpleName().equals(jsonObject.get(PREFERENCE).getAsString())) { + for (final Object constant : preference.getEnumConstants()) { + if (constant.toString().equals(jsonObject.get(VALUE).getAsString())) { + return (IRandomPreference) constant; + } + } + } + } + return null; + } +} diff --git a/think-machine-random/src/main/java/com/softwaremagico/tm/random/selectors/IRandomPreference.java b/think-machine-random/src/main/java/com/softwaremagico/tm/random/selectors/IRandomPreference.java index dd384338..2c06ae05 100644 --- a/think-machine-random/src/main/java/com/softwaremagico/tm/random/selectors/IRandomPreference.java +++ b/think-machine-random/src/main/java/com/softwaremagico/tm/random/selectors/IRandomPreference.java @@ -32,5 +32,7 @@ public interface IRandomPreference extends Comparable { String name(); + + IRandomPreference getDefault(); } diff --git a/think-machine-random/src/test/java/com/softwaremagico/tm/json/JsonCacheLoaderTests.java b/think-machine-random/src/test/java/com/softwaremagico/tm/json/JsonCacheLoaderTests.java new file mode 100644 index 00000000..74083692 --- /dev/null +++ b/think-machine-random/src/test/java/com/softwaremagico/tm/json/JsonCacheLoaderTests.java @@ -0,0 +1,87 @@ +package com.softwaremagico.tm.json; + +/*- + * #%L + * Think Machine (Core) + * %% + * Copyright (C) 2017 - 2018 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.cache.NpcFactoryCacheLoader; +import com.softwaremagico.tm.file.PathManager; +import com.softwaremagico.tm.json.factories.cache.FactoryCacheLoader; +import com.softwaremagico.tm.random.predefined.characters.Npc; +import com.softwaremagico.tm.random.predefined.characters.NpcFactory; +import com.softwaremagico.tm.random.selectors.SpecializationPreferences; +import com.softwaremagico.tm.random.selectors.TechnologicalPreferences; +import org.junit.Assert; +import org.testng.annotations.Test; + +import java.time.Duration; +import java.time.Instant; +import java.util.List; + +@Test(groups = {"jsonCache"}) +public class JsonCacheLoaderTests { + private static final String LANGUAGE = "es"; + private static final int ITERATIONS = 5; + + @Test + public void loadNpcCache() { + NpcFactoryCacheLoader npcFactoryCacheLoader = new NpcFactoryCacheLoader(); + List npcs = npcFactoryCacheLoader.load(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER); + Assert.assertTrue(npcs.size() > 0); + //Check random configuration enums. + Npc alMalik = npcs.stream().filter(npc -> npc.getId().equals("alMalik")).findFirst().orElseThrow(AssertionError::new); + Assert.assertTrue(alMalik.getPreferences().contains(TechnologicalPreferences.FUTURIST)); + Assert.assertTrue(alMalik.getPreferences().contains(SpecializationPreferences.SPECIALIZED)); + } + + @Test() + public void checkNpcsImprovement() throws InvalidXmlElementException { + //Skip Json generation. + NpcFactory npcFactory = new NpcFactory() { + @Override + public FactoryCacheLoader getFactoryCacheLoader() { + return null; + } + }; + + + Instant start = Instant.now(); + for (int i = 0; i < ITERATIONS; i++) { + npcFactory.getElements(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER); + npcFactory.removeData(); + } + Instant end = Instant.now(); + Duration xmlMethod = Duration.between(start, end); + + start = Instant.now(); + for (int i = 0; i < ITERATIONS; i++) { + NpcFactoryCacheLoader npcFactoryCacheLoader = new NpcFactoryCacheLoader(); + Assert.assertTrue(npcFactoryCacheLoader.load(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER).size() > 0); + NpcFactory.getInstance().removeData(); + } + end = Instant.now(); + Duration jsonMethod = Duration.between(start, end); + Assert.assertTrue(jsonMethod.getNano() < xmlMethod.getNano()); + } +} diff --git a/think-machine-rules/pom.xml b/think-machine-rules/pom.xml index 6d288555..2933b8eb 100644 --- a/think-machine-rules/pom.xml +++ b/think-machine-rules/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 think-machine-rules jar @@ -14,13 +15,11 @@ ${basedir}/.. - ${main.basedir}/modules/Fading Suns Revised Edition/json - ${main.basedir}/think-machine-rules/target/classes/Fading Suns Revised Edition/json - 2.5.3 com.softwaremagico.tm.Main images/ThinkingMachine_logo.png - 3.0.0 + ${main.basedir}/think-machine-rules/target/classes/Fading Suns Revised Edition/json + @@ -58,7 +57,7 @@ - com.softwaremagico.tm.json.factories.cache.FactoryCacheLoader + com.softwaremagico.tm.json.factories.cache.FactoryCacheGenerator false true @@ -74,12 +73,12 @@ false - + - + - + diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/ArmourAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/ArmourAdapter.java index 2e116b50..c925a467 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/ArmourAdapter.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/ArmourAdapter.java @@ -24,8 +24,6 @@ * #L% */ -import java.lang.reflect.Type; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; @@ -34,9 +32,11 @@ import com.softwaremagico.tm.character.equipment.armours.ArmourFactory; import com.softwaremagico.tm.log.MachineLog; +import java.lang.reflect.Type; + public class ArmourAdapter extends ElementAdapter { - protected ArmourAdapter(String language, String moduleName) { + public ArmourAdapter(String language, String moduleName) { super(language, moduleName); } diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/AvailableBeneficeAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/AvailableBeneficeAdapter.java index 78382520..da7523d6 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/AvailableBeneficeAdapter.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/AvailableBeneficeAdapter.java @@ -24,8 +24,6 @@ * #L% */ -import java.lang.reflect.Type; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; @@ -34,9 +32,11 @@ import com.softwaremagico.tm.character.benefices.AvailableBeneficeFactory; import com.softwaremagico.tm.log.MachineLog; +import java.lang.reflect.Type; + public class AvailableBeneficeAdapter extends ElementAdapter { - protected AvailableBeneficeAdapter(String language, String moduleName) { + public AvailableBeneficeAdapter(String language, String moduleName) { super(language, moduleName); } diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BeneficeDefinitionAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BeneficeDefinitionAdapter.java new file mode 100644 index 00000000..cc42947d --- /dev/null +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BeneficeDefinitionAdapter.java @@ -0,0 +1,52 @@ +package com.softwaremagico.tm.json; + +/*- + * #%L + * Think Machine (Core) + * %% + * Copyright (C) 2017 - 2018 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.character.benefices.BeneficeDefinition; +import com.softwaremagico.tm.character.benefices.BeneficeDefinitionFactory; +import com.softwaremagico.tm.log.MachineLog; + +import java.lang.reflect.Type; + +public class BeneficeDefinitionAdapter extends ElementAdapter { + + public BeneficeDefinitionAdapter(String language, String moduleName) { + super(language, moduleName); + } + + @Override + public BeneficeDefinition deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + try { + return BeneficeDefinitionFactory.getInstance().getElement(super.getElementId(jsonElement), super.getLanguage(), super.getModuleName()); + } catch (InvalidXmlElementException e) { + MachineLog.errorMessage(this.getClass().getName(), e); + return null; + } + } +} diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BlessingAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BlessingAdapter.java index 906ab433..672d72c3 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BlessingAdapter.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/BlessingAdapter.java @@ -24,8 +24,6 @@ * #L% */ -import java.lang.reflect.Type; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; @@ -34,9 +32,11 @@ import com.softwaremagico.tm.character.blessings.BlessingFactory; import com.softwaremagico.tm.log.MachineLog; +import java.lang.reflect.Type; + public class BlessingAdapter extends ElementAdapter { - protected BlessingAdapter(String language, String moduleName) { + public BlessingAdapter(String language, String moduleName) { super(language, moduleName); } diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/CharacteristicAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/CharacteristicAdapter.java index 560e2be1..b86f4968 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/CharacteristicAdapter.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/CharacteristicAdapter.java @@ -35,7 +35,7 @@ public class CharacteristicAdapter extends ElementAdapter { private static final String VALUE = "value"; - protected CharacteristicAdapter(String language, String moduleName) { + public CharacteristicAdapter(String language, String moduleName) { super(language, moduleName); } diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/OccultismPathAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/OccultismPathAdapter.java new file mode 100644 index 00000000..c44fba3f --- /dev/null +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/OccultismPathAdapter.java @@ -0,0 +1,52 @@ +package com.softwaremagico.tm.json; + +/*- + * #%L + * Think Machine (Core) + * %% + * Copyright (C) 2017 - 2018 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.character.occultism.OccultismPath; +import com.softwaremagico.tm.character.occultism.OccultismPathFactory; +import com.softwaremagico.tm.log.MachineLog; + +import java.lang.reflect.Type; + +public class OccultismPathAdapter extends ElementAdapter { + + public OccultismPathAdapter(String language, String moduleName) { + super(language, moduleName); + } + + @Override + public OccultismPath deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + try { + return OccultismPathFactory.getInstance().getElement(super.getElementId(jsonElement), super.getLanguage(), super.getModuleName()); + } catch (InvalidXmlElementException e) { + MachineLog.errorMessage(this.getClass().getName(), e); + return null; + } + } +} diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/WeaponAdapter.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/WeaponAdapter.java index 09cf442c..748014b8 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/WeaponAdapter.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/WeaponAdapter.java @@ -24,8 +24,6 @@ * #L% */ -import java.lang.reflect.Type; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; @@ -34,9 +32,11 @@ import com.softwaremagico.tm.character.equipment.weapons.WeaponFactory; import com.softwaremagico.tm.log.MachineLog; +import java.lang.reflect.Type; + public class WeaponAdapter extends ElementAdapter { - protected WeaponAdapter(String language, String moduleName) { + public WeaponAdapter(String language, String moduleName) { super(language, moduleName); } diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheGenerator.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheGenerator.java new file mode 100644 index 00000000..28f705c5 --- /dev/null +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheGenerator.java @@ -0,0 +1,85 @@ +package com.softwaremagico.tm.json.factories.cache; + +/*- + * #%L + * Think Machine (Rules) + * %% + * Copyright (C) 2017 - 2021 Softwaremagico + * %% + * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero + * Valencia (Spain). + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; If not, see . + * #L% + */ + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import com.softwaremagico.tm.InvalidXmlElementException; +import com.softwaremagico.tm.character.benefices.BeneficeDefinitionFactory; +import com.softwaremagico.tm.character.blessings.BlessingFactory; +import com.softwaremagico.tm.character.equipment.armours.ArmourFactory; +import com.softwaremagico.tm.character.equipment.weapons.WeaponFactory; +import com.softwaremagico.tm.character.planets.PlanetFactory; +import com.softwaremagico.tm.character.skills.SkillsDefinitionsFactory; +import com.softwaremagico.tm.file.modules.ModuleManager; +import com.softwaremagico.tm.log.ConfigurationLog; +import com.softwaremagico.tm.log.MachineModulesLog; +import com.softwaremagico.tm.log.MachineXmlReaderLog; +import org.reflections.Reflections; +import org.slf4j.LoggerFactory; + +public class FactoryCacheGenerator { + + public static void main(String[] args) throws InvalidXmlElementException { + disableLogs(); + final WeaponsFactoryCacheLoader weaponsFactoryCacheLoader = new WeaponsFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + weaponsFactoryCacheLoader.save(WeaponFactory.class, moduleName, WeaponFactory.getInstance().getTranslatorFile()); + } + final ArmourFactoryCacheLoader armourFactoryCacheLoader = new ArmourFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + armourFactoryCacheLoader.save(ArmourFactory.class, moduleName, ArmourFactory.getInstance().getTranslatorFile()); + } + final SkillDefinitionsFactoryCacheLoader skillDefinitionsFactoryCacheLoader = new SkillDefinitionsFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + skillDefinitionsFactoryCacheLoader.save(SkillsDefinitionsFactory.class, moduleName, SkillsDefinitionsFactory.getInstance().getTranslatorFile()); + } + final BlessingFactoryCacheLoader blessingFactoryCacheLoader = new BlessingFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + blessingFactoryCacheLoader.save(BlessingFactory.class, moduleName, BlessingFactory.getInstance().getTranslatorFile()); + } + final BeneficeDefinitionFactoryCacheLoader beneficeDefinitionFactoryCacheLoader = new BeneficeDefinitionFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + beneficeDefinitionFactoryCacheLoader.save(BeneficeDefinitionFactory.class, moduleName, + BeneficeDefinitionFactory.getInstance().getTranslatorFile()); + } + final PlanetFactoryCacheLoader planetFactoryCacheLoader = new PlanetFactoryCacheLoader(); + for (final String moduleName : ModuleManager.getAvailableModules()) { + planetFactoryCacheLoader.save(PlanetFactory.class, moduleName, + PlanetFactory.getInstance().getTranslatorFile()); + } + } + + private static void disableLogs() { + Logger logger = (Logger) LoggerFactory.getLogger(MachineXmlReaderLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(ConfigurationLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(MachineModulesLog.class); + logger.setLevel(Level.OFF); + logger = (Logger) LoggerFactory.getLogger(Reflections.class); + logger.setLevel(Level.OFF); + } +} diff --git a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheLoader.java b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheLoader.java index abe85bbb..25841a8d 100644 --- a/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheLoader.java +++ b/think-machine-rules/src/main/java/com/softwaremagico/tm/json/factories/cache/FactoryCacheLoader.java @@ -24,30 +24,16 @@ * #L% */ -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.softwaremagico.tm.Element; import com.softwaremagico.tm.InvalidXmlElementException; import com.softwaremagico.tm.XmlFactory; -import com.softwaremagico.tm.character.benefices.BeneficeDefinitionFactory; -import com.softwaremagico.tm.character.blessings.BlessingFactory; -import com.softwaremagico.tm.character.equipment.armours.ArmourFactory; -import com.softwaremagico.tm.character.equipment.weapons.WeaponFactory; -import com.softwaremagico.tm.character.planets.PlanetFactory; -import com.softwaremagico.tm.character.skills.SkillsDefinitionsFactory; import com.softwaremagico.tm.file.PathManager; -import com.softwaremagico.tm.file.modules.ModuleManager; import com.softwaremagico.tm.json.factories.FactoryElements; import com.softwaremagico.tm.language.Language; import com.softwaremagico.tm.language.LanguagePool; -import com.softwaremagico.tm.log.ConfigurationLog; import com.softwaremagico.tm.log.MachineLog; -import com.softwaremagico.tm.log.MachineModulesLog; -import com.softwaremagico.tm.log.MachineXmlReaderLog; -import org.reflections.Reflections; -import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -65,47 +51,6 @@ public abstract class FactoryCacheLoader> { protected static final String GSON_TEMPORAL_FOLDER = "json"; - public static void main(String[] args) throws InvalidXmlElementException { - disableLogs(); - final WeaponsFactoryCacheLoader weaponsFactoryCacheLoader = new WeaponsFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - weaponsFactoryCacheLoader.save(WeaponFactory.class, moduleName, WeaponFactory.getInstance().getTranslatorFile()); - } - final ArmourFactoryCacheLoader armourFactoryCacheLoader = new ArmourFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - armourFactoryCacheLoader.save(ArmourFactory.class, moduleName, ArmourFactory.getInstance().getTranslatorFile()); - } - final SkillDefinitionsFactoryCacheLoader skillDefinitionsFactoryCacheLoader = new SkillDefinitionsFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - skillDefinitionsFactoryCacheLoader.save(SkillsDefinitionsFactory.class, moduleName, SkillsDefinitionsFactory.getInstance().getTranslatorFile()); - } - final BlessingFactoryCacheLoader blessingFactoryCacheLoader = new BlessingFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - blessingFactoryCacheLoader.save(BlessingFactory.class, moduleName, BlessingFactory.getInstance().getTranslatorFile()); - } - final BeneficeDefinitionFactoryCacheLoader beneficeDefinitionFactoryCacheLoader = new BeneficeDefinitionFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - beneficeDefinitionFactoryCacheLoader.save(BeneficeDefinitionFactory.class, moduleName, - BeneficeDefinitionFactory.getInstance().getTranslatorFile()); - } - final PlanetFactoryCacheLoader planetFactoryCacheLoader = new PlanetFactoryCacheLoader(); - for (final String moduleName : ModuleManager.getAvailableModules()) { - planetFactoryCacheLoader.save(PlanetFactory.class, moduleName, - PlanetFactory.getInstance().getTranslatorFile()); - } - } - - private static void disableLogs() { - Logger logger = (Logger) LoggerFactory.getLogger(MachineXmlReaderLog.class); - logger.setLevel(Level.OFF); - logger = (Logger) LoggerFactory.getLogger(ConfigurationLog.class); - logger.setLevel(Level.OFF); - logger = (Logger) LoggerFactory.getLogger(MachineModulesLog.class); - logger.setLevel(Level.OFF); - logger = (Logger) LoggerFactory.getLogger(Reflections.class); - logger.setLevel(Level.OFF); - } - protected static String getJsonContent(String moduleName, String language, String file) throws InvalidCacheFile { return readFile(getPath(moduleName, language, file)); }