Revision 2015

View differences:

org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/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.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/test/resources/README.txt
1
====
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
====
26

  
27
Put into this folder the resources needed by your test classes.
28

  
29
This folder is added to the Tests classpath, so you can load any resources 
30
through the ClassLoader.
31

  
32
By default, in this folder you can find an example of log4j configuration,
33
prepared to log messages through the console, so logging works when you
34
run your tests classes.
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/test/resources/log4j.xml
1
<?xml version="1.0" encoding="ISO-8859-1" ?>
2
<!--
3

  
4
    gvSIG. Desktop Geographic Information System.
5

  
6
    Copyright (C) 2007-2012 gvSIG Association.
7

  
8
    This program is free software; you can redistribute it and/or
9
    modify it under the terms of the GNU General Public License
10
    as published by the Free Software Foundation; either version 2
11
    of the License, or (at your option) any later version.
12

  
13
    This program is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
    GNU General Public License for more details.
17

  
18
    You should have received a copy of the GNU General Public License
19
    along with this program; if not, write to the Free Software
20
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
    MA  02110-1301, USA.
22

  
23
    For any additional information, do not hesitate to contact us
24
    at info AT gvsig.com, or visit our website www.gvsig.com.
25

  
26
-->
27
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
28

  
29
<!-- 
30
Log4J configuration file for unit tests execution.
31
 -->
32
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
33

  
34
	<!-- Appender configuration to show logging messages through the console -->
35
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
36
		<layout class="org.apache.log4j.PatternLayout">
37
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
38
		</layout>
39
	</appender>
40

  
41
	<!-- 
42
	Activate logging messages of DEBUG level of higher only for the
43
	org.gvsig.tools packages.
44
	You can put full classes names or packages instead, to configure
45
	logging for all the classes and subpackages of the package.
46
	-->
47
	<category name="org.gvsig.tools">
48
		<priority value="DEBUG" />
49
	</category>
50
	<category name="org.gvsig.vectorediting">
51
		<priority value="DEBUG" />
52
	</category>
53

  
54
	<!-- 
55
	By default, show only logging messages of INFO level or higher, 
56
	through the previously configured CONSOLE appender. 
57
	-->
58
	<root>
59
		<priority value="INFO" />
60
		<appender-ref ref="CONSOLE" />
61
	</root>
62
</log4j:configuration>
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources/README.txt
1
====
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24
====
25

  
26
Put into this folder the resources to be included in the plugin jar.
27

  
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/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
      </includes>
81
    </dependencySet>
82
  </dependencySets>
83

  
84
</assembly>
85

  
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/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.116/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.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/ServiceExtension.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 2
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.vectorediting.app.mainplugin;
25

  
26
import org.gvsig.andami.plugins.Extension;
27
import org.gvsig.app.ApplicationLocator;
28
import org.gvsig.app.ApplicationManager;
29
import org.gvsig.app.project.documents.view.ViewDocument;
30
import org.gvsig.app.project.documents.view.gui.IView;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
33
import org.gvsig.vectorediting.swing.api.EditingContext;
34
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
35
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
36

  
37
public class ServiceExtension extends Extension {
38

  
39
    public void initialize() {
40
    }
41

  
42
    public void execute(String actionCommand) {
43
        IView view = getActiveView();
44
        EditingSwingManager swingManager =
45
            EditingSwingLocator.getSwingManager();
46

  
47
        if (view != null) {
48
            EditingContext editingContext =
49
                swingManager.getEditingContext(view.getMapControl());
50
            editingContext.activateService(actionCommand);
51
        }
52

  
53
    }
54

  
55
    public boolean isEnabled() {
56
        return this.isVisible();
57
    }
58

  
59
    @Override
60
    public boolean isEnabled(String action) {
61
        IView view = getActiveView();
62
        FLyrVect activeLayer = getActiveLayer(view);
63

  
64
        if ((view != null) && (activeLayer != null) && activeLayer.isEditing() && action!=null) {
65
            EditingSwingManager swingManager =
66
                EditingSwingLocator.getSwingManager();
67
            EditingContext editingContext =
68
                swingManager.getEditingContext(view.getMapControl());
69
            return editingContext.isServiceCompatible(action);
70
        }
71
        return false;
72
    }
73

  
74
    public boolean isVisible() {
75
        IView view = getActiveView();
76
        FLyrVect activeLayer = getActiveLayer(view);
77
        return ((view != null) && (activeLayer != null) && activeLayer
78
            .isEditing());
79
    }
80

  
81
    @Override
82
    public boolean isVisible(String action) {
83
        return this.isVisible();
84
    }
85

  
86
    @Override
87
    public boolean canQueryByAction() {
88
        return true;
89
    }
90

  
91
    private IView getActiveView() {
92

  
93
        ApplicationManager application = ApplicationLocator.getManager();
94
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
95
        return view;
96
    }
97

  
98
    private FLyrVect getActiveLayer(IView view) {
99
        if (view != null) {
100
            ViewDocument viewDocument = view.getViewDocument();
101
            FLayer[] actives =
102
                viewDocument.getMapContext().getLayers().getActives();
103

  
104
            if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
105
                return (FLyrVect) actives[0];
106
            }
107
        }
108
        return null;
109
    }
110
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/EditingExtension.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 2
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.vectorediting.app.mainplugin;
25

  
26
import java.io.File;
27
import java.util.ArrayList;
28
import java.util.Collections;
29
import java.util.List;
30
import java.util.function.Predicate;
31
import javax.swing.JOptionPane;
32
import org.apache.commons.io.FileUtils;
33

  
34
import org.slf4j.Logger;
35
import org.slf4j.LoggerFactory;
36

  
37
import org.gvsig.andami.IconThemeHelper;
38
import org.gvsig.andami.PluginServices;
39
import org.gvsig.andami.PluginsLocator;
40
import org.gvsig.andami.actioninfo.ActionInfo;
41
import org.gvsig.andami.plugins.Extension;
42
import org.gvsig.andami.plugins.IExtension;
43
import org.gvsig.andami.plugins.status.IExtensionStatus;
44
import org.gvsig.andami.plugins.status.IUnsavedData;
45
import org.gvsig.andami.plugins.status.UnsavedData;
46
import org.gvsig.app.ApplicationLocator;
47
import org.gvsig.app.ApplicationManager;
48
import org.gvsig.app.project.Project;
49
import org.gvsig.app.project.documents.Document;
50
import org.gvsig.app.project.documents.view.ViewDocument;
51
import org.gvsig.app.project.documents.view.ViewManager;
52
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
53
import org.gvsig.app.project.documents.view.gui.IView;
54
import org.gvsig.app.project.documents.view.toc.actions.EndEditingTocMenuEntry;
55
import org.gvsig.app.project.documents.view.toc.actions.StartEditingTocMenuEntry;
56
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
57
import org.gvsig.fmap.dal.exception.DataException;
58
import org.gvsig.fmap.dal.feature.FeatureStore;
59
import org.gvsig.fmap.mapcontext.MapContext;
60
import org.gvsig.fmap.mapcontext.MapContextLocator;
61
import org.gvsig.fmap.mapcontext.layers.FLayer;
62
import org.gvsig.fmap.mapcontext.layers.FLayers;
63
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
64
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
65
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
66
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
67
import org.gvsig.fmap.mapcontrol.MapControl;
68
import org.gvsig.fmap.mapcontrol.MapControlCreationListener;
69
import org.gvsig.fmap.mapcontrol.MapControlLocator;
70
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
71
import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseMovementBehavior;
72
import org.gvsig.tools.ToolsLocator;
73
import org.gvsig.tools.extensionpoint.ExtensionPoint;
74
import org.gvsig.tools.i18n.I18nManager;
75
import org.gvsig.tools.observer.Notification;
76
import org.gvsig.tools.observer.Observable;
77
import org.gvsig.tools.observer.Observer;
78
import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
79
import org.gvsig.utils.swing.threads.IMonitorableTask;
80
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
81
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
82
import org.gvsig.vectorediting.swing.api.EditingContext;
83
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
84
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
85

  
86
public class EditingExtension extends Extension implements Observer {
87

  
88
  private static final Logger LOGGER = LoggerFactory.getLogger(EditingExtension.class);
89

  
90
  @Override
91
  public void execute(String actionCommand) {
92

  
93
    ApplicationManager application = ApplicationLocator.getManager();
94
    IView view = getActiveView();
95
    EditingSwingManager swingManager = EditingSwingLocator.getSwingManager();
96

  
97
    if (view != null) {
98

  
99
      MapControl mapControl = view.getMapControl();
100
      EditingContext editingContext = swingManager.getEditingContext(mapControl);
101

  
102
      if ("start-editing".equals(actionCommand)) {
103

  
104
        List<FLyrVect> reprojectedLayers = getActiveLayers(
105
                view,
106
                (FLyrVect layer) -> canBeEdited(layer) && 
107
                        !mapControl.getProjection().equals(layer.getProjection())
108
        );
109
        if (!reprojectedLayers.isEmpty()) {
110
          String msg = "_The_layer_is_reproyected_on_the_fly"
111
                  + "_Not_all_editing_tools_work_properly"
112
                  + "_When_you_finish_editing"
113
                  + "_will_only_export_the_changes_to_another_layer";
114
          application.messageDialog(msg, "_Warning", JOptionPane.WARNING_MESSAGE);
115
        } else {
116
          List<FLyrVect> nonWritableLayers = getActiveLayers(
117
                  view,
118
                  (FLyrVect layer) -> canBeEdited(layer) && !isWritable(layer)
119
          );
120
          if (!nonWritableLayers.isEmpty()) {
121
            String msg = "_The_layer_can_not_be_written"
122
                    + "_When_you_finish_editing"
123
                    + "_will_only_export_the_changes_to_another_layer";
124
            application.messageDialog(msg, "_Warning", JOptionPane.WARNING_MESSAGE);
125
          }
126
        }
127
        List<FLyrVect> activeLayers = getActiveLayers(
128
                view,
129
                (FLyrVect layer) -> canBeEdited(layer)
130
        );
131
        for (FLyrVect layer : activeLayers) {
132
          editingContext.beginEdition(layer);
133
          editingContext.addObserver(this);
134
        }
135
        ApplicationLocator.getManager().refreshMenusAndToolBars();
136

  
137
      } else if ("end-editing".equals(actionCommand)) {
138
        List<FLyrVect> activeLayers = getActiveLayers(
139
                view,
140
                (FLyrVect layer) -> layer.isEditing()
141
        );
142
        for (FLyrVect layer : activeLayers) {
143
          editingContext.endEdition(layer);
144
        }
145
        ApplicationLocator.getManager().refreshMenusAndToolBars();
146

  
147
      }
148
    }
149
  }
150

  
151
  @Override
152
  public void initialize() {
153
    registerIcons();
154

  
155
    // Disable default view panel console. Uses editing context console.
156
    DefaultViewPanel.setDisableConsole(true);
157

  
158
    // Adding TOC menu entry
159
    ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add(
160
            "View_TocActions", "");
161
    exPoint.append(
162
            StartEditingTocMenuEntry.EXTENSION_POINT_NAME,
163
            "TOC popup menu to start vector layer's editing",
164
            new StartEditingTocMenuEntry());
165
    exPoint.append(
166
            EndEditingTocMenuEntry.EXTENSION_POINT_NAME,
167
            "TOC popup menu to end vector layer's editing",
168
            new EndEditingTocMenuEntry());
169
  }
170

  
171
  private void registerIcons() {
172
    IconThemeHelper.registerIcon("vectorediting", "vector-editing", this);
173
  }
174

  
175
  @Override
176
  public void postInitialize() {
177
    super.postInitialize();
178
    registerSymbols();
179

  
180
    MapControlLocator.getMapControlManager().addMapControlCreationListener(new MapControlCreationListener() {
181

  
182
      @Override
183
      public MapControl mapControlCreated(MapControl mapControl) {
184
        EditingContext editingContext = EditingSwingLocator.getSwingManager().getEditingContext(mapControl);
185
        StatusBarListener sbl = new StatusBarListener(mapControl);
186
        editingContext.setDefaultBehaviors(new Behavior[]{new MouseMovementBehavior(sbl)});
187
        editingContext.addObserver(EditingExtension.this);
188
        ApplicationLocator.getManager().refreshMenusAndToolBars();
189
        return mapControl;
190
      }
191
    });
192
  }
193

  
194
  /**
195
   * Register all symbols in the plugin symbols folder in the providerManager.
196
   * The description of the symbols must be unique because the key used for
197
   * registration is the proper description of the symbol.
198
   *
199
   */
200
  private void registerSymbols() {
201

  
202
    EditingProviderManager providerManager = EditingProviderLocator.getProviderManager();
203

  
204
    SymbolManager symbolManager = MapContextLocator.getSymbolManager();
205
    File symbolsFolder = FileUtils.getFile(getPlugin().getPluginDirectory(), "symbols", "editing");
206
    ISymbol[] symbols = null;
207
    try {
208
      symbols = symbolManager.loadSymbols(symbolsFolder);
209
    } catch (SymbolException e) {
210
      LOGGER.warn("No symbols loaded from " + symbolsFolder.getAbsolutePath(), e);
211
    }
212

  
213
    if (symbols != null) {
214
      for (ISymbol symbol : symbols) {
215
        String description = symbol.getDescription();
216
        providerManager.registerSymbol(description, symbol);
217
      }
218
    }
219
  }
220

  
221
  @Override
222
  public boolean isEnabled() {
223
    return true;
224
  }
225

  
226
  @Override
227
  public boolean isVisible() {
228
    return true;
229
  }
230

  
231
  @Override
232
  public boolean isVisible(String action) {
233
    IView view = getActiveView();
234
    if( view == null ) {
235
      return false;
236
    }
237
    if ("start-editing".equals(action)) {
238
      List<FLyrVect> activeLayers = getActiveLayers(view, (FLyrVect layer) -> !layer.isEditing());
239
      return !activeLayers.isEmpty();
240
    } else {
241
      List<FLyrVect> activeLayers = getActiveLayers(view, (FLyrVect layer) -> layer.isEditing());
242
      return !activeLayers.isEmpty();
243

  
244
    }
245
  }
246

  
247
  @Override
248
  public boolean isEnabled(String action) {
249
    IView view = getActiveView();
250
    if( view == null ) {
251
      return false;
252
    }
253
    if ("start-editing".equals(action)) {
254
      List<FLyrVect> activeLayers = getActiveLayers(view, (FLyrVect layer) -> canBeEdited(layer));
255
      return !activeLayers.isEmpty();
256

  
257
    } else if ("end-editing".equals(action)) {
258
      List<FLyrVect> activeLayers = getActiveLayers(view, (FLyrVect layer) -> layer.isEditing());
259
      return !activeLayers.isEmpty();
260

  
261
    }
262

  
263
    return false;
264

  
265
  }
266

  
267
  @Override
268
  public boolean canQueryByAction() {
269
    return true;
270
  }
271

  
272
  private IView getActiveView() {
273
    ApplicationManager application = ApplicationLocator.getManager();
274
    IView view = (IView) application.getActiveComponent(ViewDocument.class);
275
    return view;
276
  }
277

  
278
  private boolean isWritable(FLyrVect layer) {
279
    if (layer != null && layer.isAvailable()) {
280
      return layer.getFeatureStore().allowWrite();
281
    }
282
    return false;
283
  }
284

  
285
  private boolean canBeEdited(FLyrVect layer) {
286
    if (layer != null && layer.isAvailable()) {
287

  
288
      boolean isNotTransformed
289
              = layer.getFeatureStore().getTransforms().isEmpty();
290

  
291
      return isNotTransformed && !layer.isEditing();
292
    }
293

  
294
    return false;
295
  }
296

  
297
//  private FLyrVect getActiveLayer(IView vista) {
298
//    if (vista != null) {
299
//      ViewDocument viewDocument = vista.getViewDocument();
300
//      FLayer[] actives
301
//              = viewDocument.getMapContext().getLayers().getActives();
302
//
303
//      if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
304
//        return (FLyrVect) actives[0];
305
//      }
306
//    }
307
//    return null;
308
//  }
309

  
310
  private List<FLyrVect> getActiveLayers(IView view, Predicate<FLyrVect> valid) {
311
    if (view == null) {
312
      return Collections.EMPTY_LIST;
313
    }
314
    List<FLyrVect> layers = new ArrayList<>();
315
    ViewDocument viewDocument = view.getViewDocument();
316
    FLayer[] actives = viewDocument.getMapContext().getLayers().getActives();
317
    for (FLayer layer : actives) {
318
      if (layer instanceof FLyrVect && valid.test((FLyrVect) layer)) {
319
        layers.add((FLyrVect) layer);
320
      }
321
    }
322
    return layers;
323
  }
324

  
325
  @Override
326
  public void update(Observable observable, Object notification) {
327

  
328
    if (notification instanceof Notification) {
329
      ApplicationManager appManager = ApplicationLocator.getManager();
330
      Notification n = (Notification) notification;
331
      if (n.isOfType(EditingContext.CHANGE_SELECTED_TOOL_NOTIFICATION)) {
332
        String name = (String) n.getValue();
333
        LOGGER.trace("Changed selected tool to '{}'", name);
334
        PluginServices.getMainFrame().setSelectedTool(name);
335
        appManager.refreshMenusAndToolBars();
336

  
337
      } else if (n.isOfType(EditingContext.EXPORT_LAYER_NOTIFICATION)) {
338
        exportLayer((FLyrVect) (n.getValue()));
339

  
340
      } else if (n.isOfType(EditingContext.REFRESH_TOOLS_NOTIFICATION)) {
341
        appManager.refreshMenusAndToolBars();
342
      }
343
    }
344
  }
345

  
346
  private void exportLayer(FLyrVect layer) {
347
    ApplicationManager appManager = ApplicationLocator.getManager();
348
    I18nManager i18nManager = ToolsLocator.getI18nManager();
349
    ActionInfo action = PluginsLocator.getActionInfoManager().getAction("layer-exportto");
350
    action.execute(new Object[]{layer, MODE.toInteger(MODE.DIALOG)});
351
    String msg = "_Do_you_want_to_finish_editing_If_not_exported_the_data_the_changes_will_be_lost";
352
    if (appManager.confirmDialog(
353
            i18nManager.getTranslation(msg),
354
            i18nManager.getTranslation("end_editing"),
355
            JOptionPane.YES_NO_OPTION,
356
            JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
357
      try {
358
        layer.getFeatureStore().cancelEditing();
359
      } catch (Exception e) {
360
        LOGGER.warn("Can't abort editing of layer '" + layer.getName() + "'.", e);
361
        msg = "_Cant_finish_editing_See_the_error_log_for_more_information";
362
        appManager.messageDialog(msg, "_Warning", JOptionPane.WARNING_MESSAGE);
363
      }
364
    }
365
  }
366

  
367
  private List<FLyrVect> getEditedLayers() {
368
    ApplicationManager application = ApplicationLocator.getManager();
369
    List<FLyrVect> editedLayers = new ArrayList<>();
370

  
371
    Project project = application.getCurrentProject();
372
    for (Document document : project.getDocuments(ViewManager.TYPENAME)) {
373
      ViewDocument view = (ViewDocument) document;
374
      MapContext mapContext = view.getMapContext();
375
      if (mapContext != null) {
376
        FLayers layers = mapContext.getLayers();
377
        for (int j = 0; j < layers.getLayersCount(); j++) {
378
          FLayer lyr = layers.getLayer(j);
379
          if (lyr instanceof FLyrVect) {
380
            FLyrVect layerVect = (FLyrVect) lyr;
381
            if (layerVect.isEditing()) {
382
              editedLayers.add(layerVect);
383
            }
384
          }
385
        }
386
      }
387
    }
388
    return editedLayers;
389
  }
390

  
391
  private List<IUnsavedData> getUnsavedData(List<FLyrVect> editedLayers) {
392
    List<IUnsavedData> unsavedData = new ArrayList<>();
393
    for (FLyrVect editedLayer : editedLayers) {
394
      IUnsavedData unsavedDataLayer = new UnsavedLayer(this, editedLayer);
395
      unsavedData.add(unsavedDataLayer);
396
    }
397
    return unsavedData;
398

  
399
  }
400

  
401
  private static class UnsavedLayer extends UnsavedData {
402

  
403
    private final FLyrVect layer;
404

  
405
    public UnsavedLayer(IExtension extension, FLyrVect layer) {
406
      super(extension);
407
      this.layer = layer;
408
    }
409

  
410
    @Override
411
    public String getDescription() {
412
      return layer.getName();
413
    }
414

  
415
    @Override
416
    public String getResourceName() {
417
      return layer.getFeatureStore().getFullName();
418
    }
419

  
420
    @Override
421
    public boolean saveData() {
422
      FeatureStore featureStore = layer.getFeatureStore();
423
      if (featureStore.isEditing()) {
424
        try {
425
          featureStore.finishEditing();
426
          return true;
427
        } catch (DataException e) {
428
          throw new RuntimeException(e);
429
        }
430
      }
431
      return true;
432
    }
433
  }
434

  
435
  @Override
436
  public IExtensionStatus getStatus() {
437
    List<FLyrVect> editedLayers = getEditedLayers();
438
    final List<IUnsavedData> unsavedData = getUnsavedData(editedLayers);
439

  
440
    return new IExtensionStatus() {
441

  
442
      @Override
443
      public boolean hasUnsavedData() {
444
        if (unsavedData == null) {
445
          return false;
446
        }
447
        return !unsavedData.isEmpty();
448
      }
449

  
450
      @Override
451
      public boolean hasRunningProcesses() {
452
        return false;
453
      }
454

  
455
      @Override
456
      public IUnsavedData[] getUnsavedData() {
457
        if (unsavedData == null) {
458
          return null;
459
        }
460
        return unsavedData.toArray(new IUnsavedData[0]);
461
      }
462

  
463
      @Override
464
      public IMonitorableTask[] getRunningProcesses() {
465
        return null;
466
      }
467
    };
468
  }
469
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.116/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
start_editing = Start editing
2
end_editing = End editing
3
insert_point = Insert point
4
insert_multipoint = Insert MultiPoint
5
insert_line = Insert line
6
insert_arc = Insert arc
7
insert_circle_cr=Insert circle (center & radius)
8
insert_circumference_cr=Insert circumference (center & radius)
9
insert_circle_3p = Insert circle (three point)
10
insert_circumference_3p = Insert circumference (three points)
11
insert_ellipse = Insert ellipse
12
insert_filled_ellipse = Insert filled ellipse
13
insert_polyline = Insert polyline
14
insert_polygon = Insert polygon
15
insert_regular_polygon = Insert regular polygon
16
insert_filled_regular_polygon = Insert filled regular polygon
17
insert_rectangle = Insert rectangle
18
insert_filled_rectangle = Insert filled rectangle
19
insert_spline= Insert spline curve
20
insert_filled_spline = Insert filled spline
21
insert_rectangular_matrix = Rectangular matrix of geometries
22
insert_polar_matrix = Polar matrix of geometries
23
modify_internal_polygon = Internal polygon
24
modify_explode_geometry = Explode geometry
25
modify_move = Move geometry
26
modify_rotate = Rotate geometry
27
modify_duplicate = Duplicate geometry
28
modify_split_line = Split line open by a point
29
modify_split = Split geometry
30
modify_scale = Scale geometry
31
modify_simplify = Simplify geometry
32
insert_autopolygon = Insert autopolygon
33
modify_join = Join geometries
34
modify_stretch = Stretch geometry
35
modify_extend_line = Extend line to object
36
modify_trim_line = Trim line by object
37
modify_edit_vertex = Edit vertex
38
modify_convert_to_polyline= Convert to polyline
39
modify_reverse_direction=Reverse direction
40
uniqueselection = Select only one geometry
41
selectvertex = Select a vertex
42
new_position = New position
43
new_position_or_z_value = New position or Z value
44
insert_vertex = Insertr vertex
45
remove_vertex = Remove vertex
46
selection=Selection
47
invalid_option=Invalid option
48
center=Center
49
radius=Radius
50
save_changes_performed=Save changed performed
51
discard= Discard
52
discard_and_loose_changes= Discard changes and loose changes
53
continue= Continue
54
do_not_save_yet_stay_in_editing_mode= Don't save changes and continue editing
55
indicate_new_point= Indicate new point
56
arc_mode = Arc mode
57
line_mode = Line mode
58
select_new_tool= Select a new tool
59
draw_geometry_to_interal_polygon= Select tool to draw a internal polygon
60
draw_geometry_to_autopolygon = Select tool to draw an autopolygon
61
draw_geometry_to_split = Select tool to split selected geometries
62
draw_geometry_to_select_vertex = Select a polygonal tool to select vertex
63
save = Save
64
discard = Discard
65
continue = Continue
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff