Ticket #19632: 19632.extra_tag.patch

File 19632.extra_tag.patch, 5.1 KB (added by taylor.smock, 4 years ago)

Minimal extra tags, untested (essentially a skeleton, but probably 90% functional)

  • src/org/openstreetmap/josm/data/osm/tag/ArrayTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4import java.util.List;
     5import java.util.stream.Collectors;
     6
     7import org.openstreetmap.josm.data.osm.Tag;
     8
     9public class ArrayTag extends Tag implements IValueTag<List<Tag>> {
     10
     11    private List<Tag> value;
     12
     13    public ArrayTag(String key, List<Tag> value) {
     14        super(key, convertToString(value));
     15        this.value = value;
     16    }
     17
     18    @Override
     19    public List<Tag> getRealValue() {
     20        return value;
     21    }
     22
     23    @Override
     24    public String getValue() {
     25        return convertToString(value);
     26    }
     27
     28    private static String convertToString(List<Tag> value) {
     29        return value.stream().map(Tag::getValue).collect(Collectors.joining(", ", "[", "]"));
     30    }
     31}
  • src/org/openstreetmap/josm/data/osm/tag/BooleanTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4import org.openstreetmap.josm.data.osm.Tag;
     5
     6public class BooleanTag extends Tag implements IValueTag<Boolean> {
     7    private Boolean value;
     8
     9    public BooleanTag(Boolean value) {
     10        super(value.toString());
     11        this.value = value;
     12    }
     13
     14    @Override
     15    public Boolean getRealValue() {
     16        return value;
     17    }
     18}
  • src/org/openstreetmap/josm/data/osm/tag/IValueTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4public interface IValueTag<T> {
     5    T getRealValue();
     6}
  • src/org/openstreetmap/josm/data/osm/tag/NumberTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4import org.openstreetmap.josm.data.osm.Tag;
     5
     6public class NumberTag extends Tag implements IValueTag<Number> {
     7
     8    private Number value;
     9    public NumberTag(String key, Number value) {
     10        super(key, value.toString());
     11        this.value = value;
     12    }
     13
     14    @Override
     15    public Number getRealValue() {
     16        return this.value;
     17    }
     18
     19}
  • src/org/openstreetmap/josm/data/osm/tag/ObjectTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4import java.util.Map;
     5import java.util.stream.Collectors;
     6
     7import org.openstreetmap.josm.data.osm.Tag;
     8
     9public class ObjectTag extends Tag implements IValueTag<Map<String, Tag>> {
     10    private Map<String, Tag> value;
     11    public ObjectTag(String key, Map<String, Tag> value) {
     12        super(key, convertToString(value));
     13        this.value = value;
     14    }
     15
     16    @Override
     17    public Map<String, Tag> getRealValue() {
     18        return value;
     19    }
     20
     21    @Override
     22    public String getValue() {
     23        return convertToString(value);
     24    }
     25
     26    private static String convertToString(Map<String, Tag> value) {
     27        return value.entrySet().stream().map(e -> e.getKey() + ":" + e.getValue().getValue()).collect(Collectors.joining(",", "{", "}"));
     28    }
     29}
  • src/org/openstreetmap/josm/data/osm/tag/StringTag.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.osm.tag;
     3
     4import org.openstreetmap.josm.data.osm.Tag;
     5import org.openstreetmap.josm.data.osm.Tagged;
     6
     7/**
     8* Tag represents an immutable key/value-pair. Both the key and the value may be empty, but not null.
     9* <p>
     10* It implements the {@link Tagged} interface. However, since instances of this class are immutable,
     11* the modifying methods throw an {@link UnsupportedOperationException}.
     12*/
     13public class StringTag extends Tag implements IValueTag<String> {
     14
     15   public StringTag(String key, String value) {
     16       super(key, value);
     17   }
     18
     19    @Override
     20    public String getRealValue() {
     21        return super.getValue();
     22    }
     23}