Ignore:
Timestamp:
2010-10-25T23:54:59+02:00 (14 years ago)
Author:
oliverw
Message:
  • Added common base class for table models
  • Revised event model/mechanism
  • Tables updates now correctly after action took place
Location:
applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit
Files:
2 added
1 deleted
12 edited

Legend:

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

    r23829 r23834  
    1111import org.openstreetmap.josm.data.SelectionChangedListener;
    1212import org.openstreetmap.josm.data.osm.OsmPrimitive;
    13 import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
    1413import org.openstreetmap.josm.plugins.addressEdit.gui.AddressEditDialog;
    15 import org.openstreetmap.josm.plugins.addressEdit.gui.AddressEditModel;
    1614import org.openstreetmap.josm.tools.Shortcut;
    1715
    18 public class AddressEditAction extends JosmAction implements
    19 SelectionChangedListener, CancelListener {
     16public class AddressEditAction extends JosmAction implements SelectionChangedListener {
    2017
    2118        /**
     
    2320         */
    2421        private static final long serialVersionUID = 1L;
    25         private AddressEditModel addressModel;
    26         private boolean isCanceled = false;
    2722        private AddressEditContainer addressEditContainer;
    2823
     
    128123                return result.toString();
    129124        }
    130 
    131         @Override
    132         public void operationCanceled() {
    133                 isCanceled = true;
    134         }
    135125}
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditContainer.java

    r23830 r23834  
    5959 */
    6060
    61 public class AddressEditContainer implements Visitor, DataSetListener {
     61public class AddressEditContainer implements Visitor, DataSetListener, IAddressEditContainerListener {
    6262        private HashMap<String, StreetNode> streetDict = new HashMap<String, StreetNode>(100);
    6363        private List<AddressNode> unresolvedAddresses = new ArrayList<AddressNode>(100);
     
    6868        private List<IAddressEditContainerListener> listeners = new ArrayList<IAddressEditContainerListener>();
    6969       
     70        /**
     71         *
     72         */
     73        public AddressEditContainer() {
     74                NodeEntityBase.addChangedListener(this);
     75        }
     76
    7077        /**
    7178         * Adds a change listener.
     
    251258                }
    252259               
     260                resolveAddresses();
     261               
    253262                fireContainerChanged();
    254263        }
     
    311320        public void wayNodesChanged(WayNodesChangedEvent event) {
    312321        }
     322
     323        @Override
     324        public void containerChanged(AddressEditContainer container) {
     325               
     326        }
     327
     328        @Override
     329        public void entityChanged() {
     330                System.out.println("entityChanged, inavlidate... :-)");
     331                invalidate();           
     332        }
    313333}
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressNode.java

    r23829 r23834  
    137137                        setStreetName(node.getName());
    138138                        node.addAddress(this);
     139                        fireEntityChanged();
    139140                }
    140141        }
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/IAddressEditContainerListener.java

    r23829 r23834  
    1616public interface IAddressEditContainerListener {
    1717        /**
    18          * Notifies clients the the container has been changed
     18         * Notifies clients that the container has been changed.
    1919         * @param container
    2020         */
    2121        public void containerChanged(AddressEditContainer container);
     22       
     23        /**
     24         * Notifies clients that an entity has been changed.
     25         */
     26        public void entityChanged();
    2227}
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/NodeEntityBase.java

    r23816 r23834  
    1616import static org.openstreetmap.josm.tools.I18n.tr;
    1717
     18import java.util.ArrayList;
    1819import java.util.List;
    1920
     
    2223public class NodeEntityBase implements INodeEntity, Comparable<INodeEntity> {
    2324        public static final String ANONYMOUS = tr("No name");
     25        private static List<IAddressEditContainerListener> listeners = new ArrayList<IAddressEditContainerListener>();
    2426       
    2527        protected OsmPrimitive osmObject;
     
    3133                super();
    3234                this.osmObject = osmObject;
     35        }
     36       
     37        /**
     38         * Adds a change listener.
     39         * @param listener
     40         */
     41        public static void addChangedListener(IAddressEditContainerListener listener) {
     42                listeners.add(listener);
     43        }
     44       
     45        /**
     46         * Removes a change listener.
     47         * @param listener
     48         */
     49        public static void removeChangedListener(IAddressEditContainerListener listener) {
     50                listeners.remove(listener);
     51        }
     52       
     53        /**
     54         * Notifies clients that the address container changed.
     55         */
     56        protected static void fireEntityChanged() {
     57                for (IAddressEditContainerListener listener : listeners) {
     58                        listener.entityChanged();
     59                }
    3360        }
    3461
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/StreetNode.java

    r23829 r23834  
    1616import java.util.ArrayList;
    1717import java.util.Collections;
    18 import java.util.HashMap;
    19 import java.util.HashSet;
    2018import java.util.List;
    2119
     
    6260        public void addAddress(AddressNode aNode) {
    6361                lazyCreateAddresses();
    64                 addresses.add(aNode);
     62                addresses.add(aNode);           
    6563        }
    6664
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/AbstractAddressEditAction.java

    r23829 r23834  
    2626        private static final long serialVersionUID = 3080414353417044998L;
    2727
    28         private AddressSelectionEvent event;
     28        private AddressEditSelectionEvent event;
    2929
    3030        /**
     
    4949         * @return
    5050         */
    51         public void updateEnabledState(AddressSelectionEvent ev) {
     51        public void updateEnabledState(AddressEditSelectionEvent ev) {
    5252                // If the tree selection changes, we will get a new event. So this is safe.
    5353                this.event = ev; // save for later use. 
     
    6969         * @param ev
    7070         */
    71         public abstract void addressEditActionPerformed(AddressSelectionEvent ev);
     71        public abstract void addressEditActionPerformed(AddressEditSelectionEvent ev);
    7272       
    7373       
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/AddressEditDialog.java

    r23830 r23834  
    3232import javax.swing.JSplitPane;
    3333import javax.swing.JTable;
    34 import javax.swing.JTree;
    3534import javax.swing.ListSelectionModel;
    3635import javax.swing.event.ListSelectionEvent;
    3736import javax.swing.event.ListSelectionListener;
    38 import javax.swing.event.TreeSelectionEvent;
    39 import javax.swing.event.TreeSelectionListener;
    40 import javax.swing.table.DefaultTableModel;
    41 import javax.swing.tree.DefaultMutableTreeNode;
    42 import javax.swing.tree.DefaultTreeModel;
    4337
    44 import org.openstreetmap.josm.Main;
    45 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
    46 import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
    47 import org.openstreetmap.josm.data.osm.event.DataSetListener;
    48 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
    49 import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
    50 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
    51 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
    52 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
    53 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    5438import org.openstreetmap.josm.plugins.addressEdit.AddressEditContainer;
    5539
    56 public class AddressEditDialog extends JFrame implements ActionListener, TreeSelectionListener, ListSelectionListener {
     40public class AddressEditDialog extends JFrame implements ActionListener, ListSelectionListener {
    5741        private static final String CANCEL_COMMAND = "Cancel";
    5842        private static final String OK_COMMAND = "Ok";
     
    6145         */
    6246        private static final long serialVersionUID = 6251676464816335631L;
    63         private AddressEditContainer model;
     47        private AddressEditContainer addressContainer;
    6448        private JTable unresolvedTable;
    6549        private JTable incompleteTable;
     
    7963                super(tr("Edit Addresses"));
    8064       
    81                 this.model = addressEditContainer;
     65                this.addressContainer = addressEditContainer;
    8266                setLayout(new BorderLayout());
    8367                setSize(800,600);
     
    8872                if (addressEditContainer != null) {
    8973                        JPanel streetPanel = new JPanel(new BorderLayout());
    90                         streetList = new JTable(new StreetTableModel(model));
     74                        streetList = new JTable(new StreetTableModel(addressContainer));
    9175                        streetList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    9276                        streetList.getSelectionModel().addListSelectionListener(this);
     
    9478                        JScrollPane scroll1 = new JScrollPane(streetList);
    9579                        streetPanel.add(scroll1, BorderLayout.CENTER);
    96                         streetPanel.add(new JLabel("Unresolved Addresses"), BorderLayout.NORTH);
     80                        streetPanel.add(new JLabel("Streets"), BorderLayout.NORTH);
    9781                        streetPanel.setMinimumSize(new Dimension(350, 400));
    9882                       
    9983                        JPanel unresolvedPanel = new JPanel(new BorderLayout());               
    100                         unresolvedTable = new JTable(new UnresolvedAddressesTableModel(model));
     84                        unresolvedTable = new JTable(new UnresolvedAddressesTableModel(addressContainer));
    10185                        unresolvedTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    10286                        unresolvedTable.getSelectionModel().addListSelectionListener(this);
     
    11498                        JPanel incompletePanel = new JPanel(new BorderLayout());
    11599                       
    116                         incompleteTable = new JTable(new IncompleteAddressesTableModel(model));
     100                        incompleteTable = new JTable(new IncompleteAddressesTableModel(addressContainer));
    117101                        incompleteTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    118102                        incompleteTable.getSelectionModel().addListSelectionListener(this);
     
    128112                        this.getContentPane().add(pane, BorderLayout.CENTER);
    129113                } else {
    130                         streetList = new JTable(new DefaultTableModel());
    131114                        this.getContentPane().add(new JLabel(tr("(No data)")), BorderLayout.CENTER);
    132115                }
     
    161144
    162145        @Override
    163         public void valueChanged(TreeSelectionEvent event) {
    164                 // Updates the selection
    165                 if (event.getSource() == streetList) {
    166                         int selStr = streetList.getSelectedRow();
    167                          
    168                 }
     146        public void valueChanged(ListSelectionEvent e) {
    169147               
    170                 /*
    171                 AddressSelectionEvent ev = new AddressSelectionEvent(event.getSource(),
    172                                 selStreet, selUnrAddr, selIncAddr);             
     148                AddressEditSelectionEvent ev = new AddressEditSelectionEvent(e.getSource(),
     149                                streetList, unresolvedTable, incompleteTable, addressContainer);
     150               
    173151                for (AbstractAddressEditAction action : actions) {
    174152                        action.updateEnabledState(ev);
    175                 }*/
    176         }
    177 
    178         @Override
    179         public void valueChanged(ListSelectionEvent e) {
    180                 // TODO Auto-generated method stub
    181                
     153                }
    182154        }
    183155
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/AssignAddressToStreetAction.java

    r23829 r23834  
    1414package org.openstreetmap.josm.plugins.addressEdit.gui;
    1515
    16 import java.awt.event.ActionEvent;
    17 
    18 import javax.swing.AbstractAction;
    19 import javax.swing.tree.DefaultMutableTreeNode;
     16import static org.openstreetmap.josm.tools.I18n.tr;
    2017
    2118import org.openstreetmap.josm.plugins.addressEdit.AddressNode;
    2219import org.openstreetmap.josm.plugins.addressEdit.StreetNode;
    23 import static org.openstreetmap.josm.tools.I18n.tr;
    2420
    2521public class AssignAddressToStreetAction extends AbstractAddressEditAction {
     
    3632
    3733        @Override
    38         public void addressEditActionPerformed(AddressSelectionEvent ev) {
    39                 DefaultMutableTreeNode streetNode = ev.getSelectedStreet();
    40                 StreetNode sNode = null;
    41                 AddressNode aNode = null;
     34        public void addressEditActionPerformed(AddressEditSelectionEvent ev) {         
     35                StreetNode streetNode = ev.getSelectedStreet();
    4236               
    43                 if (streetNode != null) {
    44                         sNode = (StreetNode) streetNode.getUserObject();
     37               
     38                if (streetNode != null && ev.getSelectedIncompleteAddresses() != null) {
     39                        for (AddressNode addrNode : ev.getSelectedUnresolvedAddresses()) {
     40                                addrNode.assignStreet(streetNode);
     41                                System.out.println("Assign " + addrNode + " to " + streetNode);
     42                        }
    4543                }
    46                
    47                 DefaultMutableTreeNode addrNode = ev.getSelectedUnresolvedAddress();
    48                 if (addrNode != null) {
    49                         aNode = (AddressNode) addrNode.getUserObject();
    50                 }
    51                
    52                 if (sNode != null && aNode != null) {
    53                         System.out.println("Assign " + aNode + " top " + sNode);
    54                        
    55                         aNode.assignStreet(sNode);
    56                         addrNode.removeFromParent();                   
    57                 }               
    5844        }
    5945
    6046        @Override
    61         public void updateEnabledState(AddressSelectionEvent ev) {
     47        public void updateEnabledState(AddressEditSelectionEvent ev) {
    6248                super.updateEnabledState(ev);
    63                 setEnabled(ev.getSelectedStreet() != null && ev.getSelectedUnresolvedAddress() != null);
     49                setEnabled(ev.getSelectedStreet() != null && ev.getSelectedUnresolvedAddresses() != null);
    6450        }
    6551
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/IncompleteAddressesTableModel.java

    r23830 r23834  
    1616import static org.openstreetmap.josm.tools.I18n.tr;
    1717
    18 import javax.swing.table.DefaultTableModel;
    1918
    2019import org.openstreetmap.josm.plugins.addressEdit.AddressEditContainer;
    2120import org.openstreetmap.josm.plugins.addressEdit.AddressNode;
    2221
    23 public class IncompleteAddressesTableModel extends DefaultTableModel {
     22public class IncompleteAddressesTableModel extends AddressEditTableModel {
     23        /**
     24         *
     25         */
     26        private static final long serialVersionUID = -5951629033395186324L;
     27       
    2428        private static final int NUMBER_OF_COLUMNS = 5;
    2529        private static final String[] COLUMN_NAMES = new String[]{tr("Country"), tr("State"), tr("City"), tr("Post Code"), tr("Street")};
     
    2832       
    2933        /**
    30          *
    31          */
    32         private static final long serialVersionUID = 424009321818130586L;
    33 
    34         private AddressEditContainer addressContainer;
    35 
    36         /**
    3734         * @param addressContainer
    3835         */
    3936        public IncompleteAddressesTableModel(AddressEditContainer addressContainer) {
    40                 super();
    41                 this.addressContainer = addressContainer;
     37                super(addressContainer);
    4238        }
    4339
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/StreetTableModel.java

    r23830 r23834  
    1414package org.openstreetmap.josm.plugins.addressEdit.gui;
    1515
    16 import javax.swing.table.DefaultTableModel;
    1716import static org.openstreetmap.josm.tools.I18n.tr;
     17
    1818import org.openstreetmap.josm.plugins.addressEdit.AddressEditContainer;
    1919import org.openstreetmap.josm.plugins.addressEdit.StreetNode;
    2020
    21 public class StreetTableModel extends DefaultTableModel {
     21public class StreetTableModel extends AddressEditTableModel {
    2222
    2323        private static final int NUMBER_OF_COLUMNS = 4;
     
    3030        private static final long serialVersionUID = 424009321818130586L;
    3131
    32         private AddressEditContainer addressContainer;
    33 
    3432        /**
    3533         * @param addressContainer
    3634         */
    3735        public StreetTableModel(AddressEditContainer addressContainer) {
    38                 super();
    39                 this.addressContainer = addressContainer;
     36                super(addressContainer);
    4037        }
    4138
  • applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/gui/UnresolvedAddressesTableModel.java

    r23830 r23834  
    3131import static org.openstreetmap.josm.tools.I18n.tr;
    3232
    33 import javax.swing.table.DefaultTableModel;
    34 
    3533import org.openstreetmap.josm.plugins.addressEdit.AddressEditContainer;
    3634import org.openstreetmap.josm.plugins.addressEdit.AddressNode;
     
    4240 */
    4341
    44 public class UnresolvedAddressesTableModel extends DefaultTableModel {
     42public class UnresolvedAddressesTableModel extends AddressEditTableModel {
    4543
    4644        private static final int NUMBER_OF_COLUMNS = 2;
     
    5250         */
    5351        private static final long serialVersionUID = 424009321818130586L;
    54 
    55         private AddressEditContainer addressContainer;
    56 
     52       
    5753        /**
    5854         * @param addressContainer
    5955         */
    6056        public UnresolvedAddressesTableModel(AddressEditContainer addressContainer) {
    61                 super();
    62                 this.addressContainer = addressContainer;
     57                super(addressContainer);
    6358        }
    6459
Note: See TracChangeset for help on using the changeset viewer.