You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/12/08 23:26:43 UTC
svn commit: r1773313 - in
/sling/trunk/contrib/extensions/contextaware-config/impl/src:
main/java/org/apache/sling/caconfig/impl/
main/java/org/apache/sling/caconfig/impl/def/
main/java/org/apache/sling/caconfig/impl/metadata/
main/java/org/apache/slin...
Author: sseifert
Date: Thu Dec 8 23:26:43 2016
New Revision: 1773313
URL: http://svn.apache.org/viewvc?rev=1773313&view=rev
Log:
add consistent (and hopefully useful) debugging and trace logging
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java (with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java (with props)
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideManager.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java Thu Dec 8 23:26:43 2016
@@ -35,9 +35,12 @@ import org.apache.sling.caconfig.impl.Co
import org.apache.sling.caconfig.impl.metadata.AnnotationClassParser;
import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
import org.apache.sling.caconfig.resource.impl.util.ConfigNameUtil;
+import org.apache.sling.caconfig.resource.impl.util.MapUtil;
import org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
class ConfigurationBuilderImpl implements ConfigurationBuilder {
@@ -51,6 +54,8 @@ class ConfigurationBuilderImpl implement
private String configName;
+ private static final Logger log = LoggerFactory.getLogger(ConfigurationBuilderImpl.class);
+
public ConfigurationBuilderImpl(final Resource resource,
final ConfigurationResolver configurationResolver,
final ConfigurationResourceResolvingStrategy configurationResourceResolvingStrategy,
@@ -160,6 +165,10 @@ class ConfigurationBuilderImpl implement
conversionName = conversionName + "/" + configResource.getName();
}
}
+ if (log.isTraceEnabled() && configResource != null) {
+ log.trace("Found config resource for context path " + contentResource.getPath() + ": " + configResource.getPath() + " "
+ + MapUtil.traceOutput(configResource.getValueMap()));
+ }
return converter.convert(configResource, clazz, conversionName);
}
@@ -168,12 +177,18 @@ class ConfigurationBuilderImpl implement
@Override
public <T> T as(final Class<T> clazz) {
final String name = getConfigurationNameForAnnotationClass(clazz);
+ if (log.isDebugEnabled()) {
+ log.debug("Get configuration for context path {}, name '{}', class {}", contentResource.getPath(), name, clazz.getName());
+ }
return getConfigResource(name, clazz, new AnnotationConverter<T>());
}
@Override
public <T> Collection<T> asCollection(Class<T> clazz) {
final String name = getConfigurationNameForAnnotationClass(clazz);
+ if (log.isDebugEnabled()) {
+ log.debug("Get configuration collection for context path {}, name '{}', class {}", contentResource.getPath(), name, clazz.getName());
+ }
return getConfigResourceCollection(name, clazz, new AnnotationConverter<T>());
}
@@ -211,11 +226,17 @@ class ConfigurationBuilderImpl implement
@Override
public ValueMap asValueMap() {
+ if (log.isDebugEnabled()) {
+ log.debug("Get ValueMap for context path {}, name '{}'", contentResource.getPath(), this.configName);
+ }
return getConfigResource(this.configName, ValueMap.class, new ValueMapConverter());
}
@Override
public Collection<ValueMap> asValueMapCollection() {
+ if (log.isDebugEnabled()) {
+ log.debug("Get ValueMap collection for context path {}, name '{}'", contentResource.getPath(), this.configName);
+ }
return getConfigResourceCollection(this.configName, ValueMap.class, new ValueMapConverter());
}
@@ -230,11 +251,17 @@ class ConfigurationBuilderImpl implement
@Override
public <T> T asAdaptable(Class<T> clazz) {
+ if (log.isDebugEnabled()) {
+ log.debug("Get adaptable for context path {}, name '{}', class {}", contentResource.getPath(), this.configName, clazz);
+ }
return getConfigResource(this.configName, clazz, new AdaptableConverter<T>());
}
@Override
public <T> Collection<T> asAdaptableCollection(Class<T> clazz) {
+ if (log.isDebugEnabled()) {
+ log.debug("Get adaptable collection for context path {}, name '{}', class {}", contentResource.getPath(), this.configName, clazz);
+ }
return getConfigResourceCollection(this.configName, clazz, new AdaptableConverter<T>());
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java Thu Dec 8 23:26:43 2016
@@ -34,6 +34,8 @@ import org.osgi.service.component.annota
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Component(service=ConfigurationInheritanceStrategy.class)
@Designate(ocd=DefaultConfigurationInheritanceStrategy.Config.class)
@@ -56,6 +58,8 @@ public class DefaultConfigurationInherit
private Config config;
+ private static final Logger log = LoggerFactory.getLogger(DefaultConfigurationInheritanceStrategy.class);
+
@Activate
private void activate(final Config config) {
this.config = config;
@@ -87,6 +91,7 @@ public class DefaultConfigurationInherit
return parentProps;
}
Resource next = inheritanceChain.next();
+ log.trace("Property inheritance: Merge with properties from {}", next.getPath());
Map<String,Object> merged = new HashMap<>(next.getValueMap());
merged.putAll(parentProps);
if (isPropertyInheritance(next)) {
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java Thu Dec 8 23:26:43 2016
@@ -28,6 +28,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.caconfig.resource.impl.util.MapUtil;
import org.apache.sling.caconfig.resource.impl.util.PropertiesFilterUtil;
import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData;
import org.apache.sling.caconfig.spi.ConfigurationPersistData;
@@ -39,6 +40,8 @@ import org.osgi.service.component.annota
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The default persistence strategy is quite simple: directly use the configuration resources.
@@ -61,6 +64,8 @@ public class DefaultConfigurationPersist
private volatile Config config;
+ private static final Logger log = LoggerFactory.getLogger(DefaultConfigurationPersistenceStrategy.class);
+
@Activate
private void activate(ComponentContext componentContext, Config config) {
this.config = config;
@@ -125,6 +130,7 @@ public class DefaultConfigurationPersist
Resource resource = resourceResolver.getResource(configResourcePath);
if (resource != null) {
try {
+ log.trace("Delete resource {}", resource.getPath());
resourceResolver.delete(resource);
}
catch (PersistenceException ex) {
@@ -150,6 +156,7 @@ public class DefaultConfigurationPersist
ResourceResolver resourceResolver = resource.getResourceResolver();
try {
for (Resource child : resource.getChildren()) {
+ log.trace("Delete resource {}", child.getPath());
resourceResolver.delete(child);
}
}
@@ -159,6 +166,9 @@ public class DefaultConfigurationPersist
}
private void replaceProperties(Resource resource, Map<String,Object> properties) {
+ if (log.isTraceEnabled()) {
+ log.trace("Replace properties of resource {} with {}", resource.getPath(), MapUtil.traceOutput(properties));
+ }
ModifiableValueMap modValueMap = resource.adaptTo(ModifiableValueMap.class);
// remove all existing properties that are not filterd
Set<String> propertyNamesToRemove = new HashSet<>(modValueMap.keySet());
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java Thu Dec 8 23:26:43 2016
@@ -112,10 +112,12 @@ public class AnnotationClassConfiguratio
}
void addBundeMapping(BundleConfigurationMapping bundleMapping) {
+ log.debug("Add bundle mapping: {}", bundleMapping);
bundleMappings.put(bundleMapping.getBundle(), bundleMapping);
}
void removeBundleMapping(BundleConfigurationMapping bundleMapping) {
+ log.debug("Remove bundle mapping: {}", bundleMapping);
bundleMappings.remove(bundleMapping.getBundle());
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java Thu Dec 8 23:26:43 2016
@@ -123,5 +123,10 @@ class BundleConfigurationMapping {
public ConfigurationMapping getConfigurationMapping(String configName) {
return getConfigMappings().get(configName);
}
+
+ @Override
+ public String toString() {
+ return "Classes from bundle '" + bundle.getSymbolicName() + "': " + classNamesList;
+ }
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideManager.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideManager.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideManager.java Thu Dec 8 23:26:43 2016
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUt
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.apache.sling.caconfig.impl.ConfigurationResourceWrapper;
+import org.apache.sling.caconfig.resource.impl.util.MapUtil;
import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
import org.apache.sling.commons.osgi.Order;
import org.apache.sling.commons.osgi.RankedServices;
@@ -38,6 +39,8 @@ import org.osgi.service.component.annota
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Detects all {@link ConfigurationOverrideProvider} implementations in the container
@@ -55,6 +58,8 @@ public class ConfigurationOverrideManage
private RankedServices<ConfigurationOverrideProvider> items = new RankedServices<>(Order.DESCENDING, this);
private volatile Collection<OverrideItem> allOverrides = Collections.emptyList();
+ private static final Logger log = LoggerFactory.getLogger(ConfigurationOverrideManager.class);
+
protected void bindConfigurationOverrideProvider(ConfigurationOverrideProvider item, Map<String, Object> props) {
items.bind(item, props);
}
@@ -110,6 +115,11 @@ public class ConfigurationOverrideManage
if (overrideProperties == null) {
return configResource;
}
+ if (log.isTraceEnabled()) {
+ log.trace("Override properties for context path " + contextPath + ", name '" + configName + "', "
+ + "config path " + configResource.getPath() + ": "
+ + MapUtil.traceOutput(configResource.getValueMap()) + " -> " + MapUtil.traceOutput(overrideProperties));
+ }
return new ConfigurationResourceWrapper(configResource, new ValueMapDecorator(overrideProperties));
}
@@ -120,7 +130,11 @@ public class ConfigurationOverrideManage
public void changed() {
List<OverrideItem> overrides = new ArrayList<>();
for (ConfigurationOverrideProvider item : items) {
- overrides.addAll(OverrideStringParser.parse(item.getOverrideStrings()));
+ Collection<OverrideItem> itemOverrides = OverrideStringParser.parse(item.getOverrideStrings());
+ if (log.isDebugEnabled() && !itemOverrides.isEmpty()) {
+ log.debug("Override items from " + item.getClass().getName() + ":\n" + StringUtils.join(itemOverrides, "\n"));
+ }
+ overrides.addAll(itemOverrides);
}
allOverrides = overrides;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java Thu Dec 8 23:26:43 2016
@@ -22,6 +22,8 @@ import java.util.Map;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
/**
* Holds override information provided by override providers.
@@ -91,5 +93,10 @@ class OverrideItem {
public boolean isAllProperties() {
return allProperties;
}
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
+ }
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java Thu Dec 8 23:26:43 2016
@@ -42,6 +42,7 @@ import org.apache.sling.caconfig.managem
import org.apache.sling.caconfig.management.ConfigurationManager;
import org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexer;
import org.apache.sling.caconfig.resource.impl.util.ConfigNameUtil;
+import org.apache.sling.caconfig.resource.impl.util.MapUtil;
import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData;
import org.apache.sling.caconfig.spi.ConfigurationPersistData;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
@@ -49,6 +50,8 @@ import org.apache.sling.caconfig.spi.met
import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Component(service = ConfigurationManager.class)
public class ConfigurationManagerImpl implements ConfigurationManager {
@@ -66,10 +69,15 @@ public class ConfigurationManagerImpl im
@Reference
private ConfigurationResourceResolverConfig configurationResourceResolverConfig;
+ private static final Logger log = LoggerFactory.getLogger(ConfigurationManagerImpl.class);
+
@SuppressWarnings("unchecked")
@Override
public ConfigurationData getConfiguration(Resource resource, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
+ if (log.isDebugEnabled()) {
+ log.debug("Get configuration for context path {}, name '{}', class {}", resource.getPath(), configName);
+ }
ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
Resource configResource = null;
@@ -95,6 +103,11 @@ public class ConfigurationManagerImpl im
}
}
+ if (log.isTraceEnabled() && configResource != null) {
+ log.trace("Found config resource for context path " + resource.getPath() + ": " + configResource.getPath() + " "
+ + MapUtil.traceOutput(configResource.getValueMap()) + ", "
+ + "writeback config resource: " + writebackConfigResourcePath);
+ }
resettableConfigResourceInheritanceChain.reset();
return new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
@@ -113,6 +126,9 @@ public class ConfigurationManagerImpl im
@Override
public ConfigurationCollectionData getConfigurationCollection(Resource resource, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
+ if (log.isDebugEnabled()) {
+ log.debug("Get configuration collection for context path {}, name '{}', class {}", resource.getPath(), configName);
+ }
ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
List<ConfigurationData> configData = new ArrayList<>();
@@ -131,11 +147,12 @@ public class ConfigurationManagerImpl im
// get writeback resource for "reverse inheritance detection"
Resource writebackConfigResource = null;
+ String writebackConfigResourcePath = null;
for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
writebackConfigResourceCollectionParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, configBucketName, configName);
if (writebackConfigResourceCollectionParentPath != null) {
- writebackConfigResource = configResource.getResourceResolver().getResource(
- writebackConfigResourceCollectionParentPath + "/" + untransformedConfigResource.getName());
+ writebackConfigResourcePath = writebackConfigResourceCollectionParentPath + "/" + untransformedConfigResource.getName();
+ writebackConfigResource = configResource.getResourceResolver().getResource(writebackConfigResourcePath);
if (writebackConfigResource != null) {
writebackConfigResource = configurationPersistenceStrategy.getResource(writebackConfigResource);
break;
@@ -143,6 +160,11 @@ public class ConfigurationManagerImpl im
}
}
+ if (log.isTraceEnabled() && configResource != null) {
+ log.trace("Found config resource for context path " + resource.getPath() + ": " + configResource.getPath() + " "
+ + MapUtil.traceOutput(configResource.getValueMap()) + ", "
+ + "writeback config resource: " + writebackConfigResourcePath);
+ }
resettableConfigResourceInheritanceChain.reset();
configData.add(new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
@@ -205,6 +227,9 @@ public class ConfigurationManagerImpl im
if (configResourcePath == null) {
throw new ConfigurationPersistenceException("Unable to persist configuration: Configuration resolving strategy returned no path.");
}
+ if (log.isDebugEnabled()) {
+ log.debug("Persist configuration for context path {}, name '{}' to {}", resource.getPath(), configName, configResourcePath);
+ }
if (!configurationPersistenceStrategy.persistConfiguration(resource.getResourceResolver(), configResourcePath, data)) {
throw new ConfigurationPersistenceException("Unable to persist configuration: No persistence strategy found.");
}
@@ -217,6 +242,9 @@ public class ConfigurationManagerImpl im
if (configResourceParentPath == null) {
throw new ConfigurationPersistenceException("Unable to persist configuration collection: Configuration resolving strategy returned no parent path.");
}
+ if (log.isDebugEnabled()) {
+ log.debug("Persist configuration collection for context path {}, name '{}' to {}", resource.getPath(), configName, configResourceParentPath);
+ }
if (!configurationPersistenceStrategy.persistConfigurationCollection(resource.getResourceResolver(), configResourceParentPath, data)) {
throw new ConfigurationPersistenceException("Unable to persist configuration: No persistence strategy found.");
}
@@ -243,6 +271,9 @@ public class ConfigurationManagerImpl im
String configResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, configBucketName, configName);
if (configResourcePath != null) {
foundAnyPath = true;
+ if (log.isDebugEnabled()) {
+ log.debug("Delete configuration for context path {}, name '{}' from {}", resource.getPath(), configName, configResourcePath);
+ }
if (!configurationPersistenceStrategy.deleteConfiguration(resource.getResourceResolver(), configResourcePath)) {
throw new ConfigurationPersistenceException("Unable to delete configuration: No persistence strategy found.");
}
@@ -263,6 +294,7 @@ public class ConfigurationManagerImpl im
ConfigNameUtil.ensureValidConfigName(configName);
ConfigurationMetadata metadata = configurationMetadataProvider.getConfigurationMetadata(configName);
if (metadata != null) {
+ log.trace("Configuration metadata found for: {}", configName);
return metadata;
}
@@ -272,10 +304,13 @@ public class ConfigurationManagerImpl im
if (partialConfigMetadata != null) {
ConfigurationMetadata nestedConfigMetadata = getNestedConfigurationMetadata(partialConfigMetadata, configName, partialConfigName);
if (nestedConfigMetadata != null) {
+ log.trace("Nested configuration metadata found for: {}", configName);
return nestedConfigMetadata;
}
}
}
+
+ log.trace("No configuration metadata found for: {}", configName);
return null;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java Thu Dec 8 23:26:43 2016
@@ -92,7 +92,7 @@ public class DefaultConfigurationResourc
}
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
+ private static final Logger log = LoggerFactory.getLogger(DefaultConfigurationResourceResolvingStrategy.class);
private volatile Config config;
@@ -157,7 +157,9 @@ public class DefaultConfigurationResourc
if ( useFromRelativePathsWith != null ) {
final ContextResource contextResource = relativePaths.remove(relativePaths.size() - 1);
val = checkPath(contextResource, useFromRelativePathsWith + "/" + contextResource.getConfigRef(), bucketNames);
-
+ if (val != null) {
+ log.trace("Found reference for context path {}: {}", contextResource.getResource().getPath(), val);
+ }
if ( relativePaths.isEmpty() ) {
useFromRelativePathsWith = null;
}
@@ -171,8 +173,6 @@ public class DefaultConfigurationResourc
}
if (val != null) {
- logger.trace("Reference '{}' found at {}",
- contextResource.getConfigRef(), contextResource.getResource().getPath());
final boolean isAbsolute = val.startsWith("/");
if ( isAbsolute && !relativePaths.isEmpty() ) {
useFromRelativePathsWith = val;
@@ -182,10 +182,14 @@ public class DefaultConfigurationResourc
val = null;
}
}
+
+ if (val != null) {
+ log.trace("Found reference for context path {}: {}", contextResource.getResource().getPath(), val);
+ }
}
}
if ( val == null && !relativePaths.isEmpty() ) {
- logger.error("Relative references not used as no absolute reference was found: {}", relativePaths);
+ log.error("Relative references not used as no absolute reference was found: {}", relativePaths);
}
return val;
}
@@ -222,20 +226,20 @@ public class DefaultConfigurationResourc
for (String bucketName : bucketNames) {
String notAllowedPostfix = "/" + bucketName;
if (ref != null && ref.endsWith(notAllowedPostfix)) {
- logger.warn("Ignoring reference to {} from {} - Probably misconfigured as it ends with '{}'",
+ log.warn("Ignoring reference to {} from {} - Probably misconfigured as it ends with '{}'",
contextResource.getConfigRef(), contextResource.getResource().getPath(), notAllowedPostfix);
ref = null;
}
}
if (ref != null && !isAllowedConfigPath(ref)) {
- logger.warn("Ignoring reference to {} from {} - not in allowed paths.",
+ log.warn("Ignoring reference to {} from {} - not in allowed paths.",
contextResource.getConfigRef(), contextResource.getResource().getPath());
ref = null;
}
if (ref != null && isFallbackConfigPath(ref)) {
- logger.warn("Ignoring reference to {} from {} - already a fallback path.",
+ log.warn("Ignoring reference to {} from {} - already a fallback path.",
contextResource.getConfigRef(), contextResource.getResource().getPath());
ref = null;
}
@@ -244,9 +248,6 @@ public class DefaultConfigurationResourc
}
private boolean isAllowedConfigPath(String path) {
- if (logger.isTraceEnabled()) {
- logger.trace("- checking if '{}' starts with {}", path, config.configPath());
- }
return path.startsWith(config.configPath() + "/");
}
@@ -289,6 +290,7 @@ public class DefaultConfigurationResourc
final String name = bucketName + "/" + configName;
Resource resource = resourceResolver.getResource(buildResourcePath(path, name));
if (resource != null) {
+ log.trace("Matching config resource for inheritance chain: {}", resource.getPath());
return resource;
}
}
@@ -322,9 +324,13 @@ public class DefaultConfigurationResourc
for(int i=deciders.size()-1;i>=0;i--) {
final InheritanceDecision decision = deciders.get(i).decide(resource, bucketName);
if ( decision == InheritanceDecision.EXCLUDE ) {
+ log.trace("Block resource collection inheritance for bucket {}, resource {} because {} retruned EXCLUDE.",
+ bucketName, resource.getPath(), deciders.get(i));
result = false;
break;
} else if ( decision == InheritanceDecision.BLOCK ) {
+ log.trace("Block resource collection inheritance for bucket {}, resource {} because {} retruned BLOCK.",
+ bucketName, resource.getPath(), deciders.get(i));
result = false;
blockedItems.add(resource.getName());
break;
@@ -341,7 +347,6 @@ public class DefaultConfigurationResourc
final List<CollectionInheritanceDecider> deciders = this.collectionInheritanceDeciders;
final Set<String> blockedItems = new HashSet<>();
- int idx = 1;
boolean inherit = false;
while (paths.hasNext()) {
final String path = paths.next();
@@ -350,10 +355,6 @@ public class DefaultConfigurationResourc
String bucketNameUsed = null;
for (String bucketName : bucketNames) {
String name = bucketName + "/" + configName;
- if (logger.isTraceEnabled()) {
- logger.trace("- searching for list '{}'", name);
- }
-
item = resourceResolver.getResource(buildResourcePath(path, name));
if (item != null) {
bucketNameUsed = bucketName;
@@ -362,14 +363,12 @@ public class DefaultConfigurationResourc
}
if (item != null) {
- if (logger.isTraceEnabled()) {
- logger.trace("+ resolved config item at [{}]: {}", idx, item.getPath());
- }
-
+ log.trace("Check children of collection parent resource {}", item.getPath());
for (Resource child : item.getChildren()) {
if (isValidResourceCollectionItem(child)
&& !result.containsKey(child.getName())
&& include(deciders, bucketNameUsed, child, blockedItems)) {
+ log.trace("Found collection resource item {}", item.getPath());
result.put(child.getName(), child);
}
}
@@ -382,17 +381,6 @@ public class DefaultConfigurationResourc
break;
}
}
- else {
- if (logger.isTraceEnabled()) {
- logger.trace("- no item '{}' under config '{}'", StringUtils.join(bucketNames, ","), path);
- }
- }
-
- idx++;
- }
-
- if (logger.isTraceEnabled()) {
- logger.trace("- final list has {} items", result.size());
}
return result.values();
@@ -458,11 +446,11 @@ public class DefaultConfigurationResourc
Iterator<String> configPaths = this.findConfigRefs(contentResource, Collections.singleton(bucketName));
if (configPaths.hasNext()) {
String configPath = buildResourcePath(configPaths.next(), name);
- logger.debug("Building configuration path {} for resource {}: {}", name, contentResource.getPath(), configPath);
+ log.trace("Building configuration path {} for resource {}: {}", name, contentResource.getPath(), configPath);
return configPath;
}
else {
- logger.debug("No configuration path {} found for resource {}.", name, contentResource.getPath());
+ log.trace("No configuration path {} found for resource {}.", name, contentResource.getPath());
return null;
}
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java?rev=1773313&r1=1773312&r2=1773313&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java Thu Dec 8 23:26:43 2016
@@ -60,7 +60,7 @@ public class DefaultContextPathStrategy
String[] configRefPropertyNames();
}
- private final Logger log = LoggerFactory.getLogger(this.getClass());
+ private static final Logger log = LoggerFactory.getLogger(DefaultContextPathStrategy.class);
private volatile Config config;
@@ -120,7 +120,7 @@ public class DefaultContextPathStrategy
while (resource != null) {
String configRef = getConfigRef(resource);
if (configRef != null) {
- log.trace("Found context path '{}'.", resource.getPath());
+ log.trace("Found context path {}, configRef {}", resource.getPath(), configRef);
return new ContextResource(resource, configRef);
}
// if getParent() returns null, stop
Added: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java?rev=1773313&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java (added)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java Thu Dec 8 23:26:43 2016
@@ -0,0 +1,75 @@
+/*
+ * 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.sling.caconfig.resource.impl.util;
+
+import java.lang.reflect.Array;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+public final class MapUtil {
+
+ private MapUtil() {
+ // static methods only
+ }
+
+ /**
+ * Produce trace output for properties map.
+ * @param properties Properties
+ * @return Debug output
+ */
+ public static final String traceOutput(Map<String,Object> properties) {
+ SortedSet<String> propertyNames = new TreeSet<>(properties.keySet());
+ PropertiesFilterUtil.removeIgnoredProperties(propertyNames);
+ StringBuilder sb = new StringBuilder();
+ sb.append("{");
+ Iterator<String> propertyNameIterator = propertyNames.iterator();
+ while (propertyNameIterator.hasNext()) {
+ String propertyName = propertyNameIterator.next();
+ sb.append(propertyName).append(": ");
+ appendValue(sb, properties.get(propertyName));
+ if (propertyNameIterator.hasNext()) {
+ sb.append(", ");
+ }
+ }
+ sb.append("}");
+ return sb.toString();
+ }
+
+ private static void appendValue(StringBuilder sb, Object value) {
+ if (value == null) {
+ sb.append("null");
+ }
+ else if (value.getClass().isArray()) {
+ sb.append("[");
+ for (int i = 0; i < Array.getLength(value); i++) {
+ if (i > 0) {
+ sb.append(",");
+ }
+ appendValue(sb, Array.get(value, i));
+ }
+ sb.append("]");
+ }
+ else {
+ sb.append(value.toString());
+ }
+ }
+
+}
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Thu Dec 8 23:26:43 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java?rev=1773313&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java (added)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java Thu Dec 8 23:26:43 2016
@@ -0,0 +1,47 @@
+/*
+ * 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.sling.caconfig.resource.impl.util;
+
+import static org.apache.sling.caconfig.resource.impl.util.MapUtil.traceOutput;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class MapUtilTest {
+
+ @Test
+ public void testTraceOutput() {
+ assertEquals("{}", traceOutput(ImmutableMap.<String,Object>of()));
+
+ assertEquals("{prop1: aa, prop2: 5, prop3: true}", traceOutput(ImmutableMap.<String,Object>of(
+ "prop1", "aa",
+ "prop2", 5,
+ "prop3", true
+ )));
+
+ assertEquals("{prop1: [aa,bb], prop2: [5,10], prop3: true}", traceOutput(ImmutableMap.<String,Object>of(
+ "prop1", new String[] { "aa", "bb" },
+ "prop2", new Integer[] { 5, 10 },
+ "prop3", true
+ )));
+ }
+
+}
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Thu Dec 8 23:26:43 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain