private void readServiceProvider() {
    if (federation != null && serviceProvider != null) {
      Operation spOp =
          new Operation.Builder(
                  READ_RESOURCE_OPERATION,
                  SERVICE_PROVIDER_TEMPLATE.resolve(statementContext, federation, serviceProvider))
              .param(RECURSIVE, true)
              .build();
      Operation sdOp =
          new Operation.Builder(
                  READ_CHILDREN_NAMES_OPERATION,
                  AddressTemplate.of("{selected.profile}/subsystem=security")
                      .resolve(statementContext))
              .param(CHILD_TYPE, "security-domain")
              .build();
      dispatcher.execute(
          new DMRAction(new Composite(spOp, sdOp)),
          new SimpleCallback<DMRResponse>() {
            @Override
            public void onSuccess(final DMRResponse dmrResponse) {
              ModelNode response = dmrResponse.get();

              if (response.isFailure()) {
                Log.error(
                    "Failed to read service provider "
                        + serviceProvider
                        + " from federation "
                        + federation,
                    response.getFailureDescription());
              } else {
                ModelNode serviceProvider = response.get(RESULT).get("step-1").get(RESULT);
                List<ModelNode> sdNodes = response.get(RESULT).get("step-2").get(RESULT).asList();

                getView()
                    .update(
                        serviceProvider,
                        Ordering.natural()
                            .immutableSortedCopy(
                                FluentIterable.from(sdNodes).transform(ModelNode::asString)));
              }
            }
          });
    }
  }
 public void modifyServiceProvider(final Map<String, Object> changedValues) {
   AddressTemplate template =
       SERVICE_PROVIDER_TEMPLATE.replaceWildcards(federation, serviceProvider);
   modify(template, serviceProvider, changedValues);
 }