// Arup Guha
// Originally written in 1999 Spring semester for CS302 at UW-Madison
// Edited on 3/6/07 for COP 3330 at UCF.

import java.util.*;

public class ColorCoordinate extends Coordinate {

    private String color; // The color of the ColorCoordinate
    
    // Default constructor. Call to default Coordinate constructor is
    // automatically handled by java. Hence this will create random values
    // for the inherited instance variables num and c.
    public ColorCoordinate(String color) {
		this.color = color;
    }
    
    // Assigns instance variables (actual and inherited) to values passed in
    // as parameters. Super is used to invoke the correct Coordinate 
    // constructor.
    public ColorCoordinate(int num, char c, String color) {
		super(num,c);
		this.color = color;
    }

    // Prints out the color.
    public void printCoordinate() {
		super.printCoordinate();
		System.out.println(" Color = " + color);
    }


    // Returns a String representation of the current object.
    public String toString() {
    	System.out.println("In ColorCoordinate toString");
		return super.toString() + " Color = " + color;
    }

    // Accessor method
    public String getColor() {
		return color;
    }
    

    // Overridden method to check for equality between two ColorCoordinate
    // objects, the second one is passed in as a parameter. This method 
    // makes use of its Coordinate counterpart by using super.
    public boolean equals(Coordinate sample) {
		System.out.println("Method #3");
		System.out.println("sample is "+sample);
		
        if (sample instanceof ColorCoordinate) 
          return (color.equals(((ColorCoordinate)sample).color) && 
                  super.equals(sample));
        else
          return false;
    }

    public boolean equals(ColorCoordinate sample) {
    	
    
		  System.out.println("Method #4");	
          return color.equals(sample.color) && 
                  super.equals(sample);
     
    }
    
    public static void main(String[] args) {

		// Set up Coordinates.
		Coordinate test = new ColorCoordinate(1,'a',"Green");
		ColorCoordinate red = new ColorCoordinate(7,'a',"Red");
		ColorCoordinate blue = new ColorCoordinate(4,'a',"Blue");
		Coordinate nocolor = new Coordinate(7,'b');
		
		// Testing toString()
		Coordinate[] list = new Coordinate[4];
		list[0] = test; list[1]=red; list[2]=blue;
		list[3]=nocolor;
		Arrays.sort(list);
		
		for (int i=0; i<list.length; i++) {
			System.out.println(i+" "+list[i]);
			//System.out.println();
		}
		/*
		System.out.println("test compare red "+test.compareTo(red));
		System.out.println("red compare blue "+red.compareTo(blue));
		System.out.println("red compare nocolor "+red.compareTo(nocolor));
		System.out.println("nocolor compare red "+nocolor.compareTo(red));
		*/
		System.out.println();
		
		// Make calls to equals methods.
		/*
		if (nocolor.equals(red))
	    	System.out.println("These two are the same.");
		*/
		
		if (red.equals(nocolor))
	    	System.out.println("Equal - called Coordinate");
        else
            System.out.println("Not Equal - called Color");
		System.out.println();
		/*
		if (red.equals(blue))
	    	System.out.println("Red and blue make purple.");

		if (test.equals(blue))
	    	System.out.println("Green and Blue are the same.");
        else
            System.out.println("Green and Blue are different.");
		*/
		if (blue.equals(test))
	    	System.out.println("Blue matched test.");
        else
            System.out.println("Blue didn't match test.");
		
    }
}
