public static <K, V> ConfigurationAdapter<K, V> create(Configuration<K, V> c) {
   // A configuration copy as required by the spec
   if (c instanceof CompleteConfiguration) {
     return new ConfigurationAdapter<K, V>(
         new MutableConfiguration<K, V>((CompleteConfiguration<K, V>) c));
   } else {
     // support use of Basic Configuration
     MutableConfiguration<K, V> mutableConfiguration = new MutableConfiguration<K, V>();
     mutableConfiguration.setStoreByValue(c.isStoreByValue());
     mutableConfiguration.setTypes(c.getKeyType(), c.getValueType());
     return new ConfigurationAdapter<K, V>(new MutableConfiguration<K, V>(mutableConfiguration));
   }
 }
 private static <K, V> boolean isStoreByValue(
     Configuration<K, V> config, CacheConfiguration<K, V> ehcacheConfig) {
   if (ehcacheConfig != null) {
     Collection<ServiceConfiguration<?>> serviceConfigurations =
         ehcacheConfig.getServiceConfigurations();
     for (ServiceConfiguration<?> serviceConfiguration : serviceConfigurations) {
       if (serviceConfiguration instanceof DefaultCopierConfiguration) {
         DefaultCopierConfiguration copierConfig =
             (DefaultCopierConfiguration) serviceConfiguration;
         if (copierConfig.getType().equals(DefaultCopierConfiguration.Type.VALUE)) {
           if (copierConfig.getClazz().isAssignableFrom(IdentityCopier.class)) {
             return false;
           } else {
             return true;
           }
         }
       }
     }
   }
   return config.isStoreByValue();
 }