You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/04/19 20:47:51 UTC

[geode] branch develop updated: GEODE-4858: move the utility methods out of ClusterConfigurationService (#1822)

This is an automated email from the ASF dual-hosted git repository.

jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 2c96f1a  GEODE-4858: move the utility methods out of ClusterConfigurationService (#1822)
2c96f1a is described below

commit 2c96f1adc043045cef194069f1917db718ebd2cd
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Thu Apr 19 13:47:46 2018 -0700

    GEODE-4858: move the utility methods out of ClusterConfigurationService (#1822)
    
    * GEODE-4858: move the utility methods out of ClusterConfigurationService
---
 .../jdbc/internal/cli/AlterConnectionCommand.java  |  5 +-
 .../jdbc/internal/cli/AlterMappingCommand.java     |  5 +-
 .../internal/cli/DescribeConnectionCommand.java    |  3 +-
 .../jdbc/internal/cli/DescribeMappingCommand.java  |  3 +-
 .../internal/cli/DestroyConnectionCommand.java     |  4 +-
 .../jdbc/internal/cli/DestroyMappingCommand.java   |  3 +-
 .../internal/cli/AlterConnectionCommandTest.java   | 19 ++++---
 .../jdbc/internal/cli/AlterMappingCommandTest.java | 18 ++++---
 .../cli/DescribeConnectionCommandTest.java         | 10 ++--
 .../internal/cli/DescribeMappingCommandTest.java   |  6 ++-
 .../geode/cache/configuration/CacheElement.java    | 53 ++++++++++++++++++
 .../distributed/ClusterConfigurationService.java   | 62 ++--------------------
 .../cli/commands/CreateJndiBindingCommand.java     |  3 +-
 .../cli/commands/DestroyJndiBindingCommand.java    |  3 +-
 .../cli/commands/CreateJndiBindingCommandTest.java | 25 +++++----
 .../commands/DestroyJndiBindingCommandTest.java    |  9 ----
 16 files changed, 124 insertions(+), 107 deletions(-)

diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommand.java
index 0781b24..73bd30d 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommand.java
@@ -20,6 +20,7 @@ import java.util.Set;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -83,7 +84,7 @@ public class AlterConnectionCommand extends GfshCommand {
       if (service == null) {
         throw new EntityNotFoundException("connection with name '" + name + "' does not exist.");
       }
-      ConnectorService.Connection conn = ccService.findIdentifiable(service.getConnection(), name);
+      ConnectorService.Connection conn = CacheElement.findElement(service.getConnection(), name);
       if (conn == null) {
         throw new EntityNotFoundException("connection with name '" + name + "' does not exist.");
       }
@@ -105,7 +106,7 @@ public class AlterConnectionCommand extends GfshCommand {
           results.stream().filter(CliFunctionResult::isSuccessful).findAny().get();
       ConnectorService.Connection mergedConnection =
           (ConnectorService.Connection) successResult.getResultObject();
-      ccService.removeFromList(service.getConnection(), name);
+      CacheElement.removeElement(service.getConnection(), name);
       service.getConnection().add(mergedConnection);
       ccService.saveCustomCacheElement("cluster", service);
       persisted = true;
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommand.java
index c51a265..ec56281 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommand.java
@@ -20,6 +20,7 @@ import java.util.Set;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -90,7 +91,7 @@ public class AlterMappingCommand extends InternalGfshCommand {
         throw new EntityNotFoundException("mapping with name '" + regionName + "' does not exist.");
       }
       ConnectorService.RegionMapping mapping =
-          ccService.findIdentifiable(service.getRegionMapping(), regionName);
+          CacheElement.findElement(service.getRegionMapping(), regionName);
       if (mapping == null) {
         throw new EntityNotFoundException("mapping with name '" + regionName + "' does not exist.");
       }
@@ -112,7 +113,7 @@ public class AlterMappingCommand extends InternalGfshCommand {
           results.stream().filter(CliFunctionResult::isSuccessful).findAny().get();
       ConnectorService.RegionMapping mergedMapping =
           (ConnectorService.RegionMapping) successResult.getResultObject();
-      ccService.removeFromList(service.getRegionMapping(), connectionName);
+      CacheElement.removeElement(service.getRegionMapping(), connectionName);
       service.getRegionMapping().add(mergedMapping);
       ccService.saveCustomCacheElement("cluster", service);
       persisted = true;
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommand.java
index 4b6751f..07ea5c8 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommand.java
@@ -26,6 +26,7 @@ import org.apache.logging.log4j.Logger;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -95,7 +96,7 @@ public class DescribeConnectionCommand extends InternalGfshCommand {
       throw new EntityNotFoundException("connection named '" + name + "' not found");
     }
     ConnectorService.Connection connection =
-        ccService.findIdentifiable(service.getConnection(), name);
+        CacheElement.findElement(service.getConnection(), name);
     if (connection == null) {
       throw new EntityNotFoundException("connection named '" + name + "' not found");
     }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
index b6948b2..49fd133 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommand.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -91,7 +92,7 @@ public class DescribeMappingCommand extends InternalGfshCommand {
       throw new EntityNotFoundException("mapping for region '" + regionName + "' not found");
     }
     ConnectorService.RegionMapping mapping =
-        ccService.findIdentifiable(service.getRegionMapping(), regionName);
+        CacheElement.findElement(service.getRegionMapping(), regionName);
     if (mapping == null) {
       throw new EntityNotFoundException("mapping for region '" + regionName + "' not found");
     }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionCommand.java
index 8474b75..295c625 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionCommand.java
@@ -20,6 +20,7 @@ import java.util.Set;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -61,8 +62,7 @@ public class DestroyConnectionCommand extends InternalGfshCommand {
       ConnectorService service =
           ccService.getCustomCacheElement("cluster", "connector-service", ConnectorService.class);
       if (service != null) {
-        ConnectorService.Connection conn =
-            ccService.findIdentifiable(service.getConnection(), name);
+        ConnectorService.Connection conn = CacheElement.findElement(service.getConnection(), name);
         service.getConnection().remove(conn);
         ccService.saveCustomCacheElement("cluster", service);
         persisted = true;
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
index b0e90fd..8877b78 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingCommand.java
@@ -20,6 +20,7 @@ import java.util.Set;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
 import org.apache.geode.distributed.ClusterConfigurationService;
 import org.apache.geode.distributed.DistributedMember;
@@ -63,7 +64,7 @@ public class DestroyMappingCommand extends InternalGfshCommand {
       ConnectorService service =
           ccService.getCustomCacheElement("cluster", "connector-service", ConnectorService.class);
       if (service != null) {
-        ccService.removeFromList(service.getRegionMapping(), regionName);
+        CacheElement.removeElement(service.getRegionMapping(), regionName);
         ccService.saveCustomCacheElement("cluster", service);
         persisted = true;
       }
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommandTest.java
index 207e199..fa85ae8 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionCommandTest.java
@@ -47,6 +47,9 @@ public class AlterConnectionCommandTest {
   private List<CliFunctionResult> results;
   private CliFunctionResult result;
   private ClusterConfigurationService ccService;
+  private ConnectorService.Connection connection;
+  private List<ConnectorService.Connection> connections;
+  private ConnectorService connectorService;
 
   @ClassRule
   public static GfshParserRule gfsh = new GfshParserRule();
@@ -63,6 +66,10 @@ public class AlterConnectionCommandTest {
     when(result.getStatus()).thenReturn("message");
     ccService = mock(InternalClusterConfigurationService.class);
     doReturn(ccService).when(command).getConfigurationService();
+    connectorService = mock(ConnectorService.class);
+    connections = new ArrayList<>();
+    connection = new ConnectorService.Connection();
+    connection.setName("name");
   }
 
   @Test
@@ -106,7 +113,6 @@ public class AlterConnectionCommandTest {
 
   @Test
   public void whenCCServiceIsRunningAndNoConnectionFound() {
-    ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
     gfsh.executeAndAssertThat(command, COMMAND).statusIsError()
         .containsOutput("connection with name 'name' does not exist.");
@@ -116,11 +122,9 @@ public class AlterConnectionCommandTest {
   @Test
   public void noSuccessfulResult() {
     // connection found in CC
-    ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(ConnectorService.Connection.class));
-
+    when(connectorService.getConnection()).thenReturn(connections);
+    connections.add(connection);
     // result is not successful
     when(result.isSuccessful()).thenReturn(false);
     results.add(result);
@@ -132,10 +136,9 @@ public class AlterConnectionCommandTest {
   @Test
   public void successfulResult() {
     // connection found in CC
-    ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(ConnectorService.Connection.class));
+    when(connectorService.getConnection()).thenReturn(connections);
+    connections.add(connection);
 
     // result is not successful
     when(result.isSuccessful()).thenReturn(true);
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommandTest.java
index 9df6885..8d36497 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingCommandTest.java
@@ -47,6 +47,9 @@ public class AlterMappingCommandTest {
   private List<CliFunctionResult> results;
   private CliFunctionResult result;
   private ClusterConfigurationService ccService;
+  private ConnectorService.RegionMapping mapping;
+  private List<ConnectorService.RegionMapping> mappings;
+  private ConnectorService connectorService;
 
   @ClassRule
   public static GfshParserRule gfsh = new GfshParserRule();
@@ -63,6 +66,10 @@ public class AlterMappingCommandTest {
     when(result.getStatus()).thenReturn("message");
     ccService = mock(InternalClusterConfigurationService.class);
     doReturn(ccService).when(command).getConfigurationService();
+    connectorService = mock(ConnectorService.class);
+    mappings = new ArrayList<>();
+    mapping = new ConnectorService.RegionMapping();
+    mapping.setRegionName("region");
   }
 
   @Test
@@ -123,11 +130,9 @@ public class AlterMappingCommandTest {
   @Test
   public void noSuccessfulResult() {
     // mapping found in CC
-    ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(ConnectorService.RegionMapping.class));
-
+    when(connectorService.getRegionMapping()).thenReturn(mappings);
+    mappings.add(mapping);
     // result is not successful
     when(result.isSuccessful()).thenReturn(false);
     results.add(result);
@@ -139,10 +144,9 @@ public class AlterMappingCommandTest {
   @Test
   public void successfulResult() {
     // mapping found in CC
-    ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(ConnectorService.RegionMapping.class));
+    when(connectorService.getRegionMapping()).thenReturn(mappings);
+    mappings.add(mapping);
 
     // result is not successful
     when(result.isSuccessful()).thenReturn(true);
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommandTest.java
index 1b99234..e922d71 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionCommandTest.java
@@ -20,7 +20,9 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -81,14 +83,16 @@ public class DescribeConnectionCommandTest {
   @Test
   public void successfulResult() {
     // connection found in CC
-    ConnectorService.Connection connection = new ConnectorService.Connection("name1", "url1",
+    ConnectorService.Connection connection = new ConnectorService.Connection("name", "url1",
         "user1", "password1", "param1:value1,param2:value2");
+    List<ConnectorService.Connection> connections = new ArrayList<>();
+    connections.add(connection);
 
     ConnectorService connectorService = mock(ConnectorService.class);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any())).thenReturn(connection);
+    when(connectorService.getConnection()).thenReturn(connections);
 
-    gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess().containsOutput("name", "name1")
+    gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess().containsOutput("name", "name")
         .containsOutput("url", "url1").containsOutput("user", "user1")
         .containsOutput("password", "********").containsOutput("param1", "value1")
         .containsOutput("param2", "value2");
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java
index 3acdd32..25559b8 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingCommandTest.java
@@ -20,7 +20,9 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -90,8 +92,10 @@ public class DescribeMappingCommandTest {
         .add(new ConnectorService.RegionMapping.FieldMapping("field2", "value2"));
 
     ConnectorService connectorService = mock(ConnectorService.class);
+    List<ConnectorService.RegionMapping> mappings = new ArrayList<>();
+    when(connectorService.getRegionMapping()).thenReturn(mappings);
+    mappings.add(mapping);
     when(ccService.getCustomCacheElement(any(), any(), any())).thenReturn(connectorService);
-    when(ccService.findIdentifiable(any(), any())).thenReturn(mapping);
 
     gfsh.executeAndAssertThat(command, COMMAND).statusIsSuccess().containsOutput("region", "region")
         .containsOutput("connection", "name1").containsOutput("table", "table1")
diff --git a/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheElement.java b/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
index 922d064..e0f1777 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
@@ -18,10 +18,63 @@
 package org.apache.geode.cache.configuration;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.lang.Identifiable;
 
 @Experimental
 public interface CacheElement extends Identifiable<String>, Serializable {
+
+  static <T extends CacheElement> T findElement(List<T> list, String id) {
+    return list.stream().filter(o -> o.getId().equals(id)).findFirst().orElse(null);
+  }
+
+  static <T extends CacheElement> void removeElement(List<T> list, String id) {
+    list.removeIf(t -> t.getId().equals(id));
+  }
+
+  static RegionConfig findRegionConfiguration(CacheConfig cacheConfig, String regionPath) {
+    return findElement(cacheConfig.getRegion(), regionPath);
+  }
+
+  static <T extends CacheElement> List<T> findCustomCacheElements(CacheConfig cacheConfig,
+      Class<T> classT) {
+    List<T> newList = new ArrayList<>();
+    // streaming won't work here, because it's trying to cast element into CacheElement
+    for (Object element : cacheConfig.getCustomCacheElements()) {
+      if (classT.isInstance(element)) {
+        newList.add(classT.cast(element));
+      }
+    }
+    return newList;
+  }
+
+  static <T extends CacheElement> T findCustomCacheElement(CacheConfig cacheConfig,
+      String elementId, Class<T> classT) {
+    return findElement(findCustomCacheElements(cacheConfig, classT), elementId);
+  }
+
+  static <T extends CacheElement> List<T> findCustomRegionElements(CacheConfig cacheConfig,
+      String regionPath, Class<T> classT) {
+    List<T> newList = new ArrayList<>();
+    RegionConfig regionConfig = findRegionConfiguration(cacheConfig, regionPath);
+    if (regionConfig == null) {
+      return newList;
+    }
+
+    // streaming won't work here, because it's trying to cast element into CacheElement
+    for (Object element : regionConfig.getCustomRegionElements()) {
+      if (classT.isInstance(element)) {
+        newList.add(classT.cast(element));
+      }
+    }
+    return newList;
+  }
+
+  static <T extends CacheElement> T findCustomRegionElement(CacheConfig cacheConfig,
+      String regionPath, String elementId, Class<T> classT) {
+    return findElement(findCustomRegionElements(cacheConfig, regionPath, classT), elementId);
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/ClusterConfigurationService.java b/geode-core/src/main/java/org/apache/geode/distributed/ClusterConfigurationService.java
index 2033f0d..2681145 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/ClusterConfigurationService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/ClusterConfigurationService.java
@@ -17,16 +17,16 @@
 
 package org.apache.geode.distributed;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import static org.apache.geode.cache.configuration.CacheElement.findCustomCacheElement;
+import static org.apache.geode.cache.configuration.CacheElement.findCustomRegionElement;
+import static org.apache.geode.cache.configuration.CacheElement.findRegionConfiguration;
+
 import java.util.function.UnaryOperator;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.configuration.CacheConfig;
 import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.cache.configuration.RegionConfig;
-import org.apache.geode.lang.Identifiable;
 import org.apache.geode.management.internal.cli.exceptions.EntityNotFoundException;
 
 @Experimental
@@ -144,59 +144,5 @@ public interface ClusterConfigurationService {
   }
 
 
-  default <T extends Identifiable<String>> T findIdentifiable(List<T> list, String id) {
-    return list.stream().filter(o -> o.getId().equals(id)).findFirst().orElse(null);
-  }
-
-  default <T extends Identifiable<String>> void removeFromList(List<T> list, String id) {
-    for (Iterator<T> iter = list.listIterator(); iter.hasNext();) {
-      if (iter.next().getId().equals(id)) {
-        iter.remove();
-      }
-    }
-  }
-
-  default RegionConfig findRegionConfiguration(CacheConfig cacheConfig, String regionPath) {
-    return findIdentifiable(cacheConfig.getRegion(), regionPath);
-  }
-
-  default <T extends CacheElement> List<T> findCustomCacheElements(CacheConfig cacheConfig,
-      Class<T> classT) {
 
-    List<T> newList = new ArrayList<>();
-    // streaming won't work here, because it's trying to cast element into CacheElement
-    for (Object element : cacheConfig.getCustomCacheElements()) {
-      if (classT.isInstance(element)) {
-        newList.add(classT.cast(element));
-      }
-    }
-    return newList;
-  }
-
-  default <T extends CacheElement> T findCustomCacheElement(CacheConfig cacheConfig,
-      String elementId, Class<T> classT) {
-    return findIdentifiable(findCustomCacheElements(cacheConfig, classT), elementId);
-  }
-
-  default <T extends CacheElement> List<T> findCustomRegionElements(CacheConfig cacheConfig,
-      String regionPath, Class<T> classT) {
-    List<T> newList = new ArrayList<>();
-    RegionConfig regionConfig = findRegionConfiguration(cacheConfig, regionPath);
-    if (regionConfig == null) {
-      return newList;
-    }
-
-    // streaming won't work here, because it's trying to cast element into CacheElement
-    for (Object element : regionConfig.getCustomRegionElements()) {
-      if (classT.isInstance(element)) {
-        newList.add(classT.cast(element));
-      }
-    }
-    return newList;
-  }
-
-  default <T extends CacheElement> T findCustomRegionElement(CacheConfig cacheConfig,
-      String regionPath, String elementId, Class<T> classT) {
-    return findIdentifiable(findCustomRegionElements(cacheConfig, regionPath, classT), elementId);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
index 2900bdb..e940dc9 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
@@ -26,6 +26,7 @@ import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.cache.configuration.CacheConfig;
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.cache.configuration.JndiBindingsType;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalClusterConfigurationService;
@@ -154,7 +155,7 @@ public class CreateJndiBindingCommand extends InternalGfshCommand {
       CacheConfig cacheConfig = service.getCacheConfig("cluster");
       if (cacheConfig != null) {
         JndiBindingsType.JndiBinding existing =
-            service.findIdentifiable(cacheConfig.getJndiBindings(), jndiName);
+            CacheElement.findElement(cacheConfig.getJndiBindings(), jndiName);
         if (existing != null) {
           throw new EntityExistsException(
               CliStrings.format("Jndi binding with jndi-name \"{0}\" already exists.", jndiName),
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
index 569cf67..e1540dc 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
@@ -22,6 +22,7 @@ import java.util.Set;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheElement;
 import org.apache.geode.cache.configuration.JndiBindingsType;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalClusterConfigurationService;
@@ -62,7 +63,7 @@ public class DestroyJndiBindingCommand extends InternalGfshCommand {
     if (service != null) {
       service.updateCacheConfig("cluster", cc -> {
         List<JndiBindingsType.JndiBinding> bindings = cc.getJndiBindings();
-        JndiBindingsType.JndiBinding binding = service.findIdentifiable(bindings, jndiName);
+        JndiBindingsType.JndiBinding binding = CacheElement.findElement(bindings, jndiName);
         if (binding == null) {
           throw new EntityNotFoundException(
               CliStrings.format("Jndi binding with jndi-name \"{0}\" does not exist.", jndiName),
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
index 5f0e4ff..642ce6d 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -58,6 +59,8 @@ public class CreateJndiBindingCommandTest {
 
   private CreateJndiBindingCommand command;
   private InternalCache cache;
+  JndiBindingsType.JndiBinding binding;
+  List<JndiBindingsType.JndiBinding> bindings;
 
   private static String COMMAND = "create jndi-binding ";
 
@@ -66,6 +69,10 @@ public class CreateJndiBindingCommandTest {
     cache = mock(InternalCache.class);
     command = spy(CreateJndiBindingCommand.class);
     doReturn(cache).when(command).getCache();
+
+    binding = new JndiBindingsType.JndiBinding();
+    binding.setJndiName("name");
+    bindings = new ArrayList<>();
   }
 
   @Test
@@ -101,11 +108,11 @@ public class CreateJndiBindingCommandTest {
     InternalClusterConfigurationService clusterConfigService =
         mock(InternalClusterConfigurationService.class);
     CacheConfig cacheConfig = mock(CacheConfig.class);
-    JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
+    when(cacheConfig.getJndiBindings()).thenReturn(bindings);
+    bindings.add(binding);
 
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(existingBinding).when(clusterConfigService).findIdentifiable(any(), any());
 
     gfsh.executeAndAssertThat(command,
         COMMAND + " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url")
@@ -118,11 +125,11 @@ public class CreateJndiBindingCommandTest {
     InternalClusterConfigurationService clusterConfigService =
         mock(InternalClusterConfigurationService.class);
     CacheConfig cacheConfig = mock(CacheConfig.class);
-    JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
 
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(existingBinding).when(clusterConfigService).findIdentifiable(any(), any());
+    when(cacheConfig.getJndiBindings()).thenReturn(bindings);
+    bindings.add(binding);
 
     gfsh.executeAndAssertThat(command,
         COMMAND
@@ -136,11 +143,11 @@ public class CreateJndiBindingCommandTest {
     InternalClusterConfigurationService clusterConfigService =
         mock(InternalClusterConfigurationService.class);
     CacheConfig cacheConfig = mock(CacheConfig.class);
-    JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
+    when(cacheConfig.getJndiBindings()).thenReturn(bindings);
+    bindings.add(binding);
 
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(existingBinding).when(clusterConfigService).findIdentifiable(any(), any());
 
     gfsh.executeAndAssertThat(command,
         COMMAND
@@ -153,11 +160,11 @@ public class CreateJndiBindingCommandTest {
     InternalClusterConfigurationService clusterConfigService =
         mock(InternalClusterConfigurationService.class);
     CacheConfig cacheConfig = mock(CacheConfig.class);
-    JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
+    when(cacheConfig.getJndiBindings()).thenReturn(bindings);
+    bindings.add(binding);
 
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(existingBinding).when(clusterConfigService).findIdentifiable(any(), any());
 
     gfsh.executeAndAssertThat(command,
         COMMAND
@@ -185,7 +192,6 @@ public class CreateJndiBindingCommandTest {
     doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(null).when(clusterConfigService).findIdentifiable(any(), any());
 
     gfsh.executeAndAssertThat(command,
         COMMAND + " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url")
@@ -251,7 +257,6 @@ public class CreateJndiBindingCommandTest {
     doReturn(clusterConfigService).when(command).getConfigurationService();
     doReturn(results).when(command).executeAndGetFunctionResult(any(), any(), any());
     doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
-    doReturn(null).when(clusterConfigService).findIdentifiable(any(), any());
 
     gfsh.executeAndAssertThat(command,
         COMMAND
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
index bcc8d25..86a1458 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
@@ -39,7 +39,6 @@ import org.mockito.ArgumentCaptor;
 
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.configuration.CacheConfig;
-import org.apache.geode.cache.configuration.JndiBindingsType;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalClusterConfigurationService;
 import org.apache.geode.internal.cache.InternalCache;
@@ -86,28 +85,24 @@ public class DestroyJndiBindingCommandTest {
 
   @Test
   public void returnsErrorIfBindingDoesNotExistAndIfExistsUnspecified() {
-    when(ccService.findIdentifiable(any(), any())).thenReturn(null);
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsError()
         .containsOutput("does not exist.");
   }
 
   @Test
   public void skipsIfBindingDoesNotExistAndIfExistsSpecified() {
-    when(ccService.findIdentifiable(any(), any())).thenReturn(null);
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists").statusIsSuccess()
         .containsOutput("does not exist.");
   }
 
   @Test
   public void skipsIfBindingDoesNotExistAndIfExistsSpecifiedTrue() {
-    when(ccService.findIdentifiable(any(), any())).thenReturn(null);
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists=true").statusIsSuccess()
         .containsOutput("does not exist.");
   }
 
   @Test
   public void returnsErrorIfBindingDoesNotExistAndIfExistsSpecifiedFalse() {
-    when(ccService.findIdentifiable(any(), any())).thenReturn(null);
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists=false").statusIsError()
         .containsOutput("does not exist.");
   }
@@ -125,8 +120,6 @@ public class DestroyJndiBindingCommandTest {
   public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig() {
     doNothing().when(ccService).updateCacheConfig(any(), any());
     doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(JndiBindingsType.JndiBinding.class));
 
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess()
         .containsOutput(
@@ -182,8 +175,6 @@ public class DestroyJndiBindingCommandTest {
     doReturn(members).when(command).findMembers(any(), any());
     doReturn(results).when(command).executeAndGetFunctionResult(any(), any(), any());
     doNothing().when(ccService).updateCacheConfig(any(), any());
-    when(ccService.findIdentifiable(any(), any()))
-        .thenReturn(mock(JndiBindingsType.JndiBinding.class));
 
     gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess()
         .tableHasColumnOnlyWithValues("Member", "server1")

-- 
To stop receiving notification emails like this one, please contact
jinmeiliao@apache.org.