package ckelling.baukasten;

/**
 * Editor_DescriptionSimpleBus.java
 *
 * Diese Datenstruktur enthaelt zusaetzliche Angaben zu jedem SimpleBus,
 * der mit dem Editor angelegt wurde:
 * - X/Y-Koordinate: Entweder fester Wert oder ermittelbar durch 
 *  rechnerKomponente.getCoordinate(String) + Konstante
 * - Hoehe/Breite: Entweder fester Wert oder ermittelbar durch
 *  (rechnerKomponente.getCoordinate(String) - eigene X/Y-Koordinate + Konstante)
 * - Name der Variable im Java-Code
 * - entsprechende Angaben fuer jede Abzweigung des Busses
 *
 **/
 
import java.awt.Point;
import java.util.*;

public class Editor_DescriptionSimpleBus extends Editor_Description
{
	private SimpleBus			busSource;
	private Vector				edgeDescriptions;
	
	
	public Editor_DescriptionSimpleBus()
	{
		super(4);
		busSource = null;
		
		edgeDescriptions = new Vector(10, 1);
	}


	public boolean isHorizontalBus()
	{
		if (evaluateWidth() == 0)
			return false;
		else
			return true;
	}

	
//// Abzweigungen des Busses ////

	public void addEdge(Editor_DescriptionSimpleEdge dse)
	{
		edgeDescriptions.addElement(dse);
	}
	
	public void removeEdge(String edgeLabel)
	{
		Editor_DescriptionSimpleEdge dse;
		
		for (int i = 0; i < edgeDescriptions.size(); i++)
		{
			dse = (Editor_DescriptionSimpleEdge) edgeDescriptions.elementAt(i);
			if (dse.getLabel().equals(edgeLabel))
			{
				edgeDescriptions.removeElementAt(i);
				break;
			}
		}
	} /* end removeEdge */

	public Editor_DescriptionSimpleEdge getEdge(String edgeLabel)
	{
		Editor_DescriptionSimpleEdge dse = null;
		int i;
		
		for (i = 0; i < edgeDescriptions.size(); i++)
		{
			dse = (Editor_DescriptionSimpleEdge) edgeDescriptions.elementAt(i);
			if (dse.getLabel().equals(edgeLabel))
				break;
		}
		
		if (i < edgeDescriptions.size())
			return dse;
		else
			return null;
	} /* end getEdge */
	
	public Vector getEdges()
	{
		return edgeDescriptions;
	}

	public int getNumberOfEdges()
	{
		return edgeDescriptions.size();
	}
	
	public String[] getEdgeLabels()
	{
		String[] labels = new String[edgeDescriptions.size()];
		
		for (int i = 0; i < labels.length; i++)
			labels[i] = ((Editor_DescriptionSimpleEdge) edgeDescriptions.elementAt(i)).getLabel();
			
		return labels;	
	}
	
	public boolean areConstantsOnly()
	{
		if (! super.areConstantsOnly())
			return false;
			
		for (int i = 0; i < edgeDescriptions.size(); i++)
		{
			Editor_DescriptionSimpleEdge dse = (Editor_DescriptionSimpleEdge) edgeDescriptions.elementAt(i);
			if (! dse.areConstantsOnly())
				return false;
		}
				
		return true;		
	}
			
	
	public void changeReferences(Editor_Source oldComponent, Editor_Source newComponent, String deletedEdge)
	{
		super.changeReferences(oldComponent, newComponent, deletedEdge);
		
		for (int i = 0; i < edgeDescriptions.size(); i++)
			((Editor_DescriptionSimpleEdge) edgeDescriptions.elementAt(i)).changeReferences(oldComponent, newComponent, deletedEdge);
	}
	
} /* end Editor_DescriptionSimpleBus */
