/** @generated */
  protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info)
      throws ExecutionException {
    EForeignKey newElement = EConstraintsFactory.eINSTANCE.createForeignKey();

    EBaseTable owner = (EBaseTable) getElementToEdit();
    owner.getConstraints().add(newElement);

    doConfigure(newElement, monitor, info);

    ((CreateElementRequest) getRequest()).setNewElement(newElement);
    return CommandResult.newOKCommandResult(newElement);
  }
  private void setPrimaryKey(EColumn owner, boolean newValue) {
    boolean oldValue = isPrimaryKey(owner);

    if (oldValue == newValue) return;

    EBaseTable baseTable = (EBaseTable) owner.getTable();

    EPrimaryKey pk = baseTable.getPrimaryKey();

    if (newValue) {
      if (pk == null) {
        pk = EConstraintsFactory.eINSTANCE.createPrimaryKey();
        baseTable.getConstraints().add(pk);
      }

      if (!pk.getMembers().contains(owner)) pk.getMembers().add(owner);
    } else if (pk != null) {
      if (pk.getMembers().contains(owner)) pk.getMembers().remove(owner);
    }
  }
  @Override
  public void configure(IParametrizableTrigger parametrizableTrigger) {

    Assert.isTrue(
        parametrizableTrigger instanceof TableConstraintInitializerTrigger, "Invalid Trigger Type");

    TableConstraintInitializerTrigger trigger =
        (TableConstraintInitializerTrigger) parametrizableTrigger;

    // Se está creando una nueva FK
    if (trigger.getNewConstraint() instanceof EForeignKey) {
      EForeignKey foreignKey = (EForeignKey) trigger.getNewConstraint();
      EBaseTable referencedTable = foreignKey.getParentTable();

      // Si la tabla origen tiene mas de una UK, el usuario deberá elegir una (Bugzilla #20280)
      if (referencedTable.getUniqueConstraints().size() > 1) {
        String msg = TriggerOptionsMessages.TableConstraintInitializerTriggerConfigurator_Select_UK;

        String[] ukNames = new String[referencedTable.getUniqueConstraints().size()];
        int[] ukIds = new int[referencedTable.getUniqueConstraints().size()];

        for (int i = 0; i < referencedTable.getUniqueConstraints().size(); i++) {
          EUniqueConstraint uk = referencedTable.getUniqueConstraints().get(i);
          ukNames[i] = uk.getName();
          String members = uk.getMembers().get(0) == null ? "" : uk.getMembers().get(0).getName();
          for (int j = 1; j < uk.getMembers().size(); j++) {
            members = members + ", " + uk.getMembers().get(j).getName();
          }
          ukNames[i] = uk.getName() + " (" + members + ")";
          ukIds[i] = i;
        }

        EUniqueConstraint defaultUK = null;

        if (referencedTable.getPrimaryKey() != null) defaultUK = referencedTable.getPrimaryKey();
        else
          defaultUK =
              referencedTable
                  .getUniqueConstraints()
                  .get(0); // Si llegamos aca, al menos una UK debe existir

        int defaultOption = referencedTable.getUniqueConstraints().indexOf(defaultUK);

        int selectedOption =
            openOptionsDialog(NEW_FOREIGN_KEY, msg, ukNames, ukIds, defaultOption, -1);

        // EL usuario puede haber cerrado el dialogo con la X. En ese caso no se selecciona ninguna
        // UK y la FK quedará sin UK.
        if (selectedOption != -1)
          trigger.setForeignKeyUniqueConstraint(
              referencedTable.getUniqueConstraints().get(selectedOption));

      } else if (referencedTable.getUniqueConstraints().size() == 1) {
        trigger.setForeignKeyUniqueConstraint(referencedTable.getUniqueConstraints().get(0));
      }
    }
  }