// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.domain.v0_6;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.openstreetmap.osmosis.core.store.StoreClassRegister;
import org.openstreetmap.osmosis.core.store.StoreReader;
import org.openstreetmap.osmosis.core.store.StoreWriter;
import org.openstreetmap.osmosis.core.util.CollectionWrapper;
import org.openstreetmap.osmosis.core.util.IntAsChar;
/**
* Maintains a collection of tags.
*
* @author Brett Henderson
*/
public class TagCollectionImpl extends CollectionWrapper<Tag> implements TagCollection {
/**
* Creates a new instance.
*/
public TagCollectionImpl() {
super(new ArrayList<Tag>());
}
/**
* Creates a new instance.
*
* @param tags
* The initial tags.
*/
public TagCollectionImpl(Collection<? extends Tag> tags) {
super(new ArrayList<Tag>(tags));
}
/**
* Creates a new instance.
*
* @param sr
* The store to read state from.
* @param scr
* Maintains the mapping between classes and their identifiers
* within the store.
*/
public TagCollectionImpl(StoreReader sr, StoreClassRegister scr) {
super(new ArrayList<Tag>());
int tagCount;
tagCount = sr.readCharacter();
for (int i = 0; i < tagCount; i++) {
add(new Tag(sr, scr));
}
}
/**
* {@inheritDoc}
*/
@Override
public void store(StoreWriter sw, StoreClassRegister scr) {
sw.writeCharacter(IntAsChar.intToChar(size()));
for (Tag tag : this) {
tag.store(sw, scr);
}
}
/**
* {@inheritDoc}
*/
public Map<String, String> buildMap() {
Map<String, String> tagMap;
tagMap = new HashMap<String, String>(size());
for (Tag tag : this) {
tagMap.put(tag.getKey(), tag.getValue());
}
return tagMap;
}
}