/**
   * <code>ConstraintNode</code> - constructor
   *
   * @param constraint - <code>PwConstraint</code> -
   * @param variableNode - <code>VariableNode</code> -
   * @param constraintLocation - <code>Point</code> -
   * @param backgroundColor - <code>Color</code> -
   * @param isFreeToken - <code>boolean</code> -
   * @param isDraggable - <code>boolean</code> -
   * @param partialPlanView - <code>PartialPlanView</code> -
   */
  public ConstraintNode(
      PwConstraint constraint,
      VariableNode variableNode,
      Point constraintLocation,
      Color backgroundColor,
      boolean isFreeToken,
      boolean isDraggable,
      PartialPlanView partialPlanView) {
    super();
    this.constraint = constraint;
    this.variableNode = variableNode;
    this.isFreeToken = isFreeToken;
    this.partialPlanView = partialPlanView;
    variableNodeList = new ArrayList();
    variableNodeList.add(variableNode);
    constraintVariableLinkList = new ArrayList();
    constraintVariableLinkMap = new HashMap();

    inLayout = false;
    isUnaryConstraint = true;
    if (constraint.getVariablesList().size() > 1) {
      isUnaryConstraint = false;
    }
    isDebug = false;
    // isDebug = true;
    StringBuffer labelBuf = new StringBuffer(constraint.getName());
    labelBuf.append("\nkey=").append(constraint.getId().toString());
    nodeLabel = labelBuf.toString();
    // System.err.println( "ConstraintNode: " + nodeLabel);

    hasBeenVisited = false;
    resetNode(false);

    configure(constraintLocation, backgroundColor, isDraggable);
  } // end constructor
 /**
  * <code>getToolTipText</code> - when over 1/8 scale overview constraint node
  *
  * @param isOverview - <code>boolean</code> -
  * @return - <code>String</code> -
  */
 public String getToolTipText(boolean isOverview) {
   StringBuffer tip = new StringBuffer("<html> ");
   tip.append(constraint.getName());
   tip.append("<br>key=");
   tip.append(constraint.getId().toString());
   tip.append("</html>");
   return tip.toString();
 } // end getToolTipText
 /**
  * <code>getToolTipText</code>
  *
  * @return - <code>String</code> -
  */
 public String getToolTipText() {
   String operation = null;
   if (areNeighborsShown) {
     operation = "close";
   } else {
     operation = "open";
   }
   if ((!isUnaryConstraint) && (partialPlanView instanceof ConstraintNetworkView)) {
     StringBuffer tip = new StringBuffer("<html> ");
     tip.append(constraint.getType());
     if (isDebug) {
       tip.append(" linkCnt ").append(String.valueOf(variableLinkCount));
     }
     tip.append("<br> Mouse-L: ").append(operation);
     return tip.append(" nearest token variables</html>").toString();
   } else {
     return constraint.getType();
   }
 } // end getToolTipText
 /**
  * <code>resetNode</code> - when closed by token close traversal
  *
  * @param isDebug - <code>boolean</code> -
  */
 public void resetNode(boolean isDebug) {
   areNeighborsShown = false;
   if (isDebug && (variableLinkCount != 0)) {
     System.err.println(
         "reset constraint node: "
             + constraint.getId()
             + "; variableLinkCount != 0: "
             + variableLinkCount);
   }
   variableLinkCount = 0;
 } // end resetNode
 /**
  * <code>addConstraintNavNode</code>
  *
  * @param constraint - <code>PwConstraint</code> -
  * @return - <code>ConstraintNavNode</code> -
  */
 protected final ConstraintNavNode addConstraintNavNode(final PwConstraint constraint) {
   // ConstraintNetwork.ConstraintNode
   boolean isDraggable = true;
   PwVariable variable = (PwVariable) constraint.getVariablesList().get(0);
   ConstraintNavNode constraintNavNode =
       (ConstraintNavNode) entityNavNodeMap.get(constraint.getId());
   if (constraintNavNode == null) {
     constraintNavNode =
         new ConstraintNavNode(
             constraint,
             new Point(
                 ViewConstants.TIMELINE_VIEW_X_INIT * 2, ViewConstants.TIMELINE_VIEW_Y_INIT * 2),
             NavNodeGenerics.getVariableColor(variable, this),
             isDraggable,
             this);
     entityNavNodeMap.put(constraint.getId(), constraintNavNode);
     jGoDocument.addObjectAtTail(constraintNavNode);
   }
   return constraintNavNode;
 } // end renderConstraintNode
 /**
  * <code>toString</code>
  *
  * @return - <code>String</code> -
  */
 public String toString() {
   return constraint.getId().toString();
 }