This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.resourceresolver-mock-0.2.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-resourceresolver-mock.git
commit 812de294d0be80e69c0d3a39bc651428201268cd Author: Carsten Ziegeler <[email protected]> AuthorDate: Thu Jan 30 14:24:23 2014 +0000 Refactoring and javadoc updates git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/resourceresolver-mock@1562837 13f79535-47bb-0310-9956-ffa450edef68 --- .../resourceresolver/MockResourceResolver.java | 17 ++++--- .../MockResourceResolverFactory.java | 32 ++++++++++--- .../MockResourceResolverFactoryOptions.java | 52 ++++++++++++++++++++++ 3 files changed, 85 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java index 6dfe885..a28b62b 100644 --- a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java +++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java @@ -36,7 +36,6 @@ import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.osgi.service.event.Event; -import org.osgi.service.event.EventAdmin; public class MockResourceResolver implements ResourceResolver { @@ -46,11 +45,11 @@ public class MockResourceResolver implements ResourceResolver { private final Set<String> deletedResources = new HashSet<String>(); - private final EventAdmin eventAdmin; + private final MockResourceResolverFactoryOptions options; - public MockResourceResolver(final EventAdmin eventAdmin, + public MockResourceResolver(final MockResourceResolverFactoryOptions options, final Map<String, Map<String, Object>> resources) { - this.eventAdmin = eventAdmin; + this.options = options; this.resources = resources; } @@ -130,7 +129,7 @@ public class MockResourceResolver implements ResourceResolver { @Override public String[] getSearchPath() { - return new String[] {"/apps", "/libs"}; + return this.options.getSearchPaths(); } @Override @@ -270,25 +269,25 @@ public class MockResourceResolver implements ResourceResolver { public void commit() throws PersistenceException { synchronized ( this.resources ) { for(final String path : this.deletedResources ) { - if ( this.resources.remove(path) != null && this.eventAdmin != null ) { + if ( this.resources.remove(path) != null && this.options.getEventAdmin() != null ) { final Map<String, Object> props = new HashMap<String, Object>(); props.put(SlingConstants.PROPERTY_PATH, path); final Event e = new Event(SlingConstants.TOPIC_RESOURCE_REMOVED, props); - this.eventAdmin.sendEvent(e); + this.options.getEventAdmin().sendEvent(e); } this.temporaryResources.remove(path); } for(final String path : this.temporaryResources.keySet() ) { final boolean changed = this.resources.containsKey(path); this.resources.put(path, this.temporaryResources.get(path)); - if ( this.eventAdmin != null ) { + if ( this.options.getEventAdmin() != null ) { final Map<String, Object> props = new HashMap<String, Object>(); props.put(SlingConstants.PROPERTY_PATH, path); if ( this.resources.get(path).get(ResourceResolver.PROPERTY_RESOURCE_TYPE) != null ) { props.put(SlingConstants.PROPERTY_RESOURCE_TYPE, this.resources.get(path).get(ResourceResolver.PROPERTY_RESOURCE_TYPE)); } final Event e = new Event(changed ? SlingConstants.TOPIC_RESOURCE_CHANGED : SlingConstants.TOPIC_RESOURCE_ADDED, props); - this.eventAdmin.sendEvent(e); + this.options.getEventAdmin().sendEvent(e); } } } diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactory.java index 2e7980b..086b6fc 100644 --- a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactory.java +++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactory.java @@ -27,36 +27,54 @@ import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.osgi.service.event.EventAdmin; +/** + * Simple resource resolver factory + */ public class MockResourceResolverFactory implements ResourceResolverFactory { + /** We use a linked hash map to preserve creation order. */ private final Map<String, Map<String, Object>> resources = new LinkedHashMap<String, Map<String, Object>>(); - private final EventAdmin eventAdmin; + private final MockResourceResolverFactoryOptions options; + /** + * Create a new resource resolver factory + * @param eventAdmin All resource events are sent to this event admin + */ public MockResourceResolverFactory(final EventAdmin eventAdmin) { - this.eventAdmin = eventAdmin; - resources.put("/", new HashMap<String, Object>()); + this(new MockResourceResolverFactoryOptions().setEventAdmin(eventAdmin)); } + /** + * Create a new resource resolver factory. + */ public MockResourceResolverFactory() { - this(null); + this(new MockResourceResolverFactoryOptions()); + } + + /** + * Create a new resource resolver factory. + */ + public MockResourceResolverFactory(final MockResourceResolverFactoryOptions options) { + this.options = options; + resources.put("/", new HashMap<String, Object>()); } @Override public ResourceResolver getResourceResolver( final Map<String, Object> authenticationInfo) throws LoginException { - return new MockResourceResolver(this.eventAdmin, resources); + return new MockResourceResolver(options, resources); } @Override public ResourceResolver getAdministrativeResourceResolver( final Map<String, Object> authenticationInfo) throws LoginException { - return new MockResourceResolver(this.eventAdmin, resources); + return new MockResourceResolver(options, resources); } @Override public ResourceResolver getServiceResourceResolver( Map<String, Object> authenticationInfo) throws LoginException { - return new MockResourceResolver(this.eventAdmin, resources); + return new MockResourceResolver(options, resources); } } diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactoryOptions.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactoryOptions.java new file mode 100644 index 0000000..6572797 --- /dev/null +++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolverFactoryOptions.java @@ -0,0 +1,52 @@ +/* + * 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.testing.resourceresolver; + +import org.osgi.service.event.EventAdmin; + +/** + * Options for the factory + */ +public class MockResourceResolverFactoryOptions { + + private EventAdmin eventAdmin; + + private String[] searchPaths = new String[] {"/apps", "/libs"}; + + public EventAdmin getEventAdmin() { + return eventAdmin; + } + + public MockResourceResolverFactoryOptions setEventAdmin(EventAdmin eventAdmin) { + this.eventAdmin = eventAdmin; + return this; + } + + public String[] getSearchPaths() { + return searchPaths; + } + + public MockResourceResolverFactoryOptions setSearchPaths(String[] searchPaths) { + if ( searchPaths == null ) { + searchPaths = new String[] {}; + } + this.searchPaths = searchPaths; + return this; + } +} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
