From 64a364ffeaf9fae9284263535ef74c0f0b206cb9 Mon Sep 17 00:00:00 2001 From: Martin Harris Date: Wed, 18 May 2016 15:54:47 +0100 Subject: [PATCH] Allows for multiple deserialization class renames files --- .../DeserializingClassRenamesProvider.java | 56 ++++++++++++------- .../deserializingClassRenames.properties | 0 2 files changed, 35 insertions(+), 21 deletions(-) rename core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/{ => deserializingClassRenames}/deserializingClassRenames.properties (100%) diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java index 9c8c056b08..793fbf7ad6 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java @@ -23,21 +23,26 @@ import java.util.Enumeration; import java.util.Map; import java.util.Properties; +import java.util.Set; import org.apache.brooklyn.util.core.ResourceUtils; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.javalang.Reflections; import org.apache.brooklyn.util.stream.Streams; +import org.apache.brooklyn.util.text.StringPredicates; +import org.reflections.scanners.ResourcesScanner; +import org.reflections.util.ClasspathHelper; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @Beta public class DeserializingClassRenamesProvider { - public static final String DESERIALIZING_CLASS_RENAMES_PROPERTIES_PATH = "classpath://org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties"; - + public static final String DESERIALIZING_CLASS_RENAMES_PROPERTIES_PACKAGE = "org.apache.brooklyn.core.mgmt.persist.deserializingClassRenames"; + private static volatile Map cache; @Beta @@ -50,31 +55,40 @@ public static Map loadDeserializingClassRenames() { } } } + return cache; } private static Map loadDeserializingClassRenamesCache() { - InputStream resource = new ResourceUtils(DeserializingClassRenamesProvider.class).getResourceFromUrl(DESERIALIZING_CLASS_RENAMES_PROPERTIES_PATH); - if (resource != null) { - try { - Properties props = new Properties(); - props.load(resource); - - Map result = Maps.newLinkedHashMap(); - for (Enumeration iter = props.propertyNames(); iter.hasMoreElements();) { - String key = (String) iter.nextElement(); - String value = props.getProperty(key); - result.put(key, value); + Set renames = new org.reflections.Reflections(new ConfigurationBuilder() + .setUrls(ClasspathHelper.forPackage(DESERIALIZING_CLASS_RENAMES_PROPERTIES_PACKAGE)) + .setScanners(new ResourcesScanner()) + .filterInputsBy(new FilterBuilder().includePackage(DESERIALIZING_CLASS_RENAMES_PROPERTIES_PACKAGE))) + .getResources(StringPredicates.matchesRegex(".*\\.properties$")); + + Map result = Maps.newLinkedHashMap(); + + for (String renameFile : renames) { + InputStream resource = new ResourceUtils(DeserializingClassRenamesProvider.class).getResourceFromUrl("classpath://" + renameFile); + if (resource != null) { + try { + Properties props = new Properties(); + props.load(resource); + + for (Enumeration iter = props.propertyNames(); iter.hasMoreElements(); ) { + String key = (String) iter.nextElement(); + String value = props.getProperty(key); + result.put(key, value); + } + return result; + } catch (IOException e) { + throw Exceptions.propagate(e); + } finally { + Streams.closeQuietly(resource); } - return result; - } catch (IOException e) { - throw Exceptions.propagate(e); - } finally { - Streams.closeQuietly(resource); } - } else { - return ImmutableMap.of(); } + return result; } @Beta diff --git a/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties b/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames/deserializingClassRenames.properties similarity index 100% rename from core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties rename to core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames/deserializingClassRenames.properties