All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.graphhopper.reader.ReaderElement Maven / Gradle / Ivy

/*
 *  Licensed to GraphHopper GmbH under one or more contributor
 *  license agreements. See the NOTICE file distributed with this work for
 *  additional information regarding copyright ownership.
 *
 *  GraphHopper GmbH licenses this file to you under the Apache License,
 *  Version 2.0 (the "License"); you may not use this file except in
 *  compliance with the License. You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.graphhopper.reader;

import java.util.*;
import java.util.Map.Entry;

/**
 * Base class for all network objects
 * 

* * @author Nop * @author Peter */ public abstract class ReaderElement { public static final int NODE = 0; public static final int WAY = 1; public static final int RELATION = 2; public static final int FILEHEADER = 3; private final int type; private final long id; private final Map properties; protected ReaderElement(long id, int type) { this(id, type, 4); } protected ReaderElement(long id, int type, int propertyMapSize) { this.id = id; this.type = type; properties = new HashMap<>(propertyMapSize); } public long getId() { return id; } protected String tagsToString() { if (properties.isEmpty()) return ""; StringBuilder tagTxt = new StringBuilder(); for (Map.Entry entry : properties.entrySet()) { tagTxt.append(entry.getKey()); tagTxt.append("="); tagTxt.append(entry.getValue()); tagTxt.append("\n"); } return tagTxt.toString(); } protected Map getTags() { return properties; } public void setTags(Map newTags) { properties.clear(); if (newTags != null) for (Entry e : newTags.entrySet()) { setTag(e.getKey(), e.getValue()); } } public boolean hasTags() { return !properties.isEmpty(); } public String getTag(String name) { return (String) properties.get(name); } @SuppressWarnings("unchecked") public T getTag(String key, T defaultValue) { T val = (T) properties.get(key); if (val == null) return defaultValue; return val; } public List getKeysWithPrefix(String keyPrefix) { List keys = new ArrayList<>(); for (String key : properties.keySet()) { if (key.startsWith(keyPrefix)) { keys.add(key); } } return keys; } public void setTag(String name, Object value) { properties.put(name, value); } /** * Check that the object has a given tag with a given value. */ public boolean hasTag(String key, Object value) { return value.equals(getTag(key, "")); } /** * Check that a given tag has one of the specified values. If no values are given, just checks * for presence of the tag */ public boolean hasTag(String key, String... values) { Object value = properties.get(key); if (value == null) return false; // tag present, no values given: success if (values.length == 0) return true; for (String val : values) { if (val.equals(value)) return true; } return false; } /** * Check that a given tag has one of the specified values. */ public final boolean hasTag(String key, Collection values) { return values.contains(getTag(key, "")); } /** * Check a number of tags in the given order for the any of the given values. Used to parse * hierarchical access restrictions */ public boolean hasTag(List keyList, Collection values) { for (String key : keyList) { if (values.contains(getTag(key, ""))) return true; } return false; } public boolean hasTagWithKeyPrefix(String keyPrefix) { for (String key : properties.keySet()) { if (key.startsWith(keyPrefix)) { return true; } } return false; } /** * Returns the first existing tag of the specified list where the order is important. */ public String getFirstPriorityTag(List restrictions) { for (String str : restrictions) { if (hasTag(str)) return getTag(str); } return ""; } public void removeTag(String name) { properties.remove(name); } public void clearTags() { properties.clear(); } public int getType() { return type; } public boolean isType(int type) { return this.type == type; } @Override public String toString() { return properties.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy