Updated injectors for all commands to call service layers

Added Lang Repository injectors to commands
Converted Lang to Repository and injected it.
Registry for commands is still completely broken and needs to be implemented correctly.
Converted DataStorage to DataHandler as it is only reading and writing data
Injected InfoLogger & updated calls accordingly
Injected DataStorage (DataHandler) & calls accordingly
Injected DataColl.
Moved Lang to a repository and injected it accordingly.
Cleaned up file structure and moved POJO's to entities
Cleaned up Core file as a lot of the singletons are no longer needed due to injection
Fixed Minor issue in Desti where it got revert
Updated CreatePortalSubCommand
No idea where to put WarpEffectREgistry, maybe repository?
Registry is very screwy right now it looks like it may have gotten corrupted by hd fail  Ignore it for now.
This commit is contained in:
Rezel 2020-08-08 04:27:42 -06:00
parent 43ead07389
commit b540eebce9
20 changed files with 84 additions and 194 deletions

View File

@ -1,14 +0,0 @@
package com.sekwah.advancedportals.core;
import org.bukkit.Bukkit;
import java.io.File;
public class AdvancedPortalBuilder {
private Bukkit spigot;
private File dataFolder;
private static AdvancedPortalBuilder create() {
return new AdvancedPortalBuilder();
}
}

View File

@ -8,7 +8,6 @@ import com.sekwah.advancedportals.core.config.RepositoryModule;
import com.sekwah.advancedportals.core.connector.info.DataCollector;
import com.sekwah.advancedportals.core.util.DataHandler;
import com.sekwah.advancedportals.core.util.TagRegistry;
import com.sekwah.advancedportals.core.registry.WarpEffectRegistry;
import com.sekwah.advancedportals.core.repository.ILangRepository;
import com.sekwah.advancedportals.core.util.InfoLogger;
@ -22,7 +21,6 @@ public class AdvancedPortalsCore {
public String test;
private final Injector injector = Guice.createInjector(new RepositoryModule());
private final ILangRepository langRepository;
private WarpEffectRegistry warpEffectRegistry = injector.getInstance(WarpEffectRegistry.class);
private TagRegistry<AdvancedPortal> portalTagRegistry;
private TagRegistry<Destination> destiTagRegistry;
private InfoLogger infoLogger;
@ -90,8 +88,6 @@ public class AdvancedPortalsCore {
private void onEnable() {
this.portalTagRegistry = new TagRegistry<>();
this.destiTagRegistry = new TagRegistry<>();
//DataaStore copy default file moved to initialization
}
/**

View File

@ -1,35 +1,41 @@
package com.sekwah.advancedportals.core.commands.subcommands.desti;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.api.commands.SubCommand;
import com.sekwah.advancedportals.core.api.destination.Destination;
import com.sekwah.advancedportals.core.data.DataTag;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.connector.container.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.container.PlayerContainer;
import com.sekwah.advancedportals.core.entities.DataTag;
import com.sekwah.advancedportals.core.entities.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.entities.containers.PlayerContainer;
import com.sekwah.advancedportals.core.repository.ILangRepository;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.TagReader;
import java.util.ArrayList;
import java.util.List;
public class CreateDestiSubCommand implements SubCommand {
@Inject
private DestinationServices destinationServices;
@Inject
private ILangRepository langRepository;
@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
if(args.length > 1) {
PlayerContainer player = sender.getPlayerContainer();
if(player == null) {
sender.sendMessage(Lang.translateColor("messageprefix.negative") + Lang.translate("command.createdesti.console"));
sender.sendMessage(langRepository.translateColor("messageprefix.negative") + langRepository.translate("command.createdesti.console"));
return;
}
ArrayList<DataTag> destiTags = TagReader.getTagsFromArgs(args);
Destination desti = AdvancedPortalsCore.getDestinationServices().createDesti(args[1], player, player.getLoc(), destiTags);
Destination desti = destinationServices.createDesti(args[1], player, player.getLoc(), destiTags);
if(desti != null) {
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor("command.createdesti.complete"));
sender.sendMessage(Lang.translateColor("command.create.tags"));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor("command.createdesti.complete"));
sender.sendMessage(langRepository.translateColor("command.create.tags"));
ArrayList<DataTag> destiArgs = desti.getArgs();
if(destiArgs.size() == 0) {
sender.sendMessage(Lang.translateColor("desti.info.noargs"));
sender.sendMessage(langRepository.translateColor("desti.info.noargs"));
}
else {
for (DataTag tag : destiArgs) {
@ -38,11 +44,11 @@ public class CreateDestiSubCommand implements SubCommand {
}
}
else {
sender.sendMessage(Lang.translateColor("messageprefix.negative") + Lang.translateColor("command.createdesti.error"));
sender.sendMessage(langRepository.translateColor("messageprefix.negative") + langRepository.translateColor("command.createdesti.error"));
}
}
else {
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translate("command.error.noname"));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translate("command.error.noname"));
}
}
@ -58,11 +64,11 @@ public class CreateDestiSubCommand implements SubCommand {
@Override
public String getBasicHelpText() {
return Lang.translate("command.createdesti.help");
return langRepository.translate("command.createdesti.help");
}
@Override
public String getDetailedHelpText() {
return Lang.translate("command.createdesti.detailedhelp");
return langRepository.translate("command.createdesti.detailedhelp");
}
}

View File

@ -1,12 +1,16 @@
package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.api.commands.SubCommand;
import com.sekwah.advancedportals.core.api.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.data.DataTag;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.connector.container.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.container.PlayerContainer;
import com.sekwah.advancedportals.core.entities.DataTag;
import com.sekwah.advancedportals.core.entities.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.entities.containers.PlayerContainer;
import com.sekwah.advancedportals.core.repository.ILangRepository;
import com.sekwah.advancedportals.core.repository.IPortalRepository;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.TagReader;
import java.util.ArrayList;
@ -14,33 +18,45 @@ import java.util.Arrays;
import java.util.List;
public class CreatePortalSubCommand implements SubCommand {
@Inject
private ILangRepository langRepository;
@Inject
private PortalServices portalServices;
@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
if(args.length > 1) {
PlayerContainer player = sender.getPlayerContainer();
if(player == null) {
sender.sendMessage(Lang.translateColor("messageprefix.negative") + Lang.translate("command.create.console"));
sender.sendMessage(langRepository.translateColor("messageprefix.negative") + langRepository.translate("command.create.console"));
return;
}
ArrayList<DataTag> portalTags = TagReader.getTagsFromArgs(args);
AdvancedPortal portal = AdvancedPortalsCore.getPortalServices().createPortal(args[1], player, portalTags);
AdvancedPortal portal = portalServices.createPortal(args[1], player, portalTags);
if(portal != null) {
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor("command.create.complete"));
sender.sendMessage(Lang.translateColor("command.create.tags"));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor("command.create.complete"));
sender.sendMessage(langRepository.translateColor("command.create.tags"));
sender.sendMessage("\u00A7a" + "triggerBlock\u00A77:\u00A7e" + Arrays.toString(portal.getTriggerBlocks()));
for (DataTag tag: portal.getArgs()) {
sender.sendMessage("\u00A7a" + tag.NAME + "\u00A77:\u00A7e" + tag.VALUE);
}
}
sender.sendMessage(Lang.translateColor("messageprefix.negative") + Lang.translateColor("command.create.error"));
sender.sendMessage(langRepository.translateColor("messageprefix.negative") + langRepository.translateColor("command.create.error"));
}
else {
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translate("command.error.noname"));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translate("command.error.noname"));
}
}
protected String getTag(String arg) {
int splitLoc = arg.indexOf(":");
if(splitLoc != -1) {
return arg.substring(0,splitLoc);
}
return null;
}
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp() || sender.hasPermission("advancedportals.createportal");
@ -53,11 +69,11 @@ public class CreatePortalSubCommand implements SubCommand {
@Override
public String getBasicHelpText() {
return Lang.translate("command.create.help");
return langRepository.translate("command.create.help");
}
@Override
public String getDetailedHelpText() {
return Lang.translate("command.create.detailedhelp");
return langRepository.translate("command.create.detailedhelp");
}
}

View File

@ -40,7 +40,7 @@ public class RemoveSubCommand implements SubCommand {
sender.sendMessage(langRepository.translate("command.remove.noname"));
}
else {
if(AdvancedPortalsCore.getPortalServices().removePlayerSelection(player)) {
if(portalServices.removePlayerSelection(player)) {
}
else {

View File

@ -1,9 +1,7 @@
package com.sekwah.advancedportals.core.config;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.repository.*;
public class RepositoryModule extends AbstractModule {
@ -13,7 +11,7 @@ public class RepositoryModule extends AbstractModule {
bind(IPortalRepository.class).to(PortalRepository.class).in(Scopes.SINGLETON);
bind(IDestinationRepository.class).to(DestinationRepository.class).in(Scopes.SINGLETON);
bind(IPortalRepository.class).to(PortalRepository.class).in(Scopes.SINGLETON);
bind(IConfigurations.class).to(ConfigurationsImpl.class).in(Scopes.SINGLETON);
bind(IConfigurations.class).to(Configurations.class).in(Scopes.SINGLETON);
bind(ILangRepository.class).to(LangRepository.class).in(Scopes.SINGLETON);
//bindListener(Matchers.Any(), new Log4JTypeListenr());
}

View File

@ -1,4 +1,4 @@
package com.sekwah.advancedportals.core.registry;
package com.sekwah.advancedportals.core.data;
import com.google.inject.Inject;
import com.google.inject.Singleton;

View File

@ -1,16 +0,0 @@
package com.sekwah.advancedportals.core.registry;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Cmd {
String name();
//TODO Convert to enum
String parentCommand() default "";
boolean isEnabled() default true;
int minArgs() default 0;
String description() default "";
String[] permissions() default {};
}

View File

@ -1,18 +0,0 @@
package com.sekwah.advancedportals.core.registry;
import com.google.common.collect.ImmutableList;
import com.sekwah.advancedportals.core.connector.container.CommandSenderContainer;
public class CommandDemo implements CommandHandler {
@Override
public void onExecute(String commandName, String parentCommand, CommandSenderContainer sender, ImmutableList<String> args) {
}
@Override
public void onCommandFailure(String[] command, CommandSenderContainer sender, CommandException exception) {
}
}

View File

@ -2,6 +2,7 @@ package com.sekwah.advancedportals.core.registry;
import com.google.common.collect.ImmutableSet;
import com.google.common.reflect.ClassPath;
import com.sekwah.advancedportals.core.api.commands.SubCommand;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
@ -10,7 +11,7 @@ import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class RegisterBuilder<T extends CommandHandler> {
public class RegisterBuilder<T extends SubCommand> {
public static RegisterBuilder newBuilder() {
return new RegisterBuilder();
}
@ -35,7 +36,7 @@ public class RegisterBuilder<T extends CommandHandler> {
}
//TODO I don't know if we want to use this as it is marked as Unstable.
public Registrar<T> build() {
public CommandRegister<T> build() {
// Table<String, String, T> commandMap = HashBasedTable.create();
Map<Cmd, T> commandMap = new HashMap<>();
ImmutableSet<ClassPath.ClassInfo> classInfo;
@ -83,7 +84,7 @@ public class RegisterBuilder<T extends CommandHandler> {
e.printStackTrace();
}
});
return new Registrar<>(allowPermissionInheritance, commandMap);
return new CommandRegister<T>(allowPermissionInheritance, commandMap);
}

View File

@ -4,7 +4,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//There is no reason to run a double class file when we can just make the main command default out.
@Deprecated()
@Retention(RetentionPolicy.RUNTIME)
public @interface SubCmd {

View File

@ -1,86 +0,0 @@
package com.sekwah.advancedportals.core.registry;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.api.commands.SubCommand;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Do not register to here. Register to the sprcific subcommand registry classes.
* <p>
* Designed to let addons add new command sections to access, edit or add new functonality.
*
* @author sekwah41
*/
public class SubCommandRegistry {
protected Map<String, SubCommand> subCommandMap = new HashMap<>();
/**
* List of subcommand names which should be in order alphabetically
*/
protected ArrayList<String> subCommands = new ArrayList<>();
// private InfoLogger infoLogger = AdvancedPortalsCore.getInstance().getInfoLogger();
/**
* @param arg argument needed to activate
* @param subCommand
* @return if the subcommand is registered or not
*/
public boolean registerSubCommand(String arg, SubCommand subCommand) {
if (subCommand == null) {
infoLogger.logWarning("The subcommand '" + arg + "' cannot be null.");
return false;
}
if(this.subCommandMap.containsKey(arg)){
infoLogger.logWarning("The subcommand '" + arg + "' already exists.");
return false;
}
this.subCommandMap.put(arg.toLowerCase(), subCommand);
this.subCommands.add(arg.toLowerCase());
Collections.sort(this.subCommands);
return true;
}
/**
* @return a list of arguments of registered subcommands
*/
public ArrayList<String> getSubCommands(){
return this.subCommands;
}
/**
* I may be wrong but for larger lists containsKey is faster with a hashmap than arraylist.
*
* Though im not sure at what size it becomes more efficient.
* @param arg
* @return if the argument is registered
*/
public boolean isArgRegistered(String arg){
return this.subCommandMap.containsKey(arg.toLowerCase());
}
/**
* Gets the subcommand corresponding to the string argument
* @param arg
* @return the subcommand linked to the arg
*/
public SubCommand getSubCommand(String arg){
if(this.subCommandMap.containsKey(arg.toLowerCase())){
return this.subCommandMap.get(arg.toLowerCase());
}
return null;
}
}

View File

@ -7,12 +7,12 @@ import com.sekwah.advancedportals.core.util.DataHandler;
import java.util.HashMap;
@Singleton
public class ConfigurationsImpl implements IConfigurations {
public class Configurations implements IConfigurations {
private HashMap<String, Config> configs;
private Config config;
public ConfigurationsImpl() {
public Configurations() {
configs = new HashMap<String,Config>();
}

View File

@ -1,7 +1,7 @@
package com.sekwah.advancedportals.core.repository;
public interface ILangRepository {
String translate(String s);
String translate(String s);
String translate(String key, Object... args);

View File

@ -6,7 +6,7 @@ import com.sekwah.advancedportals.core.entities.containers.PlayerContainer;
import java.util.UUID;
public interface IPortalTempDataRepository {
public interface IPortalTempDataRepository {
void addSelectedPortal(UUID selectedPlayer, String portal);
void removeSelectedPortal(UUID uuid);

View File

@ -1,7 +1,10 @@
package com.sekwah.advancedportals.core.repository;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.util.DataHandler;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.io.IOException;
import java.io.InputStream;
@ -29,6 +32,11 @@ public class LangRepository implements ILangRepository {
public static final String version = "1.0.0";
public static final String lastTranslationUpdate = "1.0.0";
@Inject
private DataHandler dataHandler;
@Inject
private InfoLogger infoLogger;
@Override
public String translate(String s) {
return languageMap.getOrDefault(s, s);
@ -73,7 +81,7 @@ public class LangRepository implements ILangRepository {
//URL url = lang.getClass().getClassLoader().getResource("lang/" + fileName + ".lang");
//System.out.println(url);
//Map<String, String> newLangMap = lang.parseLang(url.openStream());
InputStream stream = AdvancedPortalsCore.getInstance().getDataStorage().loadResource("lang/" + fileName + ".lang");
InputStream stream = dataHandler.loadResource("lang/" + fileName + ".lang");
if (stream != null) {
Map<String, String> newLangMap = parseLang(stream);
if (newLangMap != null) {
@ -82,7 +90,7 @@ public class LangRepository implements ILangRepository {
}
} catch (NullPointerException e) {
e.printStackTrace();
AdvancedPortalsCore.getInstance().getInfoLogger().logWarning("Could not load " + fileName + ".lang The file does" +
infoLogger.logWarning("Could not load " + fileName + ".lang The file does" +
"not exist or there has been an error reading the file. Canceled loading language file.");
}
}

View File

@ -1,6 +1,6 @@
package com.sekwah.advancedportals.core.util;
import com.sekwah.advancedportals.core.data.DataTag;
import com.sekwah.advancedportals.core.entities.DataTag;
import java.util.ArrayList;

View File

@ -18,7 +18,7 @@ import java.util.Map;
public class TagRegistry<T> {
@Inject
private AdvancedPortalsCore portalsCore;
private InfoLogger infoLogger;
/**
* List of tag names which should be in order alphabetically
@ -83,12 +83,12 @@ public class TagRegistry<T> {
*/
public boolean registerTag(String tag) {
if (tag.contains(" ")) {
this.portalsCore.getInfoLogger().logWarning("The tag '"
infoLogger.logWarning("The tag '"
+ tag + "' is invalid as it contains spaces.");
return false;
}
if (this.tags.contains(tag)) {
this.portalsCore.getInfoLogger().logWarning("The tag "
infoLogger.logWarning("The tag "
+ tag + " has already been registered.");
return false;
}
@ -133,7 +133,7 @@ public class TagRegistry<T> {
public boolean registerTag(String tag, Object tagHandler) {
if (tag == null) {
this.portalsCore.getInfoLogger().logWarning("A tag cannot be null.");
infoLogger.logWarning("A tag cannot be null.");
return false;
}

View File

@ -1,16 +1,11 @@
package com.sekwah.advancedportals.spigot;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.sekwah.advancedportals.core.AdvancedPortalBuilder;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.spigot.coreconnector.command.SpigotCommandRegister;
import com.sekwah.advancedportals.spigot.coreconnector.info.SpigotDataCollector;
import com.sekwah.advancedportals.spigot.metrics.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

View File

@ -1,7 +1,10 @@
package com.sekwah.advancedportals.spigot.convertolddata;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.api.commands.SubCommand;
import com.sekwah.advancedportals.core.entities.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.repository.ILangRepository;
import com.sekwah.advancedportals.core.repository.LangRepository;
import java.util.List;
@ -9,13 +12,15 @@ import java.util.List;
* TODO this is for spigot only for a few releases
*/
public class ConvertOldSubCommand implements SubCommand {
@Inject
ILangRepository langRepository;
@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor(" Old portal data found."));
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor(" Old portal data successfully converted."));
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor(" Old desti data found."));
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor(" Old desti data successfully converted."));
sender.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translateColor(" Those were just sample outputs, it doesnt work yet."));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor(" Old portal data found."));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor(" Old portal data successfully converted."));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor(" Old desti data found."));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor(" Old desti data successfully converted."));
sender.sendMessage(langRepository.translateColor("messageprefix.positive") + langRepository.translateColor(" Those were just sample outputs, it doesnt work yet."));
}
@Override