package org.codecompany.plugins.intelliprof.diagram;

import com.intellij.openapi.Disposable;
import com.intellij.openapi.graph.GraphManager;
import com.intellij.openapi.graph.builder.GraphBuilder;
import com.intellij.openapi.graph.builder.GraphBuilderFactory;
import com.intellij.openapi.graph.builder.components.BasicGraphComponent;
import com.intellij.openapi.graph.view.Graph2D;
import com.intellij.openapi.graph.view.Graph2DView;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;

import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: TS00063
 * Date: 09/12/2007
 * Time: 01:59:20
 * To change this template use File | Settings | File Templates.
 */
public class DiagramViewer implements Disposable {
    private Project project;
    private Graph2D graph;
    private Graph2DView view;
    private DiagramGraphDataModel model;
    private BasicGraphComponent graphComponent;

    private List<UMLClass> umlClasses = new ArrayList<UMLClass>();
    private List<UMLCall> umlCalls = new ArrayList<UMLCall>();

    public DiagramViewer(Project project) {
        this.project = project;
    }

    public void addClass(String name) {
        UMLClass umlClass = new UMLClass(name);
        umlClasses.add(umlClass);
    }

    public void addClass(String name, int pos) {
        UMLClass umlClass = new UMLClass(name);
        umlClasses.add(pos, umlClass);
    }

    public void addEdge(String sourceName, String targetName, String name) {

    }

    public JComponent createDiagram() {
        model = new DiagramGraphDataModel(project);
        graph = GraphManager.getGraphManager().createGraph2D();
        view = GraphManager.getGraphManager().createGraph2DView();

        DiagramPresentationModel pres = new DiagramPresentationModel(project, graph, model);

        final GraphBuilder graphBuilder =
                GraphBuilderFactory.getInstance(project).createGraphBuilder(graph, view, model, pres);

        model.setGraphBuilder(graphBuilder);
        graphComponent = new BasicGraphComponent(graphBuilder);


        model.addNode(new UMLClass("A"));
        model.addNode(new UMLClass("B"));
        model.addNode(new UMLClass("C"));
        model.addNode(new UMLClass("D"));


        model.doLayout();

        Disposer.register(this, graphComponent);

        return graphComponent.getComponent();
    }

    public void dispose() {
        graphComponent = null;
    }
}
