/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package main; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Scanner; import java.util.Set; /** * * @author s123188 */ public class FarmShell { private final Scanner scanner = new Scanner(System.in); Analyzor analyzor; /* private void printPrompt() { if (stream_cached == null) { // "dollars are worthless" System.out.print("$ "); } else if (stream_cached.isValid()) { // "we make money now by receiving tweets" System.out.print("€ "); } else { // "we previously made money, but not anymore" System.out.print("ƒ "); } } */ /** * Processes commands from stdin until the exit command is received or EOF. */ public void process_forever() { System.err.println("Entering interactive shell, type 'help' for help " + "or 'exit' to leave. '.' repeats the previous interactive " + "command."); // print prompt for reading first command //printPrompt(); String lastLine = ""; while (scanner.hasNextLine()) { String line = scanner.nextLine().trim(); // repeat last command if (line.equals(".")) { line = lastLine; } if (!execute(line)) { // requested to terminate break; } if (!line.isEmpty()) { lastLine = line; } // print prompt for reading next line //printPrompt(); } // prevent corrupted compressed files when exiting without a command throw new NoSuchElementException(); } public boolean execute(String cmd) { String[] args = cmd.trim().split("\\s+", 2); if (!args[0].isEmpty()) { // non-empty command, let's see whether it makes sense? return execute(args); } return true; } /** * Executes a command with optional parameters. * * @param args An array with the first argument containing the command with * optional parameters in following arguments. * @return true if more commands are allowed to be executed, false * otherwise. */ public boolean execute(String[] args) { //make a new Analyzor analyzor = new Analyzor(); try { Command command = Command.fromString(args[0]); String[] params = Arrays.copyOfRange(args, 1, args.length); execute(command, params); } catch (IllegalArgumentException ex) { System.err.println(ex.getMessage()); } catch (IOException ex) { System.err.println("Command " + args[0] + " failed with " + ex); ex.printStackTrace(); } catch (NoSuchElementException ex) { // thrown by the "exit" command to signal exit return false; } // another satisfied customer, next! return true; } enum Command { query("make a query to the database; needed to do analysis", 1), filterbots("marks all users as bot or not"), sentiment("analyzes all tweets on positivity (about a brand)"), exit("Returns to shell"), help("Get help"); private final String description; private final int paramCount; Command(String description) { this.description = description; this.paramCount = 0; } Command(String description, int paramCount) { this.description = description; this.paramCount = paramCount; } public String getDescription() { return description; } public int getParamCount() { return paramCount; } public static Command fromString(String command) { for (Command cmd : values()) { if (cmd.name().equals(command)) { return cmd; } } throw new IllegalArgumentException("Unrecognized command. Hint: help"); } }; private final String[] HELP = new String[]{ "Interactive TweetShell", "", "Available commands:" }; private void execute(Command command, String[] params) throws IOException { if (params.length < command.getParamCount()) { throw new IllegalArgumentException("Expected " + command.getParamCount() + " parameters, got only " + params.length); } switch (command) { case query: analyzor.Query(params[0]); break; case filterbots: System.out.println("not yet implemented"); break; case sentiment: analyzor.sentimentAnalysis(); break; case help: for (String line : HELP) { System.out.println(line); } for (Command cmd : Command.values()) { System.out.printf(" %-10s", cmd.name()); if (!cmd.getDescription().isEmpty()) { System.out.print(" " + cmd.getDescription()); } if (cmd.getParamCount() == 1) { System.out.print(" (1 arg)"); } else if (cmd.getParamCount() > 1) { System.out.printf(" (%d args)", cmd.getParamCount()); } System.out.println(); } break; case exit: throw new NoSuchElementException(); default: throw new AssertionError(command.name()); } } }