source: subversion/applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/FixUnresolvedStreetsAction.java

Last change on this file was 34511, checked in by donvip, 8 months ago

update to JOSM 14153

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Id Date Revision
  • Property svn:mime-type set to text/plain
File size: 5.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.plugins.fixAddresses;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.awt.event.KeyEvent;
8import java.util.Collection;
9
10import org.openstreetmap.josm.actions.JosmAction;
11import org.openstreetmap.josm.data.osm.DataSelectionListener;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
14import org.openstreetmap.josm.plugins.fixAddresses.gui.AddressEditDialog;
15import org.openstreetmap.josm.tools.Shortcut;
16
17/**
18 * Action to find and fix addresses without (valid) streets. It launches an dialog
19 * instance of {@link AddressEditDialog}.
20 *
21 * @author Oliver Wieland <oliver.wieland@online.de>
22 */
23public class FixUnresolvedStreetsAction extends JosmAction implements DataSelectionListener {
24    private AddressEditContainer addressEditContainer;
25    private Collection<? extends OsmPrimitive> newSelection;
26
27    public FixUnresolvedStreetsAction() {
28        super(tr("Fix street addresses"), "fixstreets_24",
29                tr("Find and fix addresses without (valid) streets."),
30                Shortcut.registerShortcut("tools:AddressEdit", tr("Tool: {0}",
31                tr("Address Edit")), KeyEvent.VK_X, Shortcut.CTRL_SHIFT), false);
32
33        setEnabled(false);
34        addressEditContainer = new AddressEditContainer();
35        SelectionEventManager.getInstance().addSelectionListener(this);
36    }
37
38    @Override
39    public void selectionChanged(SelectionChangeEvent event) {
40        /* remember new selection for actionPerformed */
41        this.newSelection = event.getSelection();
42    }
43
44    @Override
45    public void actionPerformed(ActionEvent e) {
46        if (addressEditContainer != null) {
47            addressEditContainer.attachToDataSet(newSelection);
48            try {
49                //generateTagCode(addressEditContainer);
50                AddressEditDialog dlg = new AddressEditDialog(addressEditContainer);
51                dlg.setVisible(true);
52            } finally {
53                addressEditContainer.detachFromDataSet();
54            }
55        }
56    }
57
58    @Override
59    protected void updateEnabledState() {
60        setEnabled(getLayerManager().getEditDataSet() != null);
61    }
62
63    @Override
64    protected void updateEnabledState(
65            Collection<? extends OsmPrimitive> selection) {
66        // Enable button if there is either a selection or at least a data set
67        setEnabled((selection != null && !selection.isEmpty()) || getLayerManager().getEditDataSet() != null);
68    }
69
70    /* This code is abused to generate tag utility code */
71
72    @SuppressWarnings("unused")
73    private void generateTagCode(AddressEditContainer addrVisitor) {
74
75        for (String tag : addrVisitor.getTags()) {
76            String methodName = createMethodName(tag);
77            // CHECKSTYLE.OFF: LineLength
78            System.out.println(String.format(
79                "/** Check if OSM primitive has a tag '%s'.\n * @param osmPrimitive The OSM entity to check.*/\npublic static boolean has%sTag(OsmPrimitive osmPrimitive) {\n return osmPrimitive != null ? osmPrimitive.hasKey(%s_TAG) : false;\n}\n",
80                tag, methodName, tag.toUpperCase()
81                .replaceAll(":", "_")));
82            System.out.println(String.format(
83                "/** Gets the value of tag '%s'.\n * @param osmPrimitive The OSM entity to check.*/\npublic static String get%sValue(OsmPrimitive osmPrimitive) {\n return osmPrimitive != null ? osmPrimitive.get(%s_TAG) : null;\n}\n",
84                tag, methodName, tag.toUpperCase()
85                .replaceAll(":", "_")));
86            // CHECKSTYLE.ON: LineLength
87        }
88
89        for (String tag : addrVisitor.getTags()) {
90            System.out.println(String.format(
91                    "public static final String %s_TAG = \"%s\";", tag
92                    .toUpperCase().replaceAll(":", "_"), tag));
93        }
94
95        for (String value : addrVisitor.getValues().keySet()) {
96            String tag = addrVisitor.getValues().get(value);
97
98            String tags = tag.toUpperCase().replaceAll(":", "_");
99            String values = value.toUpperCase().replaceAll(":", "_");
100            System.out.println(String.format(
101                    "public static final String %s_%s_VALUE = \"%s\";", tags, values, value));
102        }
103    }
104
105    private String createMethodName(String osmName) {
106        StringBuffer result = new StringBuffer(osmName.length());
107        boolean nextUp = false;
108        for (int i = 0; i < osmName.length(); i++) {
109            char c = osmName.charAt(i);
110            if (i == 0) {
111                result.append(Character.toUpperCase(c));
112                continue;
113            }
114            if (c == '_' || c == ':') {
115                nextUp = true;
116            } else {
117                if (nextUp) {
118                    result.append(Character.toUpperCase(c));
119                    nextUp = false;
120                } else {
121                    result.append(c);
122                }
123            }
124        }
125
126        return result.toString();
127    }
128}
Note: See TracBrowser for help on using the repository browser.