// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.opendata.core.datasets; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.command.SequenceCommand; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.plugins.opendata.core.OdConstants; public abstract class DataSetUpdater { public static final void updateDataSet(DataSet dataSet, AbstractDataSetHandler handler, File associatedFile) { if (dataSet != null && handler != null) { if (associatedFile != null) { handler.setAssociatedFile(associatedFile); long lastmodified = associatedFile.lastModified(); if (lastmodified > 0) { handler.setSourceDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date(lastmodified))); } } if (!Main.pref.getBoolean(OdConstants.PREF_RAWDATA)) { handler.updateDataSet(dataSet); } handler.checkDataSetSource(dataSet); handler.checkNames(dataSet); // Replace multipolygons with single untagged member by their sole member for (Relation r : dataSet.getRelations()) { if (r.isMultipolygon() && r.getMembersCount() == 1) { OsmPrimitive outer = r.getMember(0).getMember(); if (!outer.isTagged()) { r.remove("type"); r.removeMember(0); outer.setKeys(r.getKeys()); dataSet.removePrimitive(r); } } } // Simplify ways geometries for (Way w : dataSet.getWays()) { SequenceCommand command = Main.main.menu.simplifyWay.simplifyWay(w, 0.25); if (command != null) { Main.main.undoRedo.addNoRedraw(command); } } } } }