/**************************************************************************
OSMemory library for OSM data processing.
Copyright (C) 2014 Aleś Bułojčyk <alex73mail@gmail.com>
This is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This software 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.alex73.osmemory;
import java.util.Map;
/**
* Base interface for all OSM object.
*
* Tag keys stored and processed as index instead string value.
*/
public interface IOsmObject {
public static final int TYPE_NODE = 1;
public static final int TYPE_WAY = 2;
public static final int TYPE_RELATION = 3;
/**
* Object type: 1-node, 2-way,3-relation. It should be int instead enum for performance optimization.
*/
int getType();
boolean isNode();
boolean isWay();
boolean isRelation();
/**
* Object ID.
*/
long getId();
/**
* Object ID as object.
*/
IOsmObjectID getObjectID();
/**
* Check if object has tag.
*/
boolean hasTag(short tagKey);
/**
* Get tags list.
*/
short[] getTags();
/**
* Check if object has tag. This operation is much slower than {@link #hasTag(short)}.
*/
boolean hasTag(String tagName, MemoryStorage storage);
/**
* Get tag value.
*/
String getTag(short tagKey);
/**
* Get tag value. This operation is much slower than {@link #getTag(short)}.
*/
String getTag(String tagName, MemoryStorage storage);
Map<String, String> extractTags(MemoryStorage storage);
/**
* Get object code, like n123, w75, r51.
*/
String getObjectCode();
/**
* Get user code.
*/
short getUser();
/**
* Get user name.
*/
String getUser(MemoryStorage storage);
static String getNodeCode(long nodeId) {
return "n" + nodeId;
}
static String getWayCode(long wayId) {
return "w" + wayId;
}
static String getRelationCode(long relationId) {
return "r" + relationId;
}
}