Statistics
| Revision:

svn-gvsig-desktop / 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 / legendactions / SaveLegendAction.java @ 43392

History | View | Annotate | Download (3.18 KB)

1
package org.gvsig.app.project.documents.view.legend.gui.legendactions;
2

    
3
import java.awt.event.ActionEvent;
4
import java.io.File;
5
import java.util.List;
6
import javax.swing.JFileChooser;
7
import javax.swing.JOptionPane;
8
import org.gvsig.app.ApplicationLocator;
9
import org.gvsig.app.project.documents.view.legend.gui.LegendFileFilter;
10
import org.gvsig.app.project.documents.view.legend.gui.LegendsPanel;
11
import org.gvsig.fmap.mapcontext.MapContextLocator;
12
import org.gvsig.fmap.mapcontext.MapContextManager;
13
import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
14
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
15
import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
16
import org.gvsig.i18n.Messages;
17

    
18
public class SaveLegendAction extends AbstractLoadSaveLegendAction {
19

    
20
    private static final long serialVersionUID = -382469306285635077L;
21

    
22
    @Override
23
    public void actionPerformed(ActionEvent e) {
24
        if( ! (e.getSource() instanceof LegendsPanel) ) {
25
            return;
26
        }
27
        try {
28
            saveLegend((LegendsPanel) e.getSource());
29
        } catch (Exception exc) {
30
            JOptionPane.showMessageDialog(
31
                ApplicationLocator.getManager().getRootComponent(),
32
                Messages.getText("_Unable_to_save_legend")
33
                + "\n\n" + exc.getMessage(),
34
                Messages.getText("legend"),
35
                JOptionPane.WARNING_MESSAGE);
36
        }
37
    }
38

    
39
    private void saveLegend(LegendsPanel legends) throws Exception {
40

    
41
        List<LegendFileFilter> filters = getLegendFileFilters(true);
42
        if( filters.isEmpty() ) {
43
            JOptionPane.showMessageDialog(
44
                ApplicationLocator.getManager().getRootComponent(),
45
                Messages.getText("_No_output_format_available"),
46
                Messages.getText("legend"),
47
                JOptionPane.WARNING_MESSAGE);
48
            return;
49
        }
50

    
51
        ILegend legend = legends.getLegend();
52
        MapContextManager mcoman = MapContextLocator.getMapContextManager();
53

    
54
        JFileChooser fileChooser = new JFileChooser();
55
        fileChooser.setAcceptAllFileFilterUsed(false);
56

    
57
        for( int i = 0; i < filters.size(); i++ ) {
58
            fileChooser.addChoosableFileFilter(filters.get(i));
59
        }
60

    
61
        if( fileChooser.showSaveDialog(
62
            ApplicationLocator.getManager().getRootComponent())
63
            == JFileChooser.APPROVE_OPTION ) {
64

    
65
            LegendFileFilter lff = (LegendFileFilter) fileChooser.getFileFilter();
66

    
67
            File selfile = fileChooser.getSelectedFile();
68
            if( !selfile.getAbsolutePath().toLowerCase().endsWith(
69
                "." + lff.getFileExtension().toLowerCase()) ) {
70

    
71
                selfile = new File(selfile.getAbsolutePath()
72
                    + "." + lff.getFileExtension().toLowerCase());
73
            }
74

    
75
            ILegendWriter lw = mcoman.createLegendWriter(
76
                legend.getClass(),
77
                lff.getFileExtension()
78
            );
79

    
80
            if( lw == null ) {
81
                throw new WriteLegendException(legend,
82
                    new Exception("Unable to create legend writer."));
83
            }
84
            lw.write(legend, selfile, lff.getFileExtension());
85
        }
86
    }
87

    
88
}