package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop; import java.util.ArrayList; import java.util.List; import org.openstreetmap.josm.command.ChangePropertyCommand; import org.openstreetmap.josm.command.Command; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; /** * @author Rodion Scherbakov * Base class of operation of customizing of stop area */ public abstract class StopAreaOperationBase implements IStopAreaCustomizer { /** * Current dataset of Josm */ private DataSet _CurrentDataSet; /** * Constructor of operation of customizing of stop area * @param currentDataSet Current data set of JOSM */ public StopAreaOperationBase(DataSet currentDataSet) { _CurrentDataSet = currentDataSet; } /** * Get current dataset of Josm * Used for comparability wit previous version * @return Current dataset of Josm */ protected DataSet getCurrentDataSet() { return _CurrentDataSet; } /** * Perform operation of customizing of stop area * @param stopArea Stop area object * @return stopArea Resulting stop area object */ @Override public abstract StopArea performCustomizing(StopArea stopArea); /** * Get tag value of JOSM object * @param member JOSM object * @param tagName Tag name * @return Tag value */ public static String getTagValue(OsmPrimitive member, String tagName) { return member.getKeys().get(tagName); } /** * Comparing of value of tag for josm object * @param osmObject JOSM object * @param tagName Tag name * @param tagValue Tag value * @return true, if tag exists and equals tagValue */ public static Boolean compareTag (OsmPrimitive osmObject, String tagName, String tagValue) { String value = osmObject.getKeys().get(tagName); if(value != null) return value.equals(tagValue); return false; } /** * Assign tag value to JOSM object * @param commands Command list * @param target Target OSM object * @param tag Tag name * @param tagValue Tag value * @return Resulting command list */ public static List<Command> assignTag(List<Command> commands, OsmPrimitive target, String tag, String tagValue) { if(commands == null) commands = new ArrayList<Command>(); commands.add(new ChangePropertyCommand(target, tag, tagValue)); return commands; } /** * Clear tag value of JOSM object * @param commands Command list * @param target Target OSM object * @param tag Tag name * @return Resulting command list */ public static List<Command> clearTag(List<Command> commands, OsmPrimitive target, String tag) { return assignTag(commands, target, tag, null); } /** * Calculation of center of platform, if platform is way * @param platform Platform primitive * @return Coordinates of center of platform */ public static LatLon getCenterOfWay(OsmPrimitive platform) { if(platform instanceof Way) { //p = mapView.getPoint((Node) stopArea.selectedObject); Double sumLat = 0.0; Double sumLon = 0.0; Integer countNode = 0; for(Node node : ((Way) platform).getNodes()) { LatLon coord = node.getCoor(); sumLat += coord.getX(); sumLon += coord.getY(); countNode++; } return new LatLon(sumLon / countNode, sumLat / countNode); } return null; } }