/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.util; import java.beans.PropertyChangeEvent; import java.util.HashMap; import java.util.Map; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.PropertyChangePublisher; import org.teiid.designer.core.Registry; import org.teiid.designer.core.spi.RegistrySPI; /** * * @since 8.0 */ public class FlatRegistry implements RegistrySPI { private Map entries; /** * Constructor for RegistryImpl. */ public FlatRegistry() { this.entries = new HashMap(); } @Override public void propertyChange(PropertyChangeEvent evt) { CoreArgCheck.isNotNull(evt.getOldValue()); CoreArgCheck.isNotNull(evt.getNewValue()); CoreArgCheck.isNotNull(evt.getPropertyName()); CoreArgCheck.isNotNull(evt.getSource()); // Add this to the Registry using the current (new) key register(evt.getNewValue().toString(), (PropertyChangePublisher) evt.getSource(), evt.getPropertyName()); // If there is an old key, then unregister this ... if (evt.getOldValue() != null && lookup(evt.getOldValue().toString()) == evt.getSource()) { this.entries.remove(evt.getOldValue().toString()); } } /** * @see Registry#lookup(String) */ @Override public Object lookup(String key) { CoreArgCheck.isNotNull(key); return this.entries.get(key); } /** * @see Registry#lookup(String, Class) */ @Override public <T> T lookup(String key, Class<T> klazz) { CoreArgCheck.isNotNull(key); CoreArgCheck.isNotNull(klazz); Object obj = this.entries.get(key); if (obj == null) { return null; } if (!klazz.isInstance(obj)) { return null; } return (T) obj; } /** * @see RegistrySPI#register(String, Object) */ @Override public <T> T register(String key, T obj) { CoreArgCheck.isNotNull(key); this.entries.put(key, obj); return obj; } @Override public PropertyChangePublisher register(String key, PropertyChangePublisher propertyChangePublisher, String propertyName) { CoreArgCheck.isNotNull(key); CoreArgCheck.isNotNull(propertyChangePublisher); CoreArgCheck.isNotNull(propertyName); this.entries.put(key, propertyChangePublisher); propertyChangePublisher.addPropertyChangeListener(propertyName, this); return propertyChangePublisher; } /** * @see RegistrySPI#unregister(String) */ @Override public Object unregister(String key) { CoreArgCheck.isNotNull(key); Object object = this.entries.remove(key); if (object instanceof PropertyChangePublisher) { ((PropertyChangePublisher) object).removePropertyChangeListener(this); } return object; } /** * Return size of registry * * @return size of registry */ public int size() { return this.entries.size(); } }