#15464 closed enhancement (fixed)
[PATCH] Allow plugins to modify the changeset tags before upload
Reported by: | rorym | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | 17.10 |
Component: | Core | Version: | |
Keywords: | tags, changeset, upload | Cc: |
Description
This is a patch that allows plugins to modify the tags of a changeset before upload. I previous suggested a patch for changeset tags (in issue #14864), but this is a more general and better way to do that.
This patch gives a new method to UploadHook
: modifyChangesetTags
. Implementor can choose to implement this and modify the tags in place. The default implementation is to not change anything.
I also changed the checkUpload
method to return true by default, in case you wanted to implement a hook which only changes the changeset tags. I also improved the javadoc for UploadHook
.
-
src/org/openstreetmap/josm/actions/UploadAction.java
8 8 import java.awt.event.KeyEvent; 9 9 import java.util.LinkedList; 10 10 import java.util.List; 11 import java.util.Map; 11 12 12 13 import javax.swing.JOptionPane; 13 14 … … 20 21 import org.openstreetmap.josm.actions.upload.ValidateUploadHook; 21 22 import org.openstreetmap.josm.data.APIDataSet; 22 23 import org.openstreetmap.josm.data.conflict.ConflictCollection; 24 import org.openstreetmap.josm.data.osm.Changeset; 23 25 import org.openstreetmap.josm.gui.HelpAwareOptionPane; 24 26 import org.openstreetmap.josm.gui.MainApplication; 25 27 import org.openstreetmap.josm.gui.io.UploadDialog; … … 245 247 return; 246 248 } 247 249 250 // Any hooks want to change the changeset tags? 251 Changeset cs = UploadDialog.getUploadDialog().getChangeset(); 252 Map<String, String> changeset_tags = cs.getKeys(); 253 for (UploadHook hook : UPLOAD_HOOKS) { 254 hook.modifyChangesetTags(changeset_tags); 255 } 256 for (UploadHook hook : LATE_UPLOAD_HOOKS) { 257 hook.modifyChangesetTags(changeset_tags); 258 } 259 248 260 MainApplication.worker.execute( 249 261 new UploadPrimitivesTask( 250 262 UploadDialog.getUploadDialog().getUploadStrategySpecification(), 251 263 layer, 252 264 apiData, 253 UploadDialog.getUploadDialog().getChangeset()265 cs 254 266 ) 255 267 ); 256 268 } -
src/org/openstreetmap/josm/actions/upload/UploadHook.java
1 1 // License: GPL. For details, see LICENSE file. 2 2 package org.openstreetmap.josm.actions.upload; 3 3 4 import java.util.Map; 5 4 6 import org.openstreetmap.josm.data.APIDataSet; 5 7 6 8 /** 7 * A check right before the upload. The UploadHook may modify the uploaded data 8 * silently, it may display a warning message to the user or prevent the upload 9 * altogether. 9 * Change, or block, the upload. 10 * 11 * The UploadHook may modify the uploaded data silently, it may display a 12 * warning message to the user or prevent the upload altogether. 13 * 14 * The tags of the changeset can also be changed with modifyChangesetTags 15 * method. 10 16 */ 11 @FunctionalInterface12 17 public interface UploadHook { 13 18 14 19 /** 15 * Checks the upload. 16 * @param apiDataSet the data to upload 17 * @return {@code true} if upload is possible 20 * Check, and/or change, the data to be uploaded. 21 * Default implementation is to approve the upload. 22 * @param apiDataSet the data to upload, modify this to change the data. 23 * @return {@code true} if upload is possible, {@code false} to block the upload. 18 24 */ 19 boolean checkUpload(APIDataSet apiDataSet); 25 default boolean checkUpload(APIDataSet apiDataSet) { 26 return true; 27 } 28 29 /** 30 * Modify the changeset tags (in place) before upload. 31 * Default implementation is to do no changes. 32 * @param tags The current tags to change 33 */ 34 default void modifyChangesetTags(Map<String, String> tags) { 35 } 20 36 }
The purpose of this patch is to add the
clacks_overhead=GNU Terry Pratchett
tag to changesets. I have a plugin which uses this functionality to do this: https://github.com/rory/josm-pTerry