Ignore:
Timestamp:
2016-01-17T22:38:38+01:00 (8 years ago)
Author:
simon04
Message:

fix #4003 fix #7004 fix #8149 - Improve changeset tags handling (from earlier changeset, from dataset)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java

    r8870 r9514  
    2020import java.util.Collection;
    2121import java.util.Collections;
     22import java.util.HashMap;
     23import java.util.Iterator;
    2224import java.util.List;
    2325import java.util.Map;
     
    3941import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
    4042import org.openstreetmap.josm.data.Preferences.Setting;
     43import org.openstreetmap.josm.data.Version;
    4144import org.openstreetmap.josm.data.osm.Changeset;
     45import org.openstreetmap.josm.data.osm.DataSet;
    4246import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4347import org.openstreetmap.josm.gui.ExtendedDialog;
     
    101105    private final transient ChangesetCommentModel changesetSourceModel = new ChangesetCommentModel();
    102106
     107    private transient DataSet dataSet;
     108
    103109    /**
    104110     * builds the content panel for the upload dialog
     
    194200        // changes
    195201        //
     202        pnlChangesetManagement.addPropertyChangeListener(this);
    196203        pnlChangesetManagement.addPropertyChangeListener(
    197204                pnlBasicUploadSettings.getUploadParameterSummaryPanel()
     
    267274    }
    268275
     276    /**
     277     * Sets the tags for this upload based on (later items overwrite earlier ones):
     278     * <ul>
     279     * <li>previous "source" and "comment" input</li>
     280     * <li>the tags set in the dataset (see {@link DataSet#getChangeSetTags()})</li>
     281     * <li>the tags from the selected open changeset</li>
     282     * <li>the JOSM user agent (see {@link Version#getAgentString(boolean)})</li>
     283     * </ul>
     284     *
     285     * @param dataSet to obtain the tags set in the dataset
     286     */
     287    public void setChangesetTags(DataSet dataSet) {
     288        final Map<String, String> tags = new HashMap<>();
     289
     290        // obtain from previos input
     291        tags.put("source", getLastChangesetSourceFromHistory());
     292        tags.put("comment", getLastChangesetCommentFromHistory());
     293
     294        // obtain from dataset
     295        if (dataSet != null) {
     296            tags.putAll(dataSet.getChangeSetTags());
     297        }
     298        this.dataSet = dataSet;
     299
     300        // obtain from selected open changeset
     301        if (pnlChangesetManagement.getSelectedChangeset() != null) {
     302            tags.putAll(pnlChangesetManagement.getSelectedChangeset().getKeys());
     303        }
     304
     305        // set/adapt created_by
     306        final String agent = Version.getInstance().getAgentString(false);
     307        final String created_by = tags.get("created_by");
     308        if (created_by == null || created_by.isEmpty()) {
     309            tags.put("created_by", agent);
     310        } else if (!created_by.contains(agent)) {
     311            tags.put("created_by", created_by + ';' + agent);
     312        }
     313
     314        // remove empty values
     315        final Iterator<String> it = tags.keySet().iterator();
     316        while (it.hasNext()) {
     317            final String v = tags.get(it.next());
     318            if (v == null || v.isEmpty()) {
     319                it.remove();
     320            }
     321        }
     322
     323        pnlTagSettings.initFromTags(tags);
     324        pnlTagSettings.tableChanged(null);
     325    }
     326
    269327    @Override
    270328    public void rememberUserInput() {
     
    280338        pnlBasicUploadSettings.startUserInput();
    281339        pnlTagSettings.startUserInput();
    282         pnlTagSettings.initFromChangeset(pnlChangesetManagement.getSelectedChangeset());
    283340        pnlUploadStrategySelectionPanel.initFromPreferences();
    284341        UploadParameterSummaryPanel pnl = pnlBasicUploadSettings.getUploadParameterSummaryPanel();
     
    310367    }
    311368
     369    /**
     370     * @deprecated No longer supported, does nothing; use {@link #setChangesetTags(DataSet)} instead!
     371     */
     372    @Deprecated
    312373    public void setDefaultChangesetTags(Map<String, String> tags) {
    313         pnlTagSettings.setDefaultTags(tags);
    314         changesetCommentModel.setComment(tags.get("comment"));
    315         changesetSourceModel.setComment(tags.get("source"));
    316374    }
    317375
     
    543601        if (evt.getPropertyName().equals(ChangesetManagementPanel.SELECTED_CHANGESET_PROP)) {
    544602            Changeset cs = (Changeset) evt.getNewValue();
     603            setChangesetTags(dataSet);
    545604            if (cs == null) {
    546605                tpConfigPanels.setTitleAt(1, tr("Tags of new changeset"));
Note: See TracChangeset for help on using the changeset viewer.