/*
* Copyright 2010, 2011, 2012 mapsforge.org
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mapsforge.map.writer.model;
/**
* Represents an OSM entity which is defined by a tag/value pair. Each OSM entity is attributed with the zoom level on
* which it should appear first.
*
* @author bross
*/
public class OSMTag {
private static final String KEY_VALUE_SEPARATOR = "=";
private final short id;
private final String key;
private final String value;
private final byte zoomAppear;
// TODO is the renderable attribute still needed?
private final boolean renderable;
private final boolean forcePolygonLine;
/**
* @param id
* the internal id of the tag
* @param key
* the key of the tag
* @param value
* the value of the tag
* @param zoomAppear
* the minimum zoom level the tag appears first
* @param renderable
* flag if the tag represents a renderable entity
* @param forcePolygonLine
* flag if polygon line instead of area is forced with closed polygons
*/
public OSMTag(short id, String key, String value, byte zoomAppear, boolean renderable, boolean forcePolygonLine) {
super();
this.id = id;
this.key = key;
this.value = value;
this.zoomAppear = zoomAppear;
this.renderable = renderable;
this.forcePolygonLine = forcePolygonLine;
}
/**
* Convenience method that constructs a new OSMTag with a new id from another OSMTag.
*
* @param otherTag
* the OSMTag to copy
* @param newID
* the new id
* @return a newly constructed OSMTag with the attributes of otherTag
*/
public static OSMTag fromOSMTag(OSMTag otherTag, short newID) {
return new OSMTag(newID, otherTag.getKey(), otherTag.getValue(), otherTag.getZoomAppear(),
otherTag.isRenderable(), otherTag.isForcePolygonLine());
}
/**
* @return the id
*/
public final short getId() {
return this.id;
}
/**
* @return the key
*/
public final String getKey() {
return this.key;
}
/**
* @return the value
*/
public final String getValue() {
return this.value;
}
/**
* @return the zoomAppear
*/
public final byte getZoomAppear() {
return this.zoomAppear;
}
/**
* @return the renderable
*/
public final boolean isRenderable() {
return this.renderable;
}
/**
* @return whether the tag represents a coastline
*/
public final boolean isCoastline() {
return this.key.equals("natural") && this.value.equals("coastline");
}
/**
* @return the string representation of the OSMTag
*/
public final String tagKey() {
return this.key + KEY_VALUE_SEPARATOR + this.value;
}
/**
* @return the forcePolygonLine
*/
public final boolean isForcePolygonLine() {
return this.forcePolygonLine;
}
/**
* Convenience method for generating a string representation of a key/value pair.
*
* @param key
* the key of the tag
* @param value
* the value of the tag
* @return a string representation of the key/Value pair
*/
public static String tagKey(String key, String value) {
return key + KEY_VALUE_SEPARATOR + value;
}
@Override
public final int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + this.id;
return result;
}
@Override
public final boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OSMTag other = (OSMTag) obj;
if (this.id != other.id)
return false;
return true;
}
@Override
public final String toString() {
return "OSMTag [id=" + this.id + ", key=" + this.key + ", value=" + this.value + ", zoomAppear="
+ this.zoomAppear + ", renderable=" + this.renderable + "]";
}
}