/******************************************************************************** | |
* Copyright (c) 2011 Eike Stepper (Berlin, Germany) and others. | |
* | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* Eike Stepper - initial API and implementation | |
********************************************************************************/ | |
package org.eclipse.emf.ecp.internal.core.util; | |
import org.eclipse.emf.ecp.core.util.ECPProperties; | |
import org.eclipse.emf.ecp.core.util.ECPUtil; | |
import org.eclipse.emf.ecp.core.util.observer.ECPPropertiesObserver; | |
import java.io.IOException; | |
import java.io.ObjectInput; | |
import java.io.ObjectOutput; | |
import java.util.Collection; | |
import java.util.Collections; | |
import java.util.Map; | |
import java.util.Map.Entry; | |
import java.util.Set; | |
/** | |
* @author Eike Stepper | |
*/ | |
public class Properties extends Registry<Map.Entry<String, String>, ECPPropertiesObserver> implements ECPProperties { | |
public Properties() { | |
activate(); | |
} | |
public Properties(ObjectInput in) throws IOException { | |
activate(); | |
int count = in.readInt(); | |
for (int i = 0; i < count; i++) { | |
String key = in.readUTF(); | |
String value = in.readUTF(); | |
addProperty(key, value); | |
} | |
} | |
public void write(ObjectOutput out) throws IOException { | |
Collection<Entry<String, String>> entries = getElementsToWrite(); | |
out.writeInt(entries.size()); | |
for (Entry<String, String> entry : entries) { | |
out.writeUTF(entry.getKey()); | |
out.writeUTF(entry.getValue()); | |
} | |
} | |
/** {@inheritDoc} */ | |
public void addProperty(String key, String value) { | |
Map.Entry<String, String> property = new Property(key, value); | |
doChangeElements(null, Collections.singleton(property)); | |
} | |
/** {@inheritDoc} */ | |
public void removeProperty(String key) { | |
doChangeElements(Collections.singleton(key), null); | |
} | |
/** {@inheritDoc} */ | |
public String getValue(String name) { | |
Entry<String, String> element = getElement(name); | |
return element == null ? null : element.getValue(); | |
} | |
/** {@inheritDoc} */ | |
public Set<String> getKeys() { | |
return getElementNames(); | |
} | |
/** {@inheritDoc} */ | |
public Collection<Map.Entry<String, String>> getProperties() { | |
return getElements(); | |
} | |
/** {@inheritDoc} */ | |
public boolean hasProperties() { | |
return hasElements(); | |
} | |
/** {@inheritDoc} */ | |
public ECPProperties copy() { | |
ECPProperties copy = ECPUtil.createProperties(); | |
for (Entry<String, String> property : getElements()) { | |
copy.addProperty(property.getKey(), property.getValue()); | |
} | |
return copy; | |
} | |
@Override | |
protected String getElementName(Map.Entry<String, String> element) { | |
return element.getKey(); | |
} | |
protected Collection<Entry<String, String>> getElementsToWrite() { | |
return getElements(); | |
} | |
/* | |
* (non-Javadoc) | |
* @see | |
* org.eclipse.emf.ecp.internal.core.util.Registry#notifyObservers(org.eclipse.emf.ecp.core.util.observer.ECPObserver | |
* , ELEMENT[], ELEMENT[]) | |
*/ | |
@Override | |
protected void notifyObservers(Collection<Map.Entry<String, String>> oldProperties, | |
Collection<Map.Entry<String, String>> newProperties) throws Exception { | |
ECPUtil.getECPObserverBus().notify(ECPPropertiesObserver.class) | |
.propertiesChanged(this, oldProperties, newProperties); | |
} | |
// @Override | |
// @SuppressWarnings("unchecked") | |
// protected Map.Entry<String, String>[] createElementArray(int size) { | |
// return new Map.Entry[size]; | |
// } | |
/** | |
* @author Eike Stepper | |
*/ | |
public static final class Property implements Map.Entry<String, String> { | |
private final String key; | |
private final String value; | |
public Property(String key, String value) { | |
this.key = key; | |
this.value = value; | |
} | |
/** {@inheritDoc} */ | |
public String getKey() { | |
return key; | |
} | |
/** {@inheritDoc} */ | |
public String getValue() { | |
return value; | |
} | |
/** {@inheritDoc} */ | |
public String setValue(String value) { | |
throw new UnsupportedOperationException(); | |
} | |
@Override | |
public String toString() { | |
return key + " --> " + value; | |
} | |
} | |
} |