
com.acidmanic.commandline.commands.CommandFactory Maven / Gradle / Ivy
package com.acidmanic.commandline.commands;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
public class CommandFactory {
private HashMap typeList = new HashMap<>();
private final ITypeRegistery typeRegistery;
public CommandFactory(ITypeRegistery typeRegistery) {
this.typeRegistery = typeRegistery;
typeList = new HashMap<>();
ArrayList allClasses = typeRegistery.getApplicationClasses();
int fixedLength = 0;
for (Class t : allClasses) {
int mod = t.getModifiers();
if (!Modifier.isAbstract(mod)
&& !Modifier.isInterface(mod)
&& isICommand(t)) {
try {
String cmdName = ((Command) t.newInstance()).getName();
typeList.put(cmdName.toLowerCase(), t);
if (fixedLength < cmdName.length()) {
fixedLength = cmdName.length();
}
} catch (Exception e) {
}
}
}
}
private class CommandLine {
private String name;
private String[] args;
public CommandLine(String name, String[] args) {
this.name = name;
this.args = args;
}
private CommandLine() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public String getName() {
return name;
}
public String[] getArgs() {
return args;
}
}
private boolean isICommand(Class t) {
return typeRegistery.isOfType(t, Command.class);
}
public ITypeRegistery getTypeRegistery() {
return typeRegistery;
}
private Command makeCommand(CommandLine commandLine) {
Command ret;
String cmd = commandLine.getName().toLowerCase();
if (typeList.containsKey(cmd)) {
Class t = typeList.get(cmd);
try {
ret = (Command) t.newInstance();
ret.setArguments(commandLine.getArgs());
ret.setCreatorFactory(this);
return ret;
} catch (Exception e) {
return Command.NULLCOMMAND;
}
}
return Command.NULLCOMMAND;
}
public Command makeCommand(String commandLine) {
return makeCommand(analyzeLine(commandLine));
}
public Command makeCommand(String[] PromptArgs) {
return makeCommand(getnameAndArgs(PromptArgs));
}
private CommandLine getnameAndArgs(String[] PromptArgs) {
if (PromptArgs == null || PromptArgs.length == 0) {
return new CommandLine("ACOMMANDTHATDOSENOTEXIST&^%$YEAH!", new String[]{});
}
String args[] = new String[PromptArgs.length - 1];
for (int i = 0; i < args.length; i++) {
args[i] = PromptArgs[i + 1];
}
return new CommandLine(PromptArgs[0], args);
}
private CommandLine analyzeLine(String commandline) {
String[] PromptArgs;
if (commandline == null || commandline.length() == 0) {
PromptArgs = null;
} else {
PromptArgs = commandline.split("\\s");
}
return getnameAndArgs(PromptArgs);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy