/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */

import ilog.views.IlvPoint;
import ilog.views.IlvRect;
import ilog.views.graphic.IlvGraphicSet;
import ilog.views.graphic.IlvIcon;
import ilog.views.graphic.IlvText;

import java.awt.Color;
import java.awt.Font;

import javax.swing.ImageIcon;

/**
 * This custom graphic object is made of several objects. Some of methods of this objects
 * are bound with properties of the model nodes, as defined in the CSS file.
 */
public class Graphic extends IlvGraphicSet {

    /**
     * Those images are used in the icon to represent the "color" state of the object
     */
    private static final ImageIcon redBall = new ImageIcon(Graphic.class.getResource("ballRed.gif"));
    private static final ImageIcon greenBall = new ImageIcon(Graphic.class.getResource("ballGreen.gif"));
    private static final ImageIcon blueBall = new ImageIcon(Graphic.class.getResource("ballBlue.gif"));
    private static final ImageIcon blackBall = new ImageIcon(Graphic.class.getResource("ballBlack.gif"));

    /**
     * The "color" property of this object
     */
    private String color = "green";

    
    // The graphic objects
    /**
     * A main icon displaying an image according to the color state of the object
     */
    private IlvIcon icon;
    
    /**
     * A text used to display the name of the underlaying node of the model
     */
    private IlvText label;
    
    /**
     * A text displaying the position of the object according to the properties of the node in the model
     */
    private IlvText position;
    
    
    
    /**
     * Creates the object and its several parts
     */
    public Graphic() {
        super();
        customize();
    }
    
    /**
     * Creates all the parts of the object
     */
    private void customize() {

        // creates a label on the top of the object
        label = new IlvText(new IlvPoint(0,0),"");
        label.setForeground(Color.YELLOW);
        addObject(label,false);
        
        // creates a central icon
        icon =  new IlvIcon(greenBall.getImage(),new IlvRect(0,0,18,18));        
        addObject(icon,false);
        
        // creates an other label under the icon
        position = new IlvText(new IlvPoint(0,30),"");
        position.setFont( new Font("Arial",Font.PLAIN,10));
        position.setForeground(Color.WHITE);
        addObject(position,false);
    }
    
    
    /**
     * Returns the value of the "color" property
     */
    public String getColor() {
        return color;
    }

    /**
     * Sets the new value of the "color" property and change the image 
     * of the icon according to this new value
     * 
     * @param c The new color
     */
    public void setColor(String c) {
        if( c.equals(color)==false){
            this.color = c;
            
            if(color.equals("green")) icon.setImage(greenBall.getImage());
            if(color.equals("red")) icon.setImage(redBall.getImage());
            if(color.equals("blue")) icon.setImage(blueBall.getImage());
            if(color.equals("black")) icon.setImage(blackBall.getImage());
        }
    }
    
    /**
     * Returns the text displayed in the "label" part
     */
    public String getLabel() {
        return label.getLabel();
    }

    /**
     * Sets the text that must be displayed in the "label" part
     * @param str
     */
    public void setLabel(String str) {
        label.setLabel(str);
    }
    
    /**
     * Returns the text displayed in the "position" part
     * 
     */
    public String getPosition() {
        return position.getLabel();
    }
    
    /**
     * Sets the new text to display in the "position" part
     * 
     * @param str The new position
     */
    public void setPosition(String str) {
        position.setLabel(str);
    }
    
    
}