Revision 43392 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendManager.java

View differences:

LegendManager.java
28 28
import java.awt.Component;
29 29
import java.awt.Dimension;
30 30
import java.awt.FlowLayout;
31
import java.awt.Point;
32
import java.awt.event.ActionEvent;
31 33
import java.awt.event.ActionListener;
32
import java.io.File;
33
import java.io.FileInputStream;
34
import java.io.FileNotFoundException;
35
import java.io.FileOutputStream;
36
import java.io.InputStream;
37
import java.io.OutputStream;
38
import java.util.ArrayList;
34
import java.util.Collection;
39 35
import java.util.Enumeration;
36
import java.util.HashMap;
40 37
import java.util.Hashtable;
41 38
import java.util.Iterator;
42
import java.util.List;
39
import java.util.Map;
43 40
import java.util.prefs.Preferences;
41
import javax.swing.Action;
44 42

  
45 43
import javax.swing.ImageIcon;
46 44
import javax.swing.JButton;
47
import javax.swing.JComponent;
48
import javax.swing.JFileChooser;
49 45
import javax.swing.JLabel;
46
import javax.swing.JMenuItem;
50 47
import javax.swing.JOptionPane;
51 48
import javax.swing.JPanel;
49
import javax.swing.JPopupMenu;
52 50
import javax.swing.JScrollPane;
53 51
import javax.swing.JSplitPane;
54 52
import javax.swing.JTextArea;
55 53
import javax.swing.JTree;
56
import javax.swing.filechooser.FileFilter;
57 54
import javax.swing.tree.DefaultMutableTreeNode;
58 55
import javax.swing.tree.DefaultTreeCellRenderer;
59 56
import javax.swing.tree.DefaultTreeModel;
......
66 63

  
67 64
import org.gvsig.andami.PluginServices;
68 65
import org.gvsig.andami.messages.NotificationManager;
69
import org.gvsig.app.ApplicationLocator;
70
import org.gvsig.fmap.geom.Geometry;
71
import org.gvsig.fmap.mapcontext.MapContextLocator;
72
import org.gvsig.fmap.mapcontext.MapContextManager;
73 66
import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
74
import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
75 67
import org.gvsig.fmap.mapcontext.layers.FLayer;
76 68
import org.gvsig.fmap.mapcontext.layers.FLayers;
77 69
import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
......
80 72
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
81 73
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
82 74
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
83
import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
84
import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
85
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
86
import org.gvsig.i18n.Messages;
75
import org.gvsig.symbology.SymbologyLocator;
87 76
import org.gvsig.symbology.swing.SymbologySwingLocator;
88 77
import org.gvsig.symbology.swing.SymbologySwingManager;
89
import org.gvsig.tools.ToolsLocator;
90
import org.gvsig.tools.persistence.PersistenceManager;
91 78

  
92 79
/**
93 80
 * Implements the panel which allows the user to control all the information
......
98 85
 *
99 86
 * @author jaume dominguez faus - jaume.dominguez@iver.es
100 87
 */
101
public class LegendManager extends AbstractThemeManagerPage {
88
public class LegendManager extends AbstractThemeManagerPage implements LegendsPanel {
102 89

  
103 90
    private static final Logger logger =
104 91
        LoggerFactory.getLogger(LegendManager.class);
105 92

  
106 93
    private static final long serialVersionUID = 7989057553773181019L;
107
//    private static ArrayList<Class<? extends ILegendPanel>> legendPool =
108
//        new ArrayList<Class<? extends ILegendPanel>>();
109
    // private static ArrayList<Class<? extends IFMapLegendDriver>>
110
    // legendDriverPool = new ArrayList<Class<? extends IFMapLegendDriver>>();
111 94

  
95
    public static class Pages implements Iterable<ILegendPanel> {
96

  
97
        private Map<Class<? extends ILegendPanel>, ILegendPanel> pages;
98

  
99
        public Pages() {
100
            this.pages = new HashMap<>();
101
        }
102
        
103
        public void add(ILegendPanel page) {
104
            this.pages.put(page.getClass(), page);
105
        }
106

  
107
        public Iterator<ILegendPanel> iterator() {
108
            return this.pages.values().iterator();
109
        }
110

  
111
        public boolean contains(Class<? extends ILegendPanel> pageClass) {
112
            return this.pages.containsKey(pageClass);
113
        }
114

  
115
        public ILegendPanel get(Class<? extends ILegendPanel> pageClass) {
116
            return this.pages.get(pageClass);
117
        }
118

  
119
        public Collection<ILegendPanel> asCollection() {
120
            return this.pages.values();
121
        }
122
    }
123

  
112 124
    private FLayer layer;
113
    private ILegend legend; // Le asignaremos la leyenda del primer tema activo.
114
    private Hashtable<Class<? extends ILegendPanel>, ILegendPanel> pages =
115
        new Hashtable<Class<? extends ILegendPanel>, ILegendPanel>();
125
    private ILegend legend; 
126
    private Pages pages = new Pages();
127
    
116 128
    private JPanel topPanel = null;
117 129
    private JTextArea titleArea = null;
118 130
    private JPanel preview = null;
......
120 132
    private JTree jTreeLegends;
121 133
    private ILegendPanel activePanel;
122 134
    private JScrollPane legendTreeScrollPane;
123
    private boolean dirtyTree_;
124
    private DefaultMutableTreeNode root = new DefaultMutableTreeNode();
135
//    private boolean dirtyTree_;
136
    private final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
125 137
    private DefaultTreeModel treeModel;
126 138
    private JScrollPane jPanelContainer;
127 139
    private JPanel jCentralPanel;
128 140
    private JSplitPane jSplitPane;
129 141
    private boolean isTreeListenerDisabled;
130
    private JButton btnSaveLegend;
131
    private JButton btnLoadLegend;
142
    private JButton btnOptionalActions;
143
    private JPopupMenu menuOptionalActions;
132 144
    private Hashtable<FLayer, ILegend> table = null;
133 145
    private boolean empty = true;
134 146
    private JLabel iconLabel;
135 147

  
136 148
    public static String defaultLegendFolderPath;
137 149
    {
138

  
139 150
        Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
140 151
        defaultLegendFolderPath = prefs.get("LegendsFolder", "");
141 152
    }
142 153

  
143
    private ActionListener loadSaveLegendAction = new ActionListener() {
144 154

  
145
        public void actionPerformed(java.awt.event.ActionEvent e) {
146
            JComponent c = (JComponent) e.getSource();
147
            if (c.equals(getBtnSaveLegend())) {
148

  
149
                try {
150
                    saveLegend();
151
                } catch (Exception exc) {
152
                    JOptionPane.showMessageDialog(
153
                        ApplicationLocator.getManager().getRootComponent(),
154
                        Messages.getText("_Unable_to_save_legend")
155
                        + "\n\n" + exc.getMessage(),
156
                        Messages.getText("legend"),
157
                        JOptionPane.WARNING_MESSAGE);
158
                    return;
159
                }
160

  
161
            } else
162
                if (c.equals(getBtnLoadLegend())) {
163
                    try {
164
                        loadLegend();
165
                    } catch (Exception e1) {
166
                        JOptionPane.showMessageDialog(
167
                            ApplicationLocator.getManager().getRootComponent(),
168
                            Messages.getText("_Unable_to_read_legend")
169
                            + "\n\n" + e1.getMessage(),
170
                            Messages.getText("legend"),
171
                            JOptionPane.WARNING_MESSAGE);
172
                        return;
173
                    }
174
                }
175
        }
176

  
177
        private void saveLegend() throws Exception {
178

  
179
            List<LegendFileFilter> filters = getLegendFileFilters(true);
180
            if (filters.size() == 0) {
181
                JOptionPane.showMessageDialog(
182
                    ApplicationLocator.getManager().getRootComponent(),
183
                    Messages.getText("_No_output_format_available"),
184
                    Messages.getText("legend"),
185
                    JOptionPane.WARNING_MESSAGE);
186
                return;
187
            }
188

  
189
            ILegend legend = activePanel.getLegend();
190
            MapContextManager mcoman = MapContextLocator.getMapContextManager();
191

  
192
            JFileChooser fileChooser = new JFileChooser();
193
            fileChooser.setAcceptAllFileFilterUsed(false);
194

  
195
            for (int i=0; i<filters.size(); i++) {
196
                fileChooser.addChoosableFileFilter(filters.get(i));
197
            }
198

  
199
            if (fileChooser.showSaveDialog(
200
                ApplicationLocator.getManager().getRootComponent())
201
                == JFileChooser.APPROVE_OPTION) {
202

  
203
                LegendFileFilter lff = (LegendFileFilter) fileChooser.getFileFilter();
204

  
205
                File selfile = fileChooser.getSelectedFile();
206
                if (!selfile.getAbsolutePath().toLowerCase().endsWith(
207
                    "." + lff.getFileExtension().toLowerCase())) {
208

  
209
                    selfile = new File(selfile.getAbsolutePath() +
210
                        "." + lff.getFileExtension().toLowerCase());
211
                }
212

  
213
                ILegendWriter lw = null;
214
                lw = mcoman.createLegendWriter(legend.getClass(), lff.getFileExtension());
215

  
216
                if (lw == null) {
217
                    throw new WriteLegendException(legend,
218
                        new Exception("Unable to create legend writer."));
219
                } else {
220
                    lw.write(legend, selfile, lff.getFileExtension());
221
                }
222
            }
223
        }
224

  
225
        /**
226
         *
227
         * @param writing true for writing; false for reading
228
         * @return
229
         */
230
        private List<LegendFileFilter> getLegendFileFilters(boolean writing) {
231

  
232
            List<LegendFileFilter> resp = new ArrayList<LegendFileFilter>();
233
            MapContextManager mcoman = MapContextLocator.getMapContextManager();
234
            List wformats = null;
235

  
236
            if (writing) {
237
                wformats = mcoman.getLegendWritingFormats();
238
            } else {
239
                wformats = mcoman.getLegendReadingFormats();
240
            }
241

  
242
            String fmt = null;
243
            for (int i=0; i<wformats.size(); i++) {
244
                fmt = (String) wformats.get(i);
245
                fmt = getFileExtension(fmt);
246
                if (fmt != null) {
247
                    resp.add(new LegendFileFilter(fmt));
248
                }
249
            }
250
            return resp;
251
        }
252

  
253

  
254
        /**
255
         * Returns null if mime format is not parsed properly
256
         *
257
         * @param fmt MIME format
258
         *
259
         * @return
260
         */
261
        private String getFileExtension(String fmt) {
262
            // Example: "text/xml; subtype=gml/2.1.2" => "gml"
263
            if (fmt == null) {
264
                return null;
265
            }
266
            String[] parts = fmt.split(";");
267
            String aux = "";
268
            if (parts.length > 1) {
269
                aux = parts[1].trim();
270
            } else {
271
                aux = parts[0].trim();
272
            }
273
            parts = aux.split("=");
274
            if (parts.length > 1) {
275
                aux = parts[1].trim();
276
                // Example: aux = "gml/2.1.2"
277
                parts = aux.split("/");
278
                return parts[0].length() == 0 ? null : parts[0].toLowerCase();
279
            } else {
280
                aux = parts[0].trim();
281
                // Example: "text/xml"
282
                parts = aux.split("/");
283
                if (parts.length > 1) {
284
                    return parts[1].length() == 0 ? null : parts[1].toLowerCase();
285
                } else {
286
                    return aux.length() == 0 ? null : aux.toLowerCase();
287
                }
288
            }
289
        }
290

  
291
        private void loadLegend() throws Exception {
292

  
293
            List<LegendFileFilter> filters = getLegendFileFilters(false);
294
            if (filters.size() == 0) {
295
                JOptionPane.showMessageDialog(
296
                    ApplicationLocator.getManager().getRootComponent(),
297
                    Messages.getText("_No_input_format_available"),
298
                    Messages.getText("legend"),
299
                    JOptionPane.WARNING_MESSAGE);
300
                return;
301
            }
302

  
303
            JFileChooser fileChooser = new JFileChooser();
304
            fileChooser.setAcceptAllFileFilterUsed(false);
305

  
306
            for (int i=0; i<filters.size(); i++) {
307
                fileChooser.addChoosableFileFilter(filters.get(i));
308
            }
309

  
310
            // open a file
311
            if (fileChooser.showOpenDialog((Component) PluginServices
312
                .getMainFrame()) == JFileChooser.APPROVE_OPTION) {
313

  
314
                File file = fileChooser.getSelectedFile();
315
                LegendFileFilter lff = (LegendFileFilter) fileChooser.getFileFilter();
316
                MapContextManager mcoman = MapContextLocator.getMapContextManager();
317
                ILegendReader lr = mcoman.createLegendReader(lff.getFileExtension());
318

  
319
                ILegend leg = lr.read(file, Geometry.TYPES.GEOMETRY);
320
                applyLegend(leg);
321
            }
322
        }
323
    };
324

  
325
    //
326
    // JLegendFileChooser jfc = new
327
    // JLegendFileChooser(getLegendDrivers(),true);
328
    // jfc.setAcceptAllFileFilterUsed(false);
329
    //
330
    //
331
    // File basedir = null;
332
    // jfc.setCurrentDirectory(basedir);
333
    // if (jfc.showSaveDialog((Component) PluginServices.getMainFrame())
334
    // == JFileChooser.APPROVE_OPTION) {
335
    //
336
    // File file = jfc.getSelectedFile();
337
    // String version = jfc.getDriverVersion();
338
    // IFMapLegendDriver driver = jfc.getSuitableDriver();
339
    //
340
    // if(!(driver instanceof FMapGVLDriver)){
341
    // Object[] options = {PluginServices.getText(this, "yes"),
342
    // PluginServices.getText(this, "no")};
343
    //
344
    // int answer =
345
    // JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
346
    // PluginServices.getText(this, "not_GVSLEG_save_question")+"\n"+ //GVL
347
    // changed to GVSLEG, be aware
348
    // PluginServices.getText(this, "desea_continuar"),
349
    // PluginServices.getText(this, "confirmation_dialog"),
350
    // JOptionPane.YES_NO_OPTION,
351
    // JOptionPane.QUESTION_MESSAGE,
352
    // null,
353
    // options, options[1]);
354
    // if (answer!=JOptionPane.OK_OPTION) {
355
    // // 'Cancel' pressed or window closed: don't save anythig, exit
356
    // save dialog
357
    // return;
358
    // }
359
    // }
360
    //
361
    // if (file.exists()) {
362
    // Object[] options = {PluginServices.getText(this, "yes"),
363
    // PluginServices.getText(this, "no"),
364
    // PluginServices.getText(this, "Cancel")};
365
    //
366
    // int answer =
367
    // JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
368
    // PluginServices.getText(this,
369
    // "fichero_ya_existe_seguro_desea_guardarlo"),
370
    // PluginServices.getText(this, "confirmation_dialog"),
371
    // JOptionPane.YES_NO_CANCEL_OPTION,
372
    // JOptionPane.QUESTION_MESSAGE,
373
    // null,
374
    // options, options[1]);
375
    // if (answer!=JOptionPane.OK_OPTION) {
376
    // // 'Cancel' pressed or window closed: don't save anythig, exit
377
    // save dialog
378
    // return;
379
    // }
380
    // }
381
    //
382
    //
383
    // try {
384
    // driver.write(layer.getMapContext().getLayers(),layer,
385
    // activePanel.getLegend(), file, version);
386
    //
387
    // } catch (LegendDriverException e1) {
388
    // int type = e1.getType();
389
    // String message=PluginServices.getText(this,
390
    // "could_not_save_legend")+":\n";
391
    //
392
    // if ((type & LegendDriverException.SAVE_LEGEND_ERROR) != 0){
393
    // type = type & ~LegendDriverException.SAVE_LEGEND_ERROR;
394
    // message += PluginServices.getText(this,
395
    // "error_writing_file")+".\n";
396
    // }
397
    // if ((type & LegendDriverException.UNSUPPORTED_LEGEND_CREATION) !=
398
    // 0){
399
    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_CREATION;
400
    // message += "-"+ PluginServices.getText(this,
401
    // "legend_format_not_yet_supported")+"\n";
402
    // }
403
    // if (type != 0) {
404
    // message = "-"+PluginServices.getText(this, "unknown_error")+"\n";
405
    // }
406
    // JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
407
    // message);
408
    // }
409
    // }
410
    // } else if (c.equals(getBtnLoadLegend())) {
411
    //
412
    // JLegendFileChooser jfc = new
413
    // JLegendFileChooser(getLegendDrivers());
414
    // jfc.setAcceptAllFileFilterUsed(false);
415
    //
416
    // if (jfc.showOpenDialog((Component) PluginServices.getMainFrame())
417
    // == JFileChooser.APPROVE_OPTION) {
418
    // File file=jfc.getSelectedFile();
419
    // IFMapLegendDriver driver = jfc.getSuitableDriver();
420
    // String path = file.getAbsolutePath();
421
    // defaultLegendFolderPath = path.substring(0,
422
    // path.lastIndexOf(File.separator));
423
    //
424
    // try {
425
    // table = driver.read(layer.getMapContext().getLayers(),layer,
426
    // file);
427
    //
428
    // if(table.containsKey(layer))
429
    // applyLegend((ILegend) table.get(layer));
430
    //
431
    //
432
    // } catch (LegendDriverException e1) {
433
    // int type = e1.getType();
434
    // String message = PluginServices.getText(this,
435
    // "the_legend_will_not_be_applied")+":\n";
436
    // boolean hasReason = false;
437
    //
438
    // if ((type &
439
    // LegendDriverException.CLASSIFICATION_FIELDS_NOT_FOUND) != 0){
440
    // type = type &
441
    // ~LegendDriverException.CLASSIFICATION_FIELDS_NOT_FOUND;
442
    // message +="-"+ PluginServices.getText(this,
443
    // "classification_field_does_not_exists")+"\n";
444
    // hasReason = true;
445
    // }
446
    // if ((type & LegendDriverException.LEGEND_TYPE_NOT_YET_SUPPORTED)
447
    // != 0){
448
    // type = type &
449
    // ~LegendDriverException.LEGEND_TYPE_NOT_YET_SUPPORTED;
450
    // message += "-"+ PluginServices.getText(this,
451
    // "legend_type_not_yet_supported")+"\n";
452
    // hasReason = true;
453
    // }
454
    // if ((type & LegendDriverException.SYMBOL_TYPE_NOT_YET_SUPPORTED)
455
    // != 0){
456
    // type = type &
457
    // ~LegendDriverException.SYMBOL_TYPE_NOT_YET_SUPPORTED;
458
    // message += "-"+ PluginServices.getText(this,
459
    // "unsupported_symbol_type")+"\n";
460
    // hasReason = true;
461
    // }
462
    // if ((type & LegendDriverException.LAYER_SHAPETYPE_MISMATCH) !=
463
    // 0){
464
    // type = type & ~LegendDriverException.LAYER_SHAPETYPE_MISMATCH;
465
    // message += "-"+ PluginServices.getText(this,
466
    // "layer_geometry_and_legend_types_are_incompatible")+"\n";
467
    // hasReason = true;
468
    // }
469
    // if ((type & LegendDriverException.PARSE_LEGEND_FILE_ERROR) != 0){
470
    // type = type & ~LegendDriverException.PARSE_LEGEND_FILE_ERROR;
471
    // message += "-"+ PluginServices.getText(this,
472
    // "failed_reading_file")+"\n";
473
    // hasReason = true;
474
    // }
475
    // if ((type &
476
    // LegendDriverException.UNSUPPORTED_LEGEND_FILE_VERSION) != 0){
477
    // type = type &
478
    // ~LegendDriverException.UNSUPPORTED_LEGEND_FILE_VERSION;
479
    // message += "-"+ PluginServices.getText(this,
480
    // "unsupported_legend_file_version")+"\n";
481
    // hasReason = true;
482
    // }
483
    // if ((type & LegendDriverException.UNSUPPORTED_LEGEND_READING) !=
484
    // 0){
485
    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_READING;
486
    // message +="-"+ PluginServices.getText(this,
487
    // "unsupported_legend_file_format")+"\n";
488
    // hasReason = true;
489
    // }
490
    // if ((type & LegendDriverException.LAYER_NAME_NOT_FOUND) != 0){
491
    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_READING;
492
    // message +="-"+ PluginServices.getText(this,
493
    // "could_not_find_layer")+"\n";
494
    // hasReason = true;
495
    // }
496
    // if (!hasReason) {
497
    // message = "-"+ PluginServices.getText(this,
498
    // "unknown_error")+"\n";
499
    // }
500
    // JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
501
    // message);
502
    // }
503
    // }
504
    // }
505

  
506
    // private IFMapLegendDriver[] getLegendDrivers() {
507
    // Class<?>[] legendDriverClasses = legendDriverPool.toArray(new Class[0]);
508
    // ArrayList<IFMapLegendDriver> drivers = new
509
    // ArrayList<IFMapLegendDriver>();
510
    // for (int i = 0; i < legendDriverClasses.length; i++) {
511
    // String message = PluginServices.getText(this,
512
    // "adding_legend_file_format_support")+": ";
513
    // try {
514
    // Class<?> c = legendDriverClasses[i];
515
    // drivers.add((IFMapLegendDriver) c.newInstance());
516
    // } catch (Exception e) {
517
    // NotificationManager.addError(message+PluginServices.getText(this,
518
    // "failed"), e);
519
    // }
520
    // NotificationManager.addInfo(message+PluginServices.getText(this, "OK"));
521
    //
522
    // }
523
    // return (IFMapLegendDriver[]) drivers.toArray(new IFMapLegendDriver[0]);
524
    // };
525

  
526
    private String getExtension(File f) {
527
        String ext = null;
528
        String s = f.getName();
529
        int i = s.lastIndexOf('.');
530

  
531
        if (i > 0 && i < s.length() - 1) {
532
            // ext = s.substring(i + 1).toLowerCase();
533
            ext = s.substring(i).toLowerCase();
534
        }
535
        return ext;
536
    }
537

  
538 155
    public LegendManager() {
539 156
        initialize();
540 157
    }
......
589 206
                null, "",
590 207
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
591 208
                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
592
            topPanel.add(getBtnSaveLegend(), null);
593
            topPanel.add(getBtnLoadLegend(), null);
209
            topPanel.add(getBtnOptionalActions(), null);
594 210
        }
595 211
        return topPanel;
596 212
    }
597 213

  
598
    private JButton getBtnSaveLegend() {
599
        if (btnSaveLegend == null) {
600
            btnSaveLegend =
601
                new JButton(PluginServices.getText(this, "Guardar_leyenda")
214
    private JButton getBtnOptionalActions() {
215
        if (btnOptionalActions == null) {
216
            btnOptionalActions =
217
                new JButton(PluginServices.getText(this, "_Mas_opciones")
602 218
                    + "...");
603
            btnSaveLegend.addActionListener(loadSaveLegendAction);
219
            btnOptionalActions.addActionListener(new ActionListener() {
220
                @Override
221
                public void actionPerformed(ActionEvent e) {
222
                    Point p = btnOptionalActions.getLocationOnScreen();
223
                    menuOptionalActions.show(asJComponent(),0,0);
224
                    menuOptionalActions.setLocation(p.x,p.y+btnOptionalActions.getHeight());
225
                }
226
            });
604 227
        }
605
        return btnSaveLegend;
228
        return btnOptionalActions;
606 229
    }
607 230

  
608
    private JButton getBtnLoadLegend() {
609
        if (btnLoadLegend == null) {
610
            btnLoadLegend =
611
                new JButton(PluginServices.getText(this, "Recuperar_leyenda")
612
                    + "...");
613
            btnLoadLegend.addActionListener(loadSaveLegendAction);
614
        }
615
        return btnLoadLegend;
616
    }
617

  
618 231
    /**
619 232
     * This method initializes jTextArea
620 233
     *
......
687 300
     * bug, sorry. Just avoid this case or try to fix it (lol).<br>
688 301
     * </p>
689 302
     *
690
     * @param page
691
     *            , Class of type ILegendPanel
692 303
     * @deprecated use SymbologySwingManager.registerLegendEditor
693 304
     */
694 305
    public static void addLegendPage(Class<? extends ILegendPanel> iLegendPanelClass) {
......
707 318
            Iterator<ILegendPanel> it = manager.getLegendEditors(layer).iterator();
708 319
            while( it.hasNext() ) {
709 320
                ILegendPanel page = it.next();
710
                pages.put(page.getClass(), page);
321
                pages.add(page);
711 322
            }
712

  
713
            Enumeration<ILegendPanel> enume = pages.elements();
714
            while (enume.hasMoreElements()) {
715
                ILegendPanel page = enume.nextElement();
323
            addOptionalActions();
324
            for(ILegendPanel page : this.pages ) {
716 325
                doInsertNode(treeModel, page);
717 326
            }
718 327
            getJTreeLegends().setModel(treeModel);
......
721 330
        }
722 331
    }
723 332

  
333
    private void addOptionalActions() {
334
        this.menuOptionalActions = new JPopupMenu();
335
        Iterable<Action> actions = SymbologySwingLocator.getSwingManager().getOptionalActionOfLegendsPanel();
336
        for( Action action : actions ) {
337
            JMenuItemForOptionalAction item = new JMenuItemForOptionalAction(action);
338
            this.menuOptionalActions.add(item);
339
        }
340
    }
341
    
342
    private class JMenuItemForOptionalAction extends JMenuItem implements ActionListener {
343

  
344
        private static final long serialVersionUID = 1656264978338543368L;
345
        Action action;
346
        
347
        JMenuItemForOptionalAction(Action action) {
348
            this.action = action;
349
            this.configurePropertiesFromAction(action);
350
            this.addActionListener(this);
351
        }
352
        
353
        @Override
354
        public void actionPerformed(ActionEvent e) {
355
            e.setSource(LegendManager.this);
356
            this.action.actionPerformed(e);
357
        }
358
    }
359
    
724 360
    @SuppressWarnings("unchecked")
725 361
    private DefaultMutableTreeNode findNode(Class searchID) {
726 362
        String title;
......
812 448
        Class parent_class = page.getParentClass();
813 449

  
814 450
        if (parent_class != null) {
815
            if (pages.containsKey(parent_class)) {
451
//            if (pages.containsKey(parent_class)) {
452
            if (pages.contains(parent_class)) {
816 453
                ILegendPanel parent = (ILegendPanel) pages.get(parent_class);
817 454

  
818 455
                aux = doInsertNode(tm, parent);
......
880 517
        return jTreeLegends;
881 518
    }
882 519

  
883
    private void setActivePage(ILegendPanel page) {
520
    @Override
521
    public void setActivePage(ILegendPanel page) {
884 522
        if (page.getPanel() == null) {
885 523
            // this is what happens when the user clicked in a parent node
886 524
            // which only acts as a folder, and does not manage any legend
......
904 542
        }
905 543
    }
906 544

  
545
    @Override
546
    public ILegendPanel getActivePage() {
547
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
548
    }
549

  
907 550
    private void setIcon(ImageIcon icon) {
908 551
        getIconLabel().setIcon(icon);
909 552
    }
......
1079 722
    private void applyLegend(ILegend aLegend) {
1080 723
        this.legend = aLegend;
1081 724
        fillDialog();
1082
        Enumeration<Class<? extends ILegendPanel>> en = pages.keys();
1083
        while (en.hasMoreElements()) {
1084
            ILegendPanel page = (ILegendPanel) pages.get(en.nextElement());
725
        for(ILegendPanel page : this.pages ) {
726
//        Enumeration<Class<? extends ILegendPanel>> en = pages.keys();
727
//        while (en.hasMoreElements()) {
728
//            ILegendPanel page = (ILegendPanel) pages.get(en.nextElement());
1085 729
            if (legend.getClass().equals(page.getLegendClass())) {
1086 730
                setActivePage(page);
1087 731
                expandAndSelect(page);
......
1098 742
    	return 800;
1099 743
    }
1100 744

  
1101
    // public static void addLegendDriver(Class<? extends IFMapLegendDriver>
1102
    // legendDriverClass) {
1103
    // if (!legendDriverPool.contains(legendDriverClass)) {
1104
    // legendDriverPool.add(legendDriverClass);
1105
    // }
1106
    // }
745
    @Override
746
    public ILegend getLegend() {
747
        return this.legend;
748
    }
749

  
750
    @Override
751
    public void setLegend(ILegend legend) {
752
        applyLegend(legend);
753
    }
754

  
755
    @Override
756
    public FLayer getLayer() {
757
        return this.layer;
758
    }
759

  
760
    @Override
761
    public void setLayer(FLayer layer) {
762
        this.layer = layer;
763
        applyLegend(((Classifiable) layer).getLegend());
764
    }
765

  
766
    @Override
767
    public ILegendPanel getPage(Class<? extends ILegendPanel> pageClass) {
768
        return this.pages.get(pageClass);
769
    }
770

  
771
    @Override
772
    public Collection<ILegendPanel> getPages() {
773
        return this.pages.asCollection();
774
    }
775
    
1107 776
}

Also available in: Unified diff