Search in sources :

Example 1 with AbstractCommand

use of org.apache.openejb.server.cli.command.AbstractCommand in project tomee by apache.

the class CliRunnable method run.

@Override
public void run() {
    clean();
    try {
        final StreamManager streamManager = new StreamManager(out, err, lineSep);
        final ConsoleReader reader = new ConsoleReader(sin, streamManager.getSout());
        reader.addCompletor(new FileNameCompletor());
        reader.addCompletor(new SimpleCompletor(COMMANDS.keySet().toArray(new String[COMMANDS.size()])));
        // TODO : add completers
        String line;
        final StringBuilder builtWelcome = new StringBuilder("Apache OpenEJB ").append(OpenEjbVersion.get().getVersion()).append("    build: ").append(OpenEjbVersion.get().getDate()).append("-").append(OpenEjbVersion.get().getTime()).append(lineSep);
        if (tomee) {
            builtWelcome.append(OS_LINE_SEP).append(PROPERTIES.getProperty(WELCOME_TOMEE_KEY));
        } else {
            builtWelcome.append(OS_LINE_SEP).append(PROPERTIES.getProperty(WELCOME_OPENEJB_KEY));
        }
        builtWelcome.append(lineSep).append(PROPERTIES.getProperty(WELCOME_COMMON_KEY));
        streamManager.writeOut(OpenEjbVersion.get().getUrl());
        streamManager.writeOut(builtWelcome.toString().replace("$bind", bind).replace("$port", Integer.toString(port)).replace("$name", NAME).replace(OS_LINE_SEP, lineSep));
        while ((line = reader.readLine(prompt())) != null) {
            // do we need a command for it?
            if (EXIT_COMMAND.equals(line)) {
                break;
            }
            Class<?> cmdClass = null;
            String key = null;
            for (final Map.Entry<String, Class<?>> cmd : COMMANDS.entrySet()) {
                if (line.startsWith(cmd.getKey())) {
                    cmdClass = cmd.getValue();
                    key = cmd.getKey();
                    break;
                }
            }
            if (cmdClass != null) {
                final ObjectRecipe recipe = new ObjectRecipe(cmdClass);
                recipe.setProperty("streamManager", streamManager);
                recipe.setProperty("command", line);
                recipe.setProperty("scripter", scripter);
                recipe.setProperty("commands", COMMANDS);
                recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
                recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
                recipe.allow(Option.NAMED_PARAMETERS);
                try {
                    final AbstractCommand cmdInstance = (AbstractCommand) recipe.create();
                    cmdInstance.execute(trunc(line, key));
                } catch (Exception e) {
                    streamManager.writeErr(e);
                }
            } else {
                streamManager.writeErr("sorry i don't understand '" + line + "'");
            }
        }
        clean();
    } catch (IOException e) {
        clean();
        throw new CliRuntimeException(e);
    }
}
Also used : ConsoleReader(jline.ConsoleReader) FileNameCompletor(jline.FileNameCompletor) AbstractCommand(org.apache.openejb.server.cli.command.AbstractCommand) IOException(java.io.IOException) IOException(java.io.IOException) ObjectRecipe(org.apache.xbean.recipe.ObjectRecipe) SimpleCompletor(jline.SimpleCompletor) TreeMap(java.util.TreeMap) Map(java.util.Map)

Aggregations

IOException (java.io.IOException)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 ConsoleReader (jline.ConsoleReader)1 FileNameCompletor (jline.FileNameCompletor)1 SimpleCompletor (jline.SimpleCompletor)1 AbstractCommand (org.apache.openejb.server.cli.command.AbstractCommand)1 ObjectRecipe (org.apache.xbean.recipe.ObjectRecipe)1