/**
   * a field is sending a new value (out)
   *
   * @throws java.lang.Exception
   */
  @Override
  public void out() throws Exception {
    Object val = fa.getFieldValue();
    //        Object val = access;

    if (ens.shouldFire()) {
      DataflowEvent e = new DataflowEvent(ens.getController(), this, val);
      ////            DataflowEvent e = new DataflowEvent(ens.getController(), this,
      // access.toObject());
      ens.fireOut(e);
      //            // the value might be altered
      val = e.getValue();
    }
    // if data==null this unconsumed @Out, its OK but we do not want to set it.
    if (data != null) {
      data.setFieldValue(val);
    }
    fa.out();
  }
  /**
   * a field is receiving a new value (in)
   *
   * @throws java.lang.Exception
   */
  @Override
  public void in() throws Exception {
    if (data == null) {
      throw new ComponentException("Not connected: " + toString());
    }
    Object val = data.getFieldValue();
    // fire only if there is a listener
    if (ens.shouldFire()) {
      DataflowEvent e = new DataflowEvent(ens.getController(), this, val);
      ////            DataflowEvent e = new DataflowEvent(ens.getController(), this,
      // access.toObject());
      ens.fireIn(e);
      //            // the value might be altered
      val = e.getValue();
    }

    //        access.pass((Access) val);
    fa.setFieldValue(val);
  }