Revision 3747

View differences:

org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/pom.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2

  
3
<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">
4
	<modelVersion>4.0.0</modelVersion>
5
	<groupId>org.gvsig</groupId>
6
	<artifactId>org.gvsig.vectorediting.app</artifactId>
7
	<packaging>pom</packaging>
8
	<version>1.0.223</version>
9
	<name>${project.artifactId}</name>
10
	<description>This plugin add to gvSIG a tool to show Vectorediting messages</description>
11
	<parent>
12
		<groupId>org.gvsig</groupId>
13
		<artifactId>org.gvsig.vectorediting</artifactId>
14
		<version>1.0.223</version>
15
	</parent>
16
	<dependencyManagement>
17
		<dependencies>
18
		
19
		</dependencies>
20
	</dependencyManagement>
21

  
22
	<modules>
23
		<module>org.gvsig.vectorediting.app.mainplugin</module>
24
	</modules>
25

  
26
</project>
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/maven-howto.rst
1

  
2
==================================
3
Usefull maven "howtos" and FAQs
4
==================================
5

  
6
.. contents::
7

  
8
How to reduce the process of "install" to run as fast as possible.
9
-------------------------------------------------------------------
10

  
11
Can reduce install execution skiping test execution and compilation,
12
javadoc generation, test signature checking, license checking, and 
13
attach sources in jar.
14

  
15
  mvn  -Danimal.sniffer.skip=true -Dmaven.test.skip=true -Dsource.skip=true -DskipTests -Dmaven.javadoc.skip=true install
16

  
17
How to increment the build number of gvSIG plugins
18
----------------------------------------------------
19

  
20
To increase the build number of gvSIG plugins, yo can do:
21

  
22
  mvn -Dincrease-build-number process-sources
23
  
24
How to deploy a package of a gvSIG plugin
25
--------------------------------------------
26

  
27
Yo can deploy the package of a gvSIG plugin with:
28

  
29
  mvn -Ddeploy-package -Duser=USER -Dpassword=PASSWORD install
30

  
31
Notes:
32
- Require that the gvsig.package.info.poolURL property that this set to the correct value.
33
- The process uses WEBDAV to upload the packages, gvspkg and gvspki, and require 
34
  access to write in the location specified by gvsig.package.info.poolURL
35
- If "user" or "password" is not present, the process ask its each time it need.
36
- If folder specified in  gvsig.package.info.poolURL does not exist, the process try to create it.
37
- The process create a file "addon-request.txt" in the target with the information to 
38
  add to the ticket to request the update of the package in the main repository of
39
  packages of gvSIG.
40

  
41
How to skip attach sources in jar from command line
42
------------------------------------------------------
43

  
44
If in the project is enabled by default the generation of jar whith 
45
the sources of the project, you can disable this setting the property
46
"source.skip" to true in the command line::
47

  
48
    mvn -Dsource.skip=true  install
49

  
50
How to skip test compile from command line
51
--------------------------------------------
52

  
53
You can skip the compilation of test setting the propety "maven.test.skip" 
54
to true in the command line::
55

  
56
    mvn -Dmaven.test.skip=true  install
57

  
58

  
59
How to skip test execution from command line
60
----------------------------------------------
61

  
62
You can skip the tests execution setting the propety "skipTests" to true
63
in the command line::
64

  
65
    mvn -DskipTests install
66

  
67
How to skip javadoc generation from command line
68
--------------------------------------------------
69

  
70
You can skip the javadoc generation setting the property
71
"maven.javadoc.skip" to true in the command line::
72

  
73
    mvn -Dmaven.javadoc.skip=true  install
74

  
75
How to skip test signature cheks from command line
76
---------------------------------------------------
77

  
78
You can skip the signature check setting the property
79
"animal.sniffer.skip" to true in the command line::
80

  
81
    mvn -Danimal.sniffer.skip=true install
82

  
83
How to install a project without install submodules
84
----------------------------------------------------------
85

  
86
To install a project with submodules and only install the
87
parent project without submodules use the option "--non-recursive" ::
88

  
89
    mvn --non-recursive install
90

  
91
  
92
How to skip test compilation
93
--------------------------------
94

  
95
To configure a project to don't run the compilation
96
of test you can add to this pom the next configuration of
97
the plugin "maven-compiler-plugin"::
98

  
99
  <build>
100
    <plugins>
101
      ...
102
      <plugin>
103
        <!-- Skip compilation tests -->
104
        <groupId>org.apache.maven.plugins</groupId>
105
        <artifactId>maven-compiler-plugin</artifactId>
106
        <executions>
107
          <execution>
108
            <id>default-testCompile</id>
109
            <phase>process-test-sources</phase>
110
            <goals>
111
              <goal>testCompile</goal>
112
            </goals>
113
            <configuration>
114
              <skip>true</skip>
115
            </configuration>
116
          </execution>
117
        </executions>
118
      </plugin>
119
      ...
120
    </plugins>
121
  </build>
122

  
123
Skip test execution
124
----------------------
125

  
126
To configure a project to don't run the execution
127
of test you can add to this pom the next configuration of
128
the plugin "maven-surefire-plugin"::
129

  
130

  
131
  <build>
132
    <plugins>
133
      ...
134
      <plugin>
135
        <!-- Skip test execution -->
136
        <groupId>org.apache.maven.plugins</groupId>
137
        <artifactId>maven-surefire-plugin</artifactId>
138
        <configuration>
139
          <skipTests>true</skipTests>
140
        </configuration>
141
      </plugin>
142
      ...
143
    </plugins>
144
  </build>
145

  
146
Continue on test failure
147
-----------------------------
148

  
149
You can configure a project to continue on test execution 
150
failure. To do this add to the pom of the project the next 
151
configuration of plugin "maven-surefire-plugin" ::
152

  
153
  <build>
154
    <plugins>
155
      ...
156
      <plugin>
157
        <!-- Continue on test failure -->
158
        <groupId>org.apache.maven.plugins</groupId>
159
        <artifactId>maven-surefire-plugin</artifactId>
160
        <configuration>
161
          <testFailureIgnore>true</testFailureIgnore>
162
        </configuration>
163
      </plugin>
164
      ...
165
    </plugins>
166
  </build>
167

  
168

  
169
Set java compatibility
170
--------------------------
171

  
172
To set the compatibility with a java version  add to the 
173
pom of the project the next configuration of plugin 
174
"maven-compiler-plugin" ::
175

  
176
  <build>
177
    <plugins>
178
      ...
179
      <plugin>
180
          <!-- Set java compatibility -->
181
          <groupId>org.apache.maven.plugins</groupId>
182
          <artifactId>maven-compiler-plugin</artifactId>
183
          <configuration>
184
              <source>1.5</source>
185
              <target>1.5</target>
186
              <encoding>ISO-8859-1</encoding>
187
          </configuration>
188
      </plugin>
189
      ...
190
    </plugins>
191
  </build>
192

  
193
Packaging tests in jar
194
------------------------
195

  
196
Test classes do not packaging in jar by default.
197
To packing add to pom::
198

  
199
  <build>
200
    <plugins>
201
      ...
202
      <plugin>
203
        <!-- Packaging tests in jar -->
204
        <groupId>org.apache.maven.plugins</groupId>
205
        <artifactId>maven-jar-plugin</artifactId>
206
        <executions>
207
          <!-- Generates a jar file only with the test classes -->
208
          <execution>
209
            <goals>
210
              <goal>test-jar</goal>
211
            </goals>
212
            <configuration>
213
              <includes>
214
                <include>**/**</include>
215
              </includes>
216
            </configuration>
217
          </execution>
218
        </executions>
219
      </plugin> 
220
      ...
221
    </plugins>
222
  </build>
223

  
224
How to set a dependency with tests jar
225
-----------------------------------------
226

  
227
You can set a dependency with a test jar adding to
228
the declaration of the dependency the scope of
229
test and the type of "test-jar"::
230

  
231
  <dependency>
232
      <groupId>...</groupId>
233
      <artifactId>...</artifactId>
234
      <type>test-jar</type>
235
      <scope>test</scope>
236
  </dependency>
237

  
238
How use ant in maven
239
-------------------------
240

  
241
You can use ant embed in the pom of you project.
242
To do this use::
243

  
244
  <plugin>
245
    <artifactId>maven-antrun-plugin</artifactId>
246
    <version>1.7</version>
247
    <executions>
248
      <execution>
249
        <phase>generate-sources</phase>
250
        <configuration>
251
          <target>
252
            <echo>Hello world!</echo>
253
          </target>
254
        </configuration>
255
        <goals>
256
          <goal>run</goal>
257
        </goals>
258
      </execution>
259
    </executions>
260
  </plugin>
261

  
262
Fail when execute "mvn deploy" with "No connector available"
263
-------------------------------------------------------------
264

  
265
When execute a "mvn deploy" fail with the error::
266

  
267
  [INFO] ------------------------------------------------------------------------
268
  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy 
269
    (default-deploy) on project org.gvsig.desktop: Failed to deploy artifacts/metadata: 
270
    No connector available to access repository gvsig-repository (dav:https://devel.gvsig.org/m2repo/j2se) 
271
    of type default using the available factories WagonRepositoryConnectorFactory -> [Help 1]
272
  [ERROR] 
273
  
274
This happens to be configured the webdav wagon as an extension in the section "build"::
275

  
276
  ...
277
  <build>
278
    <extensions>
279
        <extension>
280
            <groupId>org.apache.maven.wagon</groupId>
281
            <artifactId>wagon-webdav-jackrabbit</artifactId>
282
            <version>1.0-beta-7</version>
283
        </extension>
284
    </extensions>
285
  ...
286

  
287
Fail when execute "mvn release: prepare" with "svn command failed... Could not authenticate"
288
------------------------------------------------------------------------------------------------
289

  
290
When running "mvn release: prepare" updates poms, compiles, and then
291
fails with the following error ::
292

  
293
  [INFO] ------------------------------------------------------------------------
294
  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.1:prepare 
295
    (default-cli) on project org.gvsig.desktop: Unable to commit files
296
  [ERROR] Provider message:
297
  [ERROR] The svn command failed.
298
  [ERROR] Command output:
299
  [ERROR] svn: Commit failed (details follow):
300
  [ERROR] svn: MKACTIVITY of '/svn/gvsig-desktop/!svn/act/931a27bc-57e8-45d9-adcd-5a2cf54a7045': 
301
    authorization failed: Could not authenticate to server: rejected Basic challenge (https://devel.gvsig.org)
302
  [ERROR] -> [Help 1]
303
  [ERROR] 
304
  [ERROR]
305

  
306
Apparently maven in linux system use the svn of system and if you're not
307
authenticated when trying to access to the repository, svn fails.
308

  
309
This is solved by executing a commit from the command line on
310
some file of the project (only if you have not enabled the option 
311
"store-passwords = no" in $ HOME / .subversion / config). For example, you 
312
can add or remove at the end of "pom.xml" a blank line and then run 
313
from the command line ::
314

  
315
  svn ci -m "" pom.xml
316
  
317
Another option that works on Windows in declaring the user and password in the command:
318

  
319
mvn release:prepare -Dusername=[username] -Dpassword=[password]
320

  
321

  
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/buildNumber.properties
1
#Fri Nov 25 01:35:14 CET 2022
2
buildNumber=234
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.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.vectorediting.lib.api</include>
44
        <include>org.gvsig:org.gvsig.vectorediting.swing.api</include>
45
        <include>org.gvsig:org.gvsig.vectorediting.lib.impl</include>
46
        <include>org.gvsig:org.gvsig.vectorediting.swing.impl</include>
47
        <include>org.gvsig:org.gvsig.vectorediting.lib.spi</include>
48
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.point</include>
49
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.circlecr</include>
50
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.circle3p</include>
51
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.polyline</include>
52
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.internalpolygon</include>
53
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.line</include>
54
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.arc</include>
55
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.ellipse</include>
56
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.regularpolygon</include>
57
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.rectangle</include>
58
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.spline</include>
59
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.explode</include>
60
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.move</include>
61
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.rotate</include>
62
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.duplicate</include>
63
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.scale</include>
64
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.splitline</include>
65
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.simplify</include>
66
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.multipoint</include>
67
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.autopolygon</include>
68
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.join</include>
69
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.stretch</include>
70
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.extendline</include>
71
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.split</include>
72
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.smoothline</include>
73
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.trimline</include>
74
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.rectangularmatrix</include>
75
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.polarmatrix</include>
76
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.editvertex</include>
77
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.remove</include>
78
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.converttopolyline</include>
79
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.reversedirection</include>
80
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.align</include>
81
        <include>org.gvsig:org.gvsig.vectorediting.lib.prov.chamfer</include>
82
      </includes>
83
    </dependencySet>
84
  </dependencySets>
85

  
86
</assembly>
87

  
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/StartEditingTocMenuEntry.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 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, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.app.project.documents.view.toc.actions;
25

  
26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28

  
29
import org.gvsig.andami.PluginServices;
30
import org.gvsig.andami.plugins.IExtension;
31
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
32
import org.gvsig.app.project.documents.view.toc.ITocItem;
33
import org.gvsig.fmap.mapcontext.layers.FLayer;
34
import org.gvsig.vectorediting.app.mainplugin.EditingExtension;
35

  
36

  
37
public class StartEditingTocMenuEntry extends AbstractTocContextMenuAction {
38

  
39
    public static final String EXTENSION_POINT_NAME = "StartEditing";
40

  
41
    private IExtension ext = null;
42

  
43
    private static Logger logger =
44
        LoggerFactory.getLogger(StartEditingTocMenuEntry.class);
45

  
46
	public String getGroup() {
47
		return "vectorEditing";
48
	}
49

  
50
	public int getGroupOrder() {
51
		return 0;
52
	}
53

  
54
	public int getOrder() {
55
		return 0;
56
	}
57

  
58
	public String getText() {
59
		return PluginServices.getText(this, "start_editing");
60
	}
61

  
62
	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
63
	    return ((EditingExtension)getExtension()).isEnabled("start-editing");
64
	}
65

  
66
   public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
67
       return ((EditingExtension)getExtension()).isVisible("start-editing");
68
    }
69

  
70

  
71
	public void execute(ITocItem item, FLayer[] selItems) {
72
	       getExtension().execute("start-editing");
73
	}
74

  
75
    private IExtension getExtension() {
76

  
77
        if (ext == null) {
78
            ext = PluginServices.getExtension(EditingExtension.class);
79
        }
80
        return ext;
81
    }
82

  
83
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/EndEditingTocMenuEntry.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 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, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.app.project.documents.view.toc.actions;
25

  
26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28

  
29
import org.gvsig.andami.PluginServices;
30
import org.gvsig.andami.plugins.IExtension;
31
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
32
import org.gvsig.app.project.documents.view.toc.ITocItem;
33
import org.gvsig.fmap.mapcontext.layers.FLayer;
34
import org.gvsig.vectorediting.app.mainplugin.EditingExtension;
35

  
36

  
37
public class EndEditingTocMenuEntry extends AbstractTocContextMenuAction {
38

  
39
    public static final String EXTENSION_POINT_NAME = "EndEditing";
40

  
41
    private IExtension ext = null;
42

  
43
    private static Logger logger =
44
        LoggerFactory.getLogger(EndEditingTocMenuEntry.class);
45

  
46
	public String getGroup() {
47
		return "vectorEditing";
48
	}
49

  
50
	public int getGroupOrder() {
51
		return 0;
52
	}
53

  
54
	public int getOrder() {
55
		return 1;
56
	}
57

  
58
	public String getText() {
59
		return PluginServices.getText(this, "end_editing");
60
	}
61

  
62
	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
63
	    return ((EditingExtension)getExtension()).isEnabled("end-editing");
64
	}
65

  
66
   public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
67
        return ((EditingExtension)getExtension()).isVisible("end-editing");
68
    }
69

  
70

  
71
	public void execute(ITocItem item, FLayer[] selItems) {
72
	       getExtension().execute("end-editing");
73
	}
74

  
75
    private IExtension getExtension() {
76

  
77
        if (ext == null) {
78
            ext = PluginServices.getExtension(EditingExtension.class);
79
        }
80
        return ext;
81
    }
82

  
83
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/MultilayerFinishEditingPanel.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.vectorediting.app.mainplugin;
7

  
8
import java.awt.Dimension;
9
import java.awt.GridBagConstraints;
10
import java.awt.GridBagLayout;
11
import java.awt.Insets;
12
import java.awt.event.ActionEvent;
13
import java.awt.event.ItemEvent;
14
import java.util.ArrayList;
15
import java.util.Iterator;
16
import java.util.List;
17
import javax.swing.DefaultComboBoxModel;
18
import javax.swing.JButton;
19
import javax.swing.JComponent;
20
import javax.swing.JLabel;
21
import javax.swing.JPanel;
22
import javax.swing.JScrollPane;
23
import org.gvsig.andami.PluginServices;
24
import org.gvsig.export.ExportLocator;
25
import org.gvsig.export.ExportManager;
26
import org.gvsig.export.ExportProcess;
27
import org.gvsig.export.swing.ExportSwingLocator;
28
import org.gvsig.export.swing.ExportSwingManager;
29
import org.gvsig.export.swing.JExportProcessPanel;
30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.mapcontext.MapContext;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
34
import org.gvsig.tools.ToolsLocator;
35
import org.gvsig.tools.i18n.I18nManager;
36
import org.gvsig.tools.swing.api.Component;
37
import org.gvsig.tools.swing.api.DropDown;
38
import org.gvsig.tools.swing.api.ToolsSwingLocator;
39
import org.gvsig.tools.swing.api.ToolsSwingManager;
40
import org.gvsig.tools.swing.api.windowmanager.Dialog;
41
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
42
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
43
import org.gvsig.tools.util.LabeledValue;
44
import org.gvsig.tools.util.LabeledValueImpl;
45
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
47

  
48
/**
49
 *
50
 * @author jovivas
51
 */
52
public class MultilayerFinishEditingPanel extends JPanel implements Component {
53
    
54
    private static final int OPTION_SAVE = 0;
55
    private static final int OPTION_DISMISS = 1;
56
    private static final int OPTION_CONTINUE = 2;
57
    private static final int OPTION_EXPORT = 3;
58
    
59
    private static final Logger LOGGER = LoggerFactory.getLogger(EditingExtension.class);
60
    private Dialog dialog;
61
    
62
    private static class Row {
63

  
64
        private final FLyrVect layer;
65
        private final DropDown dropDownOptions;
66
        private final JButton jButtonExport;
67
        private final LabeledValue[] options;
68

  
69
        I18nManager i18n = ToolsLocator.getI18nManager();
70
        private final JLabel dropDownComponent;
71
        private final MultilayerFinishEditingPanel panel;
72
//        private final JComboBox comboBoxComponent;
73

  
74
        @SuppressWarnings("OverridableMethodCallInConstructor")
75
        public Row(MultilayerFinishEditingPanel panel, FLyrVect layer) {
76
            this.layer = layer;
77
            this.panel = panel;
78

  
79
            options = new LabeledValue[]{
80
                new LabeledValueImpl(i18n.getTranslation("_save"),OPTION_SAVE),
81
                new LabeledValueImpl(i18n.getTranslation("_dismiss"), OPTION_DISMISS),
82
                new LabeledValueImpl(i18n.getTranslation("_continue"), OPTION_CONTINUE),
83
                new LabeledValueImpl(i18n.getTranslation("_export"), OPTION_EXPORT)};
84

  
85
            DefaultComboBoxModel modelJComboBoxOptions = new DefaultComboBoxModel();
86
            for (LabeledValue option : options) {
87
                modelJComboBoxOptions.addElement(option);
88
            }
89
            
90
            ToolsSwingManager toolSwingmanager = ToolsSwingLocator.getToolsSwingManager();
91
            this.dropDownComponent = new JLabel();
92
//            this.comboBoxComponent = new JComboBox();
93
            this.dropDownOptions = toolSwingmanager.createDropDown(dropDownComponent);
94
            this.dropDownOptions.setModel(modelJComboBoxOptions);
95
//            this.comboBoxComponent.setModel(modelJComboBoxOptions);
96
            if (this.allowSave()) {
97
                this.dropDownOptions.setSelectedIndex(OPTION_SAVE); 
98
            } else {
99
                this.dropDownOptions.setSelectedIndex(OPTION_EXPORT);                
100
            }
101
//            if (this.layer.getFeatureStore().allowWrite()) {
102
//                this.comboBoxComponent.setSelectedIndex(OPTION_SAVE); 
103
//            } else {
104
//                this.comboBoxComponent.setSelectedIndex(OPTION_EXPORT);                
105
//            }
106
            this.dropDownOptions.setVisibleDropdownArrow(true);
107

  
108
            this.jButtonExport = new JButton(i18n.getTranslation("_export"));
109
            
110
            this.jButtonExport.addActionListener((ActionEvent e) -> {
111
                WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
112
                ExportManager exportManager = ExportLocator.getManager();
113
                ExportSwingManager exportSwingManager = ExportSwingLocator.getSwingManager();
114
                ExportProcess process = exportManager.createProcess(layer.getFeatureStore());
115
                JExportProcessPanel panel1 = exportSwingManager.createJExportProcessPanel(process);
116
                windowManager.showWindow(panel1.asJComponent(), "_export", WindowManager.MODE.WINDOW);
117
                MultilayerFinishEditingPanel.Row.this.dropDownOptions.setSelectedIndex(OPTION_DISMISS);
118
                MultilayerFinishEditingPanel.Row.this.panel.updateEnableOkButton();
119
            });
120
            
121
            this.dropDownOptions.addItemListener((ItemEvent e) -> {
122
                panel.updateEnableOkButton();
123
            });
124
            
125
//            this.comboBoxComponent.addActionListener(new ActionListener() {
126
//                @Override
127
//                public void actionPerformed(ActionEvent e) {
128
//                    panel.updateEnableOkButton();
129
//                }
130
//            });  
131
        }
132

  
133
        public boolean allowSave() {
134
            return this.layer.getFeatureStore().allowWrite();
135
        }
136
        
137
        public FLyrVect getLayer() {
138
            return this.layer;
139
        }
140

  
141
        public JLabel getJLabel() {
142
            String layerName = this.layer.getName();
143
            JLabel layerNameJLabel = new JLabel(layerName);
144
            return layerNameJLabel;
145
        }
146

  
147
        public JComponent getJDropDown() {
148
            return this.dropDownOptions.asJComponent();
149
        }
150

  
151
        public JButton getJButton() {
152
            return this.jButtonExport;
153
        }
154

  
155
        public int getJComboBoxOption() {
156
            LabeledValue<Integer> optionSelected = (LabeledValue) this.dropDownOptions.getSelectedItem();
157
            return optionSelected.getValue();
158
        }
159
    }
160
    
161
    private final List<Row> rows;
162
    private final MapContext mapContext;
163

  
164
    public MultilayerFinishEditingPanel(MapContext mapContext) {
165
        this.rows = new ArrayList<>();
166
        this.mapContext = mapContext;
167
        this.initComponents();
168
    }
169

  
170
    private Row getRow(int rowIndex) {
171
        Row row = this.rows.get(rowIndex);
172
        return row;
173
    }
174

  
175
    public void addLayer(FLayer layer) {
176
        if (layer instanceof FLyrVect) {
177
            FLyrVect layerVect = (FLyrVect) layer;
178
            this.rows.add(new Row(this, layerVect));
179
        }
180
    }
181

  
182
    public void build() {
183
        this.removeAll();
184
        this.setLayout(new GridBagLayout());
185
        int rownum = 0;
186
        for (Row row : rows) {
187
            addComponent(rownum, 0, row.getJLabel());
188
            addComponent(rownum, 1, row.getJDropDown());
189
            addComponent(rownum, 2, row.getJButton());
190
            rownum++;
191
        }        
192
        GridBagConstraints c = new GridBagConstraints();
193
        c.fill = GridBagConstraints.BOTH;
194
        c.weighty = 0.9;
195
        c.weightx = 0.9;
196
        c.gridx = 1;
197
        c.gridy = rownum;
198
        this.add(new JLabel(""), c);
199
    }
200

  
201
    private void addComponent(int gridY, int gridX, JComponent component) {
202
        GridBagConstraints c = new GridBagConstraints();
203
        c.insets = new Insets(5, 5, 5, 5);
204
        c.fill = GridBagConstraints.HORIZONTAL;
205
        c.ipadx = 2;
206
        c.ipady = 2;
207
        c.gridx = gridX;
208
        c.gridy = gridY;
209
        this.add(component, c);
210
    }
211

  
212
    private void initComponents() {
213
        Iterator<FLayer> layers = mapContext.deepiterator();
214
        while (layers.hasNext()) {
215
            FLayer layer = layers.next();
216
            if (layer.isEditing()) {
217
                this.addLayer(layer);
218
            }
219
        }
220
        this.build();
221
    }
222

  
223
    private boolean checkExportLayers() {
224
        boolean exportLayer = false;
225
        for (int i = 0; i < this.rows.size(); i++) {
226
            Row row = this.getRow(i);
227
            if (row.getJComboBoxOption() == OPTION_EXPORT) {
228
                exportLayer = true;  
229
            }
230
        }
231
        return exportLayer;   
232
    }
233
    
234
    private void updateEnableOkButton(){
235
        if (this.dialog == null){
236
            return;
237
        }
238
        if (checkExportLayers()){
239
            dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
240
        }else {
241
            dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, true);
242
        }
243
    }
244
    
245
    public void setDialog (Dialog dialog ){
246
        this.dialog=dialog;
247
        updateEnableOkButton();
248
    }
249
    
250
//    private boolean checkDismissLayers() {
251
//        boolean dismissLayer = false;
252
////        List dismissLayers = new ArrayList();
253
//        for (int i = 0; i < this.rows.size(); i++) {
254
//            Row row = this.getRow(i);
255
//            if (row.getJComboBoxOption() == OPTION_DISMISS) {
256
//                dismissLayer = true;
257
////                dismissLayers.add(row.getLayer().getName());  
258
//            }
259
//        }
260
////        if (dismissLayer) {
261
////            I18nManager i18n = ToolsLocator.getI18nManager();
262
////            StringBuilder message = new StringBuilder();
263
////            message.append(i18n.getTranslation("_The_following_layers_dismiss_the_changes"));
264
////            for (int i = 0; i < dismissLayers.size(); i++) {
265
////                message.append(dismissLayers.get(i));
266
////                message.append('\n');
267
////            }
268
////            String title = i18n.getTranslation("_Dismiss_information");
269
////            ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(message.toString(),
270
////                    title,
271
////                    JOptionPane.OK_CANCEL_OPTION);   
272
////        }        
273
//        return dismissLayer;
274
//    }
275
    
276
    public void apply() {
277
        for (int i = 0; i < this.rows.size(); i++) {
278
            Row row = this.getRow(i);
279
            if (row.getJComboBoxOption() == OPTION_SAVE) {
280
                try {
281
                    row.getLayer().getFeatureStore().finishEditing();
282
                } catch (DataException ex) {
283
                LOGGER.error(PluginServices.getText(this, "Finish editing process has problems, save option"), ex);
284
                }
285
            } else if (row.getJComboBoxOption() == OPTION_DISMISS) {
286
                try {
287
                    row.getLayer().getFeatureStore().cancelEditing();
288
                } catch (DataException ex) {
289
                LOGGER.error(PluginServices.getText(this, "Finish editing process has problems, dismiss option"), ex);
290
                }
291
            }
292
        }
293
    }
294
    
295
    @Override
296
    public JComponent asJComponent() {
297
        ToolsSwingManager toolSwingmanager = ToolsSwingLocator.getToolsSwingManager();
298
        
299
        this.build();
300
        this.setPreferredSize(new Dimension(400, 200));
301
       
302
        JScrollPane scrollPanel = new JScrollPane();
303
        scrollPanel.setPreferredSize(new Dimension(420, 220));
304
        scrollPanel.setViewportView(this);
305
        
306
        toolSwingmanager.removeBorder(this);
307
        scrollPanel.setBorder(null);
308
        return scrollPanel;
309
    }
310
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.223/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/EditingToolOptionsPanel.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.vectorediting.app.mainplugin;
7

  
8
import java.awt.BorderLayout;
9
import java.awt.FlowLayout;
10
import java.awt.event.ActionEvent;
11
import java.util.ArrayList;
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.Objects;
16
import javax.json.JsonObject;
17
import javax.json.JsonValue;
18
import javax.swing.BoxLayout;
19
import javax.swing.ImageIcon;
20
import javax.swing.JButton;
21
import javax.swing.JLabel;
22
import javax.swing.JPanel;
23
import javax.swing.JTabbedPane;
24
import javax.swing.SwingConstants;
25
import org.apache.commons.lang.StringUtils;
26
import org.gvsig.featureform.swing.JFeatureForm;
27
import org.gvsig.fmap.dal.DALLocator;
28
import org.gvsig.fmap.dal.DataTypes;
29
import org.gvsig.fmap.dal.exception.DataException;
30
import org.gvsig.fmap.dal.feature.EditableFeature;
31
import org.gvsig.fmap.dal.feature.Feature;
32
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
33
import org.gvsig.fmap.dal.feature.FeatureStore;
34
import org.gvsig.fmap.dal.feature.FeatureType;
35
import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
36
import org.gvsig.fmap.dal.swing.DALSwingLocator;
37
import org.gvsig.fmap.dal.swing.DataSwingManager;
38
import org.gvsig.json.Json;
39
import org.gvsig.tools.ToolsLocator;
40
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
41
import org.gvsig.tools.bookmarksandhistory.BookmarksAndHistoryManager;
42
import org.gvsig.tools.dynform.DynFormDefinition;
43
import org.gvsig.tools.dynform.DynFormFieldDefinition;
44
import org.gvsig.tools.dynform.DynFormLocator;
45
import org.gvsig.tools.dynform.DynFormManager;
46
import org.gvsig.tools.dynform.JDynForm;
47
import org.gvsig.tools.dynform.JDynFormField;
48
import org.gvsig.tools.dynobject.DynClass;
49
import org.gvsig.tools.dynobject.DynField_v2;
50
import org.gvsig.tools.dynobject.DynObjectValueItem;
51
import org.gvsig.tools.dynobject.DynStruct;
52
import org.gvsig.tools.dynobject.DynStruct_v2;
53
import org.gvsig.tools.dynobject.Tags;
54
import org.gvsig.tools.i18n.I18nManager;
55
import org.gvsig.tools.observer.Notification;
56
import org.gvsig.tools.observer.Observable;
57
import org.gvsig.tools.observer.Observer;
58
import org.gvsig.tools.persistence.PersistenceManager;
59
import org.gvsig.tools.persistence.Persistent;
60
import org.gvsig.tools.persistence.PersistentState;
61
import org.gvsig.tools.persistence.exception.PersistenceException;
62
import org.gvsig.tools.swing.api.ToolsSwingLocator;
63
import org.gvsig.tools.swing.api.ToolsSwingUtils;
64
import org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue;
65
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_GETVALUE;
66
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
67
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
68
import org.gvsig.vectorediting.app.mainplugin.dynformfield.point.JDynFormFieldPointFactory;
69
import org.gvsig.vectorediting.lib.api.EditingService;
70
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
71
import org.gvsig.vectorediting.lib.api.EditingServiceParameterOptions;
72
import org.gvsig.vectorediting.lib.api.EditingServiceParameterOptions.ParameterOption;
73
import org.gvsig.vectorediting.swing.api.EditingContext;
74
import org.slf4j.Logger;
75
import org.slf4j.LoggerFactory;
76

  
77
/**
78
 *
79
 * @author gvSIG Team
80
 */
81
@SuppressWarnings("UseSpecificCatch")
82
class EditingToolOptionsPanel extends JPanel {
83
    private static final Logger LOGGER = LoggerFactory.getLogger(EditingToolOptionsPanel.class);
84

  
85
    private static final String BOOKMARKSANDHISTORY_NAME = "EditingToolOptionsPanel";
86
    
87
    private final EditingContext editingContext;
88
    private EditingService service;
89
    private JDynForm form;
90
    private DynStruct_v2 definition;
91
    private final Observer contextObserver = (Observable observable, Object notification) -> {
92
        doContextChanged((Notification) notification);
93
    };
94
    private final Observer serviceObserver = (Observable observable, Object notification) -> {
95
        doServiceChanged((Notification) notification);
96
    };
97
    private JFeatureForm featureform;
98
    private JButton applyDefaultValuesButton;
99
    private ImageIcon confirmIcon;
100
    
101
    private static final Map<String, JsonObject> defaultValues = new HashMap<>();
102
    private JTabbedPane tab;
103
    private static int currentTab = 0;
104
    private JButton acceptOptionsButton;
105

  
106
    @SuppressWarnings(value = {"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
107
    public EditingToolOptionsPanel(EditingContext editingContext) {
108
        this.setLayout(new BorderLayout());
109
        this.editingContext = editingContext;
110
        this.editingContext.addObserver(this.contextObserver);
111
        EditingService activeService = editingContext.getActiveService();
112
        this.set(activeService);
113
        this.put(activeService);
114
        this.setPreferredSize(ToolsSwingUtils.ensureRowsCols(this, 10, 30));
115
        try {
116
            this.confirmIcon = ToolsSwingLocator.getIconThemeManager()
117
                    .getCurrent().get("vector-editing-tooloptions-confirm");
118
        } catch(Exception ex) {
119
            
120
        }
121
    }
122

  
123
    private Bookmarks getBookmarks(FeatureStore store) {
124
        boolean useBookmarksByTable = false; // TODO: poner esto en preferencias de edicion.
125
        BookmarksAndHistoryManager manager = ToolsLocator.getBookmarksAndHistoryManager();
126
        
127
        if( useBookmarksByTable ) {
128
            return manager.getBookmarksGroup(BOOKMARKSANDHISTORY_NAME+"_"+store.getName());        
129
        } else {
130
            return manager.getBookmarksGroup(BOOKMARKSANDHISTORY_NAME);        
131
        }
132
        
133
    }
134
    
135
    private void set(EditingService service) {
136
        if(this.service == service && service != null) {
137
            return;
138
        }
139

  
140
        if (this.service != null) {
141
            this.service.deleteObserver(this.serviceObserver);
142
        }
143
        I18nManager i18n = ToolsLocator.getI18nManager();
144
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
145
        if(this.tab != null){
146
            currentTab = this.tab.getSelectedIndex();
147
        }
148
        if (service == null) {
149
            this.removeAll();
150
            this.tab = null;
151
            JLabel label = new JLabel(
152
                    "<html><center>" +
153
                    i18n.getTranslation("_Activate_an_editing_tool_to_see_your_options_here")+
154
                    "</center></html>"
155
            );
156
            label.setHorizontalAlignment(SwingConstants.CENTER);
157
            this.add(label, BorderLayout.CENTER);
158
        } else if( service != this.service ) {
159
            this.removeAll();
160
            this.tab = null;
161
            JPanel header = new JPanel();
162
            header.setLayout(new BoxLayout(header,BoxLayout.Y_AXIS));
163
            FeatureStore store = service.getStore();
164
            header.add(
165
                    new JLabel(
166
                            i18n.getTranslation("_Table")
167
                            + ": "
168
                            + (store == null ? "(unknown)" : store.getName())
169
                    )
170
            );
171
            header.add(
172
                    new JLabel(
173
                            i18n.getTranslation("_Tool")
174
                            + ": "
175
                            + i18n.getTranslation(service.getDescription())
176
                    )
177
            );
178
            this.add(header, BorderLayout.NORTH);
179

  
180
            this.tab = new JTabbedPane();
181
            tab.setTabPlacement(JTabbedPane.BOTTOM);
182
            tab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
183
            
184
            this.add(tab, BorderLayout.CENTER);
185
            
186
            definition = this.getToolOptionsDefinition(service);
187
            if (definition != null) {
188
                DynFormManager dynFormManager = DynFormLocator.getDynFormManager();
189
                form = dynFormManager.createJDynForm(definition);
190

  
191
                JPanel optionsPanel = new JPanel();
192
                optionsPanel.setLayout(new BorderLayout());
193
                optionsPanel.add(form.asJComponent(), BorderLayout.CENTER);
194
                JButton cancelButton = new JButton(i18n.getTranslation("_Cancel"));
195
                cancelButton.addActionListener((e) -> {
196
                    editingContext.cancelActiveService();
197
                });
198
                this.acceptOptionsButton = new JButton(i18n.getTranslation("_Accept"));
199
                this.acceptOptionsButton.addActionListener((e) -> {
200
                    applyOptions();
201
                });
202
                JPanel buttonsPanel = new JPanel();
203
                buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 2, 0 ));
204
                buttonsPanel.add(this.acceptOptionsButton);
205
                buttonsPanel.add(cancelButton);
206
                optionsPanel.add(buttonsPanel, BorderLayout.PAGE_END);
207

  
208
                tab.add(i18n.getTranslation("_Options"), optionsPanel);
209

  
210
                this.form.addListener(new JDynForm.JDynFormListener() {
211
                    @Override
212
                    public void message(String message) {
213
                    }
214

  
215
                    @Override
216
                    public void fieldChanged(JDynFormField field) {
217
                        if (acceptOptionsButton != null) {
218
                            acceptOptionsButton.setIcon(confirmIcon);
219
                        }
220
                    }
221
                });
222
            }
223
            try {
224
                JsonObject xx = defaultValues.get(store.getFullName());
225
                EditableFeature f = service.getDefaultFeatureValues();
226
                if(xx != null){
227
                    f.copyFrom(xx);
228
                }
229
                DynFormDefinition formdef = this.createFormDefinition(service);
230
                this.featureform = dataSwingManager.createJFeatureForm(formdef);                
231
                this.featureform.getDynForm().setContext(dataSwingManager.createFeaturesFormContext(store));
232
                this.featureform.setFeature(f);
233
                JPanel valuesPanel = new JPanel();
234
                valuesPanel.setLayout(new BorderLayout());
235
                valuesPanel.add(featureform.asJComponent(), BorderLayout.CENTER);
236
                applyDefaultValuesButton = new JButton(i18n.getTranslation("_Apply"));
237
                applyDefaultValuesButton.addActionListener((e) -> { applyDefaultValues(); });
238
                JButton resetDefaultValuesButton = new JButton(i18n.getTranslation("_Reset"));
239
                resetDefaultValuesButton.addActionListener((e) -> {
240
                    resetDefaultValues();
241
                });
242
                
243
                Bookmarks bookmarks = this.getBookmarks(store);
244
                JButton bookmarksButton = new JButton("...");
245
                BookmarksController bookmarksController = ToolsSwingLocator.getToolsSwingManager().createBookmarksController(
246
                        bookmarks,
247
                        bookmarksButton
248
                );
249
                bookmarksController.addActionListener((ActionEvent e) -> {
250
                    EditableFeature feature;
251
                    ActionEventWithCurrentValue<EditingToolOptionsDefaultValueBookmark> b = (ActionEventWithCurrentValue<EditingToolOptionsDefaultValueBookmark>) e;
252
                    switch (b.getID()) {
253
                        case ID_GETVALUE:
254
                            EditingToolOptionsDefaultValueBookmark bookmark = new EditingToolOptionsDefaultValueBookmark();
255
                            bookmark.setDefaultValues(service.getDefaultFeatureValues());
256
                            b.setCurrentValue(bookmark);
257
                            break;
258
                        case ID_SETVALUE:
259
                            if (b.getCurrentValue() == null) {
260
                                return;
261
                            }
262
                            JsonObject bookmarkFeature = b.getCurrentValue().getDefaultValues();
263
                            feature = service.getDefaultFeatureValues();
264
                            feature.copyFrom(bookmarkFeature);
265
                            featureform.setFeature(feature);
266
                            break;
267
                    }
268
                });
269

  
270
                JPanel applyPanel = new JPanel();
271
                applyPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,4,0));
272
                applyPanel.add(applyDefaultValuesButton);
273
                applyPanel.add(resetDefaultValuesButton);
274
                applyPanel.add(bookmarksButton);
275
                valuesPanel.add(applyPanel, BorderLayout.PAGE_END);
276
                
277
                tab.add(i18n.getTranslation("_Default_values"), valuesPanel );
278
                
279
                featureform.getDynForm().addListener(new JDynForm.JDynFormListener() {
280
                    @Override
281
                    public void message(String message) {
282
                    }
283

  
284
                    @Override
285
                    public void fieldChanged(JDynFormField field) {
286
                        if(applyDefaultValuesButton != null){
287
                            applyDefaultValuesButton.setIcon(confirmIcon);
288
                        }
289
                    }
290
                });
291
                
292
            } catch (Exception ex) {
293
                LOGGER.debug("Can't create panel",ex);
294
            }
295
            ToolsSwingUtils.ensureRowsCols(this, 8, 43, 25, 60);
296
            try {
297
                tab.setSelectedIndex(currentTab);
298
            } catch (Exception ex) {
299
                LOGGER.debug("Can't activate tab",ex);
300
            }
301
            service.addObserver(this.serviceObserver);
302
        }
303
        this.service = service;
304
    }
305

  
306
    private DynFormDefinition createFormDefinition(EditingService service) throws DataException {
307
        FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
308
        
309
        FeatureStore store = service.getStore();
310
        FeatureType featureType = store.getDefaultFeatureType();
311
        DynClass dynClass = featureTypeDefinitionsManager.get(store,featureType);
312
        DynFormDefinition formdef = DynFormLocator.getDynFormManager().createDefinition(dynClass);
313
        for (FeatureAttributeDescriptor attr : featureType) {
314
            if( attr.isPrimaryKey() || attr.isReadOnly() ) {
315
                formdef.remove(attr.getName());
316
            }
317
        }
318
        for (DynFormFieldDefinition fielddef : formdef) {
319
            fielddef.setMandatory(false);
320
        }
321
        return formdef;
322
    }
323
    
324
    private DynStruct_v2 getToolOptionsDefinition(EditingService service) {
325
        if (service == null) {
326
            return null;
327
        }
328
        DynStruct_v2 def = (DynStruct_v2) ToolsLocator.getDynObjectManager().createDynClass(
329
                service.getName(), null
330
        );
331
        I18nManager i18n = ToolsLocator.getI18nManager();
332
        DynField_v2 field;
333
        Tags tags;
334
        List<ServiceParameterField> params = this.getServiceParameters(service);
335
        for (ServiceParameterField param : params) {
336
            switch(param.getType()) {
337
                case POSITION:
338
                    field = (DynField_v2) def.addDynField(param.getFieldName(), DataTypes.GEOMETRY);
339
                    field.setLabel(i18n.getTranslation(param.getName()));
340
                    field.setDescription(i18n.getTranslation(param.getDescription()));
341
                    field.setDefaultFieldValue(param.getDefaultValue());
342
                    tags = field.getTags();
343
                    tags.set("EditingContext", this.editingContext);
344
                    tags.set("ParamType", param.getType());
345
                    field.setSubtype(JDynFormFieldPointFactory.NAME);
346
                    field.setMandatory(false);
347
                    break;
348
                case LIST_POSITIONS:
349
                    field = (DynField_v2) def.addDynField(param.getFieldName(), DataTypes.GEOMETRY);
350
                    field.setLabel(i18n.getTranslation(param.getName()));
351
                    field.setDescription(i18n.getTranslation(param.getDescription()));
352
                    field.setDefaultFieldValue(param.getDefaultValue());
353
                    tags = field.getTags();
354
                    tags.set("EditingContext", this.editingContext);
355
                    tags.set("ParamType", param.getType());
356
                    field.setSubtype(JDynFormFieldPointFactory.NAME);
357
                    field.setMandatory(false);
358
                    break;
359
                case VALUE:
360
                    field = (DynField_v2) def.addDynFieldDouble(param.getFieldName());
361
//                    field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType());
362
                    if( param.isAditional() ) {
363
                        field.setLabel(i18n.getTranslation("_Value"));
364
                    } else {
365
                        field.setLabel(i18n.getTranslation(param.getName()));
366
                    }
367
                    tags = field.getTags();
368
                    tags.set("ParamType", param.getType());
369
                    field.setDescription(i18n.getTranslation(param.getDescription()));
370
                    field.setDefaultFieldValue(param.getDefaultValue());
371
                    field.setMandatory(false);
372
                    break;
373

  
374
                case DISTANCE:
375
                    field = (DynField_v2) def.addDynFieldDouble(param.getFieldName());
376
//                    field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType());
377
                    if( param.isAditional() ) {
378
                        field.setLabel(i18n.getTranslation("_Distance"));
379
                    } else {
380
                        field.setLabel(i18n.getTranslation(param.getName()));
381
                    }
382
                    tags = field.getTags();
383
                    tags.set("ParamType", param.getType());
384
                    field.setDescription(i18n.getTranslation(param.getDescription()));
385
                    field.setDefaultFieldValue(param.getDefaultValue());
386
                    field.setMandatory(false);
387
                    break;
388

  
389
                case OPTION:
390
                    field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType());
391
                    if( param.isAditional() ) {
392
                        field.setLabel(i18n.getTranslation("_Options"));
393
                    } else {
394
                        field.setLabel(i18n.getTranslation(param.getName()));
395
                    }
396
                    field.setDescription(i18n.getTranslation(param.getDescription()));
397
                    List<DynObjectValueItem> availableValues = new ArrayList<>();
398
                    availableValues.add(new DynObjectValueItem(null, " "));
399
                    if(param.getOptions() == null){
400
                        for (ParameterOption option : param.getOptions2()) {
401
                            Object value = option.getValue();
402
                            String label = i18n.getTranslation(option.getLabel());
403
                            availableValues.add(new DynObjectValueItem(value, label));
404
                        }
405
                    } else {
406
                        for (Map.Entry<String, String> option : param.getOptions().entrySet()) {
407
                            String value = option.getKey();
408
                            String label = i18n.getTranslation(option.getValue());
409
                            availableValues.add(new DynObjectValueItem(value, label));
410
                        }
411
                    }
412
                    tags = field.getTags();
413
                    tags.set("ParamType", param.getType());
414
                    field.setAvailableValues(availableValues);
415
                    field.setDefaultFieldValue(param.getDefaultValue());
416
                    field.setMandatory(false);
417
                    break;
418
                case GEOMETRY:
419
                case SELECTION:
420
                case CLIPBOARD:
421
                    break;
422
            }
423
        }
424
        return def;
425
    }
426

  
427
    private void clear() {
428
        this.form.clear();
429
    }
430

  
431
    private void put(EditingService service) {
432
        if(this.service != service || service == null) {
433
            return;
434
        }
435

  
436
        List<ServiceParameterField> params = this.getServiceParameters(service); 
437
        for (ServiceParameterField param : params) {
438
            if(param.getIgnoreCurrentValue()){
439
                this.form.setValue(
440
                        param.getFieldName(), 
441
                        null
442
                );
443
                
444
            } else {
445
                this.form.setValue(
446
                        param.getFieldName(), 
447
                        service.getValue(param.getParameters(),param.getType())
448
                );
449
            }
450
        }
451
    }
452

  
453
    private boolean ignore_events = false;
454
    private void doServiceChanged(Notification notification) {
455
        if( ignore_events ) {
456
            return;
457
        }
458
        try {
459
            ignore_events = true;
460
            switch (notification.getType()) {
461
                case EditingService.PARAMETER_CHANGED2_NOTIFICATION:
462
                case EditingService.PARAMETER_CHANGED1_NOTIFICATION:
463
                    this.put(this.editingContext.getActiveService());
464
                    break;
465
                case EditingService.ACTIVATE_NOTIFICATION:
466
                    this.set(this.editingContext.getActiveService());
467
                    this.put(this.editingContext.getActiveService());
468
                    break;
469
                case EditingService.START_NOTIFICATION:
470
    //                this.clear();
471
                    break;
472
            }
473
        } finally {
474
            ignore_events = false;
475
        }
476
    }
477

  
478
    private void doContextChanged(Notification notification) {
479
        if (ignore_events) {
480
            return;
481
        }
482
        try {
483
            ignore_events = true;
484
            switch (notification.getType()) {
485
                case EditingContext.CHANGE_SELECTED_TOOL_NOTIFICATION:
486
                    EditingService activeService = this.editingContext.getActiveService();
487
                    this.set(activeService);
488
                    if (activeService != null) {
489
                        this.put(activeService);
490
                    }
491
                    break;
492

  
493
            }
494
        } finally {
495
            ignore_events = false;
496
        }
497
    }
498

  
499
    public void applyDefaultValues() {
500
        I18nManager i18n = ToolsLocator.getI18nManager();
501
        EditableFeature feature = this.service.getDefaultFeatureValues();
502
        this.featureform.fetch(feature);
503
        applyDefaultValuesButton.setIcon(null);
504
        defaultValues.put(this.service.getStore().getFullName(), feature.toJson());
505
    }
506
    
507
    public void resetDefaultValues() {
508
        try {
509
            FeatureStore store = this.service.getStore();
510
            EditableFeature resetValues = store.createNewFeature();
511
            EditableFeature feature = this.service.getDefaultFeatureValues();
512
            feature.copyFrom(resetValues);
513
            
514
            this.featureform.setFeature(feature);
515
            applyDefaultValuesButton.setIcon(null);
516
            defaultValues.put(this.service.getStore().getFullName(), feature.toJson());
517
        } catch (Exception ex) {
518
            LOGGER.warn("Can't reset default values",ex);
519
        }
520
    }
521
    
522
    public void applyOptions() {
523
        boolean ignore_events_save = this.ignore_events;
524
        try {
525
            this.ignore_events = true;
526
            List<ServiceParameterField> params = this.getServiceParameters(service);
527
            for (ServiceParameterField param : params) {
528
                Object value = this.form.getValue(param.getFieldName());
529
                try {
530
                    editingContext.setValue(param.getParameters(), value, false);
531
                } catch (Throwable th) {
532
                    LOGGER.debug("Can't set service parameter '" + param.getName() + "' to '" + Objects.toString(value) + "'.", th);
533
                }
534
            }
535
            try {
536
                editingContext.nextParameter();
537
            } catch (Exception ex) {
538
                LOGGER.debug("Can't apply service parameters.", ex);
539
            }
540
            this.acceptOptionsButton.setIcon(null);
541
        } finally {
542
            this.ignore_events = ignore_events_save;
543
        }
544
        this.put(service);
545
    }
546
    
547
    private static class ServiceParameterField {
548
        private final EditingServiceParameter param;
549
        private final EditingServiceParameter.TYPE type;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff