@Override
  public EList<Model> execute(EList<Model> actualParameters) throws Exception {

    EList<Model> result = super.execute(actualParameters);
    KleisliBinaryModelRel kTraceModelRel = (KleisliBinaryModelRel) result.get(1);
    Model modelPivot = kTraceModelRel.getSourceModel();
    kTraceModelRel.setSourceModel(kTraceModelRel.getTargetModel());
    kTraceModelRel.setTargetModel(modelPivot);
    kTraceModelRel.getModelEndpoints().move(1, 0);
    kTraceModelRel.getModelEndpointRefs().move(1, 0);
    for (Link kLink : kTraceModelRel.getLinks()) {
      kLink.getModelElemEndpoints().move(1, 0);
      kLink.getModelElemEndpointRefs().move(1, 0);
    }
    for (LinkReference kLinkRef : kTraceModelRel.getLinkRefs()) {
      kLinkRef.getModelElemEndpointRefs().move(1, 0);
      ModelElementReference modelElemRefPivot =
          ((BinaryLinkReference) kLinkRef).getSourceModelElemRef();
      ((BinaryLinkReference) kLinkRef)
          .setSourceModelElemRef(((BinaryLinkReference) kLinkRef).getTargetModelElemRef());
      ((BinaryLinkReference) kLinkRef).setTargetModelElemRef(modelElemRefPivot);
    }

    return result;
  }
  /** {@inheritDoc} */
  @Override
  public Object[] getChildren(Object parentElement) {

    if (parentElement instanceof ModelRel) {
      List<LinkReference> linkTypeRefs = new ArrayList<LinkReference>();
      for (LinkReference linkTypeRef : ((ModelRel) parentElement).getLinkRefs()) {
        if (allowedLinkTypeUris == null || allowedLinkTypeUris.contains(linkTypeRef.getUri())) {
          linkTypeRefs.add(linkTypeRef);
        }
      }
      return linkTypeRefs.toArray();
    }

    return new Object[] {};
  }