/* * 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: 15-Nov-2008 */ package uk.me.parabola.mkgmap.osmstyle.actions; import java.util.List; import uk.me.parabola.mkgmap.reader.osm.Element; import uk.me.parabola.mkgmap.reader.osm.TagDict; /** * Add a tag, optionally changing it if it already exists. The value that * the tag is set to can have replacements from the current tags. * * @author Steve Ratcliffe */ public class AddTagAction extends ValueBuildedAction { private final boolean modify; private final String tag; private final short tagKey; // The tags used to build the value. private Element valueTags; /** * Create an action to add the given tag with a value. * If the modify flag is true, then we change the tag if it * already exists. */ public AddTagAction(String tag, String value, boolean modify) { this.modify = modify; this.tag = tag; this.tagKey = TagDict.getInstance().xlate(tag); add(value); } public boolean perform(Element el) { if (!modify){ String tv = el.getTag(tagKey); if (tv != null) return false; } Element tags = valueTags!=null? valueTags: el; for (ValueBuilder value : getValueBuilder()) { String newval = value.build(tags, el); if (newval != null) { el.addTag(tagKey, newval); return true; } } return false; } public void setValueTags(Element valueTags) { this.valueTags = valueTags; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append(modify ? "set " : "add "); sb.append(tag); sb.append("="); List<ValueBuilder> values = getValueBuilder(); for (int i = 0; i < values.size(); i++) { sb.append(values.get(i)); if (i < values.size() - 1) sb.append(" | "); } sb.append(';'); return sb.toString(); } }