/*
* Copyright (C) 2008 Steve Ratcliffe
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 General Public License for more details.
*
*
* Author: Steve Ratcliffe
* Create date: 07-Dec-2008
*/
package uk.me.parabola.mkgmap.osmstyle.actions;
import uk.me.parabola.mkgmap.reader.osm.Element;
import uk.me.parabola.mkgmap.reader.osm.TagDict;
/**
* Part of a substitution string. This can represent a constant
* value or value that is taken from the element tags.
*
* @author Steve Ratcliffe
*/
public class ValueItem {
private String tagname;
private short tagKey;
private ValueFilter filter;
private String value;
private boolean tagname_is_local;
public ValueItem() {
}
public ValueItem(String value) {
this.value = value;
}
public String getValue(Element el, Element local_el) {
if (tagname == null && value != null)
return value; // already known
if (tagname != null) {
Element e = tagname_is_local ? local_el : el;
String tagval = e.getTag(tagKey);
if (filter != null)
value = filter.filter(tagval, local_el);
else
value = tagval;
}
return value;
}
public void addFilter(ValueFilter f) {
if (filter == null)
filter = f;
else
filter.add(f);
}
public String getTagname() {
return tagname;
}
public void setTagname(String tagname, boolean local) {
this.tagname = tagname;
this.tagname_is_local = local;
this.tagKey = TagDict.getInstance().xlate(tagname);
}
public String toString() {
if (tagname == null)
return value;
if (tagname_is_local) {
// TODO: don't ignore filter.
return "$(" + tagname + ")";
} else {
// TODO: don't ignore filter.
return "${" + tagname + "}";
}
}
}