Changeset 23814 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-10-24T18:03:48+02:00 (14 years ago)
Author:
oliverw
Message:

First version of address edit dialog.

Location:
applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditAction.java

    r23808 r23814  
    11package org.openstreetmap.josm.plugins.addressEdit;
     2
     3import static org.openstreetmap.josm.tools.I18n.tr;
    24
    35import java.awt.event.ActionEvent;
     
    68import java.util.Collection;
    79
     10import org.openstreetmap.josm.Main;
    811import org.openstreetmap.josm.actions.JosmAction;
    912import org.openstreetmap.josm.data.SelectionChangedListener;
    1013import org.openstreetmap.josm.data.osm.DataSet;
    1114import org.openstreetmap.josm.data.osm.OsmPrimitive;
     15import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
     16import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
     17import org.openstreetmap.josm.plugins.addressEdit.gui.AddressEditDialog;
     18import org.openstreetmap.josm.plugins.addressEdit.gui.AddressEditModel;
    1219import org.openstreetmap.josm.tools.Shortcut;
    13 import static org.openstreetmap.josm.tools.I18n.tr;
    1420
    1521public class AddressEditAction extends JosmAction implements
    16                 SelectionChangedListener {
     22SelectionChangedListener, CancelListener {
    1723
    1824        /**
     
    2026         */
    2127        private static final long serialVersionUID = 1L;
     28        private AddressEditModel addressModel;
     29        private boolean isCanceled = false;
    2230
    2331        public AddressEditAction() {
    24                 super(tr("Address Editor"), "addressedit_24", tr("Handy Address Editing Functions"),
    25                 Shortcut.registerShortcut("tools:AddressEdit", tr("Tool: {0}", tr("Address Edit")),
    26                         KeyEvent.VK_A, Shortcut.GROUP_MENU,
    27                         InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK), false);
    28         setEnabled(false);
    29         DataSet.addSelectionListener(this);
     32                super(tr("Address Editor"), "addressedit_24",
     33                                tr("Handy Address Editing Functions"), Shortcut
     34                                .registerShortcut("tools:AddressEdit", tr("Tool: {0}",
     35                                                tr("Address Edit")), KeyEvent.VK_A,
     36                                                Shortcut.GROUP_MENU, InputEvent.ALT_DOWN_MASK
     37                                                | InputEvent.SHIFT_DOWN_MASK), false);
     38                setEnabled(false);
     39                DataSet.addSelectionListener(this);
    3040        }
    3141
     
    3343        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
    3444                synchronized (this) {
    35                         AddressVisitor addrVisitor = new AddressVisitor();
    36                        
    37                         for (OsmPrimitive osm : newSelection) {
    38                     osm.visit(addrVisitor);
    39                 }
    40                         //generateTagCode(addrVisitor);
    41                        
    42                         addrVisitor.resolveAddresses();
     45                        collectAddressesAndStreets(newSelection);
    4346                }
    4447        }
     48
     49        @Override
     50        public void actionPerformed(ActionEvent arg0) {
     51                collectAddressesAndStreets(Main.main.getCurrentDataSet()
     52                                .allPrimitives());
     53
     54                if (addressModel != null) {
     55                        AddressEditDialog dlg = new AddressEditDialog(addressModel);
     56                        dlg.setVisible(true);
     57                }
     58        }
     59
     60        private void collectAddressesAndStreets(
     61                        final Collection<? extends OsmPrimitive> osmData) {
     62                if (osmData == null || osmData.isEmpty())
     63                        return;
     64
     65                final AddressVisitor addrVisitor = new AddressVisitor();
     66
     67                //final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Prepare OSM data..."));
     68                // int ticks = osmData.size();
     69
     70
     71
     72                try {
     73                        for (OsmPrimitive osm : osmData) {
     74                                osm.visit(addrVisitor);
     75
     76                                if (isCanceled) {
     77                                        addrVisitor.clearData(); // free visitor data
     78                                        return;
     79                                }
     80                        }
     81                        //monitor.worked(1);
     82
     83                        // generateTagCode(addrVisitor);
     84                        //monitor.setCustomText(tr("Resolving addresses..."));
     85                        addrVisitor.resolveAddresses();
     86                        //monitor.worked(1);
     87
     88
     89                } finally {
     90                        //monitor.close();
     91                }
     92
     93                addressModel = new AddressEditModel(
     94                                addrVisitor.getStreetList(),
     95                                addrVisitor.getUnresolvedItems());
     96        }
     97
     98        @Override
     99        protected void updateEnabledState() {
     100                setEnabled(getCurrentDataSet() != null);
     101        }
     102
     103        @Override
     104        protected void updateEnabledState(
     105                        Collection<? extends OsmPrimitive> selection) {
     106                setEnabled(selection != null && !selection.isEmpty());
     107        }
     108
     109        /* ----------------------------------------- */
    45110
    46111        private void generateTagCode(AddressVisitor addrVisitor) {
    47112                /* This code is abused to generate tag utility code */
    48113                for (String tag : addrVisitor.getTags()) {
    49                         String methodName = createMethodName(tag);                     
    50                         System.out.println(String.format("/** 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",
    51                                         tag,
    52                                         methodName,
    53                                         tag.toUpperCase().replaceAll(":", "_")));
    54                         System.out.println(String.format("/** 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",
    55                                         tag,
    56                                         methodName,
    57                                         tag.toUpperCase().replaceAll(":", "_")));
     114                        String methodName = createMethodName(tag);
     115                        System.out
     116                        .println(String
     117                                        .format(
     118                                                        "/** 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",
     119                                                        tag, methodName, tag.toUpperCase()
     120                                                        .replaceAll(":", "_")));
     121                        System.out
     122                        .println(String
     123                                        .format(
     124                                                        "/** 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",
     125                                                        tag, methodName, tag.toUpperCase()
     126                                                        .replaceAll(":", "_")));
    58127                }
    59                
     128
    60129                for (String tag : addrVisitor.getTags()) {
    61                         System.out.println(String.format("public static final String %s_TAG = \"%s\";", tag.toUpperCase().replaceAll(":", "_"), tag));
     130                        System.out.println(String.format(
     131                                        "public static final String %s_TAG = \"%s\";", tag
     132                                        .toUpperCase().replaceAll(":", "_"), tag));
    62133                }
    63134        }
    64        
     135
    65136        private String createMethodName(String osmName) {
    66137                StringBuffer result = new StringBuffer(osmName.length());
     
    79150                                        nextUp = false;
    80151                                } else {
    81                                         result.append(c);               
     152                                        result.append(c);
    82153                                }
    83154                        }
    84155                }
    85                
     156
    86157                return result.toString();
    87158        }
    88159
    89160        @Override
    90         public void actionPerformed(ActionEvent arg0) {
    91 
     161        public void operationCanceled() {
     162                isCanceled = true;
    92163        }
    93 
    94164}
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressVisitor.java

    r23808 r23814  
    129129                return streetDict;
    130130        }
     131       
     132        public List<StreetNode> getStreetList() {
     133                return new ArrayList<StreetNode>(streetDict.values());
     134        }
    131135
    132136        public List<AddressNode> getUnresolvedItems() {
     
    174178                System.out.println("Still unresolved: " + unresolvedAddresses.size() + " addresses");
    175179        }
     180       
     181        public void clearData() {
     182                streetDict.clear();
     183                unresolvedAddresses.clear();
     184        }
    176185}
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/StreetNode.java

    r23808 r23814  
    6767        }
    6868       
     69        public boolean hasAddresses() {
     70                return addresses != null && addresses.size() > 0;
     71        }
     72       
    6973        public List<AddressNode> getAddresses() {
    7074                return addresses;
Note: See TracChangeset for help on using the changeset viewer.