/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2007 Sun Microsystems, Inc. */ package org.opends.quicksetup; import org.opends.quicksetup.util.Utils; import org.opends.server.util.StaticUtils; import java.util.List; import java.util.ArrayList; import java.io.PrintStream; import java.io.InputStream; /** * Supports user interactions for a command line driven application. */ public class CliUserInteraction extends CliApplicationHelper implements UserInteraction { private PrintStream out; private PrintStream err; private InputStream in; /** * Creates an instance that will use standard streams for interaction. */ public CliUserInteraction() { this.out = System.out; this.err = System.err; this.in = System.in; } /** * Creates an instance using specific streams. * @param out OutputStream where prompts will be written * @param err OutputStream where errors will be written * @param in InputStream from which information will be read */ public CliUserInteraction(PrintStream out, PrintStream err, InputStream in) { this.out = out; this.err = err; this.in = in; } /** * {@inheritDoc} */ public Object confirm(String summary, String details, String title, MessageType type, String[] options, String def) { return confirm(summary, details, null, title, type, options, def, null); } /** * {@inheritDoc} */ public Object confirm(String summary, String details, String fineDetails, String title, MessageType type, String[] options, String def, String viewDetailsOption) { List sOptions = new ArrayList(); int defInt = -1; for (int i = 0; i < options.length; i++) { sOptions.add(createOption(i + 1, options[i])); if (options[i].equals(def)) { defInt = i + 1; } } if (fineDetails != null) { sOptions.add(createOption(options.length + 1, viewDetailsOption != null ? viewDetailsOption : "View Details")); } println(); println(summary); println(); println(details); String returnValue = null; while (returnValue == null) { println(); for (String o : sOptions) { println(o); } System.out.print(getMsg("cli-uninstall-confirm-prompt", new String[] {"Enter a number or press Enter to accept the default", Integer.toString(defInt)})); System.out.flush(); String response = readLine(in, err); int respInt = -1; if (response.equals("")) { respInt = defInt; } else { try { respInt = Integer.parseInt(response); } catch (Exception e) { // do nothing; } } if (fineDetails != null && respInt == options.length + 1) { println(fineDetails); } else if (respInt > 0 && respInt <= options.length) { returnValue = options[respInt - 1]; } else { println("Illegal response " + response); } } return returnValue; } private String createOption(int index, String option) { return new StringBuilder(). append(Integer.toString(index)). append(". "). append(option).toString(); } private void println() { out.println(); } private void println(String text) { out.println(StaticUtils.wrapText(text, Utils.getCommandLineMaxLineWidth())); } }