All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.osgi.service.event.EventProperties Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * Copyright (c) OSGi Alliance (2010, 2015). All Rights Reserved.
 * 
 * Licensed 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.osgi.service.event;

import static org.osgi.service.event.EventConstants.EVENT_TOPIC;
import java.util.Collection;
import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * The properties for an {@link Event}. An event source can create an
 * EventProperties object if it needs to reuse the same event properties for
 * multiple events.
 * 
 * 

* The keys are all of type {@code String}. The values are of type * {@code Object}. The key "event.topics" is ignored as event topics * can only be set when an {@link Event} is constructed. * *

* Once constructed, an EventProperties object is unmodifiable. However, the * values of the map used to construct an EventProperties object are still * subject to modification as they are not deeply copied. * * @Immutable * @since 1.3 * @author $Id: 1ecc2e9eabd389d6675300529b64f1375eb01a24 $ */ public class EventProperties implements Map { /** * The properties for an event. Keys are strings and values are objects. The * object is unmodifiable. */ private final Map properties; /** * Create an EventProperties from the specified properties. * *

* The specified properties will be copied into this EventProperties. * Properties whose key is not of type {@code String} will be ignored. A * property with the key "event.topics" will be ignored. * * @param properties The properties to use for this EventProperties object * (may be {@code null}). */ public EventProperties(Map properties) { int size = (properties == null) ? 0 : properties.size(); Map p = new HashMap(size); if (size > 0) { for (Object key : (Set) properties.keySet()) { if ((key instanceof String) && !EVENT_TOPIC.equals(key)) { Object value = properties.get(key); p.put((String) key, value); } } } // safely publish the map this.properties = Collections.unmodifiableMap(p); } /** * Create an EventProperties from the specified dictionary. * *

* The specified properties will be copied into this EventProperties. * Properties whose key is not of type {@code String} will be ignored. A * property with the key "event.topics" will be ignored. * * @param properties The properties to use for this EventProperties object * (may be {@code null}). */ EventProperties(Dictionary properties) { int size = (properties == null) ? 0 : properties.size(); Map p = new HashMap(size); if (size > 0) { for (Enumeration e = properties.keys(); e.hasMoreElements();) { Object key = e.nextElement(); if ((key instanceof String) && !EVENT_TOPIC.equals(key)) { Object value = properties.get(key); p.put((String) key, value); } } } // safely publish the map this.properties = Collections.unmodifiableMap(p); } /** * This method throws {@link UnsupportedOperationException}. * * @throws UnsupportedOperationException if called. */ @Override public void clear() { properties.clear(); } /** * Indicates if the specified property is present. * * @param name The property name. * @return {@code true} If the property is present, {@code false} otherwise. */ @Override public boolean containsKey(Object name) { return properties.containsKey(name); } /** * Indicates if the specified value is present. * * @param value The property value. * @return {@code true} If the value is present, {@code false} otherwise. */ @Override public boolean containsValue(Object value) { return properties.containsValue(value); } /** * Return the property entries. * * @return A set containing the property name/value pairs. */ @Override public Set> entrySet() { return properties.entrySet(); } /** * Return the value of the specified property. * * @param name The name of the specified property. * @return The value of the specified property. */ @Override public Object get(Object name) { return properties.get(name); } /** * Indicate if this properties is empty. * * @return {@code true} If this properties is empty, {@code false} * otherwise. */ @Override public boolean isEmpty() { return properties.isEmpty(); } /** * Return the names of the properties. * * @return The names of the properties. */ @Override public Set keySet() { return properties.keySet(); } /** * This method throws {@link UnsupportedOperationException}. * * @throws UnsupportedOperationException if called. */ @Override public Object put(String key, Object value) { return properties.put(key, value); } /** * This method throws {@link UnsupportedOperationException}. * * @throws UnsupportedOperationException if called. */ @Override public void putAll(Map map) { properties.putAll(map); } /** * This method throws {@link UnsupportedOperationException}. * * @throws UnsupportedOperationException if called. */ @Override public Object remove(Object key) { return properties.remove(key); } /** * Return the number of properties. * * @return The number of properties. */ @Override public int size() { return properties.size(); } /** * Return the properties values. * * @return The values of the properties. */ @Override public Collection values() { return properties.values(); } /** * Compares this {@code EventProperties} object to another object. * *

* The properties are compared using the {@code java.util.Map.equals()} * rules which includes identity comparison for array values. * * @param object The {@code EventProperties} object to be compared. * @return {@code true} if {@code object} is a {@code EventProperties} and * is equal to this object; {@code false} otherwise. */ @Override public boolean equals(Object object) { if (this == object) { return true; } if (!(object instanceof EventProperties)) { return false; } EventProperties other = (EventProperties) object; return properties.equals(other.properties); } /** * Returns a hash code value for this object. * * @return An integer which is a hash code value for this object. */ @Override public int hashCode() { return properties.hashCode(); } /** * Returns the string representation of this object. * * @return The string representation of this object. */ @Override public String toString() { return properties.toString(); } }