/**
   Class that implements the graph view part.
   @author Sugiharto Widjaja
   @version 2002/3/19
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.geom.*;

public class GraphView extends JPanel implements Observer
{
   /**
      Construct a GraphView object
      @param aModel the data model that will be observed by GraphView
      object
   */

   public GraphView(DataModel aModel)
   {
      model = aModel;
      model.addObserver(this);
      addMouseListener(new
         MouseAdapter()
         {
            public void mousePressed(MouseEvent event)
            {
               Point2D point = event.getPoint();
               repaint();
               model.addPoint(point);
            }
         });
   }

   /**
      Draw the circle(s) on the graph panel
      @param g the Graphics objext
   */

   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      int size = model.getSize();
      for(int i = 0; i < size; i++)
      {
         Point2D point = (Point2D) model.getPointAt(i);
         double xC = point.getX();
         double yC = point.getY();
         Ellipse2D ellipse = new Ellipse2D.Double(xC, yC, 10, 10);
         g2.draw(ellipse);
      }
   }

   /**
      Repaint the graph panel whenever it receives a notification from
      observed object
      @param o an observable object
      @param arg the argument
   */
   public void update(Observable o, Object arg)
   {
      String comment = (String) arg;
      if(comment.equals("change"))
         repaint();
   }

   // The DataModel object
   private DataModel model;
}

