import java.awt.*;
import java.awt.geom.*;                  // For classes defining shapes

public abstract class Element
{
  public Element(Color color)
  {  this.color = color;  }

  public Color getColor()
  {  return color;  }

  public abstract Shape getShape();
  public abstract java.awt.Rectangle getBounds();

  protected Color color;                 // Color of a shape

  public abstract void modify(Point start, Point last);

  // Nested class defining a line
  public static class Line extends Element
  {
    public Line(Point start, Point end, Color color)
    {
      super(color);
      line = new Line2D.Double(start, end);
    }

    public Shape getShape()
    { 
      return line; 
    }

    public java.awt.Rectangle getBounds()
    {
      return line.getBounds();  
    }

    public void modify(Point start, Point last)
    {
      line.x2 = last.x;
      line.y2 = last.y;
    }

    private Line2D.Double line;
  }
}

