Changeset 36519 in osm
- Timestamp:
- 2026-11-08T13:26:53+01:00 (less than one hour ago)
- Location:
- applications/editors/josm/plugins/HouseNumberTaggingTool
- Files:
-
- 6 edited
-
src/org/openstreetmap/josm/plugins/housenumbertool/Dto.java (modified) (2 diffs)
-
src/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberHelper.java (modified) (3 diffs)
-
src/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberTaggingToolPlugin.java (modified) (3 diffs)
-
src/org/openstreetmap/josm/plugins/housenumbertool/LaunchAction.java (modified) (3 diffs)
-
src/org/openstreetmap/josm/plugins/housenumbertool/TagDialog.java (modified) (6 diffs)
-
test/unit/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberHelperTest.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/Dto.java
r36483 r36519 23 23 24 24 private boolean tagStreet = true; // use tag addr:street or addr:place 25 private boolean incrementSuffix = false; // increment 1a, 1b, ... instead of 1, 2, ... 25 26 26 27 private String building = "yes"; … … 164 165 } 165 166 167 public boolean isIncrementSuffix() { 168 return incrementSuffix; 169 } 170 171 public void setIncrementSuffix(boolean incrementSuffix) { 172 this.incrementSuffix = incrementSuffix; 173 } 174 166 175 public String getPlace() { 167 176 return place; -
applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberHelper.java
r36483 r36519 11 11 */ 12 12 public final class HouseNumberHelper { 13 /** 14 * prefix, number, separator, letter suffix, number suffix, e.g. "12a", "12/1", "12-b" 15 */ 16 private static final Pattern HOUSE_NUMBER_PATTERN = Pattern.compile("([^\\pN]+)?(\\pN+)([-/ ])?([^\\pN]+)?(\\pN+)?"); 17 13 18 private HouseNumberHelper() { 14 19 // Hide constructor … … 24 29 if (number != null) { 25 30 try { 26 Matcher m = Pattern.compile("([^\\pN]+)?(\\pN+)([^\\pN]+)?").matcher(number);31 Matcher m = HOUSE_NUMBER_PATTERN.matcher(number); 27 32 if (m.matches()) { 28 String prefix = m.group(1) != null ? m.group(1) : "";29 33 int n = Integer.parseInt(m.group(2)) + increment; 30 String suffix = m.group(3) != null ? m.group(3) : ""; 31 return prefix + n + suffix; 34 return number.substring(0, m.start(2)) + n + number.substring(m.end(2)); 32 35 } 33 36 } catch (NumberFormatException e) { … … 37 40 return null; 38 41 } 42 43 /** 44 * Increment the suffix of a house number, e.g. 1 to 1a, 1a to 1b or 1/1 to 1/2 45 * @param number The number to increment 46 * @return The incremented number 47 */ 48 public static String incrementHouseNumberSuffix(String number) { 49 if (number != null) { 50 try { 51 Matcher m = HOUSE_NUMBER_PATTERN.matcher(number); 52 if (m.matches()) { 53 String letter = m.group(4); 54 String suffixNumber = m.group(5); 55 if (suffixNumber != null) { 56 int n = Integer.parseInt(suffixNumber) + 1; 57 return number.substring(0, m.start(5)) + n; 58 } else if (letter != null) { 59 char next = (char) (letter.charAt(letter.length() - 1) + 1); 60 return number.substring(0, m.end(4) - 1) + next; 61 } else { 62 return number + "a"; 63 } 64 } 65 } catch (NumberFormatException e) { 66 Logging.trace(e); 67 } 68 } 69 return null; 70 } 71 72 /** 73 * Check if a house number has a suffix like 1a or 1/1 74 * @param number The house number 75 * @return {@code true} if the number has a suffix 76 */ 77 public static boolean hasSuffix(String number) { 78 return number != null && !number.equals(removeSuffix(number)); 79 } 80 81 /** 82 * Remove the suffix of a house number, e.g. 1a to 1 83 * @param number The house number 84 * @return The number without suffix 85 */ 86 public static String removeSuffix(String number) { 87 if (number != null) { 88 Matcher m = HOUSE_NUMBER_PATTERN.matcher(number); 89 if (m.matches()) { 90 return number.substring(0, m.end(2)); 91 } 92 } 93 return number; 94 } 39 95 } -
applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberTaggingToolPlugin.java
r36483 r36519 1 1 // License: GPL. For details, see LICENSE file. 2 2 package org.openstreetmap.josm.plugins.housenumbertool; 3 4 import java.io.File; 3 5 4 6 import org.openstreetmap.josm.gui.MainApplication; … … 9 11 /** 10 12 * Simple tool to tag house numbers. Select house and press 'k'. Select your addr-tags and press OK. 13 * Press 'shift+k' to switch between incrementing the number and the suffix. 11 14 */ 12 15 public class HouseNumberTaggingToolPlugin extends Plugin { … … 18 21 public HouseNumberTaggingToolPlugin(PluginInformation info) { 19 22 super(info); 20 LaunchAction action = new LaunchAction(getPluginDirs().getUserDataDirectory(false)); 21 MainMenu.add(MainApplication.getMenu().dataMenu, action, false, 0); 23 File pluginDir = getPluginDirs().getUserDataDirectory(false); 24 MainMenu.add(MainApplication.getMenu().dataMenu, new LaunchAction(pluginDir), false, 0); 25 MainMenu.add(MainApplication.getMenu().dataMenu, new LaunchAction(pluginDir, true), false, 1); 22 26 } 23 27 } -
applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/LaunchAction.java
r36483 r36519 24 24 25 25 private final File pluginDir; 26 private final boolean switchIncrement; 26 27 27 28 /** … … 30 31 */ 31 32 public LaunchAction(File pluginDir) { 32 super(tr("HouseNumberTaggingTool"), 33 this(pluginDir, false); 34 } 35 36 /** 37 * Constructs a new {@code LaunchAction}. 38 * @param pluginDir plugin directory 39 * @param switchIncrement if {@code true}, switch between incrementing the number and the suffix, 40 * e.g. 1 to 1a or 1c to 2 (shortcut Shift+K) 41 */ 42 public LaunchAction(File pluginDir, boolean switchIncrement) { 43 super(switchIncrement ? tr("HouseNumberTaggingTool (switch number/suffix)") : tr("HouseNumberTaggingTool"), 33 44 "home-icon32", 34 45 tr("Launches the HouseNumberTaggingTool dialog"), 35 Shortcut.registerShortcut("edit:housenumbertaggingtool", tr("Data: {0}", "HouseNumberTaggingTool"), 36 KeyEvent.VK_K, Shortcut.DIRECT), 46 switchIncrement 47 ? Shortcut.registerShortcut("edit:housenumbertaggingtool:switch", 48 tr("Data: {0}", tr("HouseNumberTaggingTool (switch number/suffix)")), KeyEvent.VK_K, Shortcut.SHIFT) 49 : Shortcut.registerShortcut("edit:housenumbertaggingtool", tr("Data: {0}", "HouseNumberTaggingTool"), 50 KeyEvent.VK_K, Shortcut.DIRECT), 37 51 true); 38 52 39 53 this.pluginDir = pluginDir; 54 this.switchIncrement = switchIncrement; 40 55 SelectionEventManager.getInstance().addSelectionListener(this); 41 56 setEnabled(false); … … 50 65 } 51 66 52 TagDialog dialog = new TagDialog(pluginDir, selection); 67 TagDialog dialog = new TagDialog(pluginDir, selection, switchIncrement); 53 68 dialog.showDialog(); 54 69 } -
applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/TagDialog.java
r36483 r36519 26 26 import java.util.TreeSet; 27 27 28 import javax.swing.Box; 28 29 import javax.swing.ButtonGroup; 29 30 import javax.swing.JButton; … … 111 112 private JRadioButton streetRadio; 112 113 private JRadioButton placeRadio; 114 private JRadioButton incrementNumberRadio; 115 private JRadioButton incrementSuffixRadio; 116 private final boolean switchIncrement; 113 117 114 118 /** … … 118 122 */ 119 123 public TagDialog(File pluginDir, OsmPrimitive selection) { 124 this(pluginDir, selection, false); 125 } 126 127 /** 128 * Constructs a new {@code TagDialog}. 129 * @param pluginDir plugin directory 130 * @param selection selected primitive 131 * @param switchIncrement if {@code true}, switch between incrementing the number and the suffix 132 */ 133 public TagDialog(File pluginDir, OsmPrimitive selection, boolean switchIncrement) { 120 134 super(MainApplication.getMainFrame(), tr("House Number Editor"), new String[] {tr("OK"), tr("Cancel")}, true); 121 135 this.pluginDir = pluginDir; 122 136 this.selection = selection; 137 this.switchIncrement = switchIncrement; 123 138 124 139 JPanel editPanel = createContentPane(); 125 140 126 setPreferredSize(new Dimension(900, 5 00));127 setMinimumSize(new Dimension(900, 5 00));141 setPreferredSize(new Dimension(900, 550)); 142 setMinimumSize(new Dimension(900, 550)); 128 143 129 144 setContent(editPanel); … … 284 299 editPanel.add(housenumberEnabled, columnOne); 285 300 286 housenumber = generateTextField(HouseNumberHelper.incrementHouseNumber(dto.getHousenumber(), dto.getHousenumberChangeValue())); 301 String lastNumber = dto.getHousenumber(); 302 boolean incrementSuffix = dto.isIncrementSuffix(); 303 if (switchIncrement) { 304 incrementSuffix = !HouseNumberHelper.hasSuffix(lastNumber); 305 if (!incrementSuffix) { 306 lastNumber = HouseNumberHelper.removeSuffix(lastNumber); 307 } 308 } 309 if (incrementSuffix) { 310 housenumber = generateTextField(HouseNumberHelper.incrementHouseNumberSuffix(lastNumber)); 311 } else { 312 housenumber = generateTextField(HouseNumberHelper.incrementHouseNumber(lastNumber, dto.getHousenumberChangeValue())); 313 } 287 314 housenumber.setEditable(true); 288 315 … … 291 318 editPanel.add(generateAcceptButton(actionEvent -> housenumber.setText(selection.get(TAG_ADDR_HOUSENUMBER))), columnThree); 292 319 editPanel.add(generateTextField(selection.get(TAG_ADDR_HOUSENUMBER)), columnFour); 320 321 // increment number or suffix 322 incrementNumberRadio = new JRadioButton(tr("Increment number")); 323 incrementNumberRadio.setSelected(!incrementSuffix); 324 325 incrementSuffixRadio = new JRadioButton(tr("Increment suffix")); 326 incrementSuffixRadio.setToolTipText(tr("Increment letter or number suffixes, e.g. 1a or 1/1")); 327 incrementSuffixRadio.setSelected(incrementSuffix); 328 329 ButtonGroup incrementGroup = new ButtonGroup(); 330 incrementGroup.add(incrementNumberRadio); 331 incrementGroup.add(incrementSuffixRadio); 332 333 editPanel.add(Box.createHorizontalGlue(), GBC.std()); 334 editPanel.add(incrementNumberRadio, GBC.std().insets(5, 5, 0, 5)); 335 editPanel.add(incrementSuffixRadio, GBC.eol().insets(5, 5, 0, 5)); 293 336 294 337 // increment … … 411 454 dto.setTagStreet(streetRadio.isSelected()); 412 455 dto.setSaveSuburb(suburbEnabled.isSelected()); 456 dto.setIncrementSuffix(incrementSuffixRadio.isSelected()); 413 457 414 458 dto.setBuilding((String) building.getSelectedItem()); -
applications/editors/josm/plugins/HouseNumberTaggingTool/test/unit/org/openstreetmap/josm/plugins/housenumbertool/HouseNumberHelperTest.java
r36060 r36519 4 4 5 5 import static org.junit.jupiter.api.Assertions.assertEquals; 6 import static org.junit.jupiter.api.Assertions.assertFalse; 6 7 import static org.junit.jupiter.api.Assertions.assertNull; 8 import static org.junit.jupiter.api.Assertions.assertTrue; 7 9 8 10 import org.junit.jupiter.api.Test; … … 25 27 assertEquals("2", HouseNumberHelper.incrementHouseNumber("۱", 1)); 26 28 assertNull(HouseNumberHelper.incrementHouseNumber(null, 1)); 29 assertEquals("2/1", HouseNumberHelper.incrementHouseNumber("1/1", 1)); 30 } 31 32 /** 33 * Unit test of {@link HouseNumberHelper#incrementHouseNumberSuffix} 34 */ 35 @Test 36 void testIncrementHouseNumberSuffix() { 37 assertEquals("1a", HouseNumberHelper.incrementHouseNumberSuffix("1")); 38 assertEquals("1b", HouseNumberHelper.incrementHouseNumberSuffix("1a")); 39 assertEquals("1B", HouseNumberHelper.incrementHouseNumberSuffix("1A")); 40 assertEquals("1-b", HouseNumberHelper.incrementHouseNumberSuffix("1-a")); 41 assertEquals("1/2", HouseNumberHelper.incrementHouseNumberSuffix("1/1")); 42 assertEquals("E1b", HouseNumberHelper.incrementHouseNumberSuffix("E1a")); 43 assertNull(HouseNumberHelper.incrementHouseNumberSuffix(null)); 44 } 45 46 /** 47 * Unit test of {@link HouseNumberHelper#hasSuffix} and {@link HouseNumberHelper#removeSuffix} 48 */ 49 @Test 50 void testRemoveSuffix() { 51 assertFalse(HouseNumberHelper.hasSuffix("1")); 52 assertFalse(HouseNumberHelper.hasSuffix("E1")); 53 assertTrue(HouseNumberHelper.hasSuffix("1a")); 54 assertTrue(HouseNumberHelper.hasSuffix("1/1")); 55 assertFalse(HouseNumberHelper.hasSuffix(null)); 56 assertEquals("1", HouseNumberHelper.removeSuffix("1a")); 57 assertEquals("1", HouseNumberHelper.removeSuffix("1-1")); 58 assertEquals("E1", HouseNumberHelper.removeSuffix("E1a")); 27 59 } 28 60 }
Note:
See TracChangeset
for help on using the changeset viewer.
