/*
 * Contributions to FindBugs
 * Copyright (C) 2009, Andrei Loskutov
 *
 * 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 javax.swing.*;

import edu.umd.cs.findbugs.cloud.Cloud;

import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.ExecutorService;

/**
 * Interface for any kind of GUI attached to the current FindBug analysis
 * 
 * @author Andrei
 */
public interface IGuiCallback {
	boolean isHeadless();
	void showMessageDialog(String message);
	int showConfirmDialog(String message, String title, int optionType);
    int showConfirmDialog(String message, String title, String ok, String cancel);
	String showQuestionDialog(String message, String title, String defaultValue);
    
    List<String> showForm(String message, String title, List<FormItem> labels);

    InputStream getProgressMonitorInputStream(InputStream in, int length, String msg);
    void setErrorMessage(String errorMsg);
    void displayNonmodelMessage(String title, String message);
    boolean showDocument(URL u);
    /**
     * Called as soon as the cloud object is created, before it is initialized. 
     * Useful for adding status msg listener.
     */
    void registerCloud(Project project, BugCollection collection, Cloud cloud);
    void unregisterCloud(Project project, BugCollection collection, Cloud cloud);

    /**
     * Use this executor to queue bug collection updates without interfering with the GUI.
     * Runs on the AWT event thread.
     */
    ExecutorService getBugUpdateExecutor();

    void showMessageDialogAndWait(String message) throws InterruptedException;

    public class FormItem {
        private String label;
        private String defaultValue;
        private boolean password = false;
        private List<String> possibleValues;
        private JComponent field;

        public FormItem(String label) {
            this(label, null, null);
        }

        public FormItem(String label, String defaultValue) {
            this(label, defaultValue, null);
        }

        public FormItem(String label, String defaultValue, List<String> possibleValues) {
            this.label = label;
            this.defaultValue = defaultValue;
            this.possibleValues = possibleValues;
        }

        public FormItem password() {
            password = true;
            return this;
        }

        public boolean isPassword() {
            return password;
        }

        public String getLabel() {
            return label;
        }

        public String getDefaultValue() {
            return defaultValue;
        }

        public List<String> getPossibleValues() {
            return possibleValues;
        }

        public JComponent getField() {
            return field;
        }

        public void setField(JComponent field) {
            this.field = field;
        }
    }
}

@@ -1243,16 +1243,19 @@
 back %7B%0D%0A
+%09%0D%0A
 %09boolean
@@ -1312,16 +1312,327 @@
 sage);%0D%0A
+%09%0D%0A%09%0D%0A%09public final static int YES_OPTION = 0;%0D%0A%09public final static int NO_OPTION = 1;%0D%0A%09public final static int CANCEL_OPTION = 2;%0D%0A%09%0D%0A%09 public static final int         YES_NO_OPTION = 0;%0D%0A%09 public static final int         YES_NO_CANCEL_OPTION = 1;%0D%0A%09 public static final int         OK_CANCEL_OPTION = 2;%0D%0A%0D%0A
 %09int sho

Add constants for Options