/* * 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 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 getPrompt() { return Optional.absent(); } @Override public Completer getCompleter() { return new AggregateCompleter(YES_NO_COMPLETER, new StringsCompleter(IOUtil.SKIP)); } }; } }