/* @(#)StringMethodTesterApplet.java   24 January 2008 */

import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.regex.*;
import java.text.ParseException;

public class StringMethodTesterApplet
    extends DirectApplet
{

    /** The StringViewer width. */
    public static int WIDTH  = 600;
    
    /** The StringViewer height. */
    public static int HEIGHT = 200;
    
    
    /** The StringViewer for the String initializer. */
    protected StringViewer initViewer =
        new StringViewer(WIDTH, HEIGHT);
    
    
    /** The StringViewer for the String method names to test. */
    protected StringViewer nameViewer =
        new StringViewer(WIDTH, HEIGHT);
    
    
    /** The SimpleAction to create the string tester. */
    protected SimpleAction createAction =
        new SimpleAction("Create String Tester") {
        public void perform() { createStringTester(); }
    };
    
    
    /** View for test string. */
    Display one = new Display(initViewer, null, "String to Test");
    
    
    /** View for method names to use a filter. */
    Display two = new Display(nameViewer, null, "String Method Names to Test");
    
    /** Button to create tester pane. */
    JButton button = new JButton(createAction);
    
    {
        button.setBackground(Colors.yellow);
    }
    
    
    /** Ingredients for the vertical panel. */
    Object[] stuff = { one, two, button };
    
    
    /** The vertical panel. */
    VTable panel = new VTable(stuff, 10, 10, CENTER);
    
    
    public Object createGUI() {
        return panel;
    }
    
    
    protected void createStringTester() {
        JPFPane tester = createStringTesterPane();
        
        tester.frame("String Tester", EAST);
    }
    
    
    protected JPFPane createStringTesterPane() {
        String initializer = initViewer.getText();
        
        String namesString = nameViewer.getText();
        
        String[] names = Strings.tokenize(namesString, " ,\n", true);
        
        MethodFilter filter = MethodFilter.Factory.nameFilter(names);
        
        return new JPFPane(initializer, Object.class, filter, false);
    }
    
}

