/*
* Contributions to FindBugs
* Copyright (C) 2009, University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JOptionPane;
import edu.umd.cs.findbugs.charsets.UserTextFile;
import edu.umd.cs.findbugs.cloud.Cloud;
/**
* Implementation of the UI callback for command line sessions.
*
* @author andy.st
*/
public class CommandLineUiCallback implements IGuiCallback {
private final CurrentThreadExecutorService bugUpdateExecutor = new CurrentThreadExecutorService();
public CommandLineUiCallback() {
}
BufferedReader br = UserTextFile.bufferedReader(System.in);
public void showMessageDialogAndWait(String message) throws InterruptedException {
System.out.println(message);
}
public void showMessageDialog(String message) {
System.out.println(message);
}
public int showConfirmDialog(String message, String title, String ok, String cancel) {
String confirmStr = "Yes (Y) or No (N)?";
System.out.println(String.format("Confirmation required: %s%n\t%s%n\t%s", title, message, confirmStr));
String answer = null;
while (true) {
try {
answer = br.readLine();
} catch (IOException ioe) {
throw new IllegalArgumentException("IO error trying to read System.in!");
}
int response = parseAnswer(answer);
if (response < 0) {
System.out.println(String.format("\t%s", confirmStr));
} else {
return response;
}
}
}
private int parseAnswer(String answer) {
if (null == answer || answer.length() == 0) {
System.out.println("You entered an empty string");
return -1;
}
char option = answer.toLowerCase(Locale.ENGLISH).charAt(0);
switch (option) {
case 'o':
return JOptionPane.OK_OPTION;
case 'y':
return JOptionPane.YES_OPTION;
case 'n':
return JOptionPane.NO_OPTION;
case 'c':
return JOptionPane.CANCEL_OPTION;
default:
System.out.println("You entered '" + option +"'");
return -1;
}
}
public InputStream getProgressMonitorInputStream(InputStream in, int length, String msg) {
return in;
}
public void setErrorMessage(String errorMsg) {
System.err.println(errorMsg);
}
public void displayNonmodelMessage(String title, String message) {
System.out.println(String.format("Message: %s%n%s", title, message));
}
/*
* (non-Javadoc)
*
* @see
* edu.umd.cs.findbugs.IGuiCallback#showQuestionDialog(java.lang.String,
* java.lang.String, java.lang.String)
*/
public String showQuestionDialog(String message, String title, String defaultValue) {
throw new UnsupportedOperationException();
}
public List<String> showForm(String message, String title, List<FormItem> labels) {
throw new UnsupportedOperationException();
}
/*
* (non-Javadoc)
*
* @see edu.umd.cs.findbugs.IGuiCallback#showDocument(java.net.URL)
*/
public boolean showDocument(URL u) {
return false;
}
public void registerCloud(Project project, BugCollection collection, Cloud cloud) {
}
public ExecutorService getBugUpdateExecutor() {
return bugUpdateExecutor;
}
private static class CurrentThreadExecutorService extends AbstractExecutorService {
public void shutdown() {
}
public List<Runnable> shutdownNow() {
return null;
}
public boolean isShutdown() {
return false;
}
public boolean isTerminated() {
return false;
}
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
return false;
}
public void execute(Runnable command) {
command.run();
}
}
/*
* (non-Javadoc)
*
* @see edu.umd.cs.findbugs.IGuiCallback#isHeadless()
*/
public boolean isHeadless() {
return true;
}
/*
* (non-Javadoc)
*
* @see
* edu.umd.cs.findbugs.IGuiCallback#unregisterCloud(edu.umd.cs.findbugs.
* Project, edu.umd.cs.findbugs.BugCollection,
* edu.umd.cs.findbugs.cloud.Cloud)
*/
public void unregisterCloud(Project project, BugCollection collection, Cloud cloud) {
}
/*
* (non-Javadoc)
*
* @see
* edu.umd.cs.findbugs.IGuiCallback#invokeInGUIThread(java.lang.Runnable)
*/
public void invokeInGUIThread(Runnable r) {
throw new UnsupportedOperationException();
}
}