You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/08/25 08:04:32 UTC
svn commit: r688628 - in
/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event:
EventPropertiesMap.java EventUtil.java
impl/AbstractRepositoryEventHandler.java
Author: cziegeler
Date: Sun Aug 24 23:04:31 2008
New Revision: 688628
URL: http://svn.apache.org/viewvc?rev=688628&view=rev
Log:
Reduze object creation by using a map that also extends dictionary.
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventPropertiesMap.java
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
Modified: incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventPropertiesMap.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventPropertiesMap.java?rev=688628&r1=688627&r2=688628&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventPropertiesMap.java (original)
+++ incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventPropertiesMap.java Sun Aug 24 23:04:31 2008
@@ -18,198 +18,163 @@
*/
package org.apache.sling.event;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.collections.iterators.IteratorEnumeration;
import org.osgi.service.event.Event;
/**
- * An implementation of a map that wrapps an OSGi event.
+ * An implementation of a map that helps in dealing with properties
+ * of an OSGi event.
+ * This map implements both, the map and the dictionary interfaces.
*/
-public class EventPropertiesMap implements Map<String, Object> {
+public class EventPropertiesMap
+ extends Dictionary<String, Object>
+ implements Map<String, Object> {
- private final boolean isEmpty;
-
- private final Event event;
-
- public EventPropertiesMap(final Event event) {
- this.event = event;
- this.isEmpty = (event.getPropertyNames() == null || event.getPropertyNames().length == 0);
- }
+ private final Map<String, Object> delegatee;
/**
- * @see java.util.Map#clear()
+ * Construct a new map out of an event object.
+ * The resulting map is unmodifiable.
+ * @param event The event object.
*/
- public void clear() {
- throw new UnsupportedOperationException("clear is not supported.");
- }
-
- /**
- * @see java.util.Map#put(java.lang.Object, java.lang.Object)
- */
- public Object put(String key, Object value) {
- throw new UnsupportedOperationException("put is not supported.");
+ public EventPropertiesMap(final Event event) {
+ // create a map out of the event properties
+ final Map<String, Object> props = new HashMap<String, Object>();
+ if ( event.getPropertyNames() != null ) {
+ for(final String key : event.getPropertyNames() ) {
+ props.put(key, event.getProperty(key));
+ }
+ }
+ this.delegatee = Collections.unmodifiableMap(props);
}
/**
- * @see java.util.Map#putAll(java.util.Map)
+ * Construct a new map out of another map.
+ * @param props The properties map object.
*/
- public void putAll(Map<? extends String, ? extends Object> t) {
- throw new UnsupportedOperationException("putAll is not supported.");
+ public EventPropertiesMap(final Map<String, Object> props) {
+ this.delegatee = props;
}
/**
- * @see java.util.Map#remove(java.lang.Object)
+ * @see java.util.Map#clear()
*/
- public Object remove(Object key) {
- throw new UnsupportedOperationException("remove is not supported.");
+ public void clear() {
+ delegatee.clear();
}
/**
* @see java.util.Map#containsKey(java.lang.Object)
*/
public boolean containsKey(Object key) {
- if ( this.isEmpty || key == null ) {
- return false;
- }
- final String[] names = this.event.getPropertyNames();
- for(final String name : names) {
- if ( name.equals(key) ) {
- return true;
- }
- }
- return false;
+ return delegatee.containsKey(key);
}
/**
* @see java.util.Map#containsValue(java.lang.Object)
*/
public boolean containsValue(Object value) {
- if ( this.isEmpty ) {
- return false;
- }
- final String[] names = this.event.getPropertyNames();
- for(final String name : names) {
- if ( this.event.getProperty(name).equals(value) ) {
- return true;
- }
- }
- return false;
+ return delegatee.containsValue(value);
}
/**
* @see java.util.Map#entrySet()
*/
- public Set<Map.Entry<String, Object>> entrySet() {
- if ( this.isEmpty ) {
- return Collections.emptySet();
- }
- final Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String,Object>>();
- final String[] names = event.getPropertyNames();
- for(final String key : names) {
- set.add(new PropertyEntry(key, this.event.getProperty(key)));
- }
- return set;
+ public Set<java.util.Map.Entry<String, Object>> entrySet() {
+ return delegatee.entrySet();
}
/**
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object o) {
- if ( o instanceof EventPropertiesMap ) {
- return this.event.equals(((EventPropertiesMap)o).event);
- }
- return false;
+ return delegatee.equals(o);
}
/**
- * @see java.util.Map#get(java.lang.Object)
+ * @see java.util.Dictionary#get(java.lang.Object)
*/
public Object get(Object key) {
- return (this.isEmpty || key == null ? null : this.event.getProperty(key.toString()));
+ return delegatee.get(key);
}
/**
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
- return this.event.hashCode();
+ return delegatee.hashCode();
}
/**
- * @see java.util.Map#isEmpty()
+ * @see java.util.Dictionary#isEmpty()
*/
public boolean isEmpty() {
- return this.isEmpty;
+ return delegatee.isEmpty();
}
/**
* @see java.util.Map#keySet()
*/
public Set<String> keySet() {
- if ( this.isEmpty ) {
- return Collections.emptySet();
- }
- final Set<String> set = new HashSet<String>();
- set.addAll(Arrays.asList(this.event.getPropertyNames()));
- return set;
+ return delegatee.keySet();
}
/**
- * @see java.util.Map#size()
+ * @see java.util.Dictionary#put(java.lang.Object, java.lang.Object)
*/
- public int size() {
- return (this.isEmpty ? 0 : this.event.getPropertyNames().length);
+ public Object put(String key, Object value) {
+ return delegatee.put(key, value);
}
/**
- * @see java.util.Map#values()
+ * @see java.util.Map#putAll(java.util.Map)
*/
- public Collection<Object> values() {
- if ( this.isEmpty ) {
- return Collections.emptySet();
- }
- final Set<Object> set = new HashSet<Object>();
- final String[] names = this.event.getPropertyNames();
- for(final String name : names) {
- set.add(this.event.getProperty(name));
- }
- return set;
+ public void putAll(Map<? extends String, ? extends Object> t) {
+ delegatee.putAll(t);
}
- protected static final class PropertyEntry implements Map.Entry<String, Object> {
-
- private final String key;
- private final Object value;
+ /**
+ * @see java.util.Dictionary#remove(java.lang.Object)
+ */
+ public Object remove(Object key) {
+ return delegatee.remove(key);
+ }
- public PropertyEntry(final String key, final Object value) {
- this.key = key;
- this.value = value;
- }
+ /**
+ * @see java.util.Dictionary#size()
+ */
+ public int size() {
+ return delegatee.size();
+ }
- /**
- * @see java.util.Map.Entry#getKey()
- */
- public String getKey() {
- return this.key;
- }
+ /**
+ * @see java.util.Map#values()
+ */
+ public Collection<Object> values() {
+ return delegatee.values();
+ }
- /**
- * @see java.util.Map.Entry#getValue()
- */
- public Object getValue() {
- return this.value;
- }
+ /**
+ * @see java.util.Dictionary#elements()
+ */
+ @SuppressWarnings("unchecked")
+ public Enumeration<Object> elements() {
+ return new IteratorEnumeration(this.values().iterator());
+ }
- /**
- * @see java.util.Map.Entry#setValue(java.lang.Object)
- */
- public Object setValue(Object value) {
- throw new UnsupportedOperationException("setValue is not supported.");
- }
+ /**
+ * @see java.util.Dictionary#keys()
+ */
+ @SuppressWarnings("unchecked")
+ public Enumeration<String> keys() {
+ return new IteratorEnumeration(this.keySet().iterator());
}
}
Modified: incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java?rev=688628&r1=688627&r2=688628&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java (original)
+++ incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java Sun Aug 24 23:04:31 2008
@@ -278,7 +278,7 @@
* @throws RepositoryException
*/
public static void addProperties(final Node node,
- final Map<String, Object> properties,
+ final EventPropertiesMap properties,
final List<String> ignoreProps,
final String binPropertyName)
throws RepositoryException {
@@ -324,9 +324,9 @@
* @throws RepositoryException
* @throws ClassNotFoundException
*/
- public static Map<String, Object> readProperties(final Node node,
- final String binPropertyName,
- final List<String> ignorePrefixes)
+ public static EventPropertiesMap readProperties(final Node node,
+ final String binPropertyName,
+ final List<String> ignorePrefixes)
throws RepositoryException, ClassNotFoundException {
final Map<String, Object> properties = new HashMap<String, Object>();
@@ -370,7 +370,7 @@
properties.put(name, o);
}
}
- return properties;
+ return new EventPropertiesMap(properties);
}
/**
Modified: incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java?rev=688628&r1=688627&r2=688628&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java (original)
+++ incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java Sun Aug 24 23:04:31 2008
@@ -22,9 +22,7 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Dictionary;
-import java.util.Hashtable;
import java.util.List;
-import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -330,11 +328,10 @@
protected Event readEvent(Node eventNode)
throws RepositoryException, ClassNotFoundException {
final String topic = eventNode.getProperty(EventHelper.NODE_PROPERTY_TOPIC).getString();
- final Map<String, Object> properties = EventUtil.readProperties(eventNode,
+ final EventPropertiesMap eventProps = EventUtil.readProperties(eventNode,
EventHelper.NODE_PROPERTY_PROPERTIES,
IGNORE_PREFIXES);
- final Dictionary<String, Object> eventProps = new Hashtable<String, Object>(properties);
this.addEventProperties(eventNode, eventProps);
try {
final Event event = new Event(topic, eventProps);