// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.graphview.core.data;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
/**
* TagGroup that uses a key-value-Map to store tags
*/
public class MapBasedTagGroup implements TagGroup {
private final Map<String, String> tagMap;
/**
* @param tagMap map from keys to values; != null;
* must not be modified after being used as parameter
*/
public MapBasedTagGroup(Map<String, String> tagMap) {
if (tagMap == null) {
throw new IllegalArgumentException();
}
this.tagMap = tagMap;
}
/**
* @param tags tags to add to the group; != null, each != null
*/
public MapBasedTagGroup(Iterable<Tag> tags) {
if (tags == null) {
throw new IllegalArgumentException();
}
this.tagMap = new HashMap<>();
for (Tag tag : tags) {
if (tag == null) {
throw new IllegalArgumentException();
} else {
this.tagMap.put(tag.key, tag.value);
}
}
}
/**
* @param tags tags to add to the group; each != null
*/
public MapBasedTagGroup(Tag... tags) {
this.tagMap = new HashMap<>(tags.length);
for (Tag tag : tags) {
if (tag == null) {
throw new IllegalArgumentException();
} else {
this.tagMap.put(tag.key, tag.value);
}
}
}
@Override
public String getValue(String key) {
assert key != null;
return tagMap.get(key);
}
@Override
public boolean containsKey(String key) {
assert key != null;
return tagMap.containsKey(key);
}
@Override
public boolean containsValue(String value) {
assert value != null;
return tagMap.containsValue(value);
}
@Override
public boolean contains(Tag tag) {
assert tag != null;
return tag.value.equals(tagMap.get(tag.key));
}
@Override
public int size() {
return tagMap.size();
}
/**
* returns an Iterator providing access to all Tags.
* The Iterator does not support the {@link Iterator#remove()} method.
*/
@Override
public Iterator<Tag> iterator() {
Collection<Tag> tagCollection = new LinkedList<>();
for (String key : tagMap.keySet()) {
tagCollection.add(new Tag(key, tagMap.get(key)));
}
return Collections.unmodifiableCollection(tagCollection).iterator();
}
@Override
public String toString() {
return tagMap.toString();
}
}