org.opendaylight.controller.netconf.cli.reader.impl.DecisionReader.java Source code

Java tutorial

Introduction

Here is the source code for org.opendaylight.controller.netconf.cli.reader.impl.DecisionReader.java

Source

/*
 * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.controller.netconf.cli.reader.impl;

import static org.opendaylight.controller.netconf.cli.io.IOUtil.SKIP;

import com.google.common.base.Optional;
import java.io.IOException;
import jline.console.completer.AggregateCompleter;
import jline.console.completer.Completer;
import jline.console.completer.StringsCompleter;
import jline.internal.Log;
import org.opendaylight.controller.netconf.cli.io.ConsoleContext;
import org.opendaylight.controller.netconf.cli.io.ConsoleIO;
import org.opendaylight.controller.netconf.cli.io.IOUtil;
import org.opendaylight.controller.netconf.cli.reader.ReadingException;

public class DecisionReader {

    private static final String YES = "Y";
    private static final String NO = "N";
    public static final Completer YES_NO_COMPLETER = new StringsCompleter(YES, NO);

    public Optional<Boolean> read(final ConsoleIO console, final String questionMessageBlueprint,
            final Object... questionMessageArgs) throws IOException, ReadingException {
        final ConsoleContext ctx = getContext();
        console.enterContext(ctx);
        try {
            console.formatLn(questionMessageBlueprint, questionMessageArgs);
            final String rawValue = console.read();
            if (YES.equals(rawValue.toUpperCase())) {
                return Optional.of(Boolean.TRUE);
            } else if (NO.equals(rawValue.toUpperCase())) {
                return Optional.of(Boolean.FALSE);
            } else if (SKIP.equals(rawValue)) {
                return Optional.absent();
            } else {
                final String message = String.format("Incorrect possibility (%s) was selected", rawValue);
                Log.error(message);
                throw new ReadingException(message);
            }
        } finally {
            console.leaveContext();
        }
    }

    private static ConsoleContext getContext() {
        return new ConsoleContext() {

            @Override
            public Optional<String> getPrompt() {
                return Optional.absent();
            }

            @Override
            public Completer getCompleter() {
                return new AggregateCompleter(YES_NO_COMPLETER, new StringsCompleter(IOUtil.SKIP));
            }

        };
    }

}