protected void createTransfer(StringToStringMap values) {
    String propertyTransfer = values.get(TRANSFER_STEP);

    WsdlTestCase testCase = (WsdlTestCase) request.getTestCase();
    TransferResponseValuesTestStep transferStep =
        (TransferResponseValuesTestStep) testCase.getTestStepByName(propertyTransfer);

    if (transferStep == null) {
      int index = testCase.getIndexOfTestStep(request.getRequestStep());
      transferStep =
          (TransferResponseValuesTestStep)
              testCase.insertTestStep(
                  TransferValuesStepFactory.TRANSFER_TYPE, propertyTransfer, index);
    }

    if (transferStep == null) {
      UISupport.showErrorMessage("Missing transfer step [" + propertyTransfer + "]");
      return;
    }

    PropertyTransfer transfer = transferStep.getTransferByName(values.get(TRANSFER_NAME));
    if (transfer == null) transfer = transferStep.addTransfer(values.get(TRANSFER_NAME));

    transfer.setTargetStepName(request.getRequestStep().getName());
    transfer.setTargetPropertyName("Request");
    transfer.setTargetPath(values.get(TARGET_XPATH));

    String sourceStepName = values.get(SOURCE_STEP);
    transfer.setSourceStepName(sourceStepName);

    TestStep sourceStep = testCase.getTestStepByName(sourceStepName);
    if (sourceStep == null) {
      sourceStep =
          (WsdlPropertiesTestStep)
              testCase.insertTestStep(PropertiesStepFactory.PROPERTIES_TYPE, sourceStepName, 0);
    }

    String sourcePropertyName = values.get(SOURCE_PROPERTY);

    if (sourceStep.getProperty(sourcePropertyName) == null
        && sourceStep instanceof WsdlPropertiesTestStep) {
      ((WsdlPropertiesTestStep) sourceStep).addProperty(sourcePropertyName);
    }

    transfer.setSourcePropertyName(sourcePropertyName);

    if (values.getBoolean(OPEN_EDITOR)) {
      TransferResponseValuesDesktopPanel panel =
          (TransferResponseValuesDesktopPanel) UISupport.showDesktopPanel(transferStep);

      panel.selectTransfer(transfer);
    }
  }
  private Object[] getPropertyTransferSteps() {
    List<TestStep> steps = request.getTestCase().getTestStepList();
    List<String> result = new ArrayList<String>();

    result.add(null);

    for (TestStep step : steps) {
      if (step instanceof TransferResponseValuesTestStep) result.add(step.getName());
    }

    return result.toArray();
  }
  private Object[] getSourceProperties() {
    if (dialog == null) return new Object[] {null};

    String sourceStep = dialog.getValues().get(SOURCE_STEP);
    TestStep testStep = request.getTestCase().getTestStepByName(sourceStep);
    if (testStep == null) return new Object[] {null};

    StringList result = new StringList();
    result.addAll(testStep.getPropertyNames());

    if (testStep instanceof WsdlPropertiesTestStep) {
      result.add(0, null);
    }

    return result.toArray();
  }
  private Object[] getPropertyTransfers() {
    if (dialog == null) return new Object[] {null};

    String targetStep = dialog.getValues().get(TRANSFER_STEP);
    TransferResponseValuesTestStep testStep =
        (TransferResponseValuesTestStep) request.getTestCase().getTestStepByName(targetStep);

    if (testStep == null) return new Object[] {null};

    StringList result = new StringList();
    result.add(null);

    for (int c = 0; c < testStep.getTransferCount(); c++) {
      result.add(testStep.getTransferAt(c).getName());
    }

    return result.toArray();
  }
  private String findPropertyTransfer() {
    int ix = request.getTestCase().getIndexOfTestStep(request.getRequestStep());
    int ix2 = ix + 1;

    while (ix2 < request.getTestCase().getTestStepCount()) {
      if (request.getTestCase().getTestStepAt(ix2) instanceof TransferResponseValuesTestStep)
        return request.getTestCase().getTestStepAt(ix2).getName();

      ix2++;
    }

    ix2 = 0;
    while (ix2 < ix) {
      if (request.getTestCase().getTestStepAt(ix2) instanceof TransferResponseValuesTestStep)
        return request.getTestCase().getTestStepAt(ix2).getName();

      ix2++;
    }

    return null;
  }