root / tags / PilotoRedes_Build_2 / extensions / extGraph_predes / src / com / iver / cit / gvsig / graph / gui / RouteControlPanel.java @ 11410
History | View | Annotate | Download (32.1 KB)
1 | 8326 | jaume | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
|
||
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
18 | *
|
||
19 | * For more information, contact:
|
||
20 | *
|
||
21 | * Generalitat Valenciana
|
||
22 | * Conselleria d'Infraestructures i Transport
|
||
23 | * Av. Blasco Ib??ez, 50
|
||
24 | * 46010 VALENCIA
|
||
25 | * SPAIN
|
||
26 | *
|
||
27 | * +34 963862235
|
||
28 | * gvsig@gva.es
|
||
29 | * www.gvsig.gva.es
|
||
30 | *
|
||
31 | * or
|
||
32 | *
|
||
33 | * IVER T.I. S.A
|
||
34 | * Salamanca 50
|
||
35 | * 46005 Valencia
|
||
36 | * Spain
|
||
37 | *
|
||
38 | * +34 963163400
|
||
39 | * dac@iver.es
|
||
40 | */
|
||
41 | |||
42 | /* CVS MESSAGES:
|
||
43 | 8573 | azabala | *
|
44 | * $Id$
|
||
45 | * $Log$
|
||
46 | 11296 | caballero | * Revision 1.25.2.1 2007-04-20 07:50:34 caballero
|
47 | * ManualDataSource por AutomaticDataSource
|
||
48 | *
|
||
49 | * Revision 1.25 2006/11/14 18:32:32 fjp
|
||
50 | 8751 | fjp | * *** empty log message ***
|
51 | *
|
||
52 | 8762 | fjp | * Revision 1.24 2006/11/14 16:12:01 fjp
|
53 | * *** empty log message ***
|
||
54 | *
|
||
55 | 8751 | fjp | * Revision 1.23 2006/11/14 09:23:30 fjp
|
56 | 8723 | fjp | * cargar paradas desde cualquier tema de puntos
|
57 | *
|
||
58 | * Revision 1.22 2006/11/10 13:57:04 fjp
|
||
59 | 8639 | fjp | * *** empty log message ***
|
60 | *
|
||
61 | 8673 | fjp | * Revision 1.21 2006/11/09 21:08:32 azabala
|
62 | * *** empty log message ***
|
||
63 | *
|
||
64 | 8659 | azabala | * Revision 1.20 2006/11/09 12:51:12 jaume
|
65 | * *** empty log message ***
|
||
66 | *
|
||
67 | 8647 | jaume | * Revision 1.19 2006/11/09 11:00:43 jaume
|
68 | * *** empty log message ***
|
||
69 | *
|
||
70 | 8642 | jaume | * Revision 1.18 2006/11/09 10:59:53 jaume
|
71 | * *** empty log message ***
|
||
72 | *
|
||
73 | 8641 | jaume | * Revision 1.17 2006/11/09 10:27:50 fjp
|
74 | * *** empty log message ***
|
||
75 | *
|
||
76 | 8640 | fjp | * Revision 1.16 2006/11/09 10:24:11 fjp
|
77 | * *** empty log message ***
|
||
78 | *
|
||
79 | 8639 | fjp | * Revision 1.15 2006/11/09 09:16:35 fjp
|
80 | 8636 | fjp | * Ya va!!
|
81 | *
|
||
82 | * Revision 1.14 2006/11/08 20:14:52 azabala
|
||
83 | 8626 | azabala | * *** empty log message ***
|
84 | *
|
||
85 | * Revision 1.13 2006/11/08 19:32:22 azabala
|
||
86 | 8623 | azabala | * saveroute and saveflags modifications
|
87 | *
|
||
88 | * Revision 1.12 2006/11/08 18:16:28 fjp
|
||
89 | 8616 | fjp | * *** empty log message ***
|
90 | *
|
||
91 | 8621 | fjp | * Revision 1.11 2006/11/08 16:48:19 fjp
|
92 | * *** empty log message ***
|
||
93 | *
|
||
94 | 8616 | fjp | * Revision 1.10 2006/11/08 16:00:39 fjp
|
95 | 8606 | fjp | * Por terminar el enlace flags-cuadro de di?logo
|
96 | *
|
||
97 | 8613 | fjp | * Revision 1.9 2006/11/08 13:18:46 fjp
|
98 | * Por terminar el enlace flags-cuadro de di?logo
|
||
99 | *
|
||
100 | 8606 | fjp | * Revision 1.8 2006/11/07 19:49:38 azabala
|
101 | 8573 | azabala | * *** empty log message ***
|
102 | *
|
||
103 | * Revision 1.7 2006/11/06 13:13:53 azabala
|
||
104 | * *** empty log message ***
|
||
105 | *
|
||
106 | * Revision 1.6 2006/11/06 10:29:32 jaume
|
||
107 | * *** empty log message ***
|
||
108 | *
|
||
109 | * Revision 1.5 2006/11/03 19:39:29 azabala
|
||
110 | * *** empty log message ***
|
||
111 | *
|
||
112 | * Revision 1.4 2006/10/27 18:26:22 azabala
|
||
113 | * added implementation of load stages method
|
||
114 | *
|
||
115 | * Revision 1.3 2006/10/27 12:41:09 jaume
|
||
116 | * GUI
|
||
117 | *
|
||
118 | * Revision 1.2 2006/10/26 16:31:21 jaume
|
||
119 | * GUI
|
||
120 | *
|
||
121 | * Revision 1.1 2006/10/25 10:50:41 jaume
|
||
122 | * movement of classes and gui stuff
|
||
123 | *
|
||
124 | * Revision 1.4 2006/10/24 08:04:41 jaume
|
||
125 | * *** empty log message ***
|
||
126 | *
|
||
127 | * Revision 1.3 2006/10/23 16:00:20 jaume
|
||
128 | * *** empty log message ***
|
||
129 | *
|
||
130 | * Revision 1.2 2006/10/23 08:05:39 jaume
|
||
131 | * GUI
|
||
132 | *
|
||
133 | * Revision 1.1 2006/10/20 12:02:50 jaume
|
||
134 | * GUI
|
||
135 | *
|
||
136 | *
|
||
137 | */
|
||
138 | 8326 | jaume | package com.iver.cit.gvsig.graph.gui; |
139 | |||
140 | import java.awt.BorderLayout; |
||
141 | import java.awt.Component; |
||
142 | import java.awt.Dimension; |
||
143 | import java.awt.FlowLayout; |
||
144 | import java.awt.Font; |
||
145 | 8401 | jaume | import java.awt.GridLayout; |
146 | 8326 | jaume | import java.awt.event.ActionEvent; |
147 | import java.awt.event.ActionListener; |
||
148 | 8751 | fjp | import java.awt.geom.Rectangle2D; |
149 | 8762 | fjp | import java.text.NumberFormat; |
150 | 8573 | azabala | import java.util.ArrayList; |
151 | import java.util.List; |
||
152 | 8326 | jaume | |
153 | import javax.swing.ImageIcon; |
||
154 | 8573 | azabala | import javax.swing.JComboBox; |
155 | 8326 | jaume | import javax.swing.JLabel; |
156 | 8659 | azabala | import javax.swing.JOptionPane; |
157 | 8326 | jaume | import javax.swing.JPanel; |
158 | import javax.swing.JScrollPane; |
||
159 | import javax.swing.JTable; |
||
160 | 8762 | fjp | import javax.swing.ListSelectionModel; |
161 | import javax.swing.event.ListSelectionEvent; |
||
162 | import javax.swing.event.ListSelectionListener; |
||
163 | import javax.swing.event.TableModelEvent; |
||
164 | import javax.swing.event.TableModelListener; |
||
165 | 8636 | fjp | import javax.swing.table.AbstractTableModel; |
166 | 8326 | jaume | import javax.swing.table.TableColumnModel; |
167 | import javax.swing.table.TableModel; |
||
168 | |||
169 | 8573 | azabala | import org.cresques.cts.IProjection; |
170 | 8326 | jaume | import org.gvsig.gui.beans.swing.GridBagLayoutPanel; |
171 | import org.gvsig.gui.beans.swing.JBlank; |
||
172 | import org.gvsig.gui.beans.swing.JButton; |
||
173 | |||
174 | 8573 | azabala | import com.hardcode.gdbms.engine.values.Value; |
175 | import com.hardcode.gdbms.engine.values.ValueFactory; |
||
176 | 8326 | jaume | import com.iver.andami.PluginServices; |
177 | 8723 | fjp | import com.iver.andami.messages.NotificationManager; |
178 | 8326 | jaume | import com.iver.andami.ui.mdiManager.IWindow; |
179 | 8636 | fjp | import com.iver.andami.ui.mdiManager.SingletonWindow; |
180 | 8326 | jaume | import com.iver.andami.ui.mdiManager.WindowInfo; |
181 | 8411 | azabala | import com.iver.cit.gvsig.fmap.DriverException; |
182 | import com.iver.cit.gvsig.fmap.MapContext; |
||
183 | import com.iver.cit.gvsig.fmap.MapControl; |
||
184 | 8751 | fjp | import com.iver.cit.gvsig.fmap.ViewPort; |
185 | 8573 | azabala | import com.iver.cit.gvsig.fmap.core.DefaultFeature; |
186 | import com.iver.cit.gvsig.fmap.core.FPoint2D; |
||
187 | 8411 | azabala | import com.iver.cit.gvsig.fmap.core.FShape; |
188 | import com.iver.cit.gvsig.fmap.core.IGeometry; |
||
189 | import com.iver.cit.gvsig.fmap.core.ShapeFactory; |
||
190 | import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
||
191 | 8573 | azabala | import com.iver.cit.gvsig.fmap.edition.EditionException; |
192 | 8411 | azabala | import com.iver.cit.gvsig.fmap.layers.FLayer; |
193 | import com.iver.cit.gvsig.fmap.layers.FLayers; |
||
194 | import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
||
195 | 8573 | azabala | import com.iver.cit.gvsig.fmap.layers.LayerEvent; |
196 | import com.iver.cit.gvsig.fmap.layers.LayerFactory; |
||
197 | import com.iver.cit.gvsig.fmap.layers.LayerListenerAdapter; |
||
198 | 8411 | azabala | import com.iver.cit.gvsig.fmap.layers.ReadableVectorial; |
199 | 8626 | azabala | import com.iver.cit.gvsig.fmap.layers.SelectableDataSource; |
200 | 8411 | azabala | import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator; |
201 | 8723 | fjp | import com.iver.cit.gvsig.graph.GraphException; |
202 | 8616 | fjp | import com.iver.cit.gvsig.graph.NetworkUtils; |
203 | 8326 | jaume | import com.iver.cit.gvsig.graph.core.GvFlag; |
204 | 8606 | fjp | import com.iver.cit.gvsig.graph.core.IFlagListener; |
205 | 8411 | azabala | import com.iver.cit.gvsig.graph.core.Network; |
206 | 8573 | azabala | import com.iver.cit.gvsig.graph.solvers.FlagsMemoryDriver; |
207 | import com.iver.cit.gvsig.graph.solvers.Route; |
||
208 | import com.iver.cit.gvsig.graph.solvers.RouteMemoryDriver; |
||
209 | 8723 | fjp | import com.iver.cit.gvsig.graph.tools.FlagListener; |
210 | 8573 | azabala | import com.iver.cit.gvsig.project.documents.gui.FOpenDialog; |
211 | 8411 | azabala | import com.iver.cit.gvsig.project.documents.view.gui.IView; |
212 | import com.iver.cit.gvsig.project.documents.view.gui.View; |
||
213 | 8573 | azabala | import com.iver.cit.gvsig.util.GvSession; |
214 | 8411 | azabala | import com.vividsolutions.jts.geom.Coordinate; |
215 | import com.vividsolutions.jts.geom.Geometry; |
||
216 | import com.vividsolutions.jts.geom.MultiPoint; |
||
217 | import com.vividsolutions.jts.geom.Point; |
||
218 | 8326 | jaume | |
219 | 8642 | jaume | public class RouteControlPanel extends JPanel implements SingletonWindow, |
220 | 8606 | fjp | ActionListener, IFlagListener {
|
221 | 8573 | azabala | WindowInfo wi; |
222 | 8326 | jaume | |
223 | 8573 | azabala | private JPanel westPanel = null; |
224 | 8521 | jaume | |
225 | 8573 | azabala | private JScrollPane scrlStages = null; |
226 | |||
227 | private JTable tblStages = null; |
||
228 | |||
229 | private GridBagLayoutPanel eastPanel = null; |
||
230 | |||
231 | 8636 | fjp | private MyTableModel tableModel = new MyTableModel(); // @jve:decl-index=0:visual-constraint="" |
232 | 8573 | azabala | |
233 | private JButton btnLoadStage = null; |
||
234 | |||
235 | private JButton btnSaveStage = null; |
||
236 | 8641 | jaume | |
237 | 8573 | azabala | private Network network;
|
238 | |||
239 | private ArrayList routeFlags; |
||
240 | |||
241 | private JLabel lblCost; |
||
242 | |||
243 | 8326 | jaume | private JLabel lblFlagAmout; |
244 | 8573 | azabala | |
245 | 8326 | jaume | private JButton btnPullDownStage; |
246 | 8573 | azabala | |
247 | 8326 | jaume | private JButton btnPushUpStage; |
248 | 8573 | azabala | |
249 | 8326 | jaume | private JButton btnRemoveStage; |
250 | 8573 | azabala | |
251 | 8326 | jaume | private JPanel southPanel; |
252 | 8573 | azabala | |
253 | 8326 | jaume | private final String[] colName = new String[] { |
254 | 8573 | azabala | PluginServices.getText(this, "enable"), |
255 | PluginServices.getText(this, "stage"), |
||
256 | PluginServices.getText(this, "cost"), }; |
||
257 | |||
258 | 8751 | fjp | private JButton btnCenterOnFlag; |
259 | 8573 | azabala | |
260 | 8401 | jaume | private JButton btnSaveRoute; |
261 | 8411 | azabala | |
262 | 8573 | azabala | private MapControl mapCtrl;
|
263 | 8641 | jaume | |
264 | 8636 | fjp | private class MyTableModel extends AbstractTableModel { |
265 | public int getColumnCount() { |
||
266 | return 3; |
||
267 | } |
||
268 | 8521 | jaume | |
269 | 8636 | fjp | public int getRowCount() { |
270 | return _getFlags().size();
|
||
271 | } |
||
272 | |||
273 | public Object getValueAt(int rowIndex, int columnIndex) { |
||
274 | GvFlag flag = (GvFlag) _getFlags().get(rowIndex); |
||
275 | switch (columnIndex) {
|
||
276 | case 0: |
||
277 | return new Boolean(flag.isEnabled()); |
||
278 | case 1: |
||
279 | return flag.getDescription();
|
||
280 | case 2: |
||
281 | return new Double(flag.getCost()); |
||
282 | } |
||
283 | |||
284 | return null; |
||
285 | } |
||
286 | |||
287 | public Class getColumnClass(int columnIndex) { |
||
288 | switch (columnIndex)
|
||
289 | { |
||
290 | case 0: |
||
291 | return Boolean.class; |
||
292 | case 1: |
||
293 | return String.class; |
||
294 | case 2: |
||
295 | return Double.class; |
||
296 | 8641 | jaume | |
297 | 8636 | fjp | } |
298 | return super.getColumnClass(columnIndex); |
||
299 | } |
||
300 | |||
301 | public String getColumnName(int column) { |
||
302 | return colName[column];
|
||
303 | } |
||
304 | |||
305 | public boolean isCellEditable(int rowIndex, int columnIndex) { |
||
306 | if (columnIndex == 2) |
||
307 | return false; |
||
308 | return true; |
||
309 | |||
310 | } |
||
311 | |||
312 | public void setValueAt(Object aValue, int rowIndex, int columnIndex) { |
||
313 | GvFlag flag = (GvFlag) _getFlags().get(rowIndex); |
||
314 | switch (columnIndex)
|
||
315 | { |
||
316 | case 0: |
||
317 | Boolean bAux = (Boolean) aValue; |
||
318 | flag.setEnabled(bAux.booleanValue()); |
||
319 | 8640 | fjp | PluginServices.getMainFrame().enableControls(); |
320 | 8636 | fjp | return;
|
321 | case 1: |
||
322 | String strAux = (String) aValue; |
||
323 | flag.setDescription(strAux); |
||
324 | return;
|
||
325 | 8641 | jaume | |
326 | 8636 | fjp | // case 2: // No es editable
|
327 | // Double dblAux = (Double) aValue;
|
||
328 | // flag.setCost(dblAux.doubleValue());
|
||
329 | // return;
|
||
330 | 8641 | jaume | |
331 | 8636 | fjp | } |
332 | |||
333 | } |
||
334 | 8641 | jaume | |
335 | 8636 | fjp | } |
336 | |||
337 | 8573 | azabala | /**
|
338 | * This method initializes
|
||
339 | 8641 | jaume | *
|
340 | 8573 | azabala | */
|
341 | public RouteControlPanel(Network network) {
|
||
342 | super();
|
||
343 | this.network = network;
|
||
344 | 8613 | fjp | // GvFlag[] flags = network.getFlags();
|
345 | // List vflags = _getFlags();
|
||
346 | // for (int i = 0; i < flags.length; i++) {
|
||
347 | // vflags.add(flags[i]);
|
||
348 | // }
|
||
349 | 8573 | azabala | initialize(); |
350 | } |
||
351 | 8641 | jaume | |
352 | 8573 | azabala | /**
|
353 | * Method to remove all flags (use
|
||
354 | * */
|
||
355 | public void refresh(){ |
||
356 | 8613 | fjp | // GvFlag[] flags = network.getFlags();
|
357 | // List vflags = _getFlags();
|
||
358 | // List tempFlags = Arrays.asList(flags);
|
||
359 | // vflags.addAll(tempFlags);
|
||
360 | 8573 | azabala | lblFlagAmout.setText(String.valueOf(_getFlags()
|
361 | .size())); |
||
362 | updateTotalCost(); |
||
363 | 8636 | fjp | getTblStages().revalidate(); |
364 | System.out.println("Actualizo tabla"); |
||
365 | 8641 | jaume | |
366 | 8573 | azabala | } |
367 | 8606 | fjp | private void processLayer(FLayer layer) { |
368 | if (layer.isActive()) {
|
||
369 | if (layer instanceof FLyrVect) { |
||
370 | Network net = (Network) layer |
||
371 | .getProperty("network");
|
||
372 | if (net != null) { |
||
373 | network = net; |
||
374 | network.addFlagListener(this);
|
||
375 | refresh(); |
||
376 | }// if
|
||
377 | }// if
|
||
378 | }// if
|
||
379 | |||
380 | } |
||
381 | 8641 | jaume | |
382 | 8636 | fjp | public void setMapControl(MapControl mapCtrl, Network net) { |
383 | 8573 | azabala | if (mapCtrl != null) { |
384 | this.mapCtrl = mapCtrl;
|
||
385 | LayerListenerAdapter listener = new LayerListenerAdapter() {
|
||
386 | public void activationChanged(LayerEvent e) { |
||
387 | processLayer(e.getSource()); |
||
388 | } |
||
389 | }; |
||
390 | mapCtrl.getMapContext().getLayers().addLayerListener(listener); |
||
391 | mapCtrl.getMapContext().getLayers().addLayerCollectionListener( |
||
392 | listener); |
||
393 | 8636 | fjp | if (net != null) { |
394 | network = net; |
||
395 | network.addFlagListener(this);
|
||
396 | 8641 | jaume | } |
397 | 8573 | azabala | } |
398 | } |
||
399 | 8326 | jaume | |
400 | 8573 | azabala | public RouteControlPanel() {
|
401 | super();
|
||
402 | initialize(); |
||
403 | } |
||
404 | 8326 | jaume | |
405 | 8573 | azabala | public void setCostUnits(String unitsName) { |
406 | colName[2] = unitsName;
|
||
407 | getTblStages().repaint(); |
||
408 | } |
||
409 | 8521 | jaume | |
410 | 8573 | azabala | /**
|
411 | * This method initializes this
|
||
412 | 8641 | jaume | *
|
413 | 8573 | azabala | */
|
414 | private void initialize() { |
||
415 | BorderLayout borderLayout = new BorderLayout(); |
||
416 | borderLayout.setHgap(10);
|
||
417 | borderLayout.setVgap(10);
|
||
418 | JPanel cont = new JPanel(borderLayout); |
||
419 | 8641 | jaume | // cont.setPreferredSize(new Dimension(490, 320));
|
420 | 8647 | jaume | this.setPreferredSize(new Dimension(460, 280)); |
421 | 8641 | jaume | cont.add(getWestPanel(), BorderLayout.CENTER);
|
422 | cont.add(getEastPanel(), BorderLayout.EAST);
|
||
423 | 8573 | azabala | cont.add(getSouthPanel(), BorderLayout.SOUTH);
|
424 | 8641 | jaume | this.setLayout(new FlowLayout(FlowLayout.LEADING, 10, 10)); |
425 | 8573 | azabala | this.add(cont);
|
426 | updateFlags(); |
||
427 | } |
||
428 | 8326 | jaume | |
429 | 8573 | azabala | private void updateFlags() { |
430 | lblFlagAmout.setText(String.valueOf(_getFlags().size()));
|
||
431 | updateTotalCost(); |
||
432 | getTblStages().repaint(); |
||
433 | } |
||
434 | 8326 | jaume | |
435 | 8573 | azabala | private JPanel getSouthPanel() { |
436 | if (southPanel == null) { |
||
437 | southPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); |
||
438 | southPanel.add(getBtnRemoveStage()); |
||
439 | southPanel.add(new JBlank(50, 20)); |
||
440 | southPanel.add(getBtnPushUpStage()); |
||
441 | southPanel.add(getBtnPullDownStage()); |
||
442 | southPanel.add(new JLabel(PluginServices.getText(this, |
||
443 | "flag_amount")));
|
||
444 | lblFlagAmout = new JLabel(); |
||
445 | lblFlagAmout.setFont(lblFlagAmout.getFont().deriveFont(Font.BOLD));
|
||
446 | southPanel.add(lblFlagAmout); |
||
447 | } |
||
448 | return southPanel;
|
||
449 | } |
||
450 | |||
451 | 8326 | jaume | public Object getWindowModel() { |
452 | 8573 | azabala | return this.getClass(); |
453 | } |
||
454 | 8326 | jaume | |
455 | 8573 | azabala | public WindowInfo getWindowInfo() {
|
456 | if (wi == null) { |
||
457 | wi = new WindowInfo(WindowInfo.MODELESSDIALOG
|
||
458 | 8647 | jaume | | WindowInfo.MAXIMIZABLE |
459 | 8573 | azabala | | WindowInfo.ICONIFIABLE | WindowInfo.PALETTE); |
460 | 8647 | jaume | wi.setWidth((int) this.getPreferredSize().getWidth()); |
461 | wi.setHeight((int) this.getPreferredSize().getHeight()); |
||
462 | 8639 | fjp | wi.setTitle(PluginServices.getText(this, "route_control_panel")); |
463 | 8573 | azabala | } |
464 | return wi;
|
||
465 | } |
||
466 | 8326 | jaume | |
467 | 8573 | azabala | /**
|
468 | * This method initializes westPanel
|
||
469 | 8641 | jaume | *
|
470 | 8573 | azabala | * @return javax.swing.JPanel
|
471 | */
|
||
472 | private JPanel getWestPanel() { |
||
473 | if (westPanel == null) { |
||
474 | westPanel = new JPanel(new BorderLayout(5, 5)); |
||
475 | lblCost = new JLabel(); |
||
476 | lblCost.setFont(lblCost.getFont().deriveFont(Font.BOLD));
|
||
477 | GridBagLayoutPanel aux = new GridBagLayoutPanel();
|
||
478 | aux.addComponent(PluginServices.getText(this, "total_route_cost") |
||
479 | + ":", lblCost);
|
||
480 | aux.addComponent(getScrlStages()); |
||
481 | 8326 | jaume | |
482 | 8573 | azabala | westPanel.add(aux); |
483 | } |
||
484 | return westPanel;
|
||
485 | } |
||
486 | 8326 | jaume | |
487 | 8573 | azabala | private JButton getBtnPullDownStage() { |
488 | 8326 | jaume | if (btnPullDownStage == null) { |
489 | 8573 | azabala | btnPullDownStage = new JButton(new ImageIcon(this.getClass() |
490 | .getClassLoader().getResource("images/down-arrow.png")));
|
||
491 | // btnPullDownStage.setName("btnPullDownStage");
|
||
492 | 8326 | jaume | btnPullDownStage.addActionListener(this);
|
493 | } |
||
494 | return btnPullDownStage;
|
||
495 | } |
||
496 | |||
497 | private JButton getBtnPushUpStage() { |
||
498 | if (btnPushUpStage == null) { |
||
499 | 8573 | azabala | btnPushUpStage = new JButton(new ImageIcon(this.getClass() |
500 | .getClassLoader().getResource("images/up-arrow.png")));
|
||
501 | // btnPushUpStage.setName("btnPushUpStage");
|
||
502 | 8326 | jaume | btnPushUpStage.addActionListener(this);
|
503 | } |
||
504 | return btnPushUpStage;
|
||
505 | } |
||
506 | |||
507 | private JButton getBtnRemoveStage() { |
||
508 | if (btnRemoveStage == null) { |
||
509 | 8573 | azabala | btnRemoveStage = new JButton(new ImageIcon(this.getClass() |
510 | .getClassLoader().getResource("images/delete.png")));
|
||
511 | // btnRemoveStage.setName("btnRemoveStage");
|
||
512 | 8326 | jaume | btnRemoveStage.addActionListener(this);
|
513 | } |
||
514 | return btnRemoveStage;
|
||
515 | } |
||
516 | |||
517 | /**
|
||
518 | 8573 | azabala | * This method initializes scrlStages
|
519 | 8641 | jaume | *
|
520 | 8573 | azabala | * @return javax.swing.JScrollPane
|
521 | */
|
||
522 | private JScrollPane getScrlStages() { |
||
523 | if (scrlStages == null) { |
||
524 | scrlStages = new JScrollPane(); |
||
525 | scrlStages.setViewportView(getTblStages()); |
||
526 | scrlStages.setPreferredSize(new Dimension(270, 200)); |
||
527 | } |
||
528 | return scrlStages;
|
||
529 | } |
||
530 | 8326 | jaume | |
531 | 8606 | fjp | /**
|
532 | * @deprecated
|
||
533 | * @param flag
|
||
534 | */
|
||
535 | 8573 | azabala | public void addFlag(GvFlag flag) { |
536 | _getFlags().add(flag); |
||
537 | lblFlagAmout.setText(String.valueOf(_getFlags().size()));
|
||
538 | updateTotalCost(); |
||
539 | getTblStages().repaint(); |
||
540 | } |
||
541 | 8326 | jaume | |
542 | 8573 | azabala | private void updateTotalCost() { |
543 | GvFlag[] flags = getFlags();
|
||
544 | double cost = 0; |
||
545 | for (int i = 0; i < flags.length; i++) { |
||
546 | 8762 | fjp | if (!flags[i].isEnabled())
|
547 | continue;
|
||
548 | if (flags[i].getCost() >= Double.MAX_VALUE) |
||
549 | { |
||
550 | lblCost.setText(PluginServices.getText(this, "no_se_puede_pasar_por_todas_las_paradas")); |
||
551 | return;
|
||
552 | } |
||
553 | if (flags[i].getCost() < 0) |
||
554 | { |
||
555 | lblCost.setText(PluginServices.getText(this, "solucion_no_valida")); |
||
556 | return;
|
||
557 | } |
||
558 | 11296 | caballero | |
559 | 8365 | jaume | cost += flags[i].getCost(); |
560 | } |
||
561 | 8762 | fjp | NumberFormat nf = NumberFormat.getInstance(); |
562 | nf.setMaximumFractionDigits(2);
|
||
563 | lblCost.setText(nf.format(cost) + getCostUnitName()); |
||
564 | 8365 | jaume | } |
565 | |||
566 | private String getCostUnitName() { |
||
567 | if (colName[2].equals(PluginServices.getText(this, "cost"))) |
||
568 | return ""; |
||
569 | return colName[2]; |
||
570 | } |
||
571 | |||
572 | public void removeFlag(GvFlag flag) { |
||
573 | 8573 | azabala | removeFlag(_getFlags().indexOf(flag)); |
574 | } |
||
575 | 8326 | jaume | |
576 | 8573 | azabala | public void removeFlag(int index) { |
577 | _getFlags().remove(index); |
||
578 | lblFlagAmout.setText(String.valueOf(_getFlags().size()));
|
||
579 | getTblStages().repaint(); |
||
580 | } |
||
581 | 8326 | jaume | |
582 | 8573 | azabala | /**
|
583 | * This method initializes tblStages
|
||
584 | 8641 | jaume | *
|
585 | 8573 | azabala | * @return javax.swing.JTable
|
586 | */
|
||
587 | private JTable getTblStages() { |
||
588 | if (tblStages == null) { |
||
589 | tblStages = new JTable(); |
||
590 | tblStages |
||
591 | .setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); |
||
592 | tblStages.setModel(getTableModel()); |
||
593 | TableColumnModel cm = tblStages.getColumnModel();
|
||
594 | 8326 | jaume | |
595 | 8573 | azabala | int tablePreferredWidth = (int) tblStages.getPreferredSize() |
596 | .getWidth(); |
||
597 | int colSize = tblStages.getFontMetrics(tblStages.getFont())
|
||
598 | .stringWidth(tblStages.getModel().getColumnName(0)) * 2; |
||
599 | cm.getColumn(0).setPreferredWidth((int) (colSize)); |
||
600 | cm.getColumn(0).setMinWidth((int) (colSize)); |
||
601 | cm.getColumn(0).setMaxWidth((int) (colSize)); |
||
602 | tablePreferredWidth -= colSize; |
||
603 | cm.getColumn(1)
|
||
604 | .setPreferredWidth((int) (tablePreferredWidth * 0.7)); |
||
605 | cm.getColumn(2)
|
||
606 | .setPreferredWidth((int) (tablePreferredWidth * 0.3)); |
||
607 | 8762 | fjp | |
608 | // Ask to be notified of selection changes.
|
||
609 | ListSelectionModel rowSM = tblStages.getSelectionModel();
|
||
610 | rowSM.addListSelectionListener(new ListSelectionListener() { |
||
611 | public void valueChanged(ListSelectionEvent e) { |
||
612 | //Ignore extra messages.
|
||
613 | if (e.getValueIsAdjusting()) return; |
||
614 | |||
615 | ListSelectionModel lsm =
|
||
616 | (ListSelectionModel)e.getSource();
|
||
617 | getBtnCenterOnFlag().setEnabled(!lsm.isSelectionEmpty()); |
||
618 | } |
||
619 | }); |
||
620 | 11296 | caballero | |
621 | 8762 | fjp | tblStages.getModel().addTableModelListener(new TableModelListener() { |
622 | |||
623 | public void tableChanged(TableModelEvent e) { |
||
624 | System.out.println("Table model changed"); |
||
625 | 11296 | caballero | |
626 | 8762 | fjp | } |
627 | 11296 | caballero | |
628 | 8762 | fjp | }); |
629 | |||
630 | 11296 | caballero | |
631 | 8573 | azabala | } |
632 | return tblStages;
|
||
633 | } |
||
634 | 8326 | jaume | |
635 | 8573 | azabala | protected int getFlagCount() { |
636 | return _getFlags().size();
|
||
637 | } |
||
638 | 8326 | jaume | |
639 | 8573 | azabala | private List _getFlags() { |
640 | 8606 | fjp | // if (routeFlags == null) {
|
641 | // routeFlags = new ArrayList();
|
||
642 | // }
|
||
643 | // return routeFlags;
|
||
644 | 8641 | jaume | |
645 | 8606 | fjp | return network.getOriginaFlags();
|
646 | 8573 | azabala | } |
647 | 8326 | jaume | |
648 | 8573 | azabala | protected boolean isSelected(int row) { |
649 | return ((GvFlag) _getFlags().get(row)).isEnabled();
|
||
650 | } |
||
651 | 8326 | jaume | |
652 | 8573 | azabala | /**
|
653 | * This method initializes eastPanel
|
||
654 | 8641 | jaume | *
|
655 | 8573 | azabala | * @return javax.swing.JPanel
|
656 | */
|
||
657 | private JPanel getEastPanel() { |
||
658 | if (eastPanel == null) { |
||
659 | GridLayout layout = new GridLayout(); |
||
660 | layout.setColumns(1);
|
||
661 | layout.setVgap(5);
|
||
662 | JPanel aux = new JPanel(); |
||
663 | aux.add(getBtnLoadStage()); |
||
664 | aux.add(getBtnSaveStage()); |
||
665 | aux.add(getBtnSaveRoute()); |
||
666 | 8751 | fjp | aux.add(getBtnCenterOnFlag()); |
667 | 8573 | azabala | layout.setRows(aux.getComponentCount()); |
668 | aux.setLayout(layout); |
||
669 | eastPanel = new GridBagLayoutPanel();
|
||
670 | eastPanel.addComponent(aux); |
||
671 | } |
||
672 | return eastPanel;
|
||
673 | 8401 | jaume | } |
674 | |||
675 | 8751 | fjp | private JButton getBtnCenterOnFlag() { |
676 | if (btnCenterOnFlag == null) { |
||
677 | btnCenterOnFlag = new JButton(); |
||
678 | btnCenterOnFlag.setText(PluginServices.getText(this,
|
||
679 | "center_on_flag"));
|
||
680 | 8762 | fjp | btnCenterOnFlag.setEnabled(false);
|
681 | 8751 | fjp | btnCenterOnFlag.addActionListener(this);
|
682 | } |
||
683 | return btnCenterOnFlag;
|
||
684 | } |
||
685 | 8573 | azabala | |
686 | 8401 | jaume | private JButton getBtnSaveRoute() { |
687 | 8573 | azabala | if (btnSaveRoute == null) { |
688 | btnSaveRoute = new JButton(); |
||
689 | btnSaveRoute.setText(PluginServices.getText(this, "save_route")); |
||
690 | btnSaveRoute.addActionListener(this);
|
||
691 | } |
||
692 | return btnSaveRoute;
|
||
693 | } |
||
694 | 8401 | jaume | |
695 | /**
|
||
696 | 8573 | azabala | * This method initializes defaultTableModel
|
697 | 8641 | jaume | *
|
698 | 8573 | azabala | * @return javax.swing.table.DefaultTableModel
|
699 | */
|
||
700 | private TableModel getTableModel() { |
||
701 | return tableModel;
|
||
702 | } |
||
703 | 8521 | jaume | |
704 | 8573 | azabala | /**
|
705 | * This method initializes btnLoadStage
|
||
706 | 8641 | jaume | *
|
707 | 8573 | azabala | * @return javax.swing.JButton
|
708 | */
|
||
709 | private JButton getBtnLoadStage() { |
||
710 | if (btnLoadStage == null) { |
||
711 | btnLoadStage = new JButton(); |
||
712 | btnLoadStage.setText(PluginServices.getText(this, "load_stages")); |
||
713 | btnLoadStage.addActionListener(this);
|
||
714 | } |
||
715 | return btnLoadStage;
|
||
716 | } |
||
717 | 8521 | jaume | |
718 | 8573 | azabala | /**
|
719 | * This method initializes btnSaveStages
|
||
720 | 8641 | jaume | *
|
721 | 8573 | azabala | * @return javax.swing.JButton
|
722 | */
|
||
723 | private JButton getBtnSaveStage() { |
||
724 | if (btnSaveStage == null) { |
||
725 | btnSaveStage = new JButton(); |
||
726 | btnSaveStage.setText(PluginServices.getText(this, "save_stages")); |
||
727 | btnSaveStage.addActionListener(this);
|
||
728 | } |
||
729 | return btnSaveStage;
|
||
730 | } |
||
731 | 8521 | jaume | |
732 | 8573 | azabala | class FormatSelectionPanel extends JPanel implements IWindow { |
733 | 8521 | jaume | |
734 | 8573 | azabala | JComboBox formats;
|
735 | WindowInfo wi = null;
|
||
736 | 8521 | jaume | |
737 | 8623 | azabala | public FormatSelectionPanel(String introductoryText) { |
738 | 8573 | azabala | super(new BorderLayout()); |
739 | String[] formatos = { "SHP", "DXF", "POSTGIS", "GML" }; |
||
740 | formats = new JComboBox(formatos); |
||
741 | 8641 | jaume | GridBagLayoutPanel contentPanel = |
742 | 8573 | azabala | new GridBagLayoutPanel();
|
743 | 8623 | azabala | contentPanel.addComponent(new JLabel(introductoryText)); |
744 | 8573 | azabala | contentPanel.addComponent(formats); |
745 | JButton okButton = new JButton(PluginServices.getText(null, |
||
746 | "Aceptar"));
|
||
747 | okButton.addActionListener(new ActionListener() { |
||
748 | public void actionPerformed(ActionEvent arg0) { |
||
749 | close(); |
||
750 | 8521 | jaume | } |
751 | 8573 | azabala | }); |
752 | contentPanel.addComponent(okButton); |
||
753 | 8641 | jaume | |
754 | 8573 | azabala | add(contentPanel); |
755 | } |
||
756 | 8521 | jaume | |
757 | 8573 | azabala | void close() {
|
758 | PluginServices.getMDIManager().closeWindow(this);
|
||
759 | } |
||
760 | 8521 | jaume | |
761 | 8573 | azabala | public String getSelectedFormat() { |
762 | return (String) formats.getSelectedItem(); |
||
763 | } |
||
764 | 8521 | jaume | |
765 | 8573 | azabala | public WindowInfo getWindowInfo() {
|
766 | if (wi == null) { |
||
767 | wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.PALETTE);
|
||
768 | wi.setTitle(PluginServices |
||
769 | .getText(null, "Seleccion_de_formato"));// Internacionalizar |
||
770 | // esto
|
||
771 | wi.setWidth(300);
|
||
772 | 8623 | azabala | wi.setHeight(55);
|
773 | 8573 | azabala | } |
774 | return wi;
|
||
775 | } |
||
776 | 8521 | jaume | |
777 | 8573 | azabala | } |
778 | 8521 | jaume | |
779 | 8573 | azabala | public void actionPerformed(ActionEvent e) { |
780 | Component c = (Component) e.getSource(); |
||
781 | if (c.equals(getBtnLoadStage())) {
|
||
782 | loadStages(); |
||
783 | } else if (c.equals(getBtnSaveStage())) { |
||
784 | saveStage(); |
||
785 | 8401 | jaume | } else if (c.equals(getBtnPushUpStage())) { |
786 | 8326 | jaume | int[] selected = tblStages.getSelectedRows(); |
787 | if (selected.length == 0 || selected[0] == 0) |
||
788 | return;
|
||
789 | tblStages.clearSelection(); |
||
790 | for (int i = 0; i < selected.length; i++) { |
||
791 | 8573 | azabala | Object aux = _getFlags().get(selected[i] - 1); |
792 | _getFlags().set(selected[i] - 1, _getFlags().get(selected[i]));
|
||
793 | 8326 | jaume | _getFlags().set(selected[i], aux); |
794 | selected[i]--; |
||
795 | tblStages.addRowSelectionInterval(selected[i], selected[i]); |
||
796 | } |
||
797 | 8762 | fjp | invalidateSolution(); |
798 | 8401 | jaume | } else if (c.equals(getBtnPullDownStage())) { |
799 | 8326 | jaume | // pull down
|
800 | int[] selected = tblStages.getSelectedRows(); |
||
801 | 8573 | azabala | if (selected.length == 0 |
802 | || selected[selected.length - 1] >= _getFlags().size() - 1) |
||
803 | 8326 | jaume | return;
|
804 | |||
805 | // move rows
|
||
806 | tblStages.clearSelection(); |
||
807 | 8573 | azabala | for (int i = selected.length - 1; i >= 0; i--) { |
808 | Object aux = _getFlags().get(selected[i] + 1); |
||
809 | _getFlags().set(selected[i] + 1, _getFlags().get(selected[i]));
|
||
810 | 8326 | jaume | _getFlags().set(selected[i], aux); |
811 | selected[i]++; |
||
812 | tblStages.addRowSelectionInterval(selected[i], selected[i]); |
||
813 | } |
||
814 | 8762 | fjp | invalidateSolution(); |
815 | 8326 | jaume | |
816 | 8401 | jaume | } else if (c.equals(getBtnRemoveStage())) { |
817 | 11296 | caballero | removeStage(); |
818 | 8573 | azabala | } else if (c.equals(getBtnSaveRoute())) { |
819 | saveRoute(); |
||
820 | 8751 | fjp | } else if (c.equals(getBtnCenterOnFlag())) { |
821 | // Center on first selected flag.
|
||
822 | int[] selected = tblStages.getSelectedRows(); |
||
823 | if (selected.length == 0) |
||
824 | return;
|
||
825 | GvFlag flag = (GvFlag) _getFlags().get(selected[0]);
|
||
826 | IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
827 | if(! (window instanceof IView)) |
||
828 | return;
|
||
829 | IView view = (IView) window; |
||
830 | ViewPort vp = view.getMapControl().getViewPort(); |
||
831 | Rectangle2D extent = vp.getAdjustedExtent();
|
||
832 | double xNC = flag.getOriginalPoint().getX();
|
||
833 | double yNC = flag.getOriginalPoint().getY();
|
||
834 | 8762 | fjp | double width = extent.getWidth();
|
835 | double height = extent.getHeight();
|
||
836 | 11296 | caballero | |
837 | 8751 | fjp | Rectangle2D.Double r = new Rectangle2D.Double(); |
838 | 11296 | caballero | |
839 | 8762 | fjp | r.width = width; |
840 | r.height = height; |
||
841 | r.x = xNC - width/2;
|
||
842 | r.y = yNC - height/2;
|
||
843 | 8751 | fjp | |
844 | vp.setExtent(r); |
||
845 | |||
846 | 11296 | caballero | |
847 | |||
848 | 8751 | fjp | } |
849 | 8573 | azabala | repaint(); |
850 | } |
||
851 | |||
852 | 8762 | fjp | private void invalidateSolution() { |
853 | for (int i=0; i < _getFlags().size(); i++) |
||
854 | { |
||
855 | GvFlag flag = (GvFlag) _getFlags().get(i); |
||
856 | flag.setCost(-1.0);
|
||
857 | } |
||
858 | updateTotalCost(); |
||
859 | } |
||
860 | |||
861 | 8573 | azabala | private void saveStage(){ |
862 | 8623 | azabala | if(network == null){ |
863 | IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
864 | if(! (window instanceof IView)) |
||
865 | return;
|
||
866 | IView view = (View) window;
|
||
867 | MapControl mapControl = view.getMapControl(); |
||
868 | MapContext map = mapControl.getMapContext(); |
||
869 | FLayers layers = map.getLayers(); |
||
870 | SingleLayerIterator it = new SingleLayerIterator(layers);
|
||
871 | while (it.hasNext() && network == null) { |
||
872 | FLayer aux = it.next(); |
||
873 | if (!aux.isActive())
|
||
874 | continue;
|
||
875 | network = (Network) aux.getProperty("network");
|
||
876 | } |
||
877 | } |
||
878 | if (network == null) |
||
879 | 8573 | azabala | return;
|
880 | 8641 | jaume | |
881 | 8573 | azabala | List features = new ArrayList(); |
882 | 8623 | azabala | GvFlag[] flags = network.getFlags();
|
883 | 8573 | azabala | for(int i = 0; i < flags.length; i++){ |
884 | GvFlag flag = flags[i]; |
||
885 | 8751 | fjp | // Solo se guardan los flags habilitados
|
886 | if (!flag.isEnabled())
|
||
887 | continue;
|
||
888 | 8573 | azabala | FPoint2D point = new FPoint2D(flag.getOriginalPoint());
|
889 | Value[] values = new Value[6]; |
||
890 | values[GvFlag.ID_FLAG_INDEX] = ValueFactory.createValue(flag.getIdFlag()); |
||
891 | values[GvFlag.ID_ARC_INDEX] = ValueFactory.createValue(flag.getIdArc()); |
||
892 | values[GvFlag.DESCRIPTION_INDEX] = ValueFactory.createValue(flag.getDescription()); |
||
893 | values[GvFlag.DIREC_INDEX] = ValueFactory.createValue(flag.getDirec()); |
||
894 | values[GvFlag.PCT_INDEX] = ValueFactory.createValue(flag.getPct()); |
||
895 | values[GvFlag.COST_INDEX] = ValueFactory.createValue(flag.getCost()); |
||
896 | IGeometry geo = ShapeFactory.createPoint2D(point); |
||
897 | DefaultFeature feature = new DefaultFeature(geo, values, new Integer(flag.getIdFlag()).toString() ); |
||
898 | features.add(feature); |
||
899 | } |
||
900 | 8641 | jaume | |
901 | 8573 | azabala | FlagsMemoryDriver driver = new FlagsMemoryDriver(features);
|
902 | IProjection projection = FOpenDialog.getLastProjection(); |
||
903 | 8623 | azabala | FLyrVect routeLayer = (FLyrVect) LayerFactory.createLayer("Flags",
|
904 | 8573 | azabala | driver, projection); |
905 | |||
906 | 8641 | jaume | FormatSelectionPanel selectionPanel = |
907 | 8623 | azabala | new FormatSelectionPanel(PluginServices.
|
908 | getText(null,
|
||
909 | "Seleccione_un_formato_para_guardar_los_flags"));
|
||
910 | 8573 | azabala | PluginServices.getMDIManager().addWindow(selectionPanel); |
911 | |||
912 | String format = selectionPanel.getSelectedFormat();
|
||
913 | com.iver.cit.gvsig.ExportTo export = new com.iver.cit.gvsig.ExportTo(); |
||
914 | 8623 | azabala | IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
915 | if(! (window instanceof IView)) |
||
916 | return;
|
||
917 | IView view = (View) window;
|
||
918 | MapControl mapControl = view.getMapControl(); |
||
919 | 8573 | azabala | MapContext context = mapControl.getMapContext(); |
920 | try {
|
||
921 | if (format.equalsIgnoreCase("SHP")) { |
||
922 | export.saveToShp(context, routeLayer);
|
||
923 | } else if (format.equalsIgnoreCase("DXF")) { |
||
924 | export.saveToDxf(context, routeLayer);
|
||
925 | } else if (format.equalsIgnoreCase("GML")) { |
||
926 | export.saveToGml(context, routeLayer);
|
||
927 | } else if (format.equalsIgnoreCase("POSTGIS")) { |
||
928 | export.saveToPostGIS(context, routeLayer);
|
||
929 | 8513 | azabala | } |
930 | 8573 | azabala | } catch (EditionException e1) {
|
931 | // TODO Auto-generated catch block
|
||
932 | e1.printStackTrace(); |
||
933 | } catch (DriverIOException e1) {
|
||
934 | // TODO Auto-generated catch block
|
||
935 | e1.printStackTrace(); |
||
936 | } |
||
937 | 8521 | jaume | |
938 | 8573 | azabala | } |
939 | private void saveRoute() { |
||
940 | IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
941 | if(! (window instanceof IView)) |
||
942 | return;
|
||
943 | IView view = (View) window;
|
||
944 | MapControl mapControl = view.getMapControl(); |
||
945 | 8659 | azabala | List routes = (List) GvSession.getInstance().get(mapControl, "Route"); |
946 | if(routes == null || routes.size() == 0){ |
||
947 | JOptionPane.showMessageDialog(this, PluginServices.getText(this, "Ruta_borrada_o_inexistente"), |
||
948 | PluginServices.getText(this, "Ruta_no_encontrada"), |
||
949 | JOptionPane.ERROR_MESSAGE);
|
||
950 | 8623 | azabala | return;
|
951 | 11296 | caballero | } |
952 | 8659 | azabala | Route lastRoute = (Route) routes.get(routes.size() - 1);
|
953 | RouteMemoryDriver driver = new RouteMemoryDriver(lastRoute.getFeatureList());
|
||
954 | 8573 | azabala | IProjection projection = FOpenDialog.getLastProjection(); |
955 | FLyrVect routeLayer = (FLyrVect) LayerFactory.createLayer("Route",
|
||
956 | driver, projection); |
||
957 | 8521 | jaume | |
958 | 8623 | azabala | FormatSelectionPanel selectionPanel = new FormatSelectionPanel(PluginServices.getText(null, |
959 | "Seleccione_un_formato_para_guardar_la_ruta"));
|
||
960 | 8573 | azabala | PluginServices.getMDIManager().addWindow(selectionPanel); |
961 | 8521 | jaume | |
962 | 8573 | azabala | String format = selectionPanel.getSelectedFormat();
|
963 | com.iver.cit.gvsig.ExportTo export = new com.iver.cit.gvsig.ExportTo(); |
||
964 | MapContext context = mapControl.getMapContext(); |
||
965 | try {
|
||
966 | if (format.equalsIgnoreCase("SHP")) { |
||
967 | export.saveToShp(context, routeLayer);
|
||
968 | } else if (format.equalsIgnoreCase("DXF")) { |
||
969 | export.saveToDxf(context, routeLayer);
|
||
970 | } else if (format.equalsIgnoreCase("GML")) { |
||
971 | export.saveToGml(context, routeLayer);
|
||
972 | } else if (format.equalsIgnoreCase("POSTGIS")) { |
||
973 | export.saveToPostGIS(context, routeLayer);
|
||
974 | } |
||
975 | } catch (EditionException e1) {
|
||
976 | // TODO Auto-generated catch block
|
||
977 | e1.printStackTrace(); |
||
978 | } catch (DriverIOException e1) {
|
||
979 | // TODO Auto-generated catch block
|
||
980 | e1.printStackTrace(); |
||
981 | } |
||
982 | } |
||
983 | 8521 | jaume | |
984 | 8573 | azabala | /**
|
985 | * Converts a point layer loaded in the active view's toc in a collection of
|
||
986 | * flags of the active network
|
||
987 | 8641 | jaume | *
|
988 | 8573 | azabala | */
|
989 | private void loadStages() { |
||
990 | |||
991 | IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
992 | if(! (window instanceof IView)) |
||
993 | return;
|
||
994 | IView view = (IView) window; |
||
995 | MapControl mapControl = view.getMapControl(); |
||
996 | MapContext map = mapControl.getMapContext(); |
||
997 | FLayers layers = map.getLayers(); |
||
998 | |||
999 | String title = PluginServices.getText(this, |
||
1000 | "Seleccionar_capa_con_puntos_de_parada");
|
||
1001 | String introductoryText = PluginServices.getText(this, |
||
1002 | "Seleccione_una_capa_de_puntos_para_crear_paradas");
|
||
1003 | |||
1004 | LayerSelectionPanel selectionPanel = new LayerSelectionPanel(layers,
|
||
1005 | title, introductoryText, FLyrVect.class, FShape.POINT); |
||
1006 | PluginServices.getMDIManager().addWindow(selectionPanel); |
||
1007 | |||
1008 | if (!selectionPanel.wasFinishPressed())
|
||
1009 | return;
|
||
1010 | else {
|
||
1011 | FLayer layer = selectionPanel.getLayer(); |
||
1012 | if (layer == null) |
||
1013 | return;
|
||
1014 | if (!(layer instanceof FLyrVect)) |
||
1015 | return;
|
||
1016 | FLyrVect vectLyr = (FLyrVect) layer; |
||
1017 | |||
1018 | try {
|
||
1019 | if (vectLyr.getShapeType() != FShape.POINT)
|
||
1020 | return;
|
||
1021 | |||
1022 | // TODO
|
||
1023 | 8723 | fjp | // Hay que refinar bastante, para que el usuario elija
|
1024 | 8573 | azabala | // con que red y con qu? capa lineal quiere trabajar
|
1025 | // tal y como est?, si hubiese varias se trabajaria
|
||
1026 | // con la primera que devuelva el iterador
|
||
1027 | |||
1028 | Network net = null;
|
||
1029 | SingleLayerIterator it = new SingleLayerIterator(layers);
|
||
1030 | while (it.hasNext() && net == null) { |
||
1031 | FLayer aux = it.next(); |
||
1032 | if (!aux.isActive())
|
||
1033 | continue;
|
||
1034 | net = (Network) aux.getProperty("network");
|
||
1035 | } |
||
1036 | if (net == null) |
||
1037 | return;
|
||
1038 | |||
1039 | 8673 | fjp | // Por si queremos a?adir paradas a otras ya existentes
|
1040 | // _getFlags().clear();
|
||
1041 | 11296 | caballero | |
1042 | 8573 | azabala | GvFlag flag; |
1043 | ReadableVectorial reader = vectLyr.getSource(); |
||
1044 | 8626 | azabala | SelectableDataSource recordset = vectLyr.getRecordset(); |
1045 | 8573 | azabala | int numShapes = reader.getShapeCount();
|
1046 | |||
1047 | 8723 | fjp | double realTol = mapCtrl.getViewPort()
|
1048 | .toMapDistance(FlagListener.pixelTolerance); |
||
1049 | 11296 | caballero | reader.start(); |
1050 | 8573 | azabala | for (int i = 0; i < numShapes; i++) { |
1051 | Geometry geo = reader.getShape(i).toJTSGeometry(); |
||
1052 | if (!((geo instanceof Point) || (geo instanceof MultiPoint))) |
||
1053 | continue;
|
||
1054 | |||
1055 | 11296 | caballero | |
1056 | |||
1057 | 8573 | azabala | Coordinate[] coords = geo.getCoordinates();
|
1058 | for (int j = 0; j < coords.length; j++) { |
||
1059 | 8723 | fjp | // flag = new GvFlag(coords[j].x, coords[j].y);
|
1060 | 8641 | jaume | |
1061 | 8723 | fjp | // NumericValue idflag = (NumericValue) recordset.getFieldValue(i, GvFlag.ID_FLAG_INDEX);
|
1062 | // flag.setIdFlag(idflag.intValue());
|
||
1063 | // NumericValue idarc = (NumericValue) recordset.getFieldValue(i, GvFlag.ID_ARC_INDEX);
|
||
1064 | // flag.setIdArc(idarc.intValue());
|
||
1065 | // NumericValue pct = (NumericValue) recordset.getFieldValue(i, GvFlag.PCT_INDEX);
|
||
1066 | // flag.setPct(pct.doubleValue());
|
||
1067 | // NumericValue cost = (NumericValue) recordset.getFieldValue(i, GvFlag.COST_INDEX);
|
||
1068 | // flag.setCost(cost.doubleValue());
|
||
1069 | // NumericValue direc = (NumericValue) recordset.getFieldValue(i, GvFlag.DIREC_INDEX);
|
||
1070 | // flag.setDirec(direc.intValue());
|
||
1071 | // StringValue desc = (StringValue) recordset.getFieldValue(i, GvFlag.DESCRIPTION_INDEX);
|
||
1072 | // flag.setDescription(desc.toString());
|
||
1073 | 8641 | jaume | |
1074 | 8723 | fjp | try {
|
1075 | flag = net.addFlag(coords[j].x, coords[j].y, realTol); |
||
1076 | |||
1077 | 8673 | fjp | // TODO: Create use a IFlagListener to do this
|
1078 | // inside flagsChanged. The best solution is
|
||
1079 | // to put all the code in RouteControlPanel
|
||
1080 | 8723 | fjp | NetworkUtils.addGraphicFlag(mapControl, flag); |
1081 | } catch (GraphException e) {
|
||
1082 | e.printStackTrace(); |
||
1083 | 11296 | caballero | NotificationManager.addError("No se puedo situar el registro " + i +
|
1084 | 8723 | fjp | "Por favor, compruebe que est? encima de la red.", e);
|
1085 | } |
||
1086 | 8573 | azabala | |
1087 | 8521 | jaume | } |
1088 | 8573 | azabala | mapControl.drawGraphics(); |
1089 | PluginServices.getMainFrame().enableControls(); |
||
1090 | } |
||
1091 | 11296 | caballero | reader.stop(); |
1092 | 8326 | jaume | |
1093 | 8573 | azabala | } catch (DriverException e1) {
|
1094 | return;
|
||
1095 | } catch (DriverIOException e2) {
|
||
1096 | return;
|
||
1097 | } |
||
1098 | } |
||
1099 | } |
||
1100 | 8326 | jaume | |
1101 | 8573 | azabala | /**
|
1102 | * Removes the selected flags in the component's table from: -the graphic
|
||
1103 | * layer of the active view -the active network -the own table
|
||
1104 | 8641 | jaume | *
|
1105 | 8573 | azabala | */
|
1106 | private void removeStage() { |
||
1107 | int[] selected = tblStages.getSelectedRows(); |
||
1108 | |||
1109 | for (int i = selected.length - 1; i >= 0; i--) { |
||
1110 | try {
|
||
1111 | 8616 | fjp | // removeFlag(selected[i]);
|
1112 | if (network != null) { |
||
1113 | 8573 | azabala | final GvFlag flag = (GvFlag) _getFlags().get(selected[i]);
|
1114 | 8616 | fjp | NetworkUtils.clearFlagFromGraphics(mapCtrl, flag); |
1115 | network.removeFlag(flag); |
||
1116 | mapCtrl.repaint(); |
||
1117 | 8573 | azabala | } |
1118 | } catch (IndexOutOfBoundsException iobEx) { |
||
1119 | } |
||
1120 | |||
1121 | }// for
|
||
1122 | tblStages.clearSelection(); |
||
1123 | 8762 | fjp | invalidateSolution(); |
1124 | 8616 | fjp | mapCtrl.drawMap(false);
|
1125 | 8326 | jaume | } |
1126 | |||
1127 | public GvFlag[] getFlags() { |
||
1128 | return (GvFlag[]) _getFlags().toArray(new GvFlag[0]); |
||
1129 | } |
||
1130 | 8606 | fjp | |
1131 | public void flagsChanged(int reason) { |
||
1132 | refresh(); |
||
1133 | 8616 | fjp | mapCtrl.drawGraphics(); |
1134 | 8641 | jaume | |
1135 | 8606 | fjp | } |
1136 | 8573 | azabala | } // @jve:decl-index=0:visual-constraint="17,9" |