Revision 6473

View differences:

org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
    <modelVersion>4.0.0</modelVersion>
3
    <groupId>org.gvsig</groupId>
4
    <artifactId>org.gvsig.vcsgis</artifactId>
5
    <version>1.0.63</version>
6
    <packaging>pom</packaging>
7
    <name>${project.artifactId}</name>
8
    <description />
9
    <parent>
10
        <groupId>org.gvsig</groupId>
11
        <artifactId>org.gvsig.desktop</artifactId>
12
        <version>2.0.373</version>
13
    </parent>
14

  
15
    <properties>
16
        <org.gvsig.h2spatial.provider>org.gvsig.h2spatial.h2gis132.provider</org.gvsig.h2spatial.provider>
17
        <org.gvsig.topology.version>1.0.108</org.gvsig.topology.version>
18
        <org.gvsig.oracle.version>2.0.89</org.gvsig.oracle.version>
19
        <org.gvsig.postgresql.version>2.0.210</org.gvsig.postgresql.version>
20
    </properties>
21

  
22
    <url>https://devel.gvsig.org/sites/org.gvsig.vcsgis/${project.version}</url>
23
    <scm>
24
        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-projects-pool/org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63</connection>
25
        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-projects-pool/org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63</developerConnection>
26
        <url>https://devel.gvsig.org/svn/gvsig-projects-pool/org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63</url>
27
    </scm>
28

  
29
    <repositories>
30
        <repository>
31
            <id>gvsig-public-http-repository</id>
32
            <name>gvSIG maven public HTTP repository</name>
33
            <url>http://devel.gvsig.org/m2repo/j2se</url>
34
            <releases>
35
                <enabled>true</enabled>
36
                <updatePolicy>daily</updatePolicy>
37
                <checksumPolicy>warn</checksumPolicy>
38
            </releases>
39
            <snapshots>
40
                <enabled>true</enabled>
41
                <updatePolicy>daily</updatePolicy>
42
                <checksumPolicy>warn</checksumPolicy>
43
            </snapshots>
44
        </repository>
45
    </repositories>
46

  
47
    <distributionManagement>
48
        <site>
49
            <id>gvsig-repository</id>
50
            <url>dav:https://devel.gvsig.org/download/projects/gvsig-vcsgis/pool/${project.artifactId}/${project.version}</url>
51
        </site>
52
    </distributionManagement>
53

  
54
    <build>
55
        <pluginManagement>
56
            <plugins>
57

  
58
                <plugin>
59
                    <groupId>org.apache.maven.plugins</groupId>
60
                    <artifactId>maven-compiler-plugin</artifactId>
61
                    <configuration>
62
                        <encoding>UTF-8</encoding>
63
                    </configuration>
64
                </plugin>
65
            </plugins>
66
        </pluginManagement>
67
        <plugins>
68
            <plugin>
69
                <groupId>org.apache.maven.plugins</groupId>
70
                <artifactId>maven-release-plugin</artifactId>
71
                <configuration>
72
                    <tagBase>https://devel.gvsig.org/svn/gvsig-projects-pool/${project.artifactId}/tags</tagBase>
73
                </configuration>
74
            </plugin>
75
        </plugins>
76
    </build>
77

  
78

  
79

  
80
    <dependencyManagement>
81
        <dependencies>
82
            <dependency>
83
                <groupId>org.apache.maven.plugins</groupId>
84
                <artifactId>maven-war-plugin</artifactId>
85
                <version>3.2.3</version>
86
                <type>maven-plugin</type>
87
            </dependency>
88
            <dependency>
89
                <groupId>org.apache.tomcat</groupId>
90
                <artifactId>tomcat-servlet-api</artifactId>
91
                <version>9.0.45</version>
92
            </dependency>
93
            <dependency>
94
                <groupId>javax.servlet</groupId>
95
                <artifactId>javax.servlet-api</artifactId>
96
                <version>3.1.0</version>
97
            </dependency>
98
            <dependency>
99
                <groupId>org.eclipse.jetty</groupId>
100
                <artifactId>jetty-server</artifactId>
101
                <version>9.4.34.v20201102</version>
102
            </dependency>
103
            <dependency>
104
                <groupId>org.eclipse.jetty</groupId>
105
                <artifactId>jetty-servlet</artifactId>
106
                <version>9.4.34.v20201102</version>
107
            </dependency>
108
            <dependency>
109
                <groupId>org.eclipse.jetty</groupId>
110
                <artifactId>jetty-webapp</artifactId>
111
                <version>9.4.34.v20201102</version>
112
                <exclusions>
113
                    <exclusion>
114
                        <groupId>javax.servlet</groupId>
115
                        <artifactId>servlet-api</artifactId>
116
                    </exclusion>
117
                </exclusions>
118
            </dependency>
119
            <dependency>
120
                <groupId>org.eclipse.jetty</groupId>
121
                <artifactId>jetty-util</artifactId>
122
                <version>9.4.34.v20201102</version>
123
            </dependency>
124
            <dependency>
125
                <groupId>org.eclipse.jetty</groupId>
126
                <artifactId>jetty-io</artifactId>
127
                <version>9.4.34.v20201102</version>
128
            </dependency>
129
            <dependency>
130
                <groupId>org.eclipse.jetty</groupId>
131
                <artifactId>jetty-jndi</artifactId>
132
                <version>9.4.34.v20201102</version>
133
            </dependency>
134

  
135

  
136

  
137

  
138
            <dependency>
139
                <groupId>org.gvsig</groupId>
140
                <artifactId>org.gvsig.topology</artifactId>
141
                <version>${org.gvsig.topology.version}</version>
142
                <type>pom</type>
143
                <scope>import</scope>
144
            </dependency>
145
            <dependency>
146
                <groupId>org.gvsig</groupId>
147
                <artifactId>${org.gvsig.h2spatial.provider}</artifactId>
148
            </dependency>
149
            <dependency>
150
                <groupId>org.gvsig</groupId>
151
                <artifactId>org.gvsig.oracle</artifactId>
152
                <version>${org.gvsig.oracle.version}</version>
153
                <type>pom</type>
154
                <scope>import</scope>
155
            </dependency>
156
            <dependency>
157
                <groupId>org.gvsig</groupId>
158
                <artifactId>org.gvsig.postgresql</artifactId>
159
                <version>${org.gvsig.postgresql.version}</version>
160
                <type>pom</type>
161
                <scope>import</scope>
162
            </dependency>
163
            <dependency>
164
                <groupId>org.gvsig</groupId>
165
                <artifactId>org.gvsig.vcsgis.lib.api</artifactId>
166
                <version>1.0.63</version>
167
            </dependency>
168
            <dependency>
169
                <groupId>org.gvsig</groupId>
170
                <artifactId>org.gvsig.vcsgis.lib.impl</artifactId>
171
                <version>1.0.63</version>
172
            </dependency>
173
            <dependency>
174
                <groupId>org.gvsig</groupId>
175
                <artifactId>org.gvsig.vcsgis.lib.impl</artifactId>
176
                <scope>test</scope>
177
                <type>test-jar</type>
178
                <version>1.0.63</version>
179
            </dependency>
180
            <dependency>
181
                <groupId>org.gvsig</groupId>
182
                <artifactId>org.gvsig.vcsgis.swing.api</artifactId>
183
                <version>1.0.63</version>
184
            </dependency>
185
            <dependency>
186
                <groupId>org.gvsig</groupId>
187
                <artifactId>org.gvsig.vcsgis.swing.impl</artifactId>
188
                <version>1.0.63</version>
189
            </dependency>
190
            <dependency>
191
                <groupId>org.gvsig</groupId>
192
                <artifactId>org.gvsig.vcsgis.tomcat.webapp</artifactId>
193
                <version>1.0.63</version>
194
                <type>war</type>
195
            </dependency>
196

  
197
        </dependencies>
198
    </dependencyManagement>
199
    
200
    <modules>
201
        <module>org.gvsig.vcsgis.lib</module>
202
        <module>org.gvsig.vcsgis.swing</module>
203
        <module>org.gvsig.vcsgis.app</module>
204
        <module>org.gvsig.vcsgis.tomcat</module>
205
    </modules>
206
</project>
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/buildNumber.properties
1
#Mon May 02 09:51:02 CEST 2022
2
buildNumber=71
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<!-- gvSIG. Desktop Geographic Information System. Copyright (C) 2007-2013 gvSIG
2
  Association. This program is free software; you can redistribute it and/or modify
3
  it under the terms of the GNU General Public License as published by the Free Software
4
  Foundation; either version 3 of the License, or (at your option) any later version.
5
  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
6
  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
7
  PURPOSE. See the GNU General Public License for more details. You should have received
8
  a copy of the GNU General Public License along with this program; if not, write to
9
  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
10
  USA. For any additional information, do not hesitate to contact us at info AT gvsig.com,
11
  or visit our website www.gvsig.com. -->
12
<assembly>
13
  <id>gvsig-plugin-package</id>
14
  <formats>
15
    <format>zip</format>
16
  </formats>
17
  <baseDirectory>${project.artifactId}</baseDirectory>
18
  <includeBaseDirectory>true</includeBaseDirectory>
19
  <files>
20
    <file>
21
      <source>target/${project.artifactId}-${project.version}.jar</source>
22
      <outputDirectory>lib</outputDirectory>
23
    </file>
24
    <file>
25
      <source>target/package.info</source>
26
    </file>
27
  </files>
28

  
29
  <fileSets>
30
    <fileSet>
31
      <directory>src/main/resources-plugin</directory>
32
      <outputDirectory>.</outputDirectory>
33
    </fileSet>
34
  </fileSets>
35

  
36

  
37
  <dependencySets>
38
    <dependencySet>
39
      <useProjectArtifact>false</useProjectArtifact>
40
      <useTransitiveDependencies>false</useTransitiveDependencies>
41
      <outputDirectory>lib</outputDirectory>
42
      <includes>
43
        <include>org.gvsig:org.gvsig.vcsgis.lib.api</include>
44
        <include>org.gvsig:org.gvsig.vcsgis.lib.impl</include>
45
        <include>org.gvsig:org.gvsig.vcsgis.swing.api</include>
46
        <include>org.gvsig:org.gvsig.vcsgis.swing.impl</include>
47
        <include>javax.servlet:javax.servlet-api</include>
48
        
49
      </includes>
50
    </dependencySet>
51
  </dependencySets>
52

  
53
</assembly>
54

  
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/java/org/gvsig/vcsgis/app/VCSGisDialogsHelper.java
1
/*
2
 * gvSIG. Desktop Geographic Information System.
3
 * 
4
 * Copyright (C) 2007-2020 gvSIG Association.
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License 
17
 * along with this program. If not, see <https://www.gnu.org/licenses/>. 
18
 * 
19
 * For any additional information, do not hesitate to contact us
20
 * at info AT gvsig.com, or visit our website www.gvsig.com.
21
 */
22

  
23
package org.gvsig.vcsgis.app;
24

  
25
import java.awt.event.ActionEvent;
26
import java.awt.event.ComponentAdapter;
27
import java.awt.event.ComponentEvent;
28
import java.util.HashMap;
29
import java.util.Map;
30
import javax.swing.JPanel;
31
import javax.swing.SwingUtilities;
32
import org.gvsig.andami.ui.mdiManager.IWindow;
33
import org.gvsig.andami.ui.mdiManager.MDIManager;
34
import org.gvsig.app.ApplicationLocator;
35
import org.gvsig.tools.ToolsLocator;
36
import org.gvsig.tools.i18n.I18nManager;
37
import org.gvsig.tools.swing.api.Component;
38
import org.gvsig.tools.swing.api.ToolsSwingLocator;
39
import org.gvsig.tools.swing.api.windowmanager.Dialog;
40
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
41
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
42
import org.gvsig.vcsgis.swing.VCSGisPanel;
43
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
45

  
46
/**
47
 *
48
 * @author gvSIG Team
49
 */
50
public class VCSGisDialogsHelper {
51
    private static final Logger LOGGER = LoggerFactory.getLogger(VCSGisDialogsHelper.class);
52

  
53
    public static class VCSGisDialogInfo {
54

  
55
        private VCSGisPanel panel;
56
        private final String name;
57
        private final String title;
58
        private String header;
59
        private String okLabel;
60
        private boolean closed;
61
        private Runnable action;
62
        private Dialog dialog;
63
        private boolean autoclose;
64

  
65
        public VCSGisDialogInfo(String name, VCSGisPanel thePanel, String title) {
66
            this.name = name;
67
            this.panel = thePanel;
68
            this.title = title;
69
            this.closed = true;
70
            this.autoclose = false;
71

  
72
            this.panel.asJComponent().addComponentListener(new ComponentAdapter() {
73
                @Override
74
                public void componentHidden(ComponentEvent e) {
75
                    closed = true;
76
                }
77
            });
78
        }
79
        
80
        public VCSGisDialogInfo(String name, VCSGisPanel thePanel, String title, String header, String okLabel) {
81
            this(name, thePanel, title);
82
            this.header = header;
83
            this.okLabel = okLabel;
84
        }
85

  
86
        private void performDialogAction() {
87
            action.run();
88
        }
89

  
90
        public void setAction(Runnable action) {
91
            this.action = action;
92
        }
93

  
94
        public Component getPanel() {
95
            return this.panel;
96
        }
97

  
98
        public boolean isClosed() {
99
            return this.closed;
100
        }
101

  
102
        public String getName() {
103
            return this.name;
104
        }
105

  
106
        public void setAutoclose(boolean autoclose) {
107
            this.autoclose = autoclose;
108
        }
109
        
110
        private Dialog createDialog() {
111
            I18nManager i18n = ToolsLocator.getI18nManager();
112
            WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
113

  
114
            Dialog theDialog = winManager.createDialog(
115
                    this.panel.asJComponent(),
116
                    i18n.getTranslation(title),
117
                    i18n.getTranslation(header),
118
                    WindowManager_v2.BUTTONS_OK_CANCEL
119
            );
120
            theDialog.setAutoclose(false);
121

  
122
            this.panel.setDialog(theDialog);
123
            theDialog.setButtonLabel(
124
                    WindowManager_v2.BUTTON_OK,
125
                    i18n.getTranslation(okLabel)
126
            );
127
            theDialog.setButtonLabel(
128
                    WindowManager_v2.BUTTON_CANCEL,
129
                    i18n.getTranslation("_Close")
130
            );
131
            if (this.panel.isProcessing()) {
132
                theDialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
133
            }
134
            theDialog.addActionListener((ActionEvent e) -> {
135
                switch (theDialog.getAction()) {
136
                    case WindowManager_v2.BUTTON_OK:
137
                        Thread task = new Thread(() -> {
138
                            if(this.autoclose){
139
                                this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
140
                            }
141
                            performDialogAction();
142
                            if(this.autoclose){
143
                                close();
144
                            }
145
                        }, "VCSGis" + name);
146
                        task.start();
147
                        break;
148
                    case WindowManager_v2.BUTTON_CANCEL:
149
                        close();
150
                        break;
151
                }
152
            });
153
            return theDialog;
154
        }
155

  
156
        public void show() {
157
            if (!this.closed) {
158
                MDIManager manager = ApplicationLocator.getApplicationManager().getUIManager();
159
                manager.moveToFrom(manager.getWindow((JPanel) this.panel.asJComponent()));
160
                return;
161
            }
162
            this.closed = false;
163
            if( this.action==null ) {
164
                I18nManager i18n = ToolsLocator.getI18nManager();
165
                WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
166
                winManager.showWindow(
167
                        this.panel.asJComponent(),
168
                        i18n.getTranslation(this.title),
169
                        WindowManager.MODE.WINDOW
170
                );
171
            } else {
172
                this.dialog = this.createDialog();
173
                this.dialog.show(WindowManager.MODE.WINDOW);
174
            }
175
        }
176
        
177
        private void close() {
178
            if (this.closed || this.dialog == null) {
179
                this.panel = null;
180
                this.dialog = null;
181
                return;
182
            }
183
            if(!SwingUtilities.isEventDispatchThread()){
184
                SwingUtilities.invokeLater(this::close);
185
                return;
186
            }
187
            this.dialog.asJComponent().setVisible(false);     
188
            this.panel = null;
189
            this.dialog = null;
190
        }
191
    }
192

  
193
    private Map<String, VCSGisDialogInfo> dialogsInfo;
194

  
195
    public VCSGisDialogInfo getDialog(String name) {
196
        if (this.dialogsInfo == null) {
197
            return null;
198
        }
199
        VCSGisDialogInfo info = this.dialogsInfo.get(name);
200
        return info;
201
    }
202

  
203
    public VCSGisDialogInfo getOrCreateDialog(String name, VCSGisPanel panel, String title, String header, String okLabel, Runnable action) {
204
        if (this.dialogsInfo == null) {
205
            this.dialogsInfo = new HashMap<>();
206
        }
207
        VCSGisDialogInfo info = this.dialogsInfo.get(name);
208
        if (info == null || info.isClosed() ) {
209
            info = new VCSGisDialogInfo(name, panel, title, header, okLabel);
210
            info.setAction(action);
211
            this.dialogsInfo.put(name, info);
212
        }
213
        return info;
214
    }
215

  
216
    public VCSGisDialogInfo getOrCreateDialog(String name, VCSGisPanel panel, String title) {
217
        if (this.dialogsInfo == null) {
218
            this.dialogsInfo = new HashMap<>();
219
        }
220
        VCSGisDialogInfo info = this.dialogsInfo.get(name);
221
        if (info == null || info.isClosed()) {
222
            info = new VCSGisDialogInfo(name, panel, title);
223
            this.dialogsInfo.put(name, info);
224
        }
225
        return info;
226
    }
227

  
228
}
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/java/org/gvsig/vcsgis/app/addlayer/VCSGisTableInfo.java
1
package org.gvsig.vcsgis.app.addlayer;
2

  
3
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
4
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
5
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.type.GeometryType;
7
import org.gvsig.geodb.TableInfo;
8
import org.gvsig.vcsgis.lib.VCSGisEntity;
9

  
10
/**
11
 *
12
 * @author jjdelcerro
13
 */
14
public class VCSGisTableInfo extends TableInfo {
15

  
16
    private final VCSGisEntity entity;
17
    
18
    public VCSGisTableInfo(VCSGisEntity entity, JDBCStoreParameters parameters, boolean requireGeometry, boolean isView) {
19
        super(entity.getEntityName(), parameters, requireGeometry, isView);
20
        this.entity = entity;
21
    }
22
    
23
    public VCSGisEntity getEntity() {
24
        return this.entity;
25
    }
26
    
27
    @Override
28
    protected void fetchFromStore() {
29
        if (this.featureType != null) {
30
            return;
31
        }
32
        try {
33
            this.featureType = entity.getFeatureType();
34
            FeatureAttributeDescriptor attr = this.featureType.getDefaultGeometryAttribute();
35
            if (attr != null) {
36
                GeometryType geomType = attr.getGeomType();
37
                if (geomType != null) {
38
                    if (this.getGeometryType() == Geometry.TYPES.UNKNOWN) {
39
                        this.setGeometryType(geomType.getType());
40
                    }
41
                    if (this.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN) {
42
                        this.setGeometrySubtype(geomType.getSubType());
43
                    }
44
                }
45
                if (this.getProjection() == null) {
46
                    this.setProjection(attr.getSRS());
47
                }
48
            }            
49
            if (this.readOnly == null) {
50
                this.readOnly = false; //!store.allowWrite();
51
            }
52

  
53
            // this force calculate some required values of tableinfo
54
            this.getGeomFieldComboModel();
55
            this.getIdFieldComboModel();
56

  
57
        } catch (Exception ex) {
58
            LOGGER.trace("Can't get feature type.", ex); // To allow set break points
59
        } finally {
60

  
61
        }
62

  
63
    }
64
    
65
    public boolean existsDALInfo() {    
66
        return true;
67
    }
68
}
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/java/org/gvsig/vcsgis/app/addlayer/AbstractWizardVCSGis.java
1
package org.gvsig.vcsgis.app.addlayer;
2

  
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.awt.Cursor;
6
import java.awt.event.ActionEvent;
7
import java.net.URL;
8
import java.util.ArrayList;
9
import java.util.Collection;
10
import java.util.HashMap;
11
import java.util.List;
12
import java.util.Map;
13
import java.util.function.Function;
14
import java.util.function.Predicate;
15
import javax.swing.ImageIcon;
16
import javax.swing.JButton;
17
import javax.swing.JCheckBox;
18
import javax.swing.JComboBox;
19
import javax.swing.JComponent;
20
import javax.swing.JLabel;
21
import javax.swing.JList;
22
import javax.swing.JOptionPane;
23
import javax.swing.JTextField;
24
import javax.swing.SwingUtilities;
25
import javax.swing.UIManager;
26
import javax.swing.event.ChangeEvent;
27
import org.apache.commons.io.FilenameUtils;
28
import org.apache.commons.lang3.StringUtils;
29
import org.gvsig.app.gui.WizardPanel;
30
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
31
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
34
import org.gvsig.fmap.dal.swing.DALSwingLocator;
35
import org.gvsig.fmap.dal.swing.DataSwingManager;
36
import org.gvsig.fmap.mapcontext.MapContext;
37
import org.gvsig.geodb.TableInfo;
38
import org.gvsig.geodb.TableInfoController;
39
import org.gvsig.tools.ToolsLocator;
40
import org.gvsig.tools.i18n.I18nManager;
41
import org.gvsig.tools.swing.api.ToolsSwingLocator;
42
import org.gvsig.tools.swing.api.ToolsSwingManager;
43
import org.gvsig.tools.swing.api.ToolsSwingUtils;
44
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
45
import org.gvsig.tools.swing.api.task.TaskStatusController;
46
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
47
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
48
import org.gvsig.tools.swing.api.windowmanager.Dialog;
49
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
50
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
51
import org.gvsig.tools.swing.icontheme.IconTheme;
52
import org.gvsig.vcsgis.lib.VCSGisEntity;
53
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
54
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
55
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceEntity;
56
import org.gvsig.vcsgis.swing.VCSGisEntitySelectorController;
57
import static org.gvsig.vcsgis.swing.VCSGisEntitySelectorController.ACTION_BEGIN_PROCESSING_ID;
58
import static org.gvsig.vcsgis.swing.VCSGisEntitySelectorController.ACTION_CHECK_ID;
59
import static org.gvsig.vcsgis.swing.VCSGisEntitySelectorController.ACTION_END_PROCESSING_ID;
60
import static org.gvsig.vcsgis.swing.VCSGisEntitySelectorController.ACTION_RELOAD_ID;
61
import static org.gvsig.vcsgis.swing.VCSGisEntitySelectorController.ACTION_SELECT_ID;
62
import org.gvsig.vcsgis.swing.VCSGisJInitWorkspace;
63
import org.gvsig.vcsgis.swing.VCSGisSwingLocator;
64
import org.gvsig.vcsgis.swing.VCSGisSwingManager;
65
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
67

  
68
/**
69
 *
70
 * @author jjdelcerro
71
 */
72
@SuppressWarnings("UseSpecificCatch")
73
public abstract class AbstractWizardVCSGis extends WizardPanel {
74

  
75
    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractWizardVCSGis.class);
76

  
77
    protected WizardVCSGisViewExtended view;
78
    private PickerController<VCSGisWorkspace> workspacePicker;
79
    protected Map<String, TableInfo> tablesInfo = null;
80
    private boolean processing;
81
    private TaskStatusController taskStatusController;
82
    private TableInfoController tableInfoController;
83
    private VCSGisEntitySelectorController entitySelector;
84

  
85
    private class VCSGisTableInfoController extends TableInfoController {
86
        
87
        public VCSGisTableInfoController(JButton btnDeselectAllColumns, JButton btnSelectAllColumns, JList lstColumns, JTextField txtName, JComboBox cboIdField, JComboBox cboGeometryField, JTextField txtProjection, JButton btnProjection, JTextField txtFilter, JButton btnFilter, JButton btnFilterBookmarks, JButton btnFilterHistory, JButton btnAdvancedProperties, JLabel lblReadOnlyNotification, JComponent pnlCfgActions, JButton btnChangeViewProjection, JCheckBox visible) {
88
            super(btnDeselectAllColumns, btnSelectAllColumns, lstColumns, txtName, cboIdField, cboGeometryField, txtProjection, btnProjection, txtFilter, btnFilter, btnFilterBookmarks, btnFilterHistory, btnAdvancedProperties, lblReadOnlyNotification, pnlCfgActions, btnChangeViewProjection, visible);
89
        }
90

  
91
        @Override
92
        public void put(TableInfo tableInfo) {
93
            if( tableInfo!=null ) {
94
                Boolean v = tableInfo.getVisible();
95
                if( v == null ) {
96
                    VCSGisEntity entity = ((VCSGisTableInfo)tableInfo).getEntity();
97
                    if( entity!=null ) {
98
                        String category = getCategory(entity);
99
                        boolean defaultVisibility = entity.getCategoryTags(category).getBoolean("visibility",true);
100
                        tableInfo.setVisible(defaultVisibility);
101
                    }
102
                }
103
            }
104
            super.put(tableInfo);
105
        }
106
        
107
    }
108
    
109
    public AbstractWizardVCSGis() {
110
        initComponents();
111
    }
112

  
113
    private static void waitCursor(Component component, Runnable action) {
114
        Cursor saved_cursor = component.getCursor();
115
        try {
116
            component.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
117
            action.run();
118
        } finally {
119
            component.setCursor(saved_cursor);
120
        }
121
    }
122
    
123
    private void initComponents() {
124
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
125
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
126
        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
127
        VCSGisSwingManager swingManager = VCSGisSwingLocator.getVCSGisSwingManager();
128
        
129
        this.view = new WizardVCSGisViewExtended();
130
//        this.view.txtRepositoryInfo.setVisible(false);
131
        
132
        this.entitySelector = swingManager.createEntitySelectorController(
133
                this.view.treeTables, 
134
                this.view.txtTablesFilter, 
135
                this.view.btnTablesFilter);
136
        
137
        Predicate<VCSGisEntity> entitySelectorFilter = VCSGisEntitySelectorController.ALL_ENTITIES;
138
        
139
        if(this.requireGeometry()){
140
            entitySelectorFilter = (VCSGisEntity t) -> (StringUtils.isNotBlank(t.getGeometryFieldName()));
141
        }
142
        
143
        this.entitySelector.setFilter(entitySelectorFilter);
144
        this.entitySelector.setViewFilter(entitySelectorFilter);
145
        this.entitySelector.setLabelEntityFormatter(this.getLabelEntityFormatter());
146
        
147
        this.entitySelector.setChecksEnabled(true);
148
        
149
        TaskStatusSwingManager taskStatusManager = ToolsSwingLocator.getTaskStatusSwingManager();
150
        
151
        this.taskStatusController = taskStatusManager.createTaskStatusController(
152
                this.view.lblStatusTitle,
153
                this.view.lblStatusMessages,
154
                this.view.pbStatus
155
        );
156
        this.taskStatusController.setShowCancelButton(false);
157
        this.taskStatusController.setShowRemoveTaskButton(false);
158
        this.taskStatusController.bind(ToolsLocator.getTaskStatusManager());
159

  
160
        toolsSwingManager.translate(this.view.lblColumns);
161
        toolsSwingManager.translate(this.view.lblWorkspace);
162
        toolsSwingManager.translate(this.view.lblFilter);
163
        toolsSwingManager.translate(this.view.lblGeometryField);
164
        toolsSwingManager.translate(this.view.lblIdField);
165
        toolsSwingManager.translate(this.view.lblName);
166
        toolsSwingManager.translate(this.view.lblProjection);
167
        toolsSwingManager.translate(this.view.lblTable);
168
        toolsSwingManager.translate(this.view.cboWorkspaces);
169
        toolsSwingManager.translate(this.view.btnAddWorkspace);
170
        toolsSwingManager.translate(this.view.btnCheckout);
171
        toolsSwingManager.translate(this.view.btnInitWorkspace);
172
        toolsSwingManager.translate(this.view.chkMaintainStructureInToC);
173
        toolsSwingManager.translate(this.view.btnTablesCheckAll);
174
        toolsSwingManager.translate(this.view.btnTablesUncheckAll);
175
        toolsSwingManager.translate(this.view.btnTablesCollapseAll);
176
        toolsSwingManager.translate(this.view.btnTablesExpandAll);
177
        toolsSwingManager.translate(this.view.chkCheckScale);
178
        toolsSwingManager.translate(this.view.chkAddToCWhenLoadingAll);
179
        toolsSwingManager.translate(this.view.tabTableInfo);
180
        toolsSwingManager.translate(this.view.lblVisible);
181
        
182
        this.view.btnInitWorkspace.setText(toHTML(this.view.btnInitWorkspace.getText()));
183
//        toolsSwingManager.translate(this.view.txtRepositoryInfo);
184

  
185
        toolsSwingManager.addClearButton(this.view.txtName);
186
        toolsSwingManager.setDefaultPopupMenu(this.view.txtName);
187
        
188
        this.view.btnInitWorkspace.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
189
        this.view.btnAddWorkspace.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
190

  
191
        this.workspacePicker = swingManager.createWorkspacePickerController(
192
            this.view.cboWorkspaces,
193
            this.view.btnAddWorkspace
194
        );
195

  
196
        this.workspacePicker.addChangeListener((ChangeEvent e) -> {
197
            waitCursor(this, () -> {
198
                doChangeWorkspace();
199
                doUpdateComponents();
200
            });
201
        });
202

  
203
        this.entitySelector.addActionListener((ActionEvent e) -> {
204
            switch(e.getID()){
205
                case ACTION_RELOAD_ID:
206
                    doReloadTablesInfo();
207
                    break;
208
                case ACTION_BEGIN_PROCESSING_ID:
209
                case ACTION_END_PROCESSING_ID:
210
                    doUpdateComponents();
211
                    break;
212
                case ACTION_SELECT_ID:
213
                    doChangeTableSelected();
214
                    break;
215
                case ACTION_CHECK_ID:
216
                    doChangeTableChecked();
217
                    doUpdateComponents();
218
                    break;
219
                    
220
            }
221
        });
222
        this.view.btnTablesCheckAll.addActionListener((ActionEvent e) -> {
223
//            this.entitySelector.checkAll();
224
            waitCursor(this, () -> {
225
                List<String> entityCodes = new ArrayList<>();
226
                Collection<VCSGisEntity> entities = entitySelector.getEntities();
227
                for (VCSGisEntity entity : entities) {
228
                    if( entity instanceof VCSGisWorkspaceEntity ){
229
                        entityCodes.add(entity.getEntityCode());
230
                    }                
231
                }
232
                entitySelector.setCheck(entityCodes, true);
233
            });
234
        });
235

  
236
        this.view.btnTablesUncheckAll.addActionListener((ActionEvent e) -> {
237
            this.entitySelector.clearChecks();
238
        });
239

  
240
        this.view.btnTablesCollapseAll.addActionListener((ActionEvent e) -> {
241
            this.entitySelector.collapseAll();
242
        });
243

  
244
        this.view.btnTablesExpandAll.addActionListener((ActionEvent e) -> {
245
            this.entitySelector.expandAll();
246
        });
247

  
248
        this.view.btnInitWorkspace.addActionListener((ActionEvent e) -> {
249
            doShowInitWorkspace();
250
        });
251

  
252
        this.view.btnCheckout.addActionListener((ActionEvent e) -> {
253
            doCheckout();
254
        });
255
        
256
        this.tableInfoController = new VCSGisTableInfoController(
257
                this.view.btnDeselectAllColumns,
258
                this.view.btnSelectAllColumns,
259
                this.view.lstColumns,
260
                this.view.txtName,
261
                this.view.cboIdField,
262
                this.view.cboGeometryField,
263
                this.view.txtProjection,
264
                this.view.btnProjection,
265
                this.view.txtFilter,
266
                this.view.btnFilter,
267
                this.view.btnFilterBookmarks,
268
                this.view.btnFilterHistory,
269
                this.view.btnAdvancedProperties,
270
                this.view.lblReadOnlyNotification,
271
                null,
272
                this.view.btnChangeViewProjection,
273
                this.view.chkVisible
274
        );
275
        this.view.btnChangeViewProjection.setVisible(this.requireGeometry());
276
        
277
        this.view.btnInitWorkspace.setBackground(UIManager.getColor("Panel.background"));
278
//        this.view.txtRepositoryInfo.setBackground(UIManager.getColor("Panel.background"));
279
        
280
        this.clearTables();
281

  
282
        this.view.chkMaintainStructureInToC.setVisible(false);
283
        this.view.chkMaintainStructureInToC.setSelected(true);
284
        
285
        this.view.chkCheckScale.setSelected(true);
286

  
287
        this.view.chkAddToCWhenLoadingAll.setSelected(true);
288
        
289
        this.setLayout(new BorderLayout());
290
        this.add(this.view, BorderLayout.CENTER);
291
        
292
        ToolsSwingUtils.ensureRowsCols(this, 22, 90, 25, 100);
293
        doUpdateComponents();
294
    }
295

  
296
    protected abstract boolean requireGeometry();
297

  
298
    protected boolean maintainStructureInToC() {
299
        return this.view.chkMaintainStructureInToC.isSelected();
300
    }
301
    
302
    protected void setVidibleMaintainStructureInToC(boolean visible) {
303
        this.view.chkMaintainStructureInToC.setVisible(visible);
304
    }
305
    
306
    protected Collection<TableInfo> getTablesInformation() {
307
        this.updateTableInfoFromUI();
308
        if( this.tablesInfo == null ) {
309
            this.tablesInfo = new HashMap<>();
310
        }
311
        return this.tablesInfo.values();
312
    }
313
    
314
    private void clearTables() {
315
        this.entitySelector.clear();
316
        this.tableInfoController.clear();
317
    }
318

  
319
    private void doChangeWorkspace() {
320
        if (notInSwingThreadInvokeLater(this::doChangeWorkspace)) {
321
            return;
322
        }
323
        
324
        VCSGisWorkspace workspace = workspacePicker.get();
325
        
326
        this.entitySelector.setWorkspace(workspace);
327
//        if (workspace == null) {
328
//            this.view.txtRepositoryInfo.setText("");
329
//            return;
330
//        }
331
//
332
//        this.view.txtRepositoryInfo.setText(workspace.getRepository().getLabel());
333
    }
334

  
335
    private TableInfo getTableInfo(VCSGisEntity entity){
336
        Collection<TableInfo> tablesInformation = getTablesInformation();
337
        for (TableInfo tableInfo : tablesInformation) {
338
            VCSGisEntity tableInfoEntity = (VCSGisEntity) tableInfo.getProperty("entity");
339
            if(tableInfoEntity!=null && StringUtils.equals(tableInfoEntity.getEntityCode(), entity.getEntityCode())){
340
                return tableInfo;
341
            }
342
        }
343
        return null;
344
    }
345

  
346
    private void doChangeTableSelected() {
347
        if( notInSwingThreadInvokeLater(() -> {doChangeTableSelected();}) ) {
348
            return;
349
        }
350
        
351
        VCSGisEntity selected = this.entitySelector.getSelectedEntity();
352
        if(selected == null){
353
            this.tableInfoController.put(null);
354
            return;
355
        }
356
        TableInfo tableInfo = getTableInfo(selected);
357
        if (tableInfo != null) {
358
            this.updateTableInfoFromUI();
359
            this.tableInfoController.put(tableInfo);
360
            this.tableInfoController.setEnabled(true);
361
        } else {
362
            this.tableInfoController.clear();
363
            this.tableInfoController.setEnabled(false);
364
        }
365
        
366
        showMessage("");
367
        doUpdateComponents();
368
    }
369
    
370
    private void doChangeTableChecked() {
371
        List<VCSGisEntity> checkedEntities = this.entitySelector.getCheckedEntities();
372
        List<String> entityCodes = new ArrayList<>();
373
        for (VCSGisEntity checkedEntity : checkedEntities) {
374
            if( checkedEntity!=null && !(checkedEntity instanceof VCSGisWorkspaceEntity)){
375
                entityCodes.add(checkedEntity.getEntityCode());
376
            }
377
        }
378
        this.entitySelector.setCheck(entityCodes, false);
379

  
380
        Collection<TableInfo> tablesInformation = getTablesInformation();
381
        for (TableInfo tableInfo : tablesInformation) {
382
            VCSGisEntity tableInfoEntity = (VCSGisEntity) tableInfo.getProperty("entity");
383
            tableInfo.setSelected(checkedEntities.contains(tableInfoEntity));
384
        }
385
        this.checkFinishable();
386
    }
387
    
388

  
389
    private void updateTableInfoFromUI() {
390
        String previousId = this.tableInfoController.getId();
391
        if (previousId == null) {
392
            return;
393
        }
394

  
395
        if (this.tablesInfo != null && !this.tablesInfo.isEmpty()) {
396
            TableInfo previousInfo = this.tablesInfo.get(previousId);
397
            if (previousInfo != null) {
398
                this.tableInfoController.fetch(previousInfo);
399
            }
400
        }
401
    }
402

  
403
    @Override
404
    public void initWizard() {
405
        I18nManager i18n = ToolsLocator.getI18nManager();
406
        setTabName(i18n.getTranslation("_VCSGis"));
407
    }
408

  
409
    @Override
410
    public boolean areSettingsValid() {
411
        if(processing){
412
            return false;
413
        }
414
        boolean hasInvalidValues = false;
415
        boolean hasSelectedTables = false;
416
        for (TableInfo tableInfo : this.getTablesInformation() ) {
417
            if (tableInfo.isSelected()) {
418
                hasSelectedTables = true;
419
                if (!tableInfo.hasValidValues()) {
420
                    hasInvalidValues = true;
421
                }
422
            }
423
        }
424
        return hasSelectedTables && !hasInvalidValues;
425
    }
426

  
427
    @Override
428
    public DataStoreParameters[] getParameters() {
429
        int sz = 0;
430
        for (TableInfo tableInfo : this.getTablesInformation() ) {
431
            if( tableInfo.isSelected() ) {
432
                sz++;
433
            }
434
        }
435
        if( sz == 0 ) {
436
            return null;
437
        }
438
        DataStoreParameters[] dbParameters = new DataStoreParameters[sz];
439
        int n = 0;
440
        for (TableInfo tableInfo : this.getTablesInformation() ) {
441
            if( tableInfo.isSelected() ) {
442
                dbParameters[n++] = tableInfo.getParameters();
443
            }
444
        }
445
        return dbParameters;
446
    }
447
    
448
    @Override
449
    public void execute() {
450
        executeWizard();
451
    }
452

  
453
    @Override
454
    public void close() {
455
        
456
    }
457
    
458
    protected void checkFinishable() {
459
        boolean finishable = areSettingsValid();
460
        callStateChanged(finishable);
461
    }
462
    
463
    private void doUpdateComponents() {
464
        VCSGisEntity entity = this.entitySelector.getSelectedEntity();
465
        
466
        boolean theProcessing = this.processing || this.entitySelector.isProcessing();
467

  
468
        VCSGisWorkspace ws = getWorkspace();
469
        if(entity == null){
470
            this.view.btnCheckout.setEnabled(false);
471
            this.tableInfoController.setEnabled(false);
472
        } else if(entity instanceof VCSGisWorkspaceEntity){
473
            this.view.btnCheckout.setEnabled(false);
474
            this.tableInfoController.setEditable(!theProcessing && ws != null);
475
            this.tableInfoController.setEnabled(ws != null);
476
        } else { //Entidad de repositorio
477
            this.view.btnCheckout.setEnabled(!theProcessing && ws != null);
478
            this.tableInfoController.setEnabled(false);
479
        }
480
        
481
        this.entitySelector.setEnabled(!theProcessing && ws != null);
482
        this.view.btnTablesCheckAll.setEnabled(this.entitySelector.isEnabled());
483
        this.view.btnTablesUncheckAll.setEnabled(this.entitySelector.isEnabled());
484
        this.view.btnTablesCollapseAll.setEnabled(this.entitySelector.isEnabled());
485
        this.view.btnTablesExpandAll.setEnabled(this.entitySelector.isEnabled());
486
        this.workspacePicker.setEnabled(!theProcessing);
487
        this.view.btnInitWorkspace.setEnabled(!theProcessing);
488
//        this.view.txtRepositoryInfo.setEnabled(!theProcessing && ws != null);
489
        this.setVisibleStatus(theProcessing);
490
        this.checkFinishable();
491
    }
492

  
493
    private void doShowInitWorkspace() {
494
        I18nManager i18nManager = ToolsLocator.getI18nManager();
495
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
496
        VCSGisSwingManager swingManager = VCSGisSwingLocator.getVCSGisSwingManager();
497

  
498
        final VCSGisJInitWorkspace panelInitWorkspace = swingManager.createInitWorkspacePanel();
499
        final Dialog dialogInitWorkspace = winManager.createDialog(
500
                panelInitWorkspace.asJComponent(),
501
                i18nManager.getTranslation("_VCS_Initialize_workingcopy"),
502
                i18nManager.getTranslation("_VCS_Initialize_workingcopy"),
503
                WindowManager_v2.BUTTONS_OK_CANCEL
504
        );
505

  
506
        panelInitWorkspace.setDialog(dialogInitWorkspace);
507
        dialogInitWorkspace.setButtonLabel(
508
                WindowManager_v2.BUTTON_OK,
509
                i18nManager.getTranslation("_VCS_Initialize_workingcopy")
510
        );
511
        dialogInitWorkspace.addActionListener((ActionEvent e) -> {
512
            switch (dialogInitWorkspace.getAction()) {
513
                case WindowManager_v2.BUTTON_OK:
514
                    int r = panelInitWorkspace.initializeWorkspace();
515
                    if (r != 0) {
516
                        String message = "_Cant_initialize_workingcopy_{0}";
517

  
518
                        StringBuilder compoundMessage = new StringBuilder();
519
                        String[] messageArgs = new String[]{panelInitWorkspace.getWorkspaceName()};
520

  
521
                        compoundMessage.append(i18nManager.getTranslation(
522
                                message,
523
                                messageArgs
524
                        ));
525

  
526
                        ThreadSafeDialogsManager dialogsManager = ToolsSwingLocator.getThreadSafeDialogsManager();
527
                        dialogsManager.messageDialog(
528
                                compoundMessage.toString(),
529
                                i18nManager.getTranslation("_VCS_Initialize_workingcopy"),
530
                                JOptionPane.WARNING_MESSAGE
531
                        );
532
                    }
533

  
534
                    break;
535

  
536
            }
537
        });
538
        dialogInitWorkspace.show(WindowManager.MODE.DIALOG);
539
    }
540

  
541
    public VCSGisWorkspace getWorkspace() {
542
        return this.workspacePicker.get();
543
    }
544

  
545
    private void doReloadTablesInfo() {
546
        if (notInSwingThreadInvokeLater(() -> { doReloadTablesInfo(); })) {
547
            return;
548
        }
549

  
550
        I18nManager i18n = ToolsLocator.getI18nManager();
551

  
552
        try {
553
            Collection<VCSGisEntity> entities = this.entitySelector.getEntities();
554
            for (VCSGisEntity entity : entities) {
555
                if (entity instanceof VCSGisWorkspaceEntity) {
556
                    JDBCStoreParameters parameters = getWorkspace().getExplorer().get(entity.getEntityName());
557
                    TableInfo tableInfo = new VCSGisTableInfo(entity, parameters, this.requireGeometry(), false);
558
                    if(StringUtils.isNotBlank(entity.getLabel()) ) {
559
                        tableInfo.setDocumentName(entity.getLabel());
560
                    }
561
                    tableInfo.setProperty("entity", entity);
562
                    this.tablesInfo.put(tableInfo.getId(), tableInfo);
563
                }
564
            }
565

  
566
        } catch (Exception e) {
567
            LOGGER.warn("_Cant_update_layers_list", e);
568
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
569
            dialogs.messageDialog(
570
                    i18n.getTranslation("_Cant_update_layers_list") + "\n" + e.getMessage(),
571
                    i18n.getTranslation("_Add_layer"),
572
                    JOptionPane.WARNING_MESSAGE
573
            );
574
        }
575
    }
576

  
577
    private void doCheckout() {
578
        VCSGisWorkspace workspace = getWorkspace();
579
        if (workspace == null) {
580
            return;
581
        }
582
        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
583
        I18nManager i18n = ToolsLocator.getI18nManager();
584
        VCSGisEntity rEntity = this.entitySelector.getSelectedEntity();
585
        if(rEntity== null || rEntity instanceof VCSGisWorkspaceEntity){
586
            return;
587
        }
588
        final String entityName = rEntity.getEntityName();
589
        Thread task = new Thread(() -> {
590
            try {
591
                processing = true;
592
                doUpdateComponents();
593

  
594
                showMessage(i18n.getTranslation("_Checking_out"));
595
                int res = workspace.checkout(
596
                        entityName,
597
                        null,
598
                        this.getTaskStatusController().getSimpleTaskStatus()
599
                );
600
                if (res != ERR_OK) {
601
                    LOGGER.warn("_Cant_checkout_table");
602
                    dialogs.messageDialog(
603
                            i18n.getTranslation("_Cant_checkout_table") + "\n" + workspace.getErrorMessage(res),
604
                            i18n.getTranslation("_Add_table"),
605
                            JOptionPane.WARNING_MESSAGE
606
                    );
607
                    return;
608
                }
609
                downloadAndRegisterResources(entityName);
610
                showMessage(i18n.getTranslation("_Checkout_finished"));
611
                JDBCStoreParameters parameters = getWorkspace().getExplorer().get(entityName);
612
                TableInfo tableInfo = new VCSGisTableInfo(workspace.getWorkspaceEntity(entityName), parameters, this.requireGeometry(), false);
613
                this.tablesInfo.put(tableInfo.getId(), tableInfo);
614
                doPostCheckout(entityName);
615
            } catch (Exception e) {
616
                LOGGER.warn("_Cant_add_table");
617
                dialogs.messageDialog(
618
                        i18n.getTranslation("_Cant_add_table") + "\n" + e.getMessage(),
619
                        i18n.getTranslation("_Add_table"),
620
                        JOptionPane.WARNING_MESSAGE
621
                );
622
            } finally {
623
                processing = false;
624
                doUpdateComponents();
625
            }
626
        }, "VCSGisAddTableCheckout");
627
        processing = true;
628
        doUpdateComponents();
629
        task.start();
630
    }
631
    
632
    private void doPostCheckout(String entityName) {
633
        if (notInSwingThreadInvokeLater(() -> { doPostCheckout(entityName); })) {
634
            return;
635
        }
636
        VCSGisWorkspace workspace = getWorkspace();
637
        if (workspace == null) {
638
            return;
639
        }
640

  
641
        doChangeWorkspace();
642
        this.entitySelector.setSelectedEntity(workspace.getWorkspaceEntity(entityName));
643
        doChangeTableSelected();
644
    }
645

  
646
    private void showMessage(String message) {
647
        if( notInSwingThreadInvokeLater(() -> {showMessage(message);}) ) {
648
            return;
649
        }
650
        this.view.lblStatusMessages.setText(message);
651
    }
652
    
653
        public boolean isProcessing() {
654
        return processing;
655
    }
656
    
657
    public void setVisibleStatus(boolean visible) {
658
        if( notInSwingThreadInvokeLater(() -> {setVisibleStatus(visible);}) ) {
659
            return;
660
        }
661
        this.view.lblStatusTitle.setVisible(visible);
662
        this.view.pbStatus.setVisible(visible);
663
        this.view.lblStatusMessages.setVisible(true);
664
    }
665

  
666
    public TaskStatusController getTaskStatusController() {
667
        return this.taskStatusController;
668
    }
669

  
670
    public static boolean notInSwingThreadInvokeLater(Runnable x) {
671
        if( SwingUtilities.isEventDispatchThread() ) {
672
            return false;
673
        }
674
        SwingUtilities.invokeLater(x);
675
        return true;
676
    }
677
    
678
    protected static class WizardVCSGisViewExtended extends AbstractWizardVCSGisView {
679

  
680
        @Override
681
        public ImageIcon loadImage(String imageName) {
682
            String name = FilenameUtils.getBaseName(imageName);
683
            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
684
            if (theme.exists(name)) {
685
                return theme.get(name);
686
            }
687
            URL url = WizardVCSGisViewExtended.class.getResource("images/" + name + ".png");
688
            if (url == null) {
689
                return null;
690
            }
691
            return new ImageIcon(url);
692
        }
693
    }
694

  
695
    private String toHTML(String s) {
696
      s = StringUtils.replace(s, "\n", "<br>");
697
      s = StringUtils.replace(s, "<html>", "");
698
      s = StringUtils.replace(s, "</html>", "");
699
      s = "<html>"+s+"</html>";
700
      return s;
701
    }
702

  
703
    protected void downloadAndRegisterResources(String tableName) {
704
        VCSGisWorkspace workspace = getWorkspace();
705
        VCSGisWorkspaceEntity entity = workspace.getWorkspaceEntityByName(tableName);
706
        if(entity == null){
707
            return;
708
        }
709
        VCSGisEntity lEntity = workspace.getEntity(entity.getEntityCode());
710
        String resources = lEntity.getResources();
711
        if (StringUtils.isNotBlank(resources)) {
712
            try {
713
                if (!workspace.existsInWorkspace(resources)) {
714
                    workspace.checkout(
715
                            resources,
716
                            null
717
                    );
718
                }
719
            } catch (Exception e) {
720
                LOGGER.warn("Can't checkout resources table '" + resources + "'", e);
721
            }
722
            workspace.getExplorer().setCustomResources(entity.getEntityName(), resources,true);
723
        }
724

  
725
    }
726

  
727
    @Override
728
    public void setMapContext(MapContext mapContext) {
729
        super.setMapContext(mapContext);
730
        this.tableInfoController.setMapContext(mapContext);
731
    }
732

  
733
    protected Function<VCSGisEntity,String> getLabelEntityFormatter() {
734
        return null;
735
                
736
    }
737
    
738
    protected boolean getCheckScale() {
739
        return this.view.chkCheckScale.isSelected();
740
    }
741
    
742
    protected boolean getAddToCWhenLoadingAll() {
743
        return this.view.chkAddToCWhenLoadingAll.isSelected();
744
    }
745
    
746
    protected String getCategory(VCSGisEntity entity) {
747
        return this.entitySelector.getCategory(entity);
748
    }
749
}
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.63/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/java/org/gvsig/vcsgis/app/addlayer/LayersWithGroup.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.vcsgis.app.addlayer;
7

  
8
import java.util.ArrayList;
9
import java.util.Collection;
10
import java.util.Iterator;
11
import java.util.LinkedHashMap;
12
import java.util.List;
13
import java.util.Map;
14
import org.apache.commons.lang.StringUtils;
15
import org.gvsig.fmap.dal.DataStoreParameters;
16
import org.gvsig.fmap.dal.exception.DataException;
17
import org.gvsig.fmap.dal.feature.FeatureStore;
18
import org.gvsig.fmap.mapcontext.MapContext;
19
import org.gvsig.fmap.mapcontext.layers.FLayer;
20
import org.gvsig.fmap.mapcontext.layers.FLayers;
21
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
22
import org.gvsig.fmap.mapcontrol.MapControl;
23
import org.gvsig.tools.util.IsEmpty;
24

  
25
/**
26
 *
27
 * @author jjdelcerro
28
 */
29
public class LayersWithGroup implements Iterable<FLayer>, IsEmpty {
30
    
31
    //        private final VCSGisWorkspace workspace;
32
    private final Map<String, FLayer> treelayers;
33
    private final List<FLayer> layers;
34
    private final MapContext mapContext;
35

  
36
    public LayersWithGroup(MapContext mapContext) {
37
        //            this.workspace = workspace;
38
        this.treelayers = new LinkedHashMap<>();
39
        this.layers = new ArrayList<>();
40
        this.mapContext = mapContext;
41
    }
42

  
43
    public synchronized void add(String groupName, String layerName, FLayer layer) {
44
//        layer.setVisible(true);
45
        layers.add(layer);
46
        if (StringUtils.isBlank(layerName)) {
47
            treelayers.put(layer.getName(), layer);
48
            return;
49
        }
50
        if (StringUtils.isBlank(groupName)) {
51
            treelayers.put(layerName, layer);
52
            return;
53
        }
54
        FLayers group = (FLayers) treelayers.get("$$" + groupName);
55
        if (group == null) {
56
            group = new FLayers();
57
            group.setMapContext(this.mapContext);
58
            group.setName(groupName);
59
            group.setParentLayer(mapContext.getLayers());
60
            treelayers.put("$$" + groupName, group);
61
        }
62
        group.add(layer);
63
    }
64

  
65
    public synchronized void updateMapContext(boolean maintainStructureInToC, boolean replaceLayerIfExists) {
66
        this.updateMapControl(null, maintainStructureInToC, replaceLayerIfExists);
67
    }
68
    
69
    public static final int UPDATE_MODE_REPLACE_LAYER_IF_EXISTS = 0;
70
    public static final int UPDATE_MODE_ADD_DUPLICATES = 1;
71
    public static final int UPDATE_MODE_SKIP_DUPLICATES = 2;
72
    
73
    public synchronized void updateMapControl(MapControl mapControl, boolean maintainStructureInToC, boolean replaceLayerIfExists) {
74
        updateMapControl(mapControl, maintainStructureInToC, UPDATE_MODE_REPLACE_LAYER_IF_EXISTS);
75
    }
76
    
77
    public synchronized void updateMapControl(MapControl mapControl, boolean maintainStructureInToC, int updateMode) {
78
        mapContext.beginAtomicEvent();
79
        try {
80
            if (maintainStructureInToC) {
81
                FLayers layersToC = mapContext.getLayers();
82
                for (FLayer aLayer : this) {
83
                    if (aLayer == null) {
84
                        continue;
85
                    }
86
                    if (aLayer instanceof FLayers) {
87
                        FLayers group = (FLayers) aLayer;
88
                        FLayer groupToC = layersToC.getLayer(aLayer.getName());
89
                        if (groupToC instanceof FLayers) {
90
                            for (FLayer l : group) {
91
                                FLyrVect ltoc = getLayer((FLayers)groupToC, (FLyrVect) l);
92
                                switch(updateMode) {
93
                                    case UPDATE_MODE_REPLACE_LAYER_IF_EXISTS:
94
                                        if( ltoc == null ) {
95
                                            ((FLayers) groupToC).add(l);
96
                                        } else { 
97
                                            refreshLayer(ltoc);
98
                                        }
99
                                        break;
100
                                    case UPDATE_MODE_ADD_DUPLICATES:
101
                                        ((FLayers) groupToC).add(l);
102
                                        break;
103
                                    case UPDATE_MODE_SKIP_DUPLICATES:
104
                                        if( ltoc == null ) {
105
                                            ((FLayers) groupToC).add(l);
106
                                        }
107
                                        break;
108
                                }
109
//                                if( replaceLayerIfExists ) {
110
//                                    FLyrVect ltoc = getLayer((FLayers)groupToC, (FLyrVect) l);
111
//                                    if( ltoc != null ) {
112
//                                        refreshLayer(ltoc);
113
//                                        continue;
114
//                                    }
115
//                                }
116
//                                ((FLayers) groupToC).add(l);
117
                            }
118
                        } else {
119
                            group.setVisible(true);
120
                            addLayer(mapControl, group);
121
                        }
122
                    } else {
123
                        FLyrVect ltoc = getLayer(layersToC, (FLyrVect) aLayer);
124
                        switch(updateMode) {
125
                            case UPDATE_MODE_REPLACE_LAYER_IF_EXISTS:
126
                                if( ltoc == null ) {
127
                                    aLayer.setVisible(true);
128
                                    addLayer(mapControl, aLayer);
129
                                } else {
130
                                    refreshLayer(ltoc);
131
                                }
132
                                break;
133
                            case UPDATE_MODE_ADD_DUPLICATES:
134
                                aLayer.setVisible(true);
135
                                addLayer(mapControl, aLayer);
136
                                break;
137
                            case UPDATE_MODE_SKIP_DUPLICATES:
138
                                if( ltoc == null ) {
139
                                    aLayer.setVisible(true);
140
                                    addLayer(mapControl, aLayer);
141
                                }
142
                                break;
143
                        }
144
//                        if( replaceLayerIfExists ) {
145
//                            FLyrVect ltoc = getLayer(layersToC, (FLyrVect) aLayer);
146
//                            if( ltoc != null ) {
147
//                                refreshLayer(ltoc);
148
//                                continue;
149
//                            }
150
//                        }
151
//                        aLayer.setVisible(true);
152
//                        addLayer(mapControl, aLayer);
153
                    }
154
                }
155
            } else {
156
                for (FLayer aLayer : this.allLayers()) {
157
                    addLayer(mapControl, aLayer);
158
                }
159
            }
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff