Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.plugin / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / AssignProjectionExtension.java @ 43876

History | View | Annotate | Download (5.51 KB)

1
package org.gvsig.raster.tools.app.mainplugin;
2

    
3
import java.io.File;
4
import java.io.IOException;
5

    
6
import javax.swing.JOptionPane;
7

    
8
import org.apache.commons.io.FileUtils;
9
import org.apache.commons.io.FilenameUtils;
10
import org.apache.commons.lang3.StringUtils;
11
import org.cresques.cts.ICRSFactory;
12
import org.cresques.cts.IProjection;
13
import org.slf4j.Logger;
14
import org.slf4j.LoggerFactory;
15

    
16
import org.gvsig.andami.IconThemeHelper;
17
import org.gvsig.andami.plugins.Extension;
18
import org.gvsig.app.ApplicationLocator;
19
import org.gvsig.app.ApplicationManager;
20
import org.gvsig.app.project.documents.view.ViewDocument;
21
import org.gvsig.app.project.documents.view.gui.IView;
22
import org.gvsig.fmap.dal.DataStoreParameters;
23
import org.gvsig.fmap.dal.raster.RasterStore;
24
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
25
import org.gvsig.fmap.mapcontext.layers.FLayer;
26
import org.gvsig.fmap.mapcontext.layers.FLayers;
27
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
28
import org.gvsig.fmap.mapcontrol.MapControl;
29
import org.gvsig.tools.ToolsLocator;
30
import org.gvsig.tools.i18n.I18nManager;
31
import org.gvsig.tools.swing.api.ToolsSwingLocator;
32
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
33

    
34
/**
35
 *
36
 * @author fdiaz
37
 *
38
 */
39
public class AssignProjectionExtension extends Extension {
40

    
41
    private static final Logger logger = LoggerFactory.getLogger(AssignProjectionExtension.class);
42

    
43
    @Override
44
    public void initialize() {
45
        IconThemeHelper.registerIcon("action", "setviewprojection-raster-icon", this);
46
    }
47

    
48
    @Override
49
    public void execute(String actionCommand) {
50
        ApplicationManager applicationManager = ApplicationLocator.getManager();
51
        I18nManager i18nManager = ToolsLocator.getI18nManager();
52
        if (StringUtils.equalsIgnoreCase(actionCommand, "assign-projection")) {
53
            IView view = getActiveView();
54
            final MapControl mapControl = view.getMapControl();
55
            IProjection projection = mapControl.getProjection();
56

    
57
            RasterStore rasterStore = getFirstFileRasterLayerActive().getRasterStore();
58
            DataStoreParameters storeParams = rasterStore.getParameters();
59
            if (storeParams instanceof FilesystemStoreParameters) {
60
                FilesystemStoreParameters fileSystemStoreParameters = (FilesystemStoreParameters) storeParams;
61
                File file = fileSystemStoreParameters.getFile();
62
                File prjFile = getPrjFile(file);
63
                if (prjFile.exists()) {
64
                    String message = "_the_content_of_the_file_XFILEX_will_be_replaced_do_you_want_to_continue";
65
                    int reply =
66
                        applicationManager.confirmDialog(
67
                            i18nManager.getTranslation(message, new String[] { prjFile.getAbsolutePath() }),
68
                            i18nManager.getTranslation("Assign_projection"),
69
                            JOptionPane.YES_NO_OPTION,
70
                            JOptionPane.QUESTION_MESSAGE);
71
                    if (reply != JOptionPane.YES_OPTION) {
72
                        return;
73
                    }
74
                }
75
                try {
76
                    savePrjFile(prjFile, projection);
77
                } catch (IOException e) {
78
                    logger.warn("Can't save prj file.", e);
79
                    String message2 = "_cant_save_prj_file";
80
                    applicationManager.messageDialog(message2, "Assing_projection", JOptionPane.WARNING_MESSAGE);
81
                }
82
            }
83
        }
84
    }
85

    
86
    private void savePrjFile(File prjFile, IProjection proj) throws IOException {
87
        String export = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
88
        if (export != null) {
89
            FileUtils.writeStringToFile(prjFile, export);
90
        }
91
    }
92

    
93
    /**
94
     * @param dataFile
95
     * @return
96
     */
97
    private File getPrjFile(File dataFile) {
98
        File file = new File(FilenameUtils.removeExtension(dataFile.getAbsolutePath()) + ".prj");
99
        return file;
100
    }
101

    
102
    @Override
103
    public boolean isEnabled() {
104
        return (getFirstFileRasterLayerActive() != null);
105
    }
106

    
107
    @Override
108
    public boolean isVisible() {
109
        IView view = getActiveView();
110
        if (view != null) {
111
            ViewDocument viewDocument = view.getViewDocument();
112
            FLayers layers = viewDocument.getMapContext().getLayers();
113
            for (FLayer layer : layers) {
114
                if (layer instanceof RasterLayer) {
115
                    return true;
116
                }
117
            }
118
        }
119
        return false;
120
    }
121

    
122
    private IView getActiveView() {
123
        ApplicationManager application = ApplicationLocator.getManager();
124
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
125
        return view;
126
    }
127

    
128
    private RasterLayer getFirstFileRasterLayerActive() {
129
        IView view = getActiveView();
130
        if (view != null) {
131
            ViewDocument viewDocument = view.getViewDocument();
132
            FLayers layers = viewDocument.getMapContext().getLayers();
133
            for (FLayer layer : layers) {
134
                if (layer instanceof RasterLayer && layer.isActive()) {
135
                    RasterLayer rasterLayer = (RasterLayer) layer;
136
                    RasterStore rasterStore = rasterLayer.getRasterStore();
137
                    DataStoreParameters storeParams = rasterStore.getParameters();
138
                    if (storeParams instanceof FilesystemStoreParameters) {
139
                        return rasterLayer;
140
                    }
141
                }
142
            }
143
        }
144
        return null;
145
    }
146

    
147
}