private void copyToRequest(
      SubmitContext context,
      AbstractHttpRequestInterface<?> wsdlRequest,
      EndpointDefaults def,
      String requestUsername,
      String requestPassword,
      String requestDomain,
      String defUsername,
      String defPassword,
      String defDomain,
      com.eviware.soapui.config.CredentialsConfig.AuthType.Enum authType) {
    // only set if not set in request
    String wssType = def.getWssType();

    if (wssType != null) {
      HttpAuthenticationRequestFilter.initRequestCredentials(
          context, null, project.getSettings(), null, null, null);
    } else {
      HttpAuthenticationRequestFilter.initRequestCredentials(
          context, defUsername, project.getSettings(), defPassword, defDomain, authType);
    }

    String wssTimeToLive = def.getWssTimeToLive();
    if (wssTimeToLive == null) {
      wssTimeToLive = "";
    }

    try {
      WssAuthenticationRequestFilter.setWssHeaders(
          context, defUsername, defPassword, wssType, wssTimeToLive);
    } catch (Exception e) {
      SoapUI.logError(e);
    }
  }
 public void changeEndpoint(String oldEndpoint, String newEndpoint) {
   synchronized (defaults) {
     EndpointDefaults endpointDefaults = defaults.remove(oldEndpoint);
     if (endpointDefaults != null) {
       endpointDefaults.getConfig().setStringValue(newEndpoint);
       defaults.put(newEndpoint, endpointDefaults);
     }
   }
 }
  public PropertyExpansion[] getPropertyExpansions() {
    PropertyExpansionsResult result = new PropertyExpansionsResult(project, this);

    for (EndpointDefaults ed : defaults.values()) {
      result.addAll(ed.getPropertyExpansions());
    }

    return result.toArray();
  }
  private void complementRequest(
      SubmitContext context,
      AbstractHttpRequestInterface<?> httpRequest,
      EndpointDefaults def,
      String requestUsername,
      String requestPassword,
      String requestDomain,
      String defUsername,
      String defPassword,
      String defDomain,
      com.eviware.soapui.config.CredentialsConfig.AuthType.Enum authType) {
    String username = StringUtils.hasContent(requestUsername) ? requestUsername : defUsername;
    String password = StringUtils.hasContent(requestPassword) ? requestPassword : defPassword;

    if (httpRequest instanceof WsdlRequest) {
      WsdlRequest wsdlRequest = (WsdlRequest) httpRequest;
      // only set if not set in request
      String wssType =
          StringUtils.isNullOrEmpty(wsdlRequest.getWssPasswordType())
              ? def.getWssType()
              : (StringUtils.hasContent(username) && StringUtils.hasContent(password))
                  ? null
                  : wsdlRequest.getWssPasswordType();

      String wssTimeToLive =
          StringUtils.isNullOrEmpty(wsdlRequest.getWssTimeToLive()) ? def.getWssTimeToLive() : null;

      if (!StringUtils.hasContent(wssType)
          && (StringUtils.hasContent(username) || StringUtils.hasContent(password))) {
        String domain = StringUtils.hasContent(requestDomain) ? requestDomain : defDomain;
        HttpAuthenticationRequestFilter.initRequestCredentials(
            context, username, project.getSettings(), password, domain, authType);
      } else if (StringUtils.hasContent(wssType) || StringUtils.hasContent(wssTimeToLive)) {
        try {
          // set to null so existing don't get removed
          if (wssTimeToLive != null && wssTimeToLive.length() == 0) {
            wssTimeToLive = null;
          }

          if (StringUtils.hasContent(username) || StringUtils.hasContent(password)) {
            WssAuthenticationRequestFilter.setWssHeaders(
                context, username, password, wssType, wssTimeToLive);
          }
        } catch (Exception e) {
          SoapUI.logError(e);
        }
      }
    } else {
      if ((StringUtils.hasContent(username) || StringUtils.hasContent(password))) {
        String domain = StringUtils.hasContent(requestDomain) ? requestDomain : defDomain;
        HttpAuthenticationRequestFilter.initRequestCredentials(
            context, username, project.getSettings(), password, domain, authType);
      }
    }
  }
  private void overrideRequest(
      SubmitContext context,
      AbstractHttpRequestInterface<?> wsdlRequest,
      EndpointDefaults def,
      String requestUsername,
      String requestPassword,
      String requestDomain,
      String defUsername,
      String defPassword,
      String defDomain,
      com.eviware.soapui.config.CredentialsConfig.AuthType.Enum authType) {
    String username = StringUtils.hasContent(defUsername) ? defUsername : requestUsername;
    String password = StringUtils.hasContent(defPassword) ? defPassword : requestPassword;

    if (StringUtils.hasContent(username) || StringUtils.hasContent(password)) {
      // only set if not set in request
      String wssType = def.getWssType();
      String wssTimeToLive = def.getWssTimeToLive();

      if (wssType == null) {
        String domain = StringUtils.hasContent(defDomain) ? defDomain : requestDomain;
        HttpAuthenticationRequestFilter.initRequestCredentials(
            context, username, project.getSettings(), password, domain, authType);
      }

      if (StringUtils.hasContent(wssType) || StringUtils.hasContent(wssTimeToLive)) {
        try {
          // set to null so existing don't get removed
          if (wssTimeToLive != null && wssTimeToLive.length() == 0) {
            wssTimeToLive = null;
          }

          WssAuthenticationRequestFilter.setWssHeaders(
              context, username, password, wssType, wssTimeToLive);
        } catch (Exception e) {
          SoapUI.logError(e);
        }
      }
    }
  }
  protected void applyDefaultsToWsdlRequest(
      SubmitContext context, AbstractHttpRequestInterface<?> wsdlRequest, EndpointDefaults def) {
    String requestUsername = PropertyExpander.expandProperties(context, wsdlRequest.getUsername());
    String requestPassword = PropertyExpander.expandProperties(context, wsdlRequest.getPassword());
    String requestDomain = PropertyExpander.expandProperties(context, wsdlRequest.getDomain());

    String defUsername = PropertyExpander.expandProperties(context, def.getUsername());
    String defPassword = PropertyExpander.expandProperties(context, def.getPassword());
    String defDomain = PropertyExpander.expandProperties(context, def.getDomain());

    Enum authType = AuthType.Enum.forString(wsdlRequest.getAuthType());

    if (def.getMode() == EndpointConfig.Mode.OVERRIDE) {
      overrideRequest(
          context,
          wsdlRequest,
          def,
          requestUsername,
          requestPassword,
          requestDomain,
          defUsername,
          defPassword,
          defDomain,
          authType);
    } else if (def.getMode() == EndpointConfig.Mode.COPY) {
      copyToRequest(
          context,
          wsdlRequest,
          def,
          requestUsername,
          requestPassword,
          requestDomain,
          defUsername,
          defPassword,
          defDomain,
          authType);
    } else if (def.getMode() == EndpointConfig.Mode.COMPLEMENT) {
      complementRequest(
          context,
          wsdlRequest,
          def,
          requestUsername,
          requestPassword,
          requestDomain,
          defUsername,
          defPassword,
          defDomain,
          authType);
    }
  }