/**
   * Remove entire composite Fig from Diagram. Discover the attached FigEdgeAssociationClass and the
   * FigClassAssociationClass attached to that. Remove them from the diagram before removing this.
   */
  @Override
  protected void removeFromDiagramImpl() {
    FigEdgeAssociationClass figEdgeLink = null;
    List edges = null;

    FigEdgePort figEdgePort = getEdgePort();
    if (figEdgePort != null) {
      edges = figEdgePort.getFigEdges();
    }

    if (edges != null) {
      for (Iterator it = edges.iterator(); it.hasNext() && figEdgeLink == null; ) {
        Object o = it.next();
        if (o instanceof FigEdgeAssociationClass) {
          figEdgeLink = (FigEdgeAssociationClass) o;
        }
      }
    }

    if (figEdgeLink != null) {
      FigNode figClassBox = figEdgeLink.getDestFigNode();
      if (!(figClassBox instanceof FigClassAssociationClass)) {
        figClassBox = figEdgeLink.getSourceFigNode();
      }
      figEdgeLink.removeFromDiagramImpl();
      ((FigClassAssociationClass) figClassBox).removeFromDiagramImpl();
    }

    super.removeFromDiagramImpl();
  }
  /**
   * Gets FigClassAssociationClass that is contained in this FigAssociationClass.
   *
   * @return FigClassAssociationClass that is contained in this FigAssociationClass.
   */
  public FigClassAssociationClass getAssociationClass() {
    FigEdgeAssociationClass figEdgeLink = null;
    List edges = null;

    FigEdgePort figEdgePort = this.getEdgePort();
    if (figEdgePort != null) {
      edges = figEdgePort.getFigEdges();
    }

    if (edges != null) {
      for (Iterator it = edges.iterator(); it.hasNext() && figEdgeLink == null; ) {
        Object o = it.next();
        if (o instanceof FigEdgeAssociationClass) {
          figEdgeLink = (FigEdgeAssociationClass) o;
        }
      }
    }

    FigNode figClassBox = null;
    if (figEdgeLink != null) {
      figClassBox = figEdgeLink.getDestFigNode();
      if (!(figClassBox instanceof FigClassAssociationClass)) {
        figClassBox = figEdgeLink.getSourceFigNode();
      }
    }
    return (FigClassAssociationClass) figClassBox;
  }
 /** Create a FigCommentPort if needed */
 public void makeEdgePort() {
   if (edgePort == null) {
     edgePort = new FigEdgePort();
     edgePort.setOwner(getOwner());
     edgePort.setVisible(false);
     addPathItem(edgePort, new PathConvPercent(this, 50, 0));
   }
 }
  /**
   * Gets FigEdgeAssociationClass that is contained in this FigAssociationClass.
   *
   * @return FigEdgeAssociationClass that is contained in this FigAssociationClass
   */
  public FigEdgeAssociationClass getFigEdgeAssociationClass() {
    FigEdgeAssociationClass figEdgeLink = null;
    List edges = null;

    FigEdgePort figEdgePort = this.getEdgePort();
    if (figEdgePort != null) {
      edges = figEdgePort.getFigEdges();
    }

    if (edges != null) {
      for (Iterator it = edges.iterator(); it.hasNext() && figEdgeLink == null; ) {
        Object o = it.next();
        if (o instanceof FigEdgeAssociationClass) {
          figEdgeLink = (FigEdgeAssociationClass) o;
        }
      }
    }

    return figEdgeLink;
  }