Changeset 22684 in osm for applications


Ignore:
Timestamp:
2010-08-18T22:23:10+02:00 (14 years ago)
Author:
jttt
Message:

Fix memory leak

Location:
applications/editors/josm/plugins/openstreetbugs
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java

    r20682 r22684  
    7979            newFrame.addToggleDialog(dialog);
    8080
    81             MapView.addLayerChangeListener(dialog);
    8281            MapView.addLayerChangeListener(this);
    83            
     82
    8483            uploadHook = new OsbUploadHook();
    8584            UploadAction.registerUploadHook(uploadHook);
     
    163162        // store the current selected node
    164163        Node selectedNode = getDialog().getSelectedNode();
    165        
     164
    166165        // determine the bounds of the currently visible area
    167166        Bounds bounds = null;
     
    179178                // download the data
    180179                download.execute(dataSet, bounds);
    181    
     180
    182181                // display the parsed data
    183182                if(!dataSet.getNodes().isEmpty() && dialog.isDialogShowing()) {
     
    194193            }
    195194        }
    196        
     195
    197196        // restore node selection
    198197        dialog.setSelectedNode(selectedNode);
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java

    r22466 r22684  
    7171import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
    7272import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
     73import org.openstreetmap.josm.gui.MapView;
    7374import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    7475import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
     
    8889import org.openstreetmap.josm.tools.Shortcut;
    8990
    90 public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener, 
     91public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener,
    9192DataSetListener, SelectionChangedListener, MouseListener, OsbActionObserver {
    9293
     
    106107    private JTabbedPane tabbedPane = new JTabbedPane();
    107108    private boolean queuePanelVisible = false;
     109    private final ActionQueue actionQueue = new ActionQueue();
    108110
    109111    private boolean buttonLabels = Main.pref.getBoolean(ConfigKeys.OSB_BUTTON_LABELS);
     
    185187        queuePanel = new JPanel(new BorderLayout());
    186188        queuePanel.setName(tr("Queue"));
    187         queueList = new JList(ActionQueue.getInstance());
     189        queueList = new JList(getActionQueue());
    188190        queueList.setCellRenderer(new OsbQueueListCellRenderer());
    189191        queuePanel.add(new JScrollPane(queueList), BorderLayout.CENTER);
     
    194196                setConnectionMode(false);
    195197                try {
    196                     ActionQueue.getInstance().processQueue();
     198                    getActionQueue().processQueue();
    197199
    198200                    // refresh, if the api is enabled
     
    225227        closeIssueAction.addActionObserver(this);
    226228        setConnectionMode(offline);
    227         DataSet.selListeners.add(this);
     229
     230
     231        MapView.addLayerChangeListener(this);
     232    }
     233
     234    @Override
     235    public void showNotify() {
     236        DataSet.addSelectionListener(this);
     237    }
     238
     239    @Override
     240    public void hideNotify() {
     241        DataSet.removeSelectionListener(this);
     242    }
     243
     244    @Override
     245    public void destroy() {
     246        super.destroy();
     247        MapView.removeLayerChangeListener(this);
     248
    228249    }
    229250
     
    346367    }
    347368
    348     private class BugComparator implements Comparator<Node> {
     369    private static class BugComparator implements Comparator<Node> {
    349370
    350371        public int compare(Node o1, Node o2) {
     
    445466            if(osbPlugin.getLayer() != null && osbPlugin.getLayer().getDataSet() != null
    446467                    && osbPlugin.getLayer().getDataSet().getNodes() != null
    447                     && osbPlugin.getLayer().getDataSet().getNodes().contains(selectedNode)) 
     468                    && osbPlugin.getLayer().getDataSet().getNodes().contains(selectedNode))
    448469            {
    449470                setSelectedNode(selectedNode);
     
    455476        }
    456477    }
     478
     479    public ActionQueue getActionQueue() {
     480        return actionQueue;
     481    }
    457482}
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/ActionQueue.java

    r19282 r22684  
    77public class ActionQueue extends AbstractListModel {
    88
    9     private static ActionQueue instance;
    10 
    119    private LinkedList<OsbAction> queue = new LinkedList<OsbAction>();
    12 
    13     private ActionQueue() {}
    14 
    15     public static synchronized ActionQueue getInstance() {
    16         if(instance == null) {
    17             instance = new ActionQueue();
    18         }
    19         return instance;
    20     }
    2110
    2211    public boolean offer(OsbAction e) {
     
    5140            // execute the action
    5241            action.execute();
    53            
     42
    5443            // notify observers
    5544            for (OsbActionObserver obs : action.getActionObservers()) {
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/OsbAction.java

    r19282 r22684  
    4949
    5050    private List<OsbActionObserver> observers = new ArrayList<OsbActionObserver>();
    51    
    52     protected OsbDialog dialog;
    53    
     51
     52    protected final OsbDialog dialog;
     53
    5454    protected boolean cancelled = false;
     55    protected final ActionQueue actionQueue;
    5556
    5657    public OsbAction(String name, OsbDialog osbDialog) {
    5758        super(name);
    5859        this.dialog = osbDialog;
     60        this.actionQueue = osbDialog.getActionQueue();
    5961    }
    6062
     
    7173                } else {
    7274                    OsbAction action = clone();
    73                     ActionQueue.getInstance().offer(action);
     75                    actionQueue.offer(action);
    7476                }
    7577            }
     
    8991        observers.remove(obs);
    9092    }
    91    
     93
    9294    protected String addMesgInfo(String msg) {
    9395        // get the user nickname
     
    101103            }
    102104        }
    103        
     105
    104106        // concatenate nickname and date, if date should be included
    105107        String info = nickname;
     
    108110            DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, Locale.getDefault());
    109111            String date = df.format(new Date());
    110            
     112
    111113            // concatenate nickname and date
    112114            info = info.concat(", ").concat(date);
    113115        }
    114        
     116
    115117        // add user and date info to the message
    116         msg = msg.concat(" [").concat(info).concat("]");
    117        
    118         return msg;
     118        return msg.concat(" [").concat(info).concat("]");
    119119    }
    120    
     120
    121121    public List<OsbActionObserver> getActionObservers() {
    122122        return observers;
    123123    }
    124    
     124
    125125    public abstract void execute() throws Exception;
    126    
     126
     127    @Override
    127128    public abstract OsbAction clone();
    128129}
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/ToggleConnectionModeAction.java

    r19282 r22684  
    1616public class ToggleConnectionModeAction extends AbstractAction {
    1717
    18     private OsbPlugin plugin;
    19    
    20     private OsbDialog dialog;
    21    
     18    private final OsbPlugin plugin;
     19    private final OsbDialog dialog;
     20    private final ActionQueue actionQueue;
     21
    2222    public static final String MSG_ONLINE = tr("Switch to online mode");
    2323    public static final String MSG_OFFLINE = tr("Switch to offline mode");
    24    
     24
    2525    public ToggleConnectionModeAction(OsbDialog osbDialog, OsbPlugin osbPlugin) {
    2626        super(MSG_OFFLINE);
    2727        this.dialog = osbDialog;
    2828        this.plugin = osbPlugin;
     29        this.actionQueue = osbDialog.getActionQueue();
    2930    }
    3031
    3132    public void actionPerformed(ActionEvent e) {
    3233        boolean isOffline = !Main.pref.getBoolean(ConfigKeys.OSB_API_OFFLINE);
    33        
     34
    3435        // inform the dialog about the connection mode
    3536        dialog.setConnectionMode(isOffline);
    36        
     37
    3738        // set the new value in the preferences
    3839        Main.pref.put(ConfigKeys.OSB_API_OFFLINE, isOffline);
    39        
     40
    4041        // toggle the tooltip text
    4142        if(e.getSource() != null && e.getSource() instanceof JToggleButton) {
     
    5354            }
    5455        }
    55        
    56        
     56
     57
    5758        if(!isOffline) {
    58             if(ActionQueue.getInstance().getSize() == 0) {
     59            if(actionQueue.getSize() == 0) {
    5960                dialog.hideQueuePanel();
    6061                return;
    6162            }
    62            
     63
    6364            // if we switch to online mode, ask if the queue should be processed
    6465            int result = JOptionPane.showConfirmDialog(Main.parent,
     
    6869            if(result == JOptionPane.YES_OPTION) {
    6970                try {
    70                     ActionQueue.getInstance().processQueue();
    71                    
     71                    actionQueue.processQueue();
     72
    7273                    // toggle queue panel visibility, if now error occured
    7374                    dialog.hideQueuePanel();
    74    
     75
    7576                    // refresh, if the api is enabled
    7677                    if(!Main.pref.getBoolean(ConfigKeys.OSB_API_DISABLED)) {
Note: See TracChangeset for help on using the changeset viewer.