GEODE-7194: simplify CMS 'get' return type (#4047)

diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
index 9b60f00..99ece35 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
@@ -15,6 +15,7 @@
 
 package org.apache.geode.management.internal.rest;
 
+import static org.apache.geode.test.junit.assertions.ClusterManagementGetResultAssert.assertManagementGetResult;
 import static org.apache.geode.test.junit.assertions.ClusterManagementListResultAssert.assertManagementListResult;
 import static org.apache.geode.test.junit.assertions.ClusterManagementRealizationResultAssert.assertManagementResult;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -35,6 +36,7 @@
 import org.apache.geode.management.runtime.GatewayReceiverInfo;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.assertions.ClusterManagementGetResultAssert;
 import org.apache.geode.test.junit.assertions.ClusterManagementListResultAssert;
 import org.apache.geode.test.junit.rules.MemberStarterRule;
 
@@ -116,6 +118,36 @@
         assertThat(result.getRuntimeInfo()).hasSize(0);
       }
     }
-  }
 
+    GatewayReceiver filter1 = new GatewayReceiver();
+    filter1.setGroup("group2");
+    listAssert = assertManagementListResult(cms.list(filter1)).isSuccessful();
+    listResult = listAssert.getResult();
+    assertThat(listResult).hasSize(1);
+    assertThat(listResult.get(0).getConfiguration().getGroup()).isEqualTo("group2");
+
+    GatewayReceiver filter2 = new GatewayReceiver();
+    filter2.setGroup("group3");
+    listAssert = assertManagementListResult(cms.list(filter2)).isSuccessful();
+    listResult = listAssert.getResult();
+    assertThat(listResult).hasSize(0);
+
+    GatewayReceiver filter = new GatewayReceiver();
+    filter.setGroup("group2");
+    ClusterManagementGetResultAssert<GatewayReceiver, GatewayReceiverInfo> getAssert =
+        assertManagementGetResult(cms.get(filter)).isSuccessful();
+    ConfigurationResult<GatewayReceiver, GatewayReceiverInfo> getResult = getAssert.getResult();
+    assertThat(getResult.getConfiguration().getId()).isEqualTo("group2");
+
+    GatewayReceiver clusterFilter = new GatewayReceiver();
+    assertThatThrownBy(() -> cms.get(clusterFilter))
+        .hasMessageContaining(
+            "ENTITY_NOT_FOUND: GatewayReceiver 'cluster' does not exist.");
+
+    GatewayReceiver noMatchesFilter = new GatewayReceiver();
+    noMatchesFilter.setGroup("groupNotFound");
+    assertThatThrownBy(() -> cms.get(noMatchesFilter))
+        .hasMessageContaining(
+            "ENTITY_NOT_FOUND: GatewayReceiver 'groupNotFound' does not exist.");
+  }
 }
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
index 044addd..fd56b7c 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
@@ -88,8 +88,8 @@
   @Test
   public void getRegion() {
     regionConfig.setName("region1");
-    List<Region> regions = cms.get(regionConfig).getConfigResult();
-    assertThat(regions).hasSize(1);
+    Region region = cms.get(regionConfig).getConfigResult();
+    assertThat(region).isNotNull();
   }
 
   @Test
@@ -120,10 +120,7 @@
     Index index = new Index();
     index.setRegionPath("region1");
     index.setName("index1");
-    ClusterManagementListResult<Index, RuntimeInfo> list = cms.get(index);
-    List<Index> result = list.getConfigResult();
-    assertThat(result).hasSize(1);
-    Index runtimeIndex = result.get(0);
+    Index runtimeIndex = cms.get(index).getConfigResult();
     assertThat(runtimeIndex.getRegionName()).isEqualTo("region1");
     assertThat(runtimeIndex.getName()).isEqualTo("index1");
     assertThat(runtimeIndex.getRegionPath()).isEqualTo("/region1");
@@ -135,14 +132,14 @@
     Index index = new Index();
     index.setRegionPath("region1");
     assertThatThrownBy(() -> cms.get(index)).isInstanceOf(IllegalArgumentException.class)
-        .hasMessageContaining("unable to construct the uri ");
+        .hasMessageContaining("Unable to construct the URI ");
   }
 
   @Test
   public void getIndexWithoutRegionNameAndIndexId() {
     Index index = new Index();
     assertThatThrownBy(() -> cms.get(index)).isInstanceOf(IllegalArgumentException.class)
-        .hasMessageContaining("unable to construct the uri ");
+        .hasMessageContaining("Unable to construct the URI ");
   }
 
   @Test
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
index 4784849..863526b 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
@@ -16,16 +16,18 @@
 package org.apache.geode.management.internal.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
 
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementResult;
 import org.apache.geode.management.api.ClusterManagementService;
 import org.apache.geode.management.client.ClusterManagementServiceBuilder;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.runtime.MemberInformation;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
@@ -50,8 +52,8 @@
 
   @Test
   public void listAllMembers() {
-    MemberConfig config = new MemberConfig();
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+    Member config = new Member();
+    ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
 
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -66,10 +68,10 @@
 
   @Test
   public void listOneMember() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId("locator-0");
 
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+    ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
     assertThat(result.getRuntimeResult().size()).isEqualTo(1);
@@ -81,10 +83,42 @@
   }
 
   @Test
+  public void getOneMember() {
+    Member config = new Member();
+    config.setId("locator-0");
+
+    ClusterManagementGetResult<Member, MemberInformation> result = cmsClient.get(config);
+    assertThat(result.isSuccessful()).isTrue();
+    assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
+    assertThat(result.getRuntimeResult().size()).isEqualTo(1);
+
+    MemberInformation memberConfig = result.getRuntimeResult().get(0);
+    assertThat(memberConfig.isCoordinator()).isTrue();
+    assertThat(memberConfig.isServer()).isFalse();
+    assertThat(memberConfig.getLocatorPort()).isEqualTo(locator.getPort());
+  }
+
+  @Test
+  public void getNonExistentMember() {
+    Member config = new Member();
+    config.setId("locator-42");
+
+    assertThatThrownBy(() -> cmsClient.get(config))
+        .hasMessageContaining("ENTITY_NOT_FOUND: Member 'locator-42' does not exist.");
+  }
+
+  @Test
+  public void getImproperlySpecifiedMember() {
+    Member config = new Member();
+    assertThatThrownBy(() -> cmsClient.get(config))
+        .hasMessageContaining("Unable to construct the URI with the current configuration.");
+  }
+
+  @Test
   public void listNonExistentMember() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId("locator");
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+    ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode())
         .isEqualTo(ClusterManagementResult.StatusCode.OK);
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
index 769227c..0b10be3 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
@@ -99,10 +99,8 @@
     config.setValueConstraint("java.lang.Integer");
     cms.create(config);
 
-    List<Region> result = cms.get(config).getConfigResult();
+    Region config1 = cms.get(config).getConfigResult();
 
-    assertThat(result).hasSize(1);
-    Region config1 = result.get(0);
     assertThat(config1.getType()).isEqualTo(RegionType.PARTITION);
     assertThat(config1.getValueConstraint()).isEqualTo("java.lang.Integer");
     assertThat(config1.getKeyConstraint()).isEqualTo("java.lang.Boolean");
@@ -269,7 +267,7 @@
       assertThat(attributes.getCustomEntryTimeToLive()).isNull();
     });
 
-    Region regionResult = cms.get(region).getConfigResult().get(0);
+    Region regionResult = cms.get(region).getConfigResult();
     List<Region.Expiration> expirations = regionResult.getExpirations();
     assertThat(expirations).hasSize(2);
     assertThat(expirations.get(0).getTimeInSeconds()).isEqualTo(10000);
diff --git a/geode-assembly/src/integrationTest/resources/assembly_content.txt b/geode-assembly/src/integrationTest/resources/assembly_content.txt
index 0990e8e..09eb87c 100644
--- a/geode-assembly/src/integrationTest/resources/assembly_content.txt
+++ b/geode-assembly/src/integrationTest/resources/assembly_content.txt
@@ -677,6 +677,7 @@
 javadoc/org/apache/geode/management/RegionMXBean.html
 javadoc/org/apache/geode/management/ServerLoadData.html
 javadoc/org/apache/geode/management/api/ClusterManagementException.html
+javadoc/org/apache/geode/management/api/ClusterManagementGetResult.html
 javadoc/org/apache/geode/management/api/ClusterManagementListOperationsResult.html
 javadoc/org/apache/geode/management/api/ClusterManagementListResult.html
 javadoc/org/apache/geode/management/api/ClusterManagementOperation.html
@@ -726,7 +727,7 @@
 javadoc/org/apache/geode/management/configuration/GatewayReceiver.html
 javadoc/org/apache/geode/management/configuration/GroupableConfiguration.html
 javadoc/org/apache/geode/management/configuration/Index.html
-javadoc/org/apache/geode/management/configuration/MemberConfig.html
+javadoc/org/apache/geode/management/configuration/Member.html
 javadoc/org/apache/geode/management/configuration/Pdx.html
 javadoc/org/apache/geode/management/configuration/Region.Expiration.html
 javadoc/org/apache/geode/management/configuration/Region.ExpirationAction.html
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
index c01a27c..4e38914 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
@@ -17,8 +17,6 @@
 
 package org.apache.geode.management.internal.api;
 
-
-
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
@@ -48,6 +46,7 @@
 import org.apache.geode.internal.cache.execute.AbstractExecution;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListOperationsResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementOperation;
@@ -63,7 +62,7 @@
 import org.apache.geode.management.configuration.GatewayReceiver;
 import org.apache.geode.management.configuration.GroupableConfiguration;
 import org.apache.geode.management.configuration.Index;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.configuration.Pdx;
 import org.apache.geode.management.configuration.Region;
 import org.apache.geode.management.internal.CacheElementOperation;
@@ -287,7 +286,7 @@
 
     List<T> resultList = new ArrayList<>();
 
-    if (filter instanceof MemberConfig) {
+    if (filter instanceof Member) {
       resultList.add(filter);
     } else {
       ConfigurationManager<T> manager = getConfigurationManager(filter);
@@ -330,7 +329,7 @@
 
       Set<DistributedMember> members;
 
-      if (filter instanceof MemberConfig) {
+      if (filter instanceof Member) {
         members =
             memberValidator.findMembers(filter.getId(), filter.getGroup());
       } else {
@@ -359,21 +358,27 @@
   }
 
   @Override
-  public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
+  public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
       T config) {
     ClusterManagementListResult<T, R> list = list(config);
     List<ConfigurationResult<T, R>> result = list.getResult();
 
-    if (result.size() == 0) {
+    int size = result.size();
+    if (config instanceof Member) {
+      size = result.get(0).getRuntimeInfo().size();
+    }
+
+    if (size == 0) {
       raise(StatusCode.ENTITY_NOT_FOUND,
           config.getClass().getSimpleName() + " '" + config.getId() + "' does not exist.");
     }
 
-    if (result.size() > 1) {
+    if (size > 1) {
       raise(StatusCode.ERROR,
           "Expect only one matching " + config.getClass().getSimpleName() + ".");
     }
-    return assertSuccessful(list);
+
+    return assertSuccessful(new ClusterManagementGetResult<>(list));
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
index 0fad5e7..4f79c32 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
@@ -31,12 +31,12 @@
 import org.apache.geode.management.api.RealizationResult;
 import org.apache.geode.management.configuration.AbstractConfiguration;
 import org.apache.geode.management.configuration.GatewayReceiver;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.configuration.Region;
 import org.apache.geode.management.internal.CacheElementOperation;
 import org.apache.geode.management.internal.configuration.realizers.ConfigurationRealizer;
 import org.apache.geode.management.internal.configuration.realizers.GatewayReceiverRealizer;
-import org.apache.geode.management.internal.configuration.realizers.MemberConfigRealizer;
+import org.apache.geode.management.internal.configuration.realizers.MemberRealizer;
 import org.apache.geode.management.internal.configuration.realizers.RegionConfigRealizer;
 import org.apache.geode.management.runtime.RuntimeInfo;
 
@@ -48,7 +48,7 @@
   static {
     realizers.put(Region.class, new RegionConfigRealizer());
     realizers.put(GatewayReceiver.class, new GatewayReceiverRealizer());
-    realizers.put(MemberConfig.class, new MemberConfigRealizer());
+    realizers.put(Member.class, new MemberRealizer());
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
similarity index 85%
rename from geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java
rename to geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
index 2abfdc9..a985ef3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
@@ -28,21 +28,21 @@
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.api.RealizationResult;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.internal.cli.functions.GetMemberInformationFunction;
 import org.apache.geode.management.runtime.MemberInformation;
 
-public class MemberConfigRealizer
-    implements ConfigurationRealizer<MemberConfig, MemberInformation> {
+public class MemberRealizer
+    implements ConfigurationRealizer<Member, MemberInformation> {
   private static final Logger logger = LogService.getLogger();
 
   @Override
-  public RealizationResult create(MemberConfig config, InternalCache cache) {
+  public RealizationResult create(Member config, InternalCache cache) {
     throw new IllegalStateException("Not supported");
   }
 
   @Override
-  public MemberInformation get(MemberConfig config, InternalCache cache) {
+  public MemberInformation get(Member config, InternalCache cache) {
     GetMemberInformationFunction getMemberInfoFunction = new GetMemberInformationFunction();
     InternalDistributedSystem system = (InternalDistributedSystem) cache.getDistributedSystem();
     DistributedMember member = system.getDistributedMember();
@@ -61,12 +61,12 @@
   }
 
   @Override
-  public RealizationResult update(MemberConfig config, InternalCache cache) {
+  public RealizationResult update(Member config, InternalCache cache) {
     throw new IllegalStateException("Not supported");
   }
 
   @Override
-  public RealizationResult delete(MemberConfig config, InternalCache cache) {
+  public RealizationResult delete(Member config, InternalCache cache) {
     throw new IllegalStateException("Not supported");
   }
 
diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
index 2e1810a..0e2d4f6 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
@@ -5,7 +5,7 @@
 org/apache/geode/management/configuration/GatewayReceiver,false,endPort:java/lang/Integer,gatewayTransportFilters:java/util/List,manualStart:java/lang/Boolean,maximumTimeBetweenPings:java/lang/Integer,socketBufferSize:java/lang/Integer,startPort:java/lang/Integer
 org/apache/geode/management/configuration/GroupableConfiguration,false,group:java/lang/String
 org/apache/geode/management/configuration/Index,false,expression:java/lang/String,keyIndex:java/lang/Boolean,name:java/lang/String,regionPath:java/lang/String
-org/apache/geode/management/configuration/MemberConfig,false,id:java/lang/String
+org/apache/geode/management/configuration/Member,false,id:java/lang/String
 org/apache/geode/management/configuration/Pdx,false,diskStoreName:java/lang/String,ignoreUnreadFields:java/lang/Boolean,pdxSerializer:org/apache/geode/management/configuration/ClassName,persistent:java/lang/Boolean,readSerialized:java/lang/Boolean
 org/apache/geode/management/configuration/Region,false,diskStoreName:java/lang/String,expirations:java/util/List,keyConstraint:java/lang/String,name:java/lang/String,redundantCopies:java/lang/Integer,type:org/apache/geode/management/configuration/RegionType,valueConstraint:java/lang/String
 org/apache/geode/management/configuration/Region$Expiration,false,action:org/apache/geode/management/configuration/Region$ExpirationAction,timeInSeconds:java/lang/Integer,type:org/apache/geode/management/configuration/Region$ExpirationType
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
index bbebeea..89c2752 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
@@ -59,7 +59,7 @@
 import org.apache.geode.management.api.ClusterManagementResult;
 import org.apache.geode.management.api.RealizationResult;
 import org.apache.geode.management.configuration.Index;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.configuration.Region;
 import org.apache.geode.management.configuration.RegionType;
 import org.apache.geode.management.internal.CacheElementOperation;
@@ -196,9 +196,9 @@
 
   @Test
   public void create_non_supportedConfigObject() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     assertThatThrownBy(() -> service.create(config)).isInstanceOf(ClusterManagementException.class)
-        .hasMessageContaining("ILLEGAL_ARGUMENT: MemberConfig is not supported.");
+        .hasMessageContaining("ILLEGAL_ARGUMENT: Member is not supported.");
   }
 
   @Test
diff --git a/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java
new file mode 100644
index 0000000..901a7fe
--- /dev/null
+++ b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.test.junit.assertions;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.assertj.core.api.AbstractAssert;
+import org.assertj.core.api.ListAssert;
+import org.assertj.core.api.ObjectAssert;
+
+import org.apache.geode.management.api.ClusterManagementGetResult;
+import org.apache.geode.management.api.ClusterManagementResult;
+import org.apache.geode.management.api.ConfigurationResult;
+import org.apache.geode.management.configuration.AbstractConfiguration;
+import org.apache.geode.management.runtime.RuntimeInfo;
+
+public class ClusterManagementGetResultAssert<T extends AbstractConfiguration<R>, R extends RuntimeInfo>
+    extends
+    AbstractAssert<ClusterManagementGetResultAssert<T, R>, ClusterManagementGetResult<T, R>> {
+  public ClusterManagementGetResultAssert(
+      ClusterManagementGetResult<T, R> clusterManagementResult, Class<?> selfType) {
+    super(clusterManagementResult, selfType);
+  }
+
+  public ClusterManagementGetResultAssert<T, R> isSuccessful() {
+    assertThat(actual.isSuccessful()).isTrue();
+    return this;
+  }
+
+  public ClusterManagementGetResultAssert<T, R> failed() {
+    assertThat(actual.isSuccessful()).isFalse();
+    return this;
+  }
+
+  public ClusterManagementGetResultAssert<T, R> hasStatusCode(
+      ClusterManagementResult.StatusCode... codes) {
+    assertThat(actual.getStatusCode()).isIn((Object[]) codes);
+    return this;
+  }
+
+  public ClusterManagementGetResultAssert<T, R> containsStatusMessage(String statusMessage) {
+    assertThat(actual.getStatusMessage()).contains(statusMessage);
+    return this;
+  }
+
+  public ConfigurationResult<T, R> getResult() {
+    return actual.getResult();
+  };
+
+  public ObjectAssert<T> hasConfiguration() {
+    return assertThat(getActual().getConfigResult());
+  }
+
+  public ListAssert<R> hasRuntimeInfos() {
+    return assertThat(getActual().getRuntimeResult());
+  }
+
+  public static <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResultAssert<T, R> assertManagementGetResult(
+      ClusterManagementGetResult<T, R> result) {
+    return new ClusterManagementGetResultAssert<>(result, ClusterManagementGetResultAssert.class);
+  }
+
+  public ClusterManagementGetResult<T, R> getActual() {
+    return actual;
+  }
+}
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java
new file mode 100644
index 0000000..4925cec
--- /dev/null
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.management.api;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import org.apache.geode.annotations.Experimental;
+import org.apache.geode.management.configuration.AbstractConfiguration;
+import org.apache.geode.management.runtime.RuntimeInfo;
+
+/**
+ *
+ * @param <T> the type of the static config, e.g. RegionConfig
+ * @param <R> the type of the corresponding runtime information, e.g. RuntimeRegionInfo
+ */
+@Experimental
+public class ClusterManagementGetResult<T extends AbstractConfiguration<R>, R extends RuntimeInfo>
+    extends ClusterManagementResult {
+  /**
+   * for internal use only
+   */
+  public ClusterManagementGetResult() {}
+
+  /**
+   * for internal use only
+   */
+  public ClusterManagementGetResult(ClusterManagementListResult<T, R> singletonListResult) {
+    super(singletonListResult);
+    setResult(singletonListResult.getResult().get(0));
+  }
+
+  private ConfigurationResult<T, R> result = null;
+
+  /**
+   * Returns the combined payload of the get call
+   */
+  public ConfigurationResult<T, R> getResult() {
+    return result;
+  }
+
+  /**
+   * Returns only the static config portion of the result
+   */
+  @JsonIgnore
+  public T getConfigResult() {
+    return result.getConfiguration();
+  }
+
+  /**
+   * Returns only the runtime information portion of the result
+   */
+  @JsonIgnore
+  public List<R> getRuntimeResult() {
+    return result.getRuntimeInfo();
+  }
+
+  /**
+   * for internal use only
+   */
+  public void setResult(ConfigurationResult<T, R> result) {
+    this.result = result;
+  }
+}
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
index 1fa51a4..84ba638 100644
--- a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
@@ -43,8 +43,7 @@
    * This method will delete the element on all the applicable members in the cluster and update the
    * configuration in the cluster configuration if persistence is enabled.
    *
-   * @param config this holds the configuration attributes of the element to be deleted on the
-   *        cluster
+   * @param config this holds the name or id of the element to be deleted on the cluster
    * @return a {@link ClusterManagementRealizationResult} indicating the success of the deletion
    * @throws ClusterManagementRealizationException if unsuccessful
    */
@@ -55,7 +54,7 @@
    * the updated configuration in the cluster configuration if persistence is enabled.
    *
    * @param config this holds the configuration attributes of the element to be updated on the
-   *        cluster
+   *        cluster, as well as the group this config belongs to
    * @return a {@link ClusterManagementRealizationResult} indicating the success of the update
    * @throws ClusterManagementRealizationException if unsuccessful
    */
@@ -75,19 +74,16 @@
       T filter);
 
   /**
-   * This method will list a single instance of the element type in the cluster configuration, along
+   * This method will get a single instance of the element type in the cluster configuration, along
    * with additional runtime information from cluster members
    *
-   * @param filter the filterable attributes are used to identify the element to return. Any
-   *        non-filterable attributes will be ignored. It is an error if the filter matches
-   *        more than one element.
-   * @return a {@link ClusterManagementListResult} holding a single element in
-   *         {@link ClusterManagementListResult#getResult()}
+   * @param config this holds the name or id of the element to be retrieved
+   * @return a {@link ClusterManagementGetResult}
    * @throws ClusterManagementException if unsuccessful or, no matching element is found, or
    *         multiple matches are found
    */
-  <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
-      T filter);
+  <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
+      T config);
 
   /**
    * This method will launch a cluster management operation asynchronously.
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java b/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
index 5d1a1ed..9ac4cd3 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
@@ -112,7 +112,7 @@
    * @return {@link #getEndpoint()} + "/" + {@link #getId()}
    */
   @JsonIgnore
-  public String getIdentityEndPoint() {
+  public String getIdentityEndpoint() {
     String id = getId();
     if (StringUtils.isBlank(id))
       return null;
@@ -132,14 +132,14 @@
    * <p>
    * Note that the result does not include the prefix: <code>http://hostname:port</code>
    *
-   * @return {@link #URI_CONTEXT} + {@link #URI_VERSION} + {@link #getIdentityEndPoint()}
+   * @return {@link #URI_CONTEXT} + {@link #URI_VERSION} + {@link #getIdentityEndpoint()}
    */
   @JsonProperty(access = JsonProperty.Access.READ_ONLY)
   public String getUri() {
-    if (getIdentityEndPoint() == null) {
+    if (getIdentityEndpoint() == null) {
       return null;
     }
-    return URI_CONTEXT + URI_VERSION + getIdentityEndPoint();
+    return URI_CONTEXT + URI_VERSION + getIdentityEndpoint();
   }
 
   /**
@@ -150,5 +150,4 @@
   public boolean isGlobalRuntime() {
     return false;
   }
-
 }
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java b/geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
similarity index 87%
rename from geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
rename to geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
index c5ec6cf..9a014c8 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
@@ -20,9 +20,9 @@
 import org.apache.geode.management.runtime.MemberInformation;
 
 @Experimental
-public class MemberConfig extends GroupableConfiguration<MemberInformation> {
+public class Member extends GroupableConfiguration<MemberInformation> {
 
-  public static final String MEMBER_CONFIG_ENDPOINT = "/members";
+  public static final String MEMBER_ENDPOINT = "/members";
 
   private String id;
 
@@ -40,6 +40,6 @@
 
   @Override
   public String getEndpoint() {
-    return MEMBER_CONFIG_ENDPOINT;
+    return MEMBER_ENDPOINT;
   }
 }
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java b/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
index 27d1a84..fce9448 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
@@ -50,7 +50,7 @@
   }
 
   @Override
-  public String getIdentityEndPoint() {
+  public String getIdentityEndpoint() {
     return PDX_ENDPOINT;
   }
 
diff --git a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
index 48661fe..8eedcc0 100644
--- a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
+++ b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
@@ -15,7 +15,6 @@
 
 package org.apache.geode.management.internal;
 
-
 import static org.apache.geode.management.configuration.AbstractConfiguration.URI_VERSION;
 import static org.apache.geode.management.internal.Constants.INCLUDE_CLASS_HEADER;
 
@@ -32,6 +31,7 @@
 import org.springframework.web.client.RestTemplate;
 
 import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListOperationsResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementOperation;
@@ -48,10 +48,10 @@
  * management service as used by a Java client.
  * <p/>
  * In order to manipulate Geode components (Regions, etc.) clients can construct instances of {@link
- * CacheElement}s and call the corresponding
- * {@link ClientClusterManagementService#create(CacheElement)},
- * {@link ClientClusterManagementService#delete(CacheElement)} or
- * {@link ClientClusterManagementService#update(CacheElement)} method. The returned {@link
+ * AbstractConfiguration}s and call the corresponding
+ * {@link ClientClusterManagementService#create(AbstractConfiguration)},
+ * {@link ClientClusterManagementService#delete(AbstractConfiguration)} or
+ * {@link ClientClusterManagementService#update(AbstractConfiguration)} method. The returned {@link
  * ClusterManagementResult} will contain all necessary information about the outcome of the call.
  * This will include the result of persisting the config as part of the cluster configuration as
  * well as creating the actual component in the cluster.
@@ -74,7 +74,7 @@
   @Override
   @SuppressWarnings("unchecked")
   public <T extends AbstractConfiguration<?>> ClusterManagementRealizationResult create(T config) {
-    String endPoint = getEndpoint(config);
+    String endPoint = URI_VERSION + config.getEndpoint();
     // the response status code info is represented by the ClusterManagementResult.errorCode already
     return assertSuccessful(restTemplate
         .exchange(endPoint, HttpMethod.POST, makeEntity(config),
@@ -92,7 +92,7 @@
   @SuppressWarnings("unchecked")
   public <T extends AbstractConfiguration<?>> ClusterManagementRealizationResult delete(
       T config) {
-    String uri = getIdentityEndPoint(config);
+    String uri = getIdentityEndpoint(config);
     return assertSuccessful(restTemplate
         .exchange(uri + "?group={group}",
             HttpMethod.DELETE,
@@ -112,7 +112,7 @@
   @SuppressWarnings("unchecked")
   public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> list(
       T config) {
-    String endPoint = getEndpoint(config);
+    String endPoint = URI_VERSION + config.getEndpoint();
     return assertSuccessful(restTemplate
         .exchange(endPoint + "/?id={id}&group={group}", HttpMethod.GET, makeEntity(config),
             ClusterManagementListResult.class, config.getId(), config.getGroup())
@@ -121,12 +121,12 @@
 
   @Override
   @SuppressWarnings("unchecked")
-  public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
+  public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
       T config) {
 
     return assertSuccessful(restTemplate
-        .exchange(getIdentityEndPoint(config), HttpMethod.GET, makeEntity(config),
-            ClusterManagementListResult.class)
+        .exchange(getIdentityEndpoint(config), HttpMethod.GET, makeEntity(config),
+            ClusterManagementGetResult.class)
         .getBody());
   }
 
@@ -183,26 +183,21 @@
     return s;
   }
 
-  private String getEndpoint(AbstractConfiguration config) {
-    String endpoint = config.getEndpoint();
-    if (endpoint == null) {
-      throw new IllegalArgumentException(
-          "unable to construct the uri with the current configuration.");
-    }
-    return URI_VERSION + endpoint;
-  }
-
-  private String getIdentityEndPoint(AbstractConfiguration config) {
-    String uri = config.getIdentityEndPoint();
+  private String getIdentityEndpoint(AbstractConfiguration config) {
+    String uri = config.getIdentityEndpoint();
     if (uri == null) {
       throw new IllegalArgumentException(
-          "unable to construct the uri with the current configuration.");
+          "Unable to construct the URI with the current configuration.");
     }
     return URI_VERSION + uri;
   }
 
   private <T extends ClusterManagementResult> T assertSuccessful(T result) {
-    if (!result.isSuccessful()) {
+    if (result == null) {
+      ClusterManagementResult somethingVeryBadHappened = new ClusterManagementResult(
+          ClusterManagementResult.StatusCode.ERROR, "Unable to parse server response.");
+      throw new ClusterManagementException(somethingVeryBadHappened);
+    } else if (!result.isSuccessful()) {
       throw new ClusterManagementException(result);
     }
     return result;
diff --git a/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java b/geode-management/src/test/java/org/apache/geode/management/configuration/MemberTest.java
similarity index 93%
rename from geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
rename to geode-management/src/test/java/org/apache/geode/management/configuration/MemberTest.java
index aa54b27..857c2d8 100644
--- a/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
+++ b/geode-management/src/test/java/org/apache/geode/management/configuration/MemberTest.java
@@ -20,11 +20,11 @@
 
 import org.junit.Test;
 
-public class MemberConfigTest {
+public class MemberTest {
 
   @Test
   public void getUri() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId("memberA");
     assertThat(config.getEndpoint()).isEqualTo("/members");
     assertThat(config.getUri())
diff --git a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
index a33f239..c84d317 100644
--- a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
+++ b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
@@ -39,7 +39,7 @@
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementResult;
 import org.apache.geode.management.api.ClusterManagementService;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.internal.rest.LocatorLauncherContextLoader;
 import org.apache.geode.management.internal.rest.LocatorWebContext;
 import org.apache.geode.management.runtime.MemberInformation;
@@ -72,8 +72,8 @@
   @Test
   @WithMockUser
   public void listAllMembers() {
-    MemberConfig memberConfig = new MemberConfig();
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(memberConfig);
+    Member member = new Member();
+    ClusterManagementListResult<Member, MemberInformation> result = client.list(member);
 
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -105,9 +105,9 @@
   @Test
   @WithMockUser
   public void getOneMember() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId("server-1");
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+    ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
 
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -119,9 +119,9 @@
   @Test
   @WithMockUser
   public void getMemberStatus() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId("locator-0");
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+    ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
 
@@ -137,10 +137,10 @@
   @Test
   @WithMockUser
   public void noMatchWithJavaAPI() {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     // look for a member with a non-existent id
     config.setId("server");
-    ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+    ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode())
         .isEqualTo(ClusterManagementResult.StatusCode.OK);
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
index 4b074a0..36fdce4 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
@@ -89,6 +89,8 @@
             "CLUSTER:READ:QUERY"));
 
     testContexts.add(new TestContext(get("/experimental/gateways/receivers"), "CLUSTER:READ"));
+    testContexts
+        .add(new TestContext(get("/experimental/gateways/receivers/receiver1"), "CLUSTER:READ"));
     testContexts.add(new TestContext(post("/experimental/gateways/receivers"), "CLUSTER:MANAGE")
         .setContent(mapper.writeValueAsString(new GatewayReceiverConfig())));
 
@@ -162,6 +164,10 @@
         .andExpect(jsonPath("$.statusCode", is("OK")))
         .andExpect(jsonPath("$.statusMessage",
             is("Successfully updated configuration for cluster.")));
+    // cleanup in order to pass stressNew
+    context.perform(delete("/experimental/regions/" + REGION)
+        .with(httpBasic("dataManage", "dataManage")))
+        .andExpect(status().is2xxSuccessful());
   }
 
   private static class TestContext {
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
index 9e2eb31..e666ea3 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
@@ -84,6 +84,23 @@
   }
 
   @Test
+  public void getLocator() throws Exception {
+    webContext.perform(get("/experimental/members/locator-0"))
+        .andDo(print())
+        .andExpect(status().isOk())
+        .andExpect(jsonPath("$.memberStatuses").doesNotExist())
+        .andExpect(jsonPath("$.statusCode", is("OK")))
+        .andExpect(jsonPath("$.result.runtimeInfo[*].memberName", contains("locator-0")))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].locatorPort", greaterThan(0)))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].server", is(false)))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].status", is("online")))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].cacheServerInfo").doesNotExist())
+        .andExpect(jsonPath("$.result.runtimeInfo[0].logFilePath", endsWith("locator-0.log")))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].workingDirPath", notNullValue()))
+        .andExpect(jsonPath("$.result.runtimeInfo[0].heapUsage", greaterThan(0)));
+  }
+
+  @Test
   public void listServer() throws Exception {
     webContext.perform(get("/experimental/members")
         .param("id", "server-1"))
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
index 2041103..c5ee42c 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
@@ -24,12 +24,14 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementResult;
 import org.apache.geode.management.configuration.GatewayReceiver;
@@ -52,6 +54,17 @@
     return clusterManagementService.list(filter);
   }
 
+  @ApiOperation(value = "get gateway-receiver")
+  @PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
+  @RequestMapping(method = RequestMethod.GET, value = GATEWAY_RECEIVERS_ENDPOINTS + "/{id}")
+  @ResponseBody
+  public ClusterManagementGetResult<GatewayReceiver, GatewayReceiverInfo> getGatewayReceiver(
+      @PathVariable(name = "id") String id) {
+    GatewayReceiver config = new GatewayReceiver();
+    config.setGroup(id);
+    return clusterManagementService.get(config);
+  }
+
   @ApiOperation(value = "create gateway-receiver")
   @PreAuthorize("@securityService.authorize('CLUSTER', 'MANAGE')")
   @RequestMapping(method = RequestMethod.POST, value = GATEWAY_RECEIVERS_ENDPOINTS)
@@ -59,7 +72,6 @@
       @RequestBody GatewayReceiver gatewayReceiverConfig) {
     ClusterManagementResult result =
         clusterManagementService.create(gatewayReceiverConfig);
-    return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+    return new ResponseEntity<>(result, HttpStatus.CREATED);
   }
 }
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
index 83c8e4f..6683c4b 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
@@ -15,25 +15,22 @@
 
 package org.apache.geode.management.internal.rest.controllers;
 
-import static org.apache.geode.management.configuration.MemberConfig.MEMBER_CONFIG_ENDPOINT;
+import static org.apache.geode.management.configuration.Member.MEMBER_ENDPOINT;
 import static org.apache.geode.management.internal.rest.controllers.AbstractManagementController.MANAGEMENT_API_VERSION;
 
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
-import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
-import org.apache.geode.management.api.ClusterManagementResult;
-import org.apache.geode.management.api.ClusterManagementResult.StatusCode;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
 import org.apache.geode.management.runtime.MemberInformation;
 
 @Controller("members")
@@ -41,39 +38,28 @@
 public class MemberManagementController extends AbstractManagementController {
   @ApiOperation(value = "get member")
   @PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
-  @RequestMapping(method = RequestMethod.GET, value = MEMBER_CONFIG_ENDPOINT + "/{id}")
-  public ResponseEntity<ClusterManagementListResult<MemberConfig, MemberInformation>> getMember(
+  @RequestMapping(method = RequestMethod.GET, value = MEMBER_ENDPOINT + "/{id}")
+  @ResponseBody
+  public ClusterManagementGetResult<Member, MemberInformation> getMember(
       @PathVariable(name = "id") String id) {
-    MemberConfig config = new MemberConfig();
+    Member config = new Member();
     config.setId(id);
-    ClusterManagementListResult<MemberConfig, MemberInformation> result =
-        clusterManagementService.list(config);
-    if (result.getRuntimeResult().size() == 0) {
-      throw new ClusterManagementException(new ClusterManagementResult(StatusCode.ENTITY_NOT_FOUND,
-          "Member '" + config.getId() + "' does not exist."));
-    }
-
-    return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR);
+    return clusterManagementService.get(config);
   }
 
   @ApiOperation(value = "list members")
   @PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
-  @RequestMapping(method = RequestMethod.GET, value = MEMBER_CONFIG_ENDPOINT)
-  public ResponseEntity<ClusterManagementListResult<MemberConfig, MemberInformation>> listMembers(
+  @RequestMapping(method = RequestMethod.GET, value = MEMBER_ENDPOINT)
+  @ResponseBody
+  public ClusterManagementListResult<Member, MemberInformation> listMembers(
       @RequestParam(required = false) String id, @RequestParam(required = false) String group) {
-    MemberConfig filter = new MemberConfig();
+    Member filter = new Member();
     if (StringUtils.isNotBlank(id)) {
       filter.setId(id);
     }
     if (StringUtils.isNotBlank(group)) {
       filter.setGroup(group);
     }
-    ClusterManagementListResult<MemberConfig, MemberInformation> result =
-        clusterManagementService.list(filter);
-
-    return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR);
+    return clusterManagementService.list(filter);
   }
-
 }
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
index 4e310ed..34618dc 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
@@ -48,6 +48,6 @@
       @RequestBody Pdx pdxType) {
     ClusterManagementResult result = clusterManagementService.create(pdxType);
     return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+        HttpStatus.CREATED);
   }
 }
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
index 8ceff8a..aeb930c 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
@@ -50,8 +50,7 @@
       @RequestBody RebalanceOperation operation) {
     ClusterManagementOperationResult<RebalanceResult> result =
         clusterManagementService.start(new RebalanceOperationWithOperator(operation));
-    return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.ACCEPTED : HttpStatus.INTERNAL_SERVER_ERROR);
+    return new ResponseEntity<>(result, HttpStatus.ACCEPTED);
   }
 
   @ApiOperation(value = "list rebalances")
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
index 66a0c90..dcd705a 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
@@ -18,8 +18,6 @@
 import static org.apache.geode.management.configuration.Region.REGION_CONFIG_ENDPOINT;
 import static org.apache.geode.management.internal.rest.controllers.AbstractManagementController.MANAGEMENT_API_VERSION;
 
-import java.util.List;
-
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
@@ -35,11 +33,9 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
 import org.apache.geode.management.api.ClusterManagementListResult;
 import org.apache.geode.management.api.ClusterManagementResult;
-import org.apache.geode.management.api.ClusterManagementResult.StatusCode;
-import org.apache.geode.management.api.ConfigurationResult;
 import org.apache.geode.management.configuration.Index;
 import org.apache.geode.management.configuration.Region;
 import org.apache.geode.management.runtime.RuntimeInfo;
@@ -64,7 +60,7 @@
     ClusterManagementResult result =
         clusterManagementService.create(regionConfig);
     return new ResponseEntity<>(result,
-        result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+        HttpStatus.CREATED);
   }
 
   @ApiOperation(value = "list regions")
@@ -87,7 +83,7 @@
   @ApiOperation(value = "get region")
   @RequestMapping(method = RequestMethod.GET, value = REGION_CONFIG_ENDPOINT + "/{id}")
   @ResponseBody
-  public ClusterManagementListResult<Region, RuntimeRegionInfo> getRegion(
+  public ClusterManagementGetResult<Region, RuntimeRegionInfo> getRegion(
       @PathVariable(name = "id") String id) {
     securityService.authorize(Resource.CLUSTER, Operation.READ, id);
     Region config = new Region();
@@ -145,23 +141,13 @@
       value = REGION_CONFIG_ENDPOINT + "/{regionName}/indexes/{id}")
   @ResponseBody
   @PreAuthorize("@securityService.authorize('CLUSTER', 'READ', 'QUERY')")
-  public ClusterManagementListResult<Index, RuntimeInfo> getIndex(
+  public ClusterManagementGetResult<Index, RuntimeInfo> getIndex(
       @PathVariable String regionName,
       @PathVariable String id) {
-    ClusterManagementListResult<Index, RuntimeInfo> result = listIndex(regionName, id);
-    List<ConfigurationResult<Index, RuntimeInfo>> indexList = result.getResult();
 
-    if (indexList.size() == 0) {
-      throw new ClusterManagementException(new ClusterManagementResult(StatusCode.ENTITY_NOT_FOUND,
-          "Index '" + id + "' does not exist in region '" + regionName + "'."));
-    }
-
-    if (indexList.size() > 1) {
-      throw new ClusterManagementException(
-          new ClusterManagementResult(StatusCode.ERROR, "More than one index found."));
-    }
-
-    result.setResult(indexList);
-    return result;
+    Index filter = new Index();
+    filter.setRegionPath(regionName);
+    filter.setName(id);
+    return clusterManagementService.get(filter);
   }
 }
diff --git a/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java b/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
index 33ba293..80e1bba 100644
--- a/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
+++ b/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
@@ -25,7 +25,7 @@
   @Test
   public void removesClassAttributeWhenThereAreOtherAttributes() {
     String before =
-        "{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.MemberConfig\",\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
+        "{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.Member\",\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
     String after =
         "{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
     assertThat(removeClassFromJsonText(before)).isEqualTo(after);
@@ -34,7 +34,7 @@
   @Test
   public void removesClassAttributeAndContainingObjectWhenThereAreNoOtherAttributes() {
     String before =
-        "{\"statusCode\":\"OK\",\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.MemberConfig\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
+        "{\"statusCode\":\"OK\",\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.Member\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
     String after =
         "{\"statusCode\":\"OK\",\"result\":[{\"runtimeInfo\":[{\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
     assertThat(removeClassFromJsonText(before)).isEqualTo(after);