Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2060 / applications / appgvSIG / src / org / gvsig / app / util / BaseOpenErrorHandler.java @ 39341

History | View | Annotate | Download (4.59 KB)

1
package org.gvsig.app.util;
2

    
3
import java.io.File;
4
import java.lang.reflect.InvocationTargetException;
5

    
6
import javax.swing.JOptionPane;
7

    
8
import org.gvsig.fmap.dal.DataParameters;
9
import org.gvsig.fmap.dal.OpenErrorHandler;
10
import org.gvsig.fmap.dal.exception.InitializeException;
11
import org.gvsig.fmap.dal.exception.OpenException;
12
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
13
import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel;
14
import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
15
import org.gvsig.fmap.dal.store.shp.utils.SHP;
16
import org.gvsig.gui.beans.swing.JFileChooser;
17
import org.gvsig.i18n.Messages;
18
import org.gvsig.utils.SimpleFileFilter;
19

    
20
public class BaseOpenErrorHandler implements OpenErrorHandler{
21
        
22
        
23
        private DataParameters parameters;
24
        private Exception exception;
25

    
26
        public BaseOpenErrorHandler() {
27
                exception=null;
28
                parameters=null;
29
                
30
        }
31

    
32
        public boolean canRetryOpen(Exception e, DataParameters parameters) {
33
                this.exception=e;
34
                this.parameters=parameters;
35
                Throwable cause = null;
36
                boolean retry = false;
37

    
38
                /*if (this.exception instanceof InvocationTargetException){
39
                        cause = this.exception.getCause();
40
                } else {
41
                        cause = this.exception;
42
                }*/
43
                //if (cause instanceof InitializeException){
44
                        //if (cause.getCause() instanceof OpenException){
45
                                if ( this.parameters instanceof FilesystemStoreParameters) {
46
                                        FilesystemStoreParameters filesystemStoreParameters = (FilesystemStoreParameters)this.parameters;
47
                                        File searchedFile = filesystemStoreParameters.getFile();
48
                                        File file = null;
49
                                        if( searchedFile != null && !searchedFile.exists() ) {
50
                                                file = chooseAlternateFile(searchedFile);
51
                                                if( file!=null){
52
                                                        filesystemStoreParameters.setFile(file);
53
                                                        retry = true;
54
                                                } else {
55
                                                        return false;
56
                                                }
57
                                        }
58

    
59
                                        if (this.parameters instanceof SHPStoreParameters) {
60
                                                SHPStoreParameters shpStoreParameters = (SHPStoreParameters)this.parameters;
61
                                                File searchedDBFFile = shpStoreParameters.getDBFFile();
62
                                                if (searchedDBFFile!=null && !searchedDBFFile.exists()) {
63
                                                        File possibleDbfFile = null;
64
                                                        if (file != null){
65
                                                                possibleDbfFile = SHP.getDbfFile(file);
66
                                                        }
67
                                                        if (possibleDbfFile != null && possibleDbfFile.exists()) {
68
                                                                shpStoreParameters.setDBFFile(possibleDbfFile);
69
                                                                retry = true;
70
                                                        } else {
71
                                                                File dbfFile = chooseAlternateFile(searchedDBFFile);
72
                                                                if (dbfFile != null){
73
                                                                        shpStoreParameters.setDBFFile(dbfFile);
74
                                                                        retry = true;
75
                                                                } else {
76
                                                                        return false;
77
                                                                }
78
                                                        }
79
                                                }
80
                                                File searchedSHXFile = shpStoreParameters.getSHXFile();
81
                                                if (searchedDBFFile!=null && !searchedSHXFile.exists()) {
82
                                                        File possibleShxFile = null;
83
                                                        if (file != null){
84
                                                                possibleShxFile = SHP.getShxFile(file);
85
                                                        }
86
                                                        if (possibleShxFile != null && possibleShxFile.exists()) {
87
                                                                shpStoreParameters.setSHXFile(possibleShxFile);
88
                                                                retry = true;
89
                                                        } else {
90
                                                                File shxFile = chooseAlternateFile(searchedSHXFile);
91
                                                                if (shxFile != null) {
92
                                                                        shpStoreParameters.setSHXFile(shxFile);
93
                                                                        retry = true;
94
                                                                } else {
95
                                                                        return false;
96
                                                                }
97
                                                        }
98
                                                }
99
                                        }
100
                                }
101
                        //}
102
                //}
103
                return retry;
104
        }
105
        
106
        private File chooseAlternateFile(File searchedFile){
107
                        int resp = JOptionPane.showConfirmDialog(
108
                                        null,
109
                                        Messages.getText("dont_find_the_file")+"\n"+
110
                                        searchedFile.getName()+"\n"+
111
                                        Messages.getText("do_you_want_to_locate_the_file"),
112
                                        Messages.getText("dont_find_the_file"),
113
                                        JOptionPane.YES_NO_OPTION,
114
                                        JOptionPane.QUESTION_MESSAGE);
115
                        if (resp == JOptionPane.OK_OPTION){
116
                                JFileChooser fileChooser = new JFileChooser(FilesystemExplorerWizardPanel.OPEN_LAYER_FILE_CHOOSER_ID,
117
                                                searchedFile.getParentFile());
118
                                File parentFile = searchedFile.getParentFile();
119
                                if (parentFile.exists()){
120
                                        fileChooser.setLastPath(parentFile);
121
                                }
122
                                fileChooser.setMultiSelectionEnabled(false);
123
                                fileChooser.setAcceptAllFileFilterUsed(false);
124
                                fileChooser.setDialogTitle("dont_find_the_file: "+searchedFile.getAbsolutePath());
125

    
126
                                String searchedFileName = searchedFile.getName();
127
                                String ext = searchedFileName.substring(searchedFileName.lastIndexOf(".")+1);
128
                                SimpleFileFilter fileFilter = new SimpleFileFilter(ext, ext);
129
                                fileChooser.addChoosableFileFilter(fileFilter);
130
                                fileChooser.setFileFilter(fileFilter);
131
                                
132
                                int result = fileChooser.showOpenDialog(null);
133
                                if (result == JFileChooser.APPROVE_OPTION) {
134
                            File file = fileChooser.getSelectedFile();
135
                            return file;
136
                        }
137
                        }
138
                return null;
139
        }
140
}
141

    
142