
import java.lang.*;
import java.util.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class boundary extends operator1DInt{

 
  
  Boundary boundaryOp= new Boundary();
  static int number=0;
  int iteration;
  String type = new String("BinaryBoundaryExtractor");

  public boundary(){
  }

  public boundary(JPanel panel, linkData links){
    ++number;
    setName(type+"_"+number);
    setParameters();
    setType(type);
    setBox(panel,links,1,1);
    box.getOut1().setText("BINOUT1");
    box.getIn1().setText("BININ1");
    
  }

  /**
   * Loads the required parameters (number of iterations)
   * from the input stream, so the operator can be recreated in an 
   * identical state to when it was saved.
   * @param tokenizer the input stream split into tokens
   * @throws IOException if error occurs during token retrieval
   */
  public void loadParameters(StreamTokenizer tokenizer) throws IOException{
    //int tokenType;
    //tokenType = tokenizer.nextToken();
    //int value = (int) tokenizer.nval;
    //to be continued..
  }
  /**
   * Returns a String representing all the parameters for this operator
   * for the purpose of saving the system setup (and being able to load
   * it again at a future date).
   */
  public String saveParameters(){
    String saveData = new String();
    
    //Add any parameters to the string
    
    return saveData;
  }
  
  void setParameters(){
    /**
     *This function is used to set up the parameters window. This window
     *should contain enough parameters to be able to run the operator
     *although parameters like scaling and offset are not required as there
     *is an operator already defined to do this. The interface components
     *should be added to the parameters frame. In this example a single panel
     *is created which is used to hold a label saying there are no paramters.
     *In general this will not be true of most operators.
     */
    parameters = new JFrame(name);
    panel = new JPanel();
    JLabel label = new JLabel("No Parameters");
    panel.add(label);
    parameters.getContentPane().add(panel);
    parameters.pack();
    parameters.setVisible(false);
  }

  public void go(){
    
    System.out.println(name);
    if(getInput1()!=null )
      {
	output1 = new image1DInt(
                input1.getWidth(),
                input1.getHeight(),
                imageConversions.binary2gs(
                    boundaryOp.apply_boundary(
                        imageConversions.gs2binary(
                            input1.getValues(),
                            input1.getWidth(),
                            input1.getHeight()),
                        input1.getWidth(),
                        input1.getHeight())));
        System.out.println("Output Width 1 "+getOutput1().getWidth());
        propagate();
       }
  }
}
