package se.chalmers.gdcn.ui; import net.tomp2p.peers.PeerAddress; import net.tomp2p.storage.Data; import se.chalmers.gdcn.communicationToUI.ClientInterface; import se.chalmers.gdcn.communicationToUI.CommandWord; import se.chalmers.gdcn.communicationToUI.WordInterface; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Leif on 2014-02-25. */ public class ConsoleFactory { /** * Creates a console and makes it listen to the provided client. * @param client Client to pass commands to * @return Console instance that can take commands */ public static Console create(final ClientInterface client){ Map<String, UICommand> commandMap = ConsoleFactory.createCommands(client); Console console = new Console(commandMap); client.addListener(console); return console; } /** * Creates and encapsulates commands * @param client Client to pass commands to * @return Map of commands */ private static Map<String, UICommand> createCommands(final ClientInterface client){ Map<String, UICommand> commandMap = new HashMap<>(); commandMap.put(CommandWord.START.getName(), new UICommand() { @Override public void execute(List<String> args) { int port = 4001; if(args.size()==1){ port=Integer.parseInt(args.get(0)); } client.start(port); } @Override public WordInterface getWord() { return CommandWord.START; } }); commandMap.put(CommandWord.STOP.getName(), new UICommand() { @Override public void execute(List<String> args) { client.stop(); } @Override public WordInterface getWord() { return CommandWord.STOP; } }); commandMap.put(CommandWord.PUT.getName(), new UICommand() { @Override public void execute(List<String> args) { String name = args.remove(0); try { Data data = new Data(args); client.put(name, data); } catch (IOException e) { e.printStackTrace(); } } @Override public WordInterface getWord() { return CommandWord.PUT; } }); commandMap.put(CommandWord.GET.getName(), new UICommand() { @Override public void execute(List<String> args) { client.get(args.remove(0)); } @Override public WordInterface getWord() { return CommandWord.GET; } }); commandMap.put(CommandWord.BOOTSTRAP.getName(), new UICommand() { @Override public void execute(List<String> args) { String host; int port; if(args.size()==0){ client.bootstrap(); } else if(args.size()==2){ host = args.get(0); port = Integer.parseInt(args.get(1)); client.bootstrap(host, port); } else { System.out.println("Normally two arguments: Host and Port. Zero arguments for default bootstrap."); } } @Override public WordInterface getWord() { return CommandWord.BOOTSTRAP; } }); commandMap.put(CommandWord.WORK.getName(), new UICommand() { @Override public void execute(List<String> args) { String address = "narrens.olf.sgsnet.se"; int port = 4001; if(args.size()>0){ address = args.get(0); } if(args.size()>1){ port = Integer.parseInt(args.get(1)); } client.work(address, port, false); } @Override public WordInterface getWord() { return CommandWord.WORK; } }); commandMap.put(CommandWord.AUTO_WORK.getName(), new UICommand() { @Override public void execute(List<String> args) { String address = "narrens.olf.sgsnet.se"; int port = 4001; if(args.size()>0){ address = args.get(0); } if(args.size()>1){ port = Integer.parseInt(args.get(1)); } client.work(address, port, true); } @Override public WordInterface getWord() { return CommandWord.AUTO_WORK; } }); commandMap.put("falsework", new UICommand() { @Override public void execute(List<String> args) { String address = "narrens.olf.sgsnet.se"; int port = 4001; if(args.size()>0){ address = args.get(0); } if(args.size()>1){ port = Integer.parseInt(args.get(1)); } client.falseWork(address, port); } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("stopwork", new UICommand() { @Override public void execute(List<String> args) { String address = "narrens.olf.sgsnet.se"; int port = 4001; if(args.size()>0){ address = args.get(0); } if(args.size()>1){ port = Integer.parseInt(args.get(1)); } client.stopWork(address, port); } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("spamwork", new UICommand() { @Override public void execute(List<String> args) { String address = "narrens.olf.sgsnet.se"; int port = 4001; if(args.size()>0){ address = args.get(0); } if(args.size()>1){ port = Integer.parseInt(args.get(1)); } client.spamWork(address, port); } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put(CommandWord.INSTALL.getName(), new UICommand() { @Override public void execute(List<String> args) { client.install(); } @Override public WordInterface getWord() { return CommandWord.INSTALL; } }); commandMap.put(CommandWord.UNINSTALL.getName(), new UICommand() { @Override public void execute(List<String> args) { client.uninstall(); } @Override public WordInterface getWord() { return CommandWord.UNINSTALL; } }); commandMap.put(CommandWord.PUSH.getName(), new UICommand() { @Override public void execute(List<String> args) { String jobName = args.get(0); client.push(jobName); } @Override public WordInterface getWord() { return CommandWord.PUSH; } }); ////////////////////////////////// // Debug or outdated commands: // TODO remove or improve them commandMap.put("connect", new UICommand() { @Override public void execute(List<String> args) { String site = "narrens.olf.sgsnet.se"; if(args.size() == 1){ site = args.get(0); } try { InetAddress[] inetAddresses = InetAddress.getAllByName(site); for(InetAddress address : inetAddresses){ System.out.println(""+address.toString()); } } catch (UnknownHostException e) { System.out.println("Unknown host: "+site); e.printStackTrace(); } } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("send", new UICommand() { @Override public void execute(List<String> args) { client.send(args.get(0)); } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("neighbours", new UICommand() { @Override public void execute(List<String> args) { List<PeerAddress> neighbours = client.getNeighbours(); System.out.println("NEIGHBOURS:"); for(PeerAddress address : neighbours){ System.out.println(address.toString()); } } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("rebootstrap", new UICommand() { @Override public void execute(List<String> args) { //TODO fix or delete! client.reBootstrap(); } @Override public WordInterface getWord() { return nullWord; } }); commandMap.put("deleteNeighbourFile", new UICommand() { @Override public void execute(List<String> args) { client.deleteNeighbourFile(); } @Override public WordInterface getWord() { return nullWord; } }); return commandMap; } private static final WordInterface nullWord = new WordInterface() { @Override public int getArity() { return 100; } @Override public String getName() { return ""; } @Override public String getArguments() { return ""; } @Override public String getHelp() { return ""; } }; }