package structure;


import java.util.*;
import java.awt.*;
import javax.swing.*;

public class Graph {
    Vector nodes;
    Vector edges;
    public String title;

    public Graph(String s) {
        title = s;
        nodes = new Vector();
        edges = new Vector();
    }

    public Node findNode(String lbl) {
        for (int i = 0 ; i < nodes.size() ; i++) {
            if (((Node)nodes.elementAt(i)).lbl.equals(lbl)) {
                return (Node)nodes.elementAt(i);
            }
        }
        return null;
    }

    public Node addNode(String lbl, String[] text, Color nclr, Color bclr, Color tclr, 
                                             double y, double x,String[] s,int shape) {
        Node n = new Node();
        n.x = x*100;
        n.y = y*100;
        n.lbl = lbl;
        n.text=text;
        n.shape=shape;
        n.nclr=nclr;
        n.bclr=bclr;
        n.tclr=tclr;
        if(s!=null)
            n.addBubbleAttr(s,Color.yellow);
        nodes.addElement(n);
        return n;
    }
    public Edge addEdge(String from, String to, String lbl, String text,
                                                           Color c, int type){
        Node from1 = findNode(from);
        Node to1 = findNode(to);
        if((from1==null)||(to1==null)) { 
                System.out.println("error");
                return null;
        }     
        Edge e = new Edge();
        e.from = from1;
        e.to = to1;
        e.text = text;
        e.clr = c;
        e.type = type; 
        e.lbl = lbl;
        if(text!=null)
            e.addBubbleAttr(text,Color.cyan);
        edges.addElement(e);
        return e;
        
    }

    
    public Node getNode(int i){
       return((Node)nodes.elementAt(i));
    }

    public Edge getEdge(int i){
       return((Edge)edges.elementAt(i));
    }

    public int getEdgeSize(){
       return(edges.size());
    }

    public int getNodeSize(){
       return(nodes.size());
    }



    public void paintComponent(Graphics g,int npos,Vector epos){
      int i, j;

        for (i = 0 ; i < nodes.size() ; i++){  
           ((Node)nodes.elementAt(i)).paintComponent(g); 
	        }

        for (i = 0 ; i < edges.size() ; i++){ 
           ((Edge)edges.elementAt(i)).paintComponent(g);
        }


        if(npos!=-1) 
            ((Node)nodes.elementAt(npos)).drawBubble(g);

        for (i=0;i<epos.size();i++){
            j = ((Integer)epos.elementAt(i)).intValue();
            if(((Edge)edges.elementAt(j)).getHint()!=null)
            ((Edge)edges.elementAt(j)).drawBubble(g);
        }
    }

}