Revision 4059

View differences:

org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/buildNumber.properties
1
#Thu Oct 29 17:30:03 CET 2015
2
buildNumber=66
0 3

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/package.info
1
#
2
#Mon Jun 10 11:57:18 CEST 2013
3
owner=gvSIG Association
4
code=org.gvsig.raster.reproject.app.reprojectclient
5
java-version=j1_5
6
official=true
7
type=plugin
8
version=2.0.1-SNAPSHOT-12
9
state=testing
10
operating-system=all
11
dependencies=required\: org.gvsig.raster.tilecache.app -ge 2.0.0-0, required\: org.gvsig.raster.tools.app.basic -ge 2.0.0-0
12
sources-url=https\://devel.gvsig.org/redmine/projects/gvsig-raster/repository/show/org.gvsig.raster.reproject/trunk/org.gvsig.raster.reproject/org.gvsig.raster.reproject.app.reprojectclient
13
web-url=http\://www.gvsig.com
14
architecture=all
15
model-version=1.0.1
16
categories=Raster
17
description=Reprojection support
18
buildNumber=12
19
gvSIG-version=2.0.0
20
name=Reprojection support
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
  </files>
17

  
18
  <fileSets>
19
    <fileSet>
20
      <directory>src/main/resources-plugin</directory>
21
      <outputDirectory>.</outputDirectory>
22
    </fileSet>
23
  </fileSets>
24

  
25

  
26
  <dependencySets>
27
    <dependencySet>
28
      <useProjectArtifact>false</useProjectArtifact>
29
	  <useTransitiveDependencies>false</useTransitiveDependencies>
30
      <outputDirectory>lib</outputDirectory>
31
      <includes> 
32
				<include>org.gvsig:org.gvsig.raster.reproject.app.reprojectclient:jar</include>
33
				<include>org.gvsig:org.gvsig.raster.reproject.algorithm:jar</include>
34
	  </includes>
35
	</dependencySet>
36
  </dependencySets>
37
</assembly>
0 38

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/ReprojectListener.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app;
23

  
24
import java.awt.Component;
25
import java.awt.event.ActionEvent;
26
import java.awt.event.ActionListener;
27
import java.io.File;
28
import java.util.HashMap;
29

  
30
import javax.swing.JOptionPane;
31

  
32
import org.cresques.cts.IProjection;
33
import org.gvsig.andami.PluginServices;
34
import org.gvsig.andami.ui.mdiManager.IWindow;
35
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
36
import org.gvsig.fmap.mapcontext.layers.FLayer;
37
import org.gvsig.fmap.mapcontext.layers.FLayers;
38
import org.gvsig.i18n.Messages;
39
import org.gvsig.raster.algorithm.RasterBaseAlgorithmLibrary;
40
import org.gvsig.raster.algorithm.process.DataProcess;
41
import org.gvsig.raster.algorithm.process.IProcessActions;
42
import org.gvsig.raster.algorithm.process.ProcessException;
43
import org.gvsig.raster.fmap.layers.FLyrRaster;
44
import org.gvsig.raster.mainplugin.RasterMainPluginUtils;
45
import org.gvsig.raster.reproject.algorithm.ReprojectProcess;
46
import org.gvsig.raster.reproject.algorithm.swing.api.RasterReprojectionPanel;
47
import org.gvsig.raster.reproject.algorithm.swing.api.ReprojectionPanelDataModel;
48
import org.gvsig.raster.swing.RasterSwingLibrary;
49
import org.gvsig.raster.swing.RasterSwingLocator;
50
import org.gvsig.raster.util.RasterNotLoadException;
51

  
52

  
53
/**
54
 * Actions for the reprojection panel
55
 * 
56
 * @author Nacho Brodin (nachobrodin@gmail.com)
57
 */
58
public class ReprojectListener implements ActionListener, IProcessActions {
59
	private RasterReprojectionPanel            reprojectPanel   = null;
60
	private FLayer                             lyr              = null;
61
	private ReprojectionPanelDataModel         dataModel        = null;
62
	private ReprojectWindow                    window           = null;
63

  
64
	public ReprojectListener(FLayer lyr, ReprojectionPanelDataModel dataModel, ReprojectWindow window, RasterReprojectionPanel reprojectPanel) {
65
		this.lyr = lyr;
66
		this.dataModel = dataModel;
67
		this.window = window;
68
		this.reprojectPanel = reprojectPanel;
69
	}
70

  
71
	public void actionPerformed(ActionEvent e) {
72
		if(reprojectPanel.getObjectSelected(e.getSource()) == RasterReprojectionPanel.BUTTON_ACCEPT) {
73
			double cellsize = dataModel.getCellSize();
74
			int w = dataModel.getSize()[0];
75
			int h = dataModel.getSize()[1];
76
			IProjection srcPrj = dataModel.getSrcProjection();
77
			IProjection dstPrj = dataModel.getDstProjection();
78
			
79
			if(cellsize <= 0 || w <= 0 || h <= 0) {
80
				messageBoxError("wrong_size");
81
				return;
82
			}
83
			
84
			if(srcPrj == null || dstPrj == null) {
85
				messageBoxError("wrong_projection");
86
				return;
87
			}
88
			
89
			DataProcess process;
90
			try {
91
				process = RasterBaseAlgorithmLibrary.getManager().createRasterTask("RasterReprojectionProcess");
92
			} catch (ProcessException e1) {
93
				messageBoxError("error_creating_algorithm");
94
				return;
95
			}
96
			
97
			String path = getPath();
98
			if(path == null)
99
				return;
100
			
101
			process.setActions(this);
102
			process.addParam(ReprojectProcess.RASTER_STORE, ((FLyrRaster)lyr).getDataStore());
103
			process.addParam(ReprojectProcess.SIZEX, w);
104
			process.addParam(ReprojectProcess.SIZEY, h);
105
			process.addParam(ReprojectProcess.PATH, path);
106
			process.addParam(ReprojectProcess.SRC_PROJECTION, dataModel.getSrcProjection());
107
			process.addParam(ReprojectProcess.DST_PROJECTION, dataModel.getDstProjection());
108
			process.addParam(ReprojectProcess.CELLSIZE, dataModel.getCellSize());
109
			process.addParam(ReprojectProcess.INTERPOLATION, dataModel.getInterpolationMethodSelected());
110
			process.start();
111
			
112
		}
113
		if(reprojectPanel.getObjectSelected(e.getSource()) == RasterReprojectionPanel.BUTTON_CANCEL) {
114
			if(window != null) {
115
				PluginServices.getMDIManager().closeWindow(window);
116
				window = null;
117
			}
118
		}
119
	}
120
	
121
	/**
122
	 * Gets the path to the file
123
	 * @return
124
	 */
125
	private String getPath() {
126
		String file = reprojectPanel.getFileSelected();
127
		if(file == null || file.equals("") || !file.matches("[a-zA-Z0-9_]*")) {
128
			messageBoxError(
129
					Messages.getText("file_name_not_valid") + 
130
					"\n" + file + "\n " + 
131
					Messages.getText("valid_characters") + 
132
					" a-zA-Z0-9_");
133
			return null;
134
		}
135
		
136
		if(!file.endsWith(".tif"))
137
			file += ".tif";
138
		String dir = reprojectPanel.getDirectorySelected();
139
		if(!new File(dir).exists()) {
140
			messageBoxError("directory_does_not_exists");
141
			return null;
142
		}
143
		
144
		if(new File(dir + File.separator + file).exists()) {
145
			if(!RasterSwingLibrary.messageBoxYesOrNot(
146
					Messages.getText("file_exists") + 
147
					"\n " + (dir + File.separator + file) + "\n " + 
148
					Messages.getText("overwrite"), null))
149
			return null;
150
		}
151
		return (dir + File.separator + file);
152
	}
153
	
154
	/**
155
	 * Shows an error dialog with a text and a accept button 
156
	 * @param msg Message to show in the dialog
157
	 * @param parentWindow Parent window
158
	 */
159
	public static void messageBoxError(String msg) {
160
		String string = Messages.getText("accept");
161
		Object[] options = {string};
162
		JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
163
					"<html>" + Messages.getText(msg).replaceAll("\n", "<br>") + "</html>",
164
					Messages.getText("confirmacion"),
165
					JOptionPane.OK_OPTION,
166
					JOptionPane.ERROR_MESSAGE,
167
					null,
168
					options,
169
					string);
170
	}
171

  
172
	@SuppressWarnings("unchecked")
173
	public void end(Object params) {
174
		if(window != null) {
175
			PluginServices.getMDIManager().closeWindow(window);
176
			window = null;
177
		}
178
		if(params instanceof HashMap<?, ?>) {
179
			HashMap<String, Object>  map = (HashMap<String, Object>) params;
180
			String fName = (String)map.get(ReprojectProcess.FILENAME);
181
			long milis = (Long)map.get(ReprojectProcess.TIME);
182
			processFinalize(fName, milis);
183
			RasterSwingLocator.getSwingManager().showSummaryProcessDialog(fName, milis);
184
		}
185

  
186
	}
187
	
188
	/**
189
	 * Acciones que se realizan al finalizar de crear los recortes de imagen.
190
	 * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
191
	 */
192
	private void processFinalize(String fileName, long milis) {
193
		if (!new File(fileName).exists())
194
			return;
195

  
196
		String viewName = getViewName();
197
		if(viewName != null) {
198
			if (RasterSwingLibrary.messageBoxYesOrNot("cargar_toc", null)) {
199
				try {
200
					RasterMainPluginUtils.loadLayer(viewName, fileName, null);
201
				} catch (RasterNotLoadException e) {
202
					messageBoxError("error_load_layer");
203
				}
204
			}
205
		}
206
	}
207
	
208
	/**
209
	 * Gets the view 
210
	 * @return
211
	 */
212
	private String getViewName() {
213
		IWindow[] w = PluginServices.getMDIManager().getAllWindows();
214
		for (int i = 0; i < w.length; i++) {
215
			if(w[i] instanceof AbstractViewPanel) {
216
				FLayers lyrs = ((AbstractViewPanel)w[i]).getMapControl().getMapContext().getLayers();
217
				for (int j = 0; j < lyrs.getLayersCount(); j++) {
218
					FLayer lyr = lyrs.getLayer(j);
219
					if(this.lyr == lyr) {
220
						return PluginServices.getMDIManager().getWindowInfo((AbstractViewPanel) w[i]).getTitle();
221
					}
222
				}
223
			}
224
		}
225
		return null;
226
	}
227

  
228
	public void interrupted() {
229
		
230
	}
231
	
232
	public void updateProgress(int current, int total) {
233
		
234
	}
235
}
0 236

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/ReprojectWindow.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2011-2012 Prodevelop S.L
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 */
21
package org.gvsig.raster.reproject.app;
22

  
23
import java.awt.BorderLayout;
24

  
25
import javax.swing.JComponent;
26
import javax.swing.JPanel;
27

  
28
import org.gvsig.andami.ui.mdiManager.IWindow;
29
import org.gvsig.andami.ui.mdiManager.WindowInfo;
30

  
31

  
32
/**
33
 * @author Nacho Brodin (nachobrodin@gmail.com)
34
 */
35
public class ReprojectWindow extends JPanel implements IWindow {
36
    
37
    private static final long serialVersionUID = -4401123724140025094L;
38

  
39
    private WindowInfo info;
40

  
41
    private Object profile = WindowInfo.EDITOR_PROFILE;
42

  
43
    public ReprojectWindow(JComponent panel, String title, int w, int h) {
44
        this.setLayout(new BorderLayout());
45
        add(panel, BorderLayout.CENTER);
46

  
47
        info = new WindowInfo(WindowInfo.PALETTE | WindowInfo.RESIZABLE);
48
        info.setTitle(title);
49
        info.setWidth(w);
50
        info.setHeight(h);
51
    }
52

  
53
    public WindowInfo getWindowInfo() {
54
        return info;
55
    }
56

  
57
    public Object getWindowProfile() {
58
        return profile;
59
    }
60
}
0 61

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/toolbox/ReprojectToolboxAction.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 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

  
25

  
26
package org.gvsig.raster.reproject.app.toolbox;
27

  
28
import javax.swing.ImageIcon;
29

  
30
import org.gvsig.andami.IconThemeHelper;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.geoprocess.sextante.gui.core.GUIFactory;
33
import org.gvsig.i18n.Messages;
34
import org.gvsig.raster.reproject.app.ReprojectTocMenuEntry;
35

  
36
/**
37
 * Input in Sextante framework for Principal Components tool
38
 * 
39
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
40
 */
41
public class ReprojectToolboxAction extends AbstractToolboxAction {
42
	
43
	public ReprojectToolboxAction() {
44
		ImageIcon ico = IconThemeHelper.getImageIcon("gvsig-icon16x16");
45
		GUIFactory.registerExternalTool(Messages.getText("gv_tools"), ico, this);
46
	}
47
	
48
	@Override
49
	public void execute() {
50
		if(!super.loadLayer())
51
			return;
52
		ReprojectTocMenuEntry.getSingleton().execute(null, new FLayer[]{lyr}); 
53
	}
54

  
55
	@Override
56
	public String getName() {
57
		return Messages.getText("reproject_layer");
58
	}
59

  
60
	public ImageIcon getIcon() {
61
		return (ImageIcon)ReprojectTocMenuEntry.getSingleton().getIcon();
62
	}
63
	
64
	public boolean isPluginInstalled() {
65
		try {
66
			ReprojectTocMenuEntry.getSingleton();
67
		} catch(Exception e) {
68
			return false;
69
		} catch(Error e) {
70
			return false;
71
		}
72
		return true;
73
	}
74
}
0 75

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/toolbox/AbstractToolboxAction.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 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

  
25
package org.gvsig.raster.reproject.app.toolbox;
26

  
27
import org.gvsig.andami.PluginServices;
28
import org.gvsig.andami.ui.mdiManager.IWindow;
29
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
30
import org.gvsig.fmap.mapcontext.MapContext;
31
import org.gvsig.fmap.mapcontext.layers.FLayers;
32
import org.gvsig.geoprocess.lib.sextante.dataObjects.FLyrRasterIRasterLayer;
33
import org.gvsig.i18n.Messages;
34
import org.gvsig.raster.fmap.layers.FLyrRaster;
35
import org.gvsig.raster.swing.RasterSwingLibrary;
36

  
37
import es.unex.sextante.dataObjects.IRasterLayer;
38
import es.unex.sextante.gui.core.SextanteGUI;
39
import es.unex.sextante.gui.core.ToolboxAction;
40

  
41
/**
42
 * Base class for toolBox actions
43
 *
44
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
45
 */
46
public abstract class AbstractToolboxAction extends ToolboxAction {
47
	protected FLyrRaster             lyr = null;
48

  
49
	@Override
50
	public String getGroup() {
51
		return Messages.getText("group_tools");
52
	}
53

  
54

  
55
	@Override
56
	public boolean isActive() {
57
		IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
58
		for (int i = 0; i < windows.length; i++) {
59
			if(windows[i] instanceof AbstractViewPanel) {
60
				FLayers lyrs = ((AbstractViewPanel)windows[i]).getMapControl().getMapContext().getLayers();
61
				for (int j = 0; j < lyrs.getLayersCount(); j++) {
62
					if(lyrs.getLayer(j) instanceof FLyrRaster)
63
						return true;
64
				}
65
			}
66
		}
67
		return false;
68
	}
69

  
70
	/**
71
	 * Returns true if the plugin which gives the functionality is installed
72
	 * in gvSIG
73
	 * @return
74
	 */
75
	public abstract boolean isPluginInstalled();
76

  
77
	/**
78
	 * Loads the raster layer for the tool
79
	 * @return
80
	 */
81
	public boolean loadLayer() {
82
		if(!isPluginInstalled()) {
83
			RasterSwingLibrary.messageBoxError(Messages.getText("plugin_not_installed"), null);
84
			return false;
85
		}
86

  
87
		if(!isActive()) {
88
			RasterSwingLibrary.messageBoxError(Messages.getText("layer_not_valid"), null);
89
			return false;
90
		}
91

  
92
		boolean existsRasterButNotActive = false;
93
		lyr = null;
94
		IWindow[] windows = PluginServices.getMDIManager().getOrderedWindows();
95
		MapContext mapCtx = null;
96
		for (int i = 0; i < windows.length; i++) {
97
			if(windows[i] instanceof AbstractViewPanel) {
98
				mapCtx = ((AbstractViewPanel)windows[i]).getMapControl().getMapContext();
99
				break;
100
			}
101
		}
102

  
103
		IRasterLayer[] layers = SextanteGUI.getInputFactory().getRasterLayers();
104
		for (int i = 0; i < layers.length; i++) {
105
			FLyrRaster l = (FLyrRaster)((FLyrRasterIRasterLayer)layers[i]).getBaseDataObject();
106
			existsRasterButNotActive = true;
107
			if(l.isActive() && mapCtx == l.getMapContext()) {
108
				existsRasterButNotActive = false;
109
				lyr = l;
110
				break;
111
			}
112
		}
113

  
114
		if(existsRasterButNotActive) {
115
			RasterSwingLibrary.messageBoxError(Messages.getText("raster_layer_not_active"), null);
116
			return false;
117
		}
118

  
119
		return true;
120
	}
121

  
122
}
0 123

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/toolbox/ToolboxReprojectLoader.java
1
package org.gvsig.raster.reproject.app.toolbox;
2

  
3
import java.lang.reflect.Constructor;
4
import java.lang.reflect.InvocationTargetException;
5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
9
/**
10
 * Loader for this tool in the toolbox dialog
11
 * 
12
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
13
 */
14
public class ToolboxReprojectLoader {
15
	private Logger log      = LoggerFactory.getLogger(ToolboxReprojectLoader.class); 
16
	private String errorMsg = "The reprojection tool are not been added in the toolbox";
17

  
18
	public void registerTool() {
19
		try {
20
			Class<?> c = Class.forName("org.gvsig.raster.reproject.app.toolbox.ReprojectToolboxAction");
21
			Constructor<?> constructor = c.getConstructor();
22
			constructor.newInstance();
23
		} catch (ClassNotFoundException e) {
24
			log.info(errorMsg, e);
25
		} catch (SecurityException e) {
26
			log.info(errorMsg, e);
27
		} catch (NoSuchMethodException e) {
28
			log.info(errorMsg, e);
29
		} catch (IllegalArgumentException e) {
30
			log.info(errorMsg, e);
31
		} catch (InstantiationException e) {
32
			log.info(errorMsg, e);
33
		} catch (IllegalAccessException e) {
34
			log.info(errorMsg, e);
35
		} catch (InvocationTargetException e) {
36
			log.info(errorMsg, e);
37
		} catch (NoClassDefFoundError e) {
38
			log.info("Geoprocess are not installed." + errorMsg, e);
39
		}
40
	}
41

  
42
}
0 43

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/PrepareLayerAskProjection.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app;
23

  
24
import java.io.File;
25
import java.util.HashMap;
26
import java.util.Map;
27

  
28
import org.cresques.cts.IProjection;
29
import org.gvsig.app.prepareAction.PrepareContext;
30
import org.gvsig.app.prepareAction.PrepareContextView;
31
import org.gvsig.app.prepareAction.PrepareDataStoreParameters;
32
import org.gvsig.app.prepareAction.PrepareLayer;
33
import org.gvsig.fmap.crs.CRSFactory;
34
import org.gvsig.fmap.dal.DALLocator;
35
import org.gvsig.fmap.dal.DataManager;
36
import org.gvsig.fmap.dal.DataStoreParameters;
37
import org.gvsig.fmap.dal.coverage.RasterLocator;
38
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
39
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
40
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
41
import org.gvsig.fmap.dal.coverage.util.CRSUtils;
42
import org.gvsig.fmap.mapcontext.MapContextLocator;
43
import org.gvsig.fmap.mapcontext.MapContextManager;
44
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
45
import org.gvsig.fmap.mapcontext.layers.FLayer;
46
import org.gvsig.raster.algorithm.RasterBaseAlgorithmLibrary;
47
import org.gvsig.raster.algorithm.process.DataProcess;
48
import org.gvsig.raster.algorithm.process.IProcessActions;
49
import org.gvsig.raster.algorithm.process.ProcessException;
50
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
51
import org.gvsig.raster.fmap.layers.FLyrRaster;
52
import org.gvsig.raster.mainplugin.config.Configuration;
53
import org.gvsig.raster.reproject.algorithm.ReprojectProcess;
54
import org.gvsig.raster.reproject.app.preparelayer.RasterProjectionActionsDialog;
55
import org.gvsig.raster.reproject.app.preparelayer.ReprojectionQueue;
56
import org.gvsig.raster.swing.RasterSwingLibrary;
57
import org.gvsig.tools.exception.BaseException;
58
import org.slf4j.Logger;
59
import org.slf4j.LoggerFactory;
60

  
61
public class PrepareLayerAskProjection implements PrepareDataStoreParameters, PrepareLayer, IProcessActions {
62
	protected CRSUtils              crsUtil                       = RasterLocator.getManager().getCRSUtils(); 
63
	private boolean                 changeReprojectionOption      = true;
64
	private int                     lastReprojectionOption        = RasterDataParameters.NEW_PROJETION_TO_THE_LAYER;
65
	private ReprojectionQueue       queue                         = ReprojectionQueue.getSingleton();
66
	private Logger                  log                           = LoggerFactory.getLogger(PrepareLayerAskProjection.class);
67
	
68
	@SuppressWarnings("deprecation")
69
	public DataStoreParameters prepare(DataStoreParameters storeParameters,
70
			PrepareContext context) throws BaseException {
71
		if(!(storeParameters instanceof RasterDataParameters))
72
			return storeParameters;
73
		
74
		DataManager dataManager = DALLocator.getDataManager();
75
		RasterDataStore dataStore = (RasterDataStore)dataManager.createStore(storeParameters);
76
		
77
		if (Configuration.getValue("general_ask_projection", Boolean.valueOf(false)).booleanValue()) {
78
			IProjection proj = readProjection(dataStore);
79
			if(proj != null) {
80
				//((RasterDataParameters)storeParameters).setDynValue("CRS", proj);
81
				compareProjections(proj, context.getViewProjection(), dataStore);
82
			}
83
		}
84
		
85
		if(dataStore != null)
86
			dataStore.close();
87
		
88
		if(((RasterDataParameters)storeParameters).getReprojectionOption() == RasterDataParameters.NEW_PROJETION_TO_THE_LAYER) {
89
			IProjection viewProjection = context.getViewProjection();
90
			if(viewProjection != null) {
91
				((RasterDataParameters)storeParameters).setSRS(viewProjection);
92
				((RasterDataParameters)storeParameters).setSRSID(viewProjection.getAbrev());
93
			} else {
94
				((RasterDataParameters)storeParameters).setSRS(null);
95
				((RasterDataParameters)storeParameters).setSRSID(null);
96
			}
97
		}
98
			
99
		if(((RasterDataParameters)storeParameters).getReprojectionOption() == RasterDataParameters.NOT_LOAD)
100
			return null;
101
		
102
		return storeParameters;
103
	}
104
	
105
	public void post(DataStoreParameters storeParameters, PrepareContext context) {
106
		changeReprojectionOption = true;
107
	}
108
	
109
	public void pre(DataStoreParameters storeParameters, PrepareContext context) {
110
	}
111
	
112
	/**
113
	 * If this flag is true the reprojection options can be changed by the user 
114
	 * @return
115
	 */
116
	public boolean getChangeOption() {
117
		return changeReprojectionOption;
118
	}
119
	
120
	/**
121
	 * If this flag is true the reprojection options can be changed by the user 
122
	 * @param changeOption
123
	 */
124
	public void setChangeOption(boolean changeOption) {
125
		this.changeReprojectionOption = changeOption;
126
	}
127
	
128
	public FLayer prepare(FLayer layer, PrepareContextView context) {
129
		if (!(layer instanceof DefaultFLyrRaster))
130
			return layer;
131
		DefaultFLyrRaster lyrRaster = (DefaultFLyrRaster) layer;
132
		String layerName = lyrRaster.getName();
133

  
134
		RasterDataParameters params = (RasterDataParameters)lyrRaster.getDataStore().getParameters();
135
		int repOption = params.getReprojectionOption();
136
		
137
		if(repOption == RasterDataParameters.REPROJECT_DATA) {
138
			RasterDataParameters rasterParams = reproject(lyrRaster, context.getViewProjection());
139
			if(rasterParams != null) {
140
				MapContextManager mcm = MapContextLocator.getMapContextManager();
141
				try {
142
					return (DefaultFLyrRaster) mcm.createLayer(layerName, rasterParams);
143
				} catch (LoadLayerException e) {
144
					return lyrRaster;
145
				}
146
				/*DefaultFLyrRaster lyr = new DefaultFLyrRaster();
147
				DataManager dataManager = DALLocator.getDataManager();
148
				try {
149
					DataStore dataStore = dataManager.createStore(rasterParams);
150
					lyr.setName(layerName);
151
					lyr.setDataStore(dataStore);
152
					return lyr;
153
				} catch (ValidateDataParametersException e) {
154
					return lyrRaster;
155
				} catch (InitializeException e) {
156
					return lyrRaster;
157
				} catch (ProviderNotRegisteredException e) {
158
					return lyrRaster;
159
				} catch (LoadLayerException e) {
160
					return lyrRaster;
161
				}*/
162
			}
163
		} else if(repOption == RasterDataParameters.REPROJECT_VIEW) {
164
			try {
165
				if (lyrRaster != null && lyrRaster.readProjection() != null) {
166
					context.getMapControl().setProjection(lyrRaster.readProjection());
167
					lyrRaster.setVisible(true);
168
				}
169
			} catch (RasterDriverException e) {
170
				RasterSwingLibrary.messageBoxError("Error reading the projection", null, e);
171
			}
172
		} else if(repOption == RasterDataParameters.DONT_CHANGE_PROJECTION) {
173
			lyrRaster.setVisible(true);
174
			return lyrRaster;
175
		} else if(repOption == RasterDataParameters.NEW_PROJETION_TO_THE_LAYER) {
176
			IProjection proj = context.getViewProjection();
177
			if(proj != null)
178
				lyrRaster.setProjection(proj, false);
179
			lyrRaster.setVisible(true);
180
			return lyrRaster;
181
		}
182

  
183
		return lyrRaster;
184
	}
185
	
186
	private RasterDataParameters reproject(FLyrRaster lyrRaster, IProjection dstProj) {
187
		RasterDataParameters params = (RasterDataParameters)lyrRaster.getDataStore().getParameters();
188
		int repOption = params.getReprojectionOption();
189

  
190
		if(repOption == RasterDataParameters.REPROJECT_DATA) {
191
			IProjection srcProj = readProjection(lyrRaster.getDataStore());
192
			if(srcProj == null)
193
				return null;
194

  
195
			String uri = params.getURI();
196
			uri = uri.substring(0, uri.lastIndexOf(".")) + "_" + dstProj.getAbrev() + uri.substring(uri.lastIndexOf("."));
197
			uri = uri.replace(':', '_');
198

  
199
			if(!new File(uri).exists()) {					
200
				DataProcess process = null;
201
				try {
202
					process = RasterBaseAlgorithmLibrary.getManager().createRasterTask("RasterReprojectionProcess");
203
				} catch (ProcessException e1) {
204
					RasterSwingLibrary.messageBoxError("error_creating_algorithm", null, e1);
205
					return params;
206
				}
207
				process.setActions(this);
208
				process.addParam(ReprojectProcess.RASTER_STORE, lyrRaster.getDataStore());
209
				process.addParam(ReprojectProcess.SIZEX, 0); //Calculo autom?tico de tama?o
210
				process.addParam(ReprojectProcess.SIZEY, 0);
211
				process.addParam(ReprojectProcess.PATH, uri);
212
				process.addParam(ReprojectProcess.SRC_PROJECTION, srcProj);
213
				process.addParam(ReprojectProcess.DST_PROJECTION, dstProj);
214
				process.addParam(ReprojectProcess.CELLSIZE, lyrRaster.getDataStore().getCellSize());
215

  
216
				//Despierta la cola que reproyecta im?genes
217
				synchronized (queue) {
218
					queue.add(process, this);	
219
					queue.notify();
220
				}
221

  
222
				//Se suspende hasta que la cola haya terminado
223
				try {
224
					synchronized (this) {
225
						this.wait();
226
					}
227
				} catch (InterruptedException e) {
228
				}
229

  
230
				if(process.getResult() != null) {
231
					HashMap<String, Object> map = (HashMap<String, Object>)process.getResult();
232
					String filename = (String)map.get(ReprojectProcess.FILENAME);
233
					params.setURI(filename);
234
					return params;
235
				}
236
			} else {
237
				params.setURI(uri);
238
				return params;
239
			}
240

  
241
		} else if(repOption == RasterDataParameters.REPROJECT_VIEW) {
242
			//Esto se cambia en el prepare que tiene acceso al mapcontrol. Este prepare es a nivel de datos
243
		} 
244
		return null;
245
	}
246

  
247
	public void end(Object param) {
248
		
249
	}
250

  
251
	/**
252
	 * Compares two projections and show a dialog to the user to make a decision
253
	 * @param lyrProj
254
	 * @param viewProj
255
	 */
256
	private void compareProjections(IProjection lyrProj, IProjection viewProj, RasterDataStore dataStore) {
257
		if(!getChangeOption() || lyrProj == null || viewProj == null) {
258
			((RasterDataParameters)dataStore.getParameters()).setReprojectionOption(lastReprojectionOption);
259
			return;
260
		}
261

  
262
		/*
263
		 * Si las proyecciones de vista y raster son distintas se lanza el
264
		 * dialogo de selecci?n de opciones. Este dialogo solo se lanza en caso
265
		 * de que el checkbox de aplicar a todos los ficheros no haya sido
266
		 * marcado. En este caso para el resto de ficheros de esa selecci?n se
267
		 * har? la misma acci?n que se hizo para el primero.
268
		 */
269
		if (!viewProj.getAbrev().endsWith(lyrProj.getAbrev())) {
270
			String layerName = dataStore.getName().substring(dataStore.getName().lastIndexOf(File.separator) + 1, dataStore.getName().length());
271
			RasterProjectionActionsDialog dialog = new RasterProjectionActionsDialog(
272
					dataStore.isReproyectable(), layerName, RasterDataParameters.REPROJECT_VIEW);
273
			if (dialog != null) {
274
				lastReprojectionOption = dialog.getRasterProjectionActionsPanel().getSelection();
275
				((RasterDataParameters)dataStore.getParameters()).setReprojectionOption(lastReprojectionOption);
276
				setChangeOption(!dialog.getChangeProjectionOption());
277
			}
278
		}
279
	}
280
	
281
	/**
282
	 * Reads the projection from a DataStore
283
	 * @param dataStore
284
	 * @return
285
	 * @throws RasterDriverException
286
	 */
287
	@SuppressWarnings("deprecation")
288
	private IProjection readProjection(RasterDataStore dataStore) {
289
		try {
290
			crsUtil.setCRSFactory(CRSFactory.cp);
291
			if( dataStore == null )
292
				return null;
293
			return crsUtil.convertWktToIProjection(dataStore.getWktProjection());
294
		} catch (Exception e) {
295
			//Si ha habido alg?n problema con la conversi?n metemos un log y que devuelva null 
296
			log.info("Problems converting from WKT to IProjection", e);
297
		} catch (Error e) {
298
			log.info("Problems converting from WKT to IProjection", e);
299
		}
300
		return null;
301
	}
302

  
303
	public String getDescription() {
304
		return "Prepare projection for Raster Layer";
305
	}
306

  
307
	public String getName() {
308
		return "PrepareRasterLayerProjection";
309
	}
310

  
311
	public Object create() {
312
		return this;
313
	}
314

  
315
	public Object create(Object[] args) {
316
		return this;
317
	}
318

  
319
	@SuppressWarnings("rawtypes")
320
	public Object create(Map args) {
321
		return this;
322
	}
323

  
324
	public void interrupted() {
325
	}
326
	
327
	public void updateProgress(int current, int total) {
328
		
329
	}
330
}
0 331

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/ReprojectExtension.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app;
23

  
24
import org.gvsig.andami.IconThemeHelper;
25
import org.gvsig.andami.PluginServices;
26
import org.gvsig.andami.plugins.Extension;
27
import org.gvsig.andami.ui.mdiManager.IWindow;
28
import org.gvsig.app.ApplicationLocator;
29
import org.gvsig.app.ApplicationManager;
30
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
31
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.fmap.mapcontext.layers.FLayers;
34
import org.gvsig.raster.fmap.layers.FLyrRaster;
35
import org.gvsig.raster.fmap.layers.ILayerState;
36
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
37
import org.gvsig.raster.reproject.app.toolbox.ToolboxReprojectLoader;
38
import org.gvsig.tools.ToolsLocator;
39
import org.gvsig.tools.extensionpoint.ExtensionBuilder;
40
import org.gvsig.tools.extensionpoint.ExtensionPoint;
41
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
42

  
43
/**
44
 * Extension for adding grid netcdf support to gvSIG.
45
 * @author Nacho Brodin (nachobrodin@gmail.com)
46
 */
47
public class ReprojectExtension extends Extension {
48
	private ExtensionPoint      genericToolBarMenuExtensionPoint  = null;
49
	private static String       action                            = "Reproject";
50

  
51
	public void initialize() {
52
		IconThemeHelper.registerIcon("action", "tools-raster-reproject", this);
53
		
54
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
55
		ExtensionPoint point = extensionPoints.add("GenericToolBarMenu");
56
		point.append(action, "", ReprojectTocMenuEntry.getSingleton());
57
		
58
		ApplicationManager appGvSigMan = ApplicationLocator.getManager();
59
		appGvSigMan.registerPrepareOpenLayer(new PrepareLayerAskProjection());
60
		appGvSigMan.registerPrepareOpenDataStoreParameters(new PrepareLayerAskProjection());
61
	}
62
	
63
	public void postInitialize() {
64
		new ToolboxReprojectLoader().registerTool();
65
	}
66

  
67
	public void execute(String actionCommand) {
68
		//Las entradas en GenericToolBarModule est?n registradas con la misma etiqueta que la del actionCommand
69
		//De esta forma pueden recuperarse los TocMenuEntry del punto de extensi?n y ejecutar la acci?n a
70
		//trav?s de este.
71
		ExtensionBuilder ext = getGenericToolBarMenuExtensionPoint().get(actionCommand).getBuilder();
72
		if(ext != null && ext instanceof AbstractTocContextMenuAction) {
73
			IWindow w = PluginServices.getMDIManager().getActiveWindow();
74
			if(w instanceof AbstractViewPanel) {
75
				FLayers lyrs = ((AbstractViewPanel)w).getMapControl().getMapContext().getLayers();
76
				FLayer[] actives = lyrs.getActives();
77
				((AbstractTocContextMenuAction)ext).execute(null, actives);
78
			}
79
		}
80
	}
81

  
82
	public boolean isEnabled() {
83
		IWindow w = PluginServices.getMDIManager().getActiveWindow();
84
		if(w instanceof AbstractViewPanel) {
85
			FLayers lyrs = ((AbstractViewPanel)w).getMapControl().getMapContext().getLayers();
86
			FLayer[] actives = lyrs.getActives();
87
			if(actives != null && actives.length > 0) {
88
				for (int i = 0; i < actives.length; i++) {
89
					if(actives[i] instanceof FLyrRaster && ((ILayerState)actives[i]).isOpen()) {
90
						return true;
91
					}
92
				}
93
			}
94
		}
95
		return false;
96
	}
97

  
98
	public boolean isVisible() {
99
		IWindow w = PluginServices.getMDIManager().getActiveWindow();
100
		if(w instanceof AbstractViewPanel) {
101
			FLayers lyrs = ((AbstractViewPanel)w).getMapControl().getMapContext().getLayers();
102
			FLayer[] actives = lyrs.getActives();
103
			if(actives != null && actives.length > 0) {
104
				for (int i = 0; i < actives.length; i++) {
105
					if(actives[i] instanceof FLyrRaster && 
106
						((IRasterLayerActions)actives[i]).isActionEnabled(IRasterLayerActions.REPROJECT)) {
107
						return true;
108
					}
109
				}
110
			}
111
		}
112
		return false;
113
	}
114
	
115
	public ExtensionPoint getGenericToolBarMenuExtensionPoint() {
116
		if(genericToolBarMenuExtensionPoint == null) {
117
			ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
118
			genericToolBarMenuExtensionPoint = extensionPoints.get("GenericToolBarMenu");
119
		}
120
		return genericToolBarMenuExtensionPoint;
121
	}
122
}
0 123

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/ReprojectTocMenuEntry.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app;
23

  
24
import javax.swing.Icon;
25

  
26
import java.awt.Dimension;
27

  
28
import org.gvsig.andami.IconThemeHelper;
29
import org.gvsig.andami.PluginServices;
30
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
31
import org.gvsig.app.project.documents.view.toc.ITocItem;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.i18n.Messages;
34
import org.gvsig.raster.fmap.layers.FLyrRaster;
35
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
36
import org.gvsig.raster.mainplugin.toolbar.IGenericToolBarMenuItem;
37
import org.gvsig.raster.reproject.algorithm.RasterReprojectionSwingLocator;
38
import org.gvsig.raster.reproject.algorithm.swing.api.RasterReprojectionPanel;
39
import org.gvsig.raster.reproject.algorithm.swing.api.ReprojectionPanelDataModel;
40

  
41

  
42
/**
43
 * @author Nacho Brodin (nachobrodin@gmail.com)
44
 */
45
public class ReprojectTocMenuEntry extends AbstractTocContextMenuAction 
46
	implements IGenericToolBarMenuItem {
47
	static private ReprojectTocMenuEntry    singleton        = null;
48
	private ReprojectListener               listener         = null;
49

  
50
	public String getGroup() {
51
		return "GeoRaster";
52
	}
53

  
54
	public int getGroupOrder() {
55
		return 10;
56
	}
57

  
58
	public int getOrder() {
59
		return 10;
60
	}
61

  
62
	public String getText() {
63
		return Messages.getText("toc_reproject");
64
	}
65
	
66
	/**
67
	 * Devuelve un objeto unico a dicha clase
68
	 * @return
69
	 */
70
	static public ReprojectTocMenuEntry getSingleton() {
71
		if (singleton == null)
72
			singleton = new ReprojectTocMenuEntry();
73
		return singleton;
74
	}
75

  
76
	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
77
		return true;
78
	}
79

  
80
	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
81
		if ((selectedItems == null) || (selectedItems.length != 1))
82
			return false;
83

  
84
		if (!(selectedItems[0] instanceof IRasterLayerActions))
85
			return false;
86

  
87
		return ((IRasterLayerActions) selectedItems[0]).isActionEnabled(IRasterLayerActions.REPROJECT);
88
	}
89

  
90
	/**
91
	 * M?todo que se ejecuta cuando se pulsa la entrada en el men? contextual del TOC 
92
	 * correspondiente a "Zoom a la resoluci?n del raster". Aqu? se crear? el mapTool si 
93
	 * no se ha hecho antes y se cargar?.
94
	 */
95
	public void execute(ITocItem item, FLayer[] selectedItems) {
96
		if (selectedItems.length == 1) {
97
			FLayer lyr = selectedItems[0];
98
			if (lyr instanceof FLyrRaster) {
99
				ReprojectionPanelDataModel dataModel = new ReprojectionPanelDataModelImpl((FLyrRaster)lyr);
100
				RasterReprojectionPanel reprojectPanel = RasterReprojectionSwingLocator.getSwingManager().createRasterReprojectPanel(dataModel);
101
				Dimension dimension = reprojectPanel.getComponent().getPreferredSize();
102
				
103
				ReprojectWindow window = new ReprojectWindow(reprojectPanel.getComponent(), Messages.getText("reprojection"), dimension.width, dimension.height);
104
				listener = new ReprojectListener(lyr, dataModel, window, reprojectPanel);
105
				reprojectPanel.addButtonsListener(listener);
106
				PluginServices.getMDIManager().addCentredWindow(window);
107
			}
108
		}
109
	}
110
	
111
	public Icon getIcon() {
112
		return IconThemeHelper.getImageIcon("tools-raster-reproject");
113
	}
114

  
115
	public void interrupted() {
116
		
117
	}
118
}
0 119

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/preparelayer/ReprojectionQueue.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app.preparelayer;
23

  
24
import org.gvsig.fmap.dal.coverage.RasterLocator;
25
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
26
import org.gvsig.raster.algorithm.process.IProcessActions;
27
import org.gvsig.raster.algorithm.process.ProcessException;
28
import org.gvsig.raster.algorithm.process.DataProcess;
29
import org.gvsig.raster.util.Queue;
30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
32

  
33
/**
34
 * Cola de procesos de ejecuci?n exclusiva. Los procesos de esta lista se ir?n ejecutando
35
 * por orden de llegada impidiendo que se ejecuten dos al mismo tiempo.
36
 * 
37
 * 16/05/2008
38
 * @author Nacho Brodin nachobrodin@gmail.com
39
 */
40
public class ReprojectionQueue extends Thread {
41
	private Queue                     queue                       = new Queue();
42
	private DataProcess             executionProcess            = null;
43
	static private ReprojectionQueue  singleton                   = null;
44
	private Logger                    logger                      = LoggerFactory.getLogger(ReprojectionQueue.class.toString());
45
	
46
	/**
47
	 * Devuelve una instancia al unico objeto de UniqueProcessQueue que puede existir.
48
	 * @return
49
	 */
50
	static public ReprojectionQueue getSingleton() {
51
		if(singleton == null) {
52
			singleton = new ReprojectionQueue();
53
			synchronized (singleton) {
54
				singleton.start();
55
			}
56
		}
57
		return singleton;
58
	}
59
	
60
	public void run() {
61
		//Cuando arranca el thread se duerme porque la cola est? vacia
62
		synchronized (this) {
63
			try {
64
				wait();
65
			} catch (InterruptedException e) {
66
			}
67
		}
68
		
69
		while(true) {
70
			if(queue.size() >= 1) {
71
				Object[] obj = (Object[])queue.get();
72
				executionProcess = ((DataProcess) obj[0]);
73
				if (executionProcess != null) {
74
					executionProcess.showIncrementableWindow();
75
					try {
76
						executionProcess.execute();
77
					} catch (ProcessInterruptedException e) {
78
					} catch (ProcessException e) {
79
						logger.debug(RasterLocator.getManager().getRasterUtils().getTrace(e));
80
					}
81
					executionProcess.getIncrementableTask().processFinalize();
82
					
83
					//Despierta el objeto que llam? cuando termina el calculo
84
					//para que pueda recoger los resultados
85
					synchronized (obj[1]) {
86
						obj[1].notify();	
87
					}
88
					
89
					//Cuando la cola est? vacia se suspende el hilo.
90
					if(queue.size() <= 0) {
91
						synchronized (this) {
92
							try {
93
								this.wait();
94
							} catch (InterruptedException e) {
95
							}
96
						}
97
					}
98
						
99
				}
100
			}
101
		}
102
	}	
103
	
104
	/**
105
	 * A?ade un proceso a la cola.
106
	 * @param id Identificador del proceso
107
	 * @param process Proceso
108
	 * @throws InterruptedException 
109
	 */
110
	public synchronized void add(DataProcess process, IProcessActions obj) {
111
		queue.put(new Object[]{process, obj});
112
	}
113

  
114
}
0 115

  
org.gvsig.raster.reproject/tags/org.gvsig.raster.reproject-2.2.14/org.gvsig.raster.reproject.app.reprojectclient/src/main/java/org/gvsig/raster/reproject/app/preparelayer/RasterProjectionActionsDialog.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.reproject.app.preparelayer;
23

  
24
import java.awt.BorderLayout;
25
import java.awt.Point;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28

  
29
import javax.swing.JPanel;
30

  
31
import org.gvsig.andami.PluginServices;
32
import org.gvsig.andami.ui.mdiManager.IWindow;
33
import org.gvsig.andami.ui.mdiManager.IWindowListener;
34
import org.gvsig.andami.ui.mdiManager.WindowInfo;
35
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
36
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
37
import org.gvsig.raster.mainplugin.RasterMainPluginUtils;
38

  
39
/**
40
 * Dialogo de opciones de sobre la proyecci?n de la capa raster y la vista.
41
 *
42
 * @author Nacho Brodin nachobrodin@gmail.com
43
 */
44
public class RasterProjectionActionsDialog extends JPanel implements IWindow, IWindowListener, ActionListener {
45
	private static final long            serialVersionUID       = 6954391896451933337L;
46
	private RasterProjectionActionsPanel panel                  = null;
47
	private Point                        posWindow              = null;
48
	private int                          widthWindow            = 390;
49
	private int                          heightWindow           = 260;
50
	private boolean                      layerIsReprojectable   = true;
51
	private String                       layerName              = null;
52
	private int                          defaultAction          = RasterDataParameters.NEW_PROJETION_TO_THE_LAYER;
53

  
54
	/**
55
	 * Constructor.
56
	 */
57
	public RasterProjectionActionsDialog(boolean layerIsReprojectable, String layerName, int defaultAction) {
58
		this.layerIsReprojectable = layerIsReprojectable;
59
		this.layerName = layerName;
60
		this.defaultAction = defaultAction;
61
		BorderLayout bl = new BorderLayout();
62
		bl.setHgap(2);
63
		bl.setVgap(2);
64
		setLayout(bl);
65
		add(getRasterProjectionActionsPanel(), BorderLayout.CENTER);
66
		getRasterProjectionActionsPanel().getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).addActionListener(this);
67
		getRasterProjectionActionsPanel().getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).addActionListener(this);
68
		getRasterProjectionActionsPanel().getCheckOption().addActionListener(this);
69
		posWindow = RasterMainPluginUtils.iwindowPosition(widthWindow, heightWindow);
70
		PluginServices.getMDIManager().addWindow(this);
71
	}
72
	
73
	public WindowInfo getWindowInfo() {
74
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
75
		m_viewinfo.setTitle(PluginServices.getText(this, "options"));
76
		m_viewinfo.setHeight(heightWindow);
77
		m_viewinfo.setWidth(widthWindow);
78
		if (posWindow != null) {
79
			m_viewinfo.setX((int) posWindow.getX());
80
			m_viewinfo.setY((int) posWindow.getY());
81
		}
82
		return m_viewinfo;
83
	}
84

  
85
	/**
86
	 * Obtiene el panel con las opciones de proyecci?n
87
	 * @return RasterProjectionActionsPanel
88
	 */
89
	public RasterProjectionActionsPanel getRasterProjectionActionsPanel() {
90
		if (panel == null) {
91
			panel = new RasterProjectionActionsPanel(layerIsReprojectable, layerName, defaultAction);
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff