root / trunk / extensions / extWCS / src-gvsig / com / iver / cit / gvsig / gui / wms / WMSWizard.java @ 1879
History | View | Annotate | Download (29.5 KB)
1 | 1879 | luisw | /*
|
---|---|---|---|
2 | * Created on 23-abr-2004
|
||
3 | *
|
||
4 | * To change the template for this generated file go to
|
||
5 | * Window>Preferences>Java>Code Generation>Code and Comments
|
||
6 | */
|
||
7 | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
||
8 | *
|
||
9 | * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
|
||
10 | *
|
||
11 | * This program is free software; you can redistribute it and/or
|
||
12 | * modify it under the terms of the GNU General Public License
|
||
13 | * as published by the Free Software Foundation; either version 2
|
||
14 | * of the License, or (at your option) any later version.
|
||
15 | *
|
||
16 | * This program is distributed in the hope that it will be useful,
|
||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
19 | * GNU General Public License for more details.
|
||
20 | *
|
||
21 | * You should have received a copy of the GNU General Public License
|
||
22 | * along with this program; if not, write to the Free Software
|
||
23 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
24 | *
|
||
25 | * For more information, contact:
|
||
26 | *
|
||
27 | * Generalitat Valenciana
|
||
28 | * Conselleria d'Infraestructures i Transport
|
||
29 | * Av. Blasco Ib??ez, 50
|
||
30 | * 46010 VALENCIA
|
||
31 | * SPAIN
|
||
32 | *
|
||
33 | * +34 963862235
|
||
34 | * gvsig@gva.es
|
||
35 | * www.gvsig.gva.es
|
||
36 | *
|
||
37 | * or
|
||
38 | *
|
||
39 | * IVER T.I. S.A
|
||
40 | * Salamanca 50
|
||
41 | * 46005 Valencia
|
||
42 | * Spain
|
||
43 | *
|
||
44 | * +34 963163400
|
||
45 | * dac@iver.es
|
||
46 | */
|
||
47 | package com.iver.cit.gvsig.gui.wms; |
||
48 | |||
49 | import java.awt.geom.Rectangle2D; |
||
50 | import java.net.MalformedURLException; |
||
51 | import java.net.URL; |
||
52 | import java.util.ArrayList; |
||
53 | import java.util.HashSet; |
||
54 | import java.util.Iterator; |
||
55 | import java.util.TreeSet; |
||
56 | |||
57 | import javax.swing.DefaultComboBoxModel; |
||
58 | import javax.swing.DefaultListModel; |
||
59 | import javax.swing.JPanel; |
||
60 | import javax.swing.JTextField; |
||
61 | import javax.swing.tree.TreePath; |
||
62 | |||
63 | import org.apache.log4j.Logger; |
||
64 | |||
65 | import com.iver.andami.PluginServices; |
||
66 | import com.iver.cit.gvsig.fmap.layers.FLayer; |
||
67 | import com.iver.cit.gvsig.fmap.layers.LayerFactory; |
||
68 | import com.iver.cit.gvsig.gui.WMSDataSourceAdapter; |
||
69 | import com.iver.cit.gvsig.gui.WizardPanel; |
||
70 | import com.iver.utiles.NotExistInXMLEntity; |
||
71 | import com.iver.utiles.XMLEntity; |
||
72 | import com.iver.utiles.swing.JComboBox; |
||
73 | |||
74 | |||
75 | /**
|
||
76 | * DOCUMENT ME!
|
||
77 | *
|
||
78 | * @author Fernando Gonz?lez Cort?s
|
||
79 | */
|
||
80 | public class WMSWizard extends WizardPanel { |
||
81 | private static Logger logger = Logger.getLogger(WMSWizard.class.getName()); |
||
82 | private int page = 0; |
||
83 | private boolean conectado = false; |
||
84 | private javax.swing.JPanel jContentPane = null; |
||
85 | private JComboBox cmbHost = null; |
||
86 | private javax.swing.JButton btnDetalles = null; |
||
87 | private javax.swing.JPanel jPanel = null; |
||
88 | private javax.swing.JLabel jLabel1 = null; |
||
89 | private javax.swing.JLabel lblTitle = null; |
||
90 | private javax.swing.JScrollPane jScrollPane = null; |
||
91 | private javax.swing.JTextArea txtAbstract = null; |
||
92 | private javax.swing.JScrollPane jScrollPane1 = null; |
||
93 | private javax.swing.JTree treeLayers1 = null; |
||
94 | private javax.swing.JScrollPane jScrollPane2 = null; |
||
95 | private javax.swing.JList lstFormats1 = null; |
||
96 | private javax.swing.JPanel panelPage1 = null; |
||
97 | private javax.swing.JPanel panelPage2 = null; |
||
98 | private javax.swing.JScrollPane jScrollPane5 = null; |
||
99 | private javax.swing.JList lstSelectedLayers = null; |
||
100 | private javax.swing.JButton btnAdd = null; |
||
101 | private javax.swing.JButton btnDel = null; |
||
102 | private javax.swing.JScrollPane jScrollPane6 = null; |
||
103 | private javax.swing.JList lstSRSs = null; |
||
104 | private LayerListModel selectedLayersModel = new LayerListModel(); |
||
105 | private javax.swing.JButton btnSiguiente = null; |
||
106 | private javax.swing.JButton btnAnterior = null; |
||
107 | private javax.swing.JPanel jPanel1 = null; |
||
108 | private javax.swing.JPanel jPanel2 = null; |
||
109 | private javax.swing.JPanel jPanel3 = null; |
||
110 | private WizardListenerSupport listenerSupport = new WizardListenerSupport(); |
||
111 | private WizardDataSource dataSource;
|
||
112 | private JPanel jPanel4 = null; |
||
113 | private JTextField jTxtNomCapa = null; |
||
114 | |||
115 | /**
|
||
116 | * This is the default constructor
|
||
117 | */
|
||
118 | public WMSWizard() {
|
||
119 | super();
|
||
120 | initialize(); |
||
121 | } |
||
122 | |||
123 | /**
|
||
124 | * This method initializes this
|
||
125 | */
|
||
126 | private void initialize() { |
||
127 | setTabName("WMS");
|
||
128 | this.setSize(510, 311); |
||
129 | this.setLayout(null); |
||
130 | this.setPreferredSize(new java.awt.Dimension(750, 320)); |
||
131 | this.setVisible(true); |
||
132 | this.add(getPanelPage1(), null); |
||
133 | this.add(getPanelPage2(), null); |
||
134 | this.add(getBtnAnterior(), null); |
||
135 | this.add(getBtnSiguiente(), null); |
||
136 | activarVisualizarBotones(); |
||
137 | } |
||
138 | |||
139 | /**
|
||
140 | * DOCUMENT ME!
|
||
141 | */
|
||
142 | private void actualizarSRS() { |
||
143 | LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
|
||
144 | |||
145 | if (layers.length == 0) { |
||
146 | lstSRSs.setModel(new DefaultListModel()); |
||
147 | } else {
|
||
148 | TreeSet srsSet = new TreeSet(); |
||
149 | srsSet.addAll(layers[0].getSRSs());
|
||
150 | |||
151 | for (int i = 1; i < layers.length; i++) { |
||
152 | HashSet nuevo = new HashSet(layers[i].getSRSs()); |
||
153 | Iterator it = srsSet.iterator();
|
||
154 | |||
155 | while (it.hasNext()) {
|
||
156 | String srs = (String) it.next(); |
||
157 | |||
158 | if (!nuevo.contains(srs)) {
|
||
159 | srsSet.remove(srs); |
||
160 | } |
||
161 | } |
||
162 | } |
||
163 | |||
164 | DefaultListModel model = new DefaultListModel(); |
||
165 | String[] array = (String[]) srsSet.toArray(new String[0]); |
||
166 | |||
167 | for (int i = 0; i < array.length; i++) { |
||
168 | model.addElement(array[i]); |
||
169 | } |
||
170 | |||
171 | lstSRSs.setModel(model); |
||
172 | } |
||
173 | } |
||
174 | |||
175 | /**
|
||
176 | * DOCUMENT ME!
|
||
177 | */
|
||
178 | private void addLayer() { |
||
179 | boolean alguno = false; |
||
180 | |||
181 | TreePath[] selecciones = getTreeLayers1().getSelectionPaths(); |
||
182 | |||
183 | for (int i = 0; i < selecciones.length; i++) { |
||
184 | LayerInfo nodo = (LayerInfo) selecciones[i].getLastPathComponent(); |
||
185 | |||
186 | String name = nodo.name;
|
||
187 | String text = nodo.text;
|
||
188 | ArrayList srs = nodo.getSRSs();
|
||
189 | |||
190 | //Se a?ade a la lista de layers seleccionados
|
||
191 | LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel(); |
||
192 | |||
193 | if (modelo.addElement(nodo)) {
|
||
194 | alguno = true;
|
||
195 | } |
||
196 | } |
||
197 | |||
198 | if (alguno) {
|
||
199 | activarVisualizarBotones(); |
||
200 | actualizarSRS(); |
||
201 | } |
||
202 | } |
||
203 | |||
204 | /**
|
||
205 | * DOCUMENT ME!
|
||
206 | */
|
||
207 | private void delLayer() { |
||
208 | int[] index = lstSelectedLayers.getSelectedIndices(); |
||
209 | |||
210 | ArrayList removeList = new ArrayList(); |
||
211 | LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel(); |
||
212 | LayerInfo[] infos = modelo.getElements();
|
||
213 | |||
214 | for (int i = 0; i < index.length; i++) { |
||
215 | removeList.add(infos[index[i]]); |
||
216 | } |
||
217 | |||
218 | modelo.delElements(removeList); |
||
219 | lstSelectedLayers.clearSelection(); |
||
220 | |||
221 | activarVisualizarBotones(); |
||
222 | |||
223 | actualizarSRS(); |
||
224 | } |
||
225 | |||
226 | /**
|
||
227 | * DOCUMENT ME!
|
||
228 | *
|
||
229 | * @param host DOCUMENT ME!
|
||
230 | */
|
||
231 | private void addHost(String host) { |
||
232 | host = host.trim(); |
||
233 | |||
234 | DefaultComboBoxModel model = (DefaultComboBoxModel) getTxtHost() |
||
235 | .getModel(); |
||
236 | |||
237 | if (model.getIndexOf(host) < 0) { |
||
238 | model.addElement(host); |
||
239 | |||
240 | PluginServices ps = PluginServices.getPluginServices(this);
|
||
241 | XMLEntity xml = ps.getPersistentXML(); |
||
242 | |||
243 | try {
|
||
244 | String[] servers = xml.getStringArrayProperty("wms-servers"); |
||
245 | String[] newServers = new String[servers.length + 1]; |
||
246 | System.arraycopy(servers, 0, newServers, 0, servers.length); |
||
247 | newServers[servers.length] = host; |
||
248 | xml.putProperty("wms-servers", newServers);
|
||
249 | } catch (NotExistInXMLEntity e) {
|
||
250 | xml.putProperty("wms-servers", new String[] { host }); |
||
251 | } |
||
252 | |||
253 | ps.setPersistentXML(xml); |
||
254 | } |
||
255 | } |
||
256 | |||
257 | /**
|
||
258 | * DOCUMENT ME!
|
||
259 | */
|
||
260 | private void rellenarControles() { |
||
261 | try {
|
||
262 | String host = cmbHost.getModel().getSelectedItem().toString();
|
||
263 | |||
264 | // if (!host.endsWith("?")) {
|
||
265 | // host += "?";
|
||
266 | // }
|
||
267 | |||
268 | WizardData data = dataSource.detalles(new URL(host)); |
||
269 | |||
270 | addHost(host); |
||
271 | |||
272 | ((LayerListModel) lstSelectedLayers.getModel()).clear(); |
||
273 | lstSelectedLayers.repaint(); |
||
274 | lblTitle.setText(data.getTitle()); |
||
275 | txtAbstract.setText(data.getAbstract()); |
||
276 | lstFormats1.setModel(new FormatListModel(data.getFormats()));
|
||
277 | treeLayers1.setModel(new LayerTreeModel(data.getLayer()));
|
||
278 | conectado = true;
|
||
279 | activarVisualizarBotones(); |
||
280 | } catch (Exception e) { |
||
281 | listenerSupport.callError(e); |
||
282 | } |
||
283 | } |
||
284 | |||
285 | /**
|
||
286 | * DOCUMENT ME!
|
||
287 | */
|
||
288 | private void activarVisualizarBotones() { |
||
289 | if (page == 0) { |
||
290 | getBtnAnterior().setEnabled(false);
|
||
291 | getBtnSiguiente().setVisible(true);
|
||
292 | |||
293 | if (conectado) {
|
||
294 | getBtnSiguiente().setEnabled(true);
|
||
295 | } else {
|
||
296 | getBtnSiguiente().setEnabled(false);
|
||
297 | } |
||
298 | } else if (page == 1) { |
||
299 | getBtnAnterior().setEnabled(true);
|
||
300 | getBtnSiguiente().setVisible(false);
|
||
301 | listenerSupport.callStateChanged(true);
|
||
302 | |||
303 | if ((getLstSRSs().getSelectedIndex() != -1) && |
||
304 | (getLstFormats1().getSelectedIndex() != -1) &&
|
||
305 | (getLstSelectedLayers().getModel().getSize() > 0)) {
|
||
306 | listenerSupport.callStateChanged(true);
|
||
307 | } else {
|
||
308 | listenerSupport.callStateChanged(false);
|
||
309 | } |
||
310 | |||
311 | if (getTreeLayers1().getSelectionCount() > 0) { |
||
312 | LayerInfo nodo = (LayerInfo) getTreeLayers1().getSelectionPath() |
||
313 | .getLastPathComponent(); |
||
314 | String name = nodo.name;
|
||
315 | |||
316 | if (name != null) { |
||
317 | getBtnAdd().setEnabled(true);
|
||
318 | } else {
|
||
319 | getBtnAdd().setEnabled(false);
|
||
320 | } |
||
321 | } else {
|
||
322 | getBtnAdd().setEnabled(false);
|
||
323 | } |
||
324 | |||
325 | if (getLstSelectedLayers().getSelectedIndex() != -1) { |
||
326 | getBtnDel().setEnabled(true);
|
||
327 | } else {
|
||
328 | getBtnDel().setEnabled(false);
|
||
329 | } |
||
330 | } |
||
331 | } |
||
332 | |||
333 | /*
|
||
334 | * DOCUMENT ME!
|
||
335 | *
|
||
336 | private void finalizar() {
|
||
337 | LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
|
||
338 | String srs = (String) lstSRSs.getSelectedValue();
|
||
339 | //Nombre separado por comas de las capas
|
||
340 | String layersQuery = layers[0].name;
|
||
341 | for (int i = 1; i < layers.length; i++) {
|
||
342 | layersQuery += ("," + layers[i].name);
|
||
343 | }
|
||
344 | Rectangle2D rect;
|
||
345 | rect = v.getMapControl().getExtent();
|
||
346 | if (rect == null) {
|
||
347 | //Boundingbox de todas las capas
|
||
348 | ArrayList rectangulos = new ArrayList();
|
||
349 | for (int i = 0; i < layers.length; i++) {
|
||
350 | rect = wms.getBoundingBox(layers[i].name, srs);
|
||
351 | if (rect != null) {
|
||
352 | rectangulos.add(rect);
|
||
353 | }
|
||
354 | }
|
||
355 | rect = Utilities.getRectangle((Rectangle2D.Double[]) rectangulos.toArray(
|
||
356 | new Rectangle2D.Double[0]));
|
||
357 | if (rect == null) {
|
||
358 | App.instance.getNm().addInfo("Si no hay un bounding box en la especificaci?n, y tampoco en el FMap.",
|
||
359 | null);
|
||
360 | return; //Si no hay un bounding box en la especificaci?n, y tampoco en el FMap.
|
||
361 | }
|
||
362 | logger.debug("(" + rect.getMinX() + ", " + rect.getMinY() + ")-(" +
|
||
363 | rect.getMaxX() + ", " + rect.getMaxY() + ")");
|
||
364 | }
|
||
365 | if (rect != null) {
|
||
366 | IFLayer lyr = new FLyrWMS(rect,
|
||
367 | (String) lstFormats1.getSelectedValue(), layersQuery, srs,
|
||
368 | wms);
|
||
369 | v.getMapControl().getLayers().addLayer(lyr);
|
||
370 | v.getTOC().refresh();
|
||
371 | v.getMapControl().drawMap();
|
||
372 | } else {
|
||
373 | }
|
||
374 | /*MapQuery query = new MapQuery();
|
||
375 | query.setBBOX(rect);
|
||
376 | query.setFormat((String) lstFormats1.getSelectedValue());
|
||
377 | query.setHeight(300);
|
||
378 | query.setLayers(layersQuery);
|
||
379 | query.setSRS(srs);
|
||
380 | query.setStyles("");
|
||
381 | query.setVersion("1.0.0");
|
||
382 | query.setWidth(300);
|
||
383 | byte[] bytes;
|
||
384 | try {
|
||
385 | bytes = wms.doMapQuery(query);
|
||
386 | FileOutputStream out;
|
||
387 | out = new FileOutputStream("res.png");
|
||
388 | out.write(bytes);
|
||
389 | out.close();
|
||
390 | } catch (WMSException e1) {
|
||
391 | e1.printStackTrace();
|
||
392 | } catch (Exception e1) {
|
||
393 | e1.printStackTrace();
|
||
394 | }
|
||
395 | }*/
|
||
396 | |||
397 | /**
|
||
398 | * This method initializes txtHost
|
||
399 | *
|
||
400 | * @return javax.swing.JTextField
|
||
401 | */
|
||
402 | private javax.swing.JComboBox getTxtHost() {
|
||
403 | if (cmbHost == null) { |
||
404 | cmbHost = new JComboBox(); |
||
405 | cmbHost.setModel(new DefaultComboBoxModel()); |
||
406 | cmbHost.setPreferredSize(new java.awt.Dimension(350, 20)); |
||
407 | cmbHost.setEditable(true);
|
||
408 | |||
409 | XMLEntity xml = PluginServices.getPluginServices(this)
|
||
410 | .getPersistentXML(); |
||
411 | if (xml == null) |
||
412 | xml = new XMLEntity();
|
||
413 | |||
414 | if (!xml.contains("wms-servers")) { |
||
415 | String[] servers = new String[2]; |
||
416 | servers[0] = "http://demo.deegree.org:8080/deegree/wms"; |
||
417 | servers[1] = "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?"; |
||
418 | |||
419 | xml.putProperty("wms-servers", servers);
|
||
420 | } |
||
421 | |||
422 | try {
|
||
423 | String[] servers = xml.getStringArrayProperty("wms-servers"); |
||
424 | |||
425 | for (int i = 0; i < servers.length; i++) { |
||
426 | ((DefaultComboBoxModel) cmbHost.getModel()).addElement(servers[i]);
|
||
427 | } |
||
428 | } catch (NotExistInXMLEntity e) {
|
||
429 | } |
||
430 | } |
||
431 | |||
432 | return cmbHost;
|
||
433 | } |
||
434 | |||
435 | /**
|
||
436 | * This method initializes btnDetalles
|
||
437 | *
|
||
438 | * @return javax.swing.JButton
|
||
439 | */
|
||
440 | private javax.swing.JButton getBtnDetalles() {
|
||
441 | if (btnDetalles == null) { |
||
442 | btnDetalles = new javax.swing.JButton();
|
||
443 | btnDetalles.setPreferredSize(new java.awt.Dimension(100, 20)); |
||
444 | btnDetalles.setText(PluginServices.getText(this, "detalles")); |
||
445 | btnDetalles.addActionListener(new java.awt.event.ActionListener() {
|
||
446 | public void actionPerformed(java.awt.event.ActionEvent e) { |
||
447 | rellenarControles(); |
||
448 | } |
||
449 | }); |
||
450 | } |
||
451 | |||
452 | return btnDetalles;
|
||
453 | } |
||
454 | |||
455 | /**
|
||
456 | * This method initializes jPanel
|
||
457 | *
|
||
458 | * @return javax.swing.JPanel
|
||
459 | */
|
||
460 | private javax.swing.JPanel getJPanel() {
|
||
461 | if (jPanel == null) { |
||
462 | jPanel = new javax.swing.JPanel();
|
||
463 | jPanel.setLayout(null);
|
||
464 | jPanel.setPreferredSize(new java.awt.Dimension(470, 130)); |
||
465 | jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder( |
||
466 | null, PluginServices.getText(this, "descripcion"), |
||
467 | javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, |
||
468 | javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
469 | jPanel.setBounds(2, 67, 477, 197); |
||
470 | jPanel.add(getJLabel1(), null);
|
||
471 | jPanel.add(getLblTitle(), null);
|
||
472 | jPanel.add(getJScrollPane(), null);
|
||
473 | } |
||
474 | |||
475 | return jPanel;
|
||
476 | } |
||
477 | |||
478 | /**
|
||
479 | * This method initializes jLabel1
|
||
480 | *
|
||
481 | * @return javax.swing.JLabel
|
||
482 | */
|
||
483 | private javax.swing.JLabel getJLabel1() {
|
||
484 | if (jLabel1 == null) { |
||
485 | jLabel1 = new javax.swing.JLabel();
|
||
486 | jLabel1.setText(PluginServices.getText(this, "nombre") + ":"); |
||
487 | jLabel1.setBounds(37, 26, 40, 15); |
||
488 | } |
||
489 | |||
490 | return jLabel1;
|
||
491 | } |
||
492 | |||
493 | /**
|
||
494 | * This method initializes lblTitle
|
||
495 | *
|
||
496 | * @return javax.swing.JLabel
|
||
497 | */
|
||
498 | private javax.swing.JLabel getLblTitle() {
|
||
499 | if (lblTitle == null) { |
||
500 | lblTitle = new javax.swing.JLabel();
|
||
501 | lblTitle.setText("-");
|
||
502 | lblTitle.setPreferredSize(new java.awt.Dimension(350, 16)); |
||
503 | lblTitle.setBounds(82, 26, 350, 16); |
||
504 | } |
||
505 | |||
506 | return lblTitle;
|
||
507 | } |
||
508 | |||
509 | /**
|
||
510 | * This method initializes jScrollPane
|
||
511 | *
|
||
512 | * @return javax.swing.JScrollPane
|
||
513 | */
|
||
514 | private javax.swing.JScrollPane getJScrollPane() {
|
||
515 | if (jScrollPane == null) { |
||
516 | jScrollPane = new javax.swing.JScrollPane();
|
||
517 | jScrollPane.setViewportView(getTxtAbstract()); |
||
518 | jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60)); |
||
519 | jScrollPane.setBounds(10, 47, 450, 137); |
||
520 | } |
||
521 | |||
522 | return jScrollPane;
|
||
523 | } |
||
524 | |||
525 | /**
|
||
526 | * This method initializes txtAbstract
|
||
527 | *
|
||
528 | * @return javax.swing.JTextArea
|
||
529 | */
|
||
530 | private javax.swing.JTextArea getTxtAbstract() {
|
||
531 | if (txtAbstract == null) { |
||
532 | txtAbstract = new javax.swing.JTextArea();
|
||
533 | txtAbstract.setWrapStyleWord(true);
|
||
534 | txtAbstract.setColumns(30);
|
||
535 | txtAbstract.setLineWrap(true);
|
||
536 | } |
||
537 | |||
538 | return txtAbstract;
|
||
539 | } |
||
540 | |||
541 | /**
|
||
542 | * This method initializes jScrollPane1
|
||
543 | *
|
||
544 | * @return javax.swing.JScrollPane
|
||
545 | */
|
||
546 | private javax.swing.JScrollPane getJScrollPane1() {
|
||
547 | if (jScrollPane1 == null) { |
||
548 | jScrollPane1 = new javax.swing.JScrollPane();
|
||
549 | jScrollPane1.setViewportView(getTreeLayers1()); |
||
550 | jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75)); |
||
551 | } |
||
552 | |||
553 | return jScrollPane1;
|
||
554 | } |
||
555 | |||
556 | /**
|
||
557 | * This method initializes treeLayers1
|
||
558 | *
|
||
559 | * @return javax.swing.JTree
|
||
560 | */
|
||
561 | private javax.swing.JTree getTreeLayers1() {
|
||
562 | if (treeLayers1 == null) { |
||
563 | treeLayers1 = new javax.swing.JTree();
|
||
564 | treeLayers1.setRootVisible(true);
|
||
565 | treeLayers1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
|
||
566 | public void valueChanged( |
||
567 | javax.swing.event.TreeSelectionEvent e) { |
||
568 | activarVisualizarBotones(); |
||
569 | } |
||
570 | }); |
||
571 | } |
||
572 | |||
573 | return treeLayers1;
|
||
574 | } |
||
575 | |||
576 | /**
|
||
577 | * This method initializes jScrollPane2
|
||
578 | *
|
||
579 | * @return javax.swing.JScrollPane
|
||
580 | */
|
||
581 | private javax.swing.JScrollPane getJScrollPane2() {
|
||
582 | if (jScrollPane2 == null) { |
||
583 | jScrollPane2 = new javax.swing.JScrollPane();
|
||
584 | jScrollPane2.setViewportView(getLstFormats1()); |
||
585 | jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200)); |
||
586 | jScrollPane2.setBounds(297, 26, 183, 66); |
||
587 | } |
||
588 | |||
589 | return jScrollPane2;
|
||
590 | } |
||
591 | |||
592 | /**
|
||
593 | * This method initializes lstFormats1
|
||
594 | *
|
||
595 | * @return javax.swing.JList
|
||
596 | */
|
||
597 | private javax.swing.JList getLstFormats1() {
|
||
598 | if (lstFormats1 == null) { |
||
599 | lstFormats1 = new javax.swing.JList();
|
||
600 | lstFormats1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); |
||
601 | lstFormats1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
|
||
602 | public void valueChanged( |
||
603 | javax.swing.event.ListSelectionEvent e) { |
||
604 | activarVisualizarBotones(); |
||
605 | } |
||
606 | }); |
||
607 | } |
||
608 | |||
609 | return lstFormats1;
|
||
610 | } |
||
611 | |||
612 | /**
|
||
613 | * This method initializes panelPage1
|
||
614 | *
|
||
615 | * @return javax.swing.JPanel
|
||
616 | */
|
||
617 | private javax.swing.JPanel getPanelPage1() {
|
||
618 | if (panelPage1 == null) { |
||
619 | panelPage1 = new javax.swing.JPanel();
|
||
620 | panelPage1.setLayout(null);
|
||
621 | panelPage1.setPreferredSize(new java.awt.Dimension(480, 220)); |
||
622 | panelPage1.setVisible(true);
|
||
623 | panelPage1.setBounds(15, 5, 480, 262); |
||
624 | panelPage1.add(getJPanel1(), null);
|
||
625 | panelPage1.add(getJPanel(), null);
|
||
626 | } |
||
627 | |||
628 | return panelPage1;
|
||
629 | } |
||
630 | |||
631 | /**
|
||
632 | * This method initializes panelPage2
|
||
633 | *
|
||
634 | * @return javax.swing.JPanel
|
||
635 | */
|
||
636 | private javax.swing.JPanel getPanelPage2() {
|
||
637 | if (panelPage2 == null) { |
||
638 | panelPage2 = new javax.swing.JPanel();
|
||
639 | panelPage2.setLayout(null);
|
||
640 | panelPage2.setPreferredSize(new java.awt.Dimension(490, 300)); |
||
641 | panelPage2.setVisible(false);
|
||
642 | panelPage2.setBounds(10, 5, 490, 276); |
||
643 | panelPage2.add(getJPanel2(), null);
|
||
644 | panelPage2.add(getJPanel3(), null);
|
||
645 | panelPage2.add(getJPanel4(), null);
|
||
646 | } |
||
647 | |||
648 | return panelPage2;
|
||
649 | } |
||
650 | |||
651 | /**
|
||
652 | * This method initializes jScrollPane5
|
||
653 | *
|
||
654 | * @return javax.swing.JScrollPane
|
||
655 | */
|
||
656 | private javax.swing.JScrollPane getJScrollPane5() {
|
||
657 | if (jScrollPane5 == null) { |
||
658 | jScrollPane5 = new javax.swing.JScrollPane();
|
||
659 | jScrollPane5.setViewportView(getLstSelectedLayers()); |
||
660 | jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75)); |
||
661 | } |
||
662 | |||
663 | return jScrollPane5;
|
||
664 | } |
||
665 | |||
666 | /**
|
||
667 | * This method initializes lstSelectedLayers
|
||
668 | *
|
||
669 | * @return javax.swing.JList
|
||
670 | */
|
||
671 | private javax.swing.JList getLstSelectedLayers() {
|
||
672 | if (lstSelectedLayers == null) { |
||
673 | lstSelectedLayers = new javax.swing.JList();
|
||
674 | lstSelectedLayers.setModel(selectedLayersModel); |
||
675 | lstSelectedLayers.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); |
||
676 | lstSelectedLayers.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
|
||
677 | public void valueChanged( |
||
678 | javax.swing.event.ListSelectionEvent e) { |
||
679 | activarVisualizarBotones(); |
||
680 | } |
||
681 | }); |
||
682 | } |
||
683 | |||
684 | return lstSelectedLayers;
|
||
685 | } |
||
686 | |||
687 | /**
|
||
688 | * This method initializes btnAdd
|
||
689 | *
|
||
690 | * @return javax.swing.JButton
|
||
691 | */
|
||
692 | private javax.swing.JButton getBtnAdd() {
|
||
693 | if (btnAdd == null) { |
||
694 | btnAdd = new javax.swing.JButton();
|
||
695 | btnAdd.setPreferredSize(new java.awt.Dimension(23, 23)); |
||
696 | btnAdd.setText(">");
|
||
697 | btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0)); |
||
698 | btnAdd.setEnabled(false);
|
||
699 | btnAdd.addActionListener(new java.awt.event.ActionListener() {
|
||
700 | public void actionPerformed(java.awt.event.ActionEvent e) { |
||
701 | addLayer(); |
||
702 | } |
||
703 | }); |
||
704 | } |
||
705 | |||
706 | return btnAdd;
|
||
707 | } |
||
708 | |||
709 | /**
|
||
710 | * This method initializes btnDel
|
||
711 | *
|
||
712 | * @return javax.swing.JButton
|
||
713 | */
|
||
714 | private javax.swing.JButton getBtnDel() {
|
||
715 | if (btnDel == null) { |
||
716 | btnDel = new javax.swing.JButton();
|
||
717 | btnDel.setPreferredSize(new java.awt.Dimension(23, 23)); |
||
718 | btnDel.setText("<");
|
||
719 | btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0)); |
||
720 | btnDel.setEnabled(false);
|
||
721 | btnDel.addActionListener(new java.awt.event.ActionListener() {
|
||
722 | public void actionPerformed(java.awt.event.ActionEvent e) { |
||
723 | delLayer(); |
||
724 | } |
||
725 | }); |
||
726 | } |
||
727 | |||
728 | return btnDel;
|
||
729 | } |
||
730 | |||
731 | /**
|
||
732 | * This method initializes jScrollPane6
|
||
733 | *
|
||
734 | * @return javax.swing.JScrollPane
|
||
735 | */
|
||
736 | private javax.swing.JScrollPane getJScrollPane6() {
|
||
737 | if (jScrollPane6 == null) { |
||
738 | jScrollPane6 = new javax.swing.JScrollPane();
|
||
739 | jScrollPane6.setViewportView(getLstSRSs()); |
||
740 | jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 200)); |
||
741 | jScrollPane6.setBounds(10, 26, 272, 68); |
||
742 | } |
||
743 | |||
744 | return jScrollPane6;
|
||
745 | } |
||
746 | |||
747 | /**
|
||
748 | * This method initializes lstSRSs
|
||
749 | *
|
||
750 | * @return javax.swing.JList
|
||
751 | */
|
||
752 | private javax.swing.JList getLstSRSs() {
|
||
753 | if (lstSRSs == null) { |
||
754 | lstSRSs = new javax.swing.JList();
|
||
755 | lstSRSs.setModel(new SRSListModel());
|
||
756 | lstSRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); |
||
757 | lstSRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
|
||
758 | public void valueChanged( |
||
759 | javax.swing.event.ListSelectionEvent e) { |
||
760 | activarVisualizarBotones(); |
||
761 | } |
||
762 | }); |
||
763 | } |
||
764 | |||
765 | return lstSRSs;
|
||
766 | } |
||
767 | |||
768 | /**
|
||
769 | * This method initializes btnSiguiente
|
||
770 | *
|
||
771 | * @return javax.swing.JButton
|
||
772 | */
|
||
773 | private javax.swing.JButton getBtnSiguiente() {
|
||
774 | if (btnSiguiente == null) { |
||
775 | btnSiguiente = new javax.swing.JButton();
|
||
776 | btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30)); |
||
777 | btnSiguiente.setText(PluginServices.getText(this, "siguiente")); |
||
778 | btnSiguiente.setBounds(205, 282, 100, 21); |
||
779 | btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
|
||
780 | public void actionPerformed(java.awt.event.ActionEvent e) { |
||
781 | page++; |
||
782 | getPanelPage1().setVisible(false);
|
||
783 | getPanelPage2().setVisible(true);
|
||
784 | activarVisualizarBotones(); |
||
785 | } |
||
786 | }); |
||
787 | } |
||
788 | |||
789 | return btnSiguiente;
|
||
790 | } |
||
791 | |||
792 | /**
|
||
793 | * This method initializes btnAnterior
|
||
794 | *
|
||
795 | * @return javax.swing.JButton
|
||
796 | */
|
||
797 | private javax.swing.JButton getBtnAnterior() {
|
||
798 | if (btnAnterior == null) { |
||
799 | btnAnterior = new javax.swing.JButton();
|
||
800 | btnAnterior.setText(PluginServices.getText(this, "anterior")); |
||
801 | btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30)); |
||
802 | btnAnterior.setBounds(100, 282, 100, 21); |
||
803 | btnAnterior.addActionListener(new java.awt.event.ActionListener() {
|
||
804 | public void actionPerformed(java.awt.event.ActionEvent e) { |
||
805 | page--; |
||
806 | getPanelPage1().setVisible(true);
|
||
807 | getPanelPage2().setVisible(false);
|
||
808 | activarVisualizarBotones(); |
||
809 | } |
||
810 | }); |
||
811 | } |
||
812 | |||
813 | return btnAnterior;
|
||
814 | } |
||
815 | |||
816 | /**
|
||
817 | * This method initializes jPanel1
|
||
818 | *
|
||
819 | * @return javax.swing.JPanel
|
||
820 | */
|
||
821 | private javax.swing.JPanel getJPanel1() {
|
||
822 | if (jPanel1 == null) { |
||
823 | jPanel1 = new javax.swing.JPanel();
|
||
824 | jPanel1.add(getTxtHost(), null);
|
||
825 | jPanel1.add(getBtnDetalles(), null);
|
||
826 | jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder( |
||
827 | null, PluginServices.getText(this, "servidor"), |
||
828 | javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, |
||
829 | javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
830 | jPanel1.setBounds(2, 5, 477, 57); |
||
831 | } |
||
832 | |||
833 | return jPanel1;
|
||
834 | } |
||
835 | |||
836 | /**
|
||
837 | * This method initializes jPanel2
|
||
838 | *
|
||
839 | * @return javax.swing.JPanel
|
||
840 | */
|
||
841 | private javax.swing.JPanel getJPanel2() {
|
||
842 | if (jPanel2 == null) { |
||
843 | jPanel2 = new javax.swing.JPanel();
|
||
844 | jPanel2.add(getJScrollPane1(), null);
|
||
845 | jPanel2.add(getBtnDel(), null);
|
||
846 | jPanel2.add(getBtnAdd(), null);
|
||
847 | jPanel2.add(getJScrollPane5(), null);
|
||
848 | jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder( |
||
849 | null, PluginServices.getText(this, "seleccionar_capas"), |
||
850 | javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, |
||
851 | javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
852 | jPanel2.setBounds(-1, 5, 493, 112); |
||
853 | } |
||
854 | |||
855 | return jPanel2;
|
||
856 | } |
||
857 | |||
858 | /**
|
||
859 | * This method initializes jPanel3
|
||
860 | *
|
||
861 | * @return javax.swing.JPanel
|
||
862 | */
|
||
863 | private javax.swing.JPanel getJPanel3() {
|
||
864 | if (jPanel3 == null) { |
||
865 | jPanel3 = new javax.swing.JPanel();
|
||
866 | jPanel3.setLayout(null);
|
||
867 | jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder( |
||
868 | null, PluginServices.getText(this, "seleccionar_formato"), |
||
869 | javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, |
||
870 | javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
871 | jPanel3.setPreferredSize(new java.awt.Dimension(493, 300)); |
||
872 | jPanel3.setLocation(-1, 122); |
||
873 | jPanel3.setSize(493, 101); |
||
874 | jPanel3.add(getJScrollPane6(), null);
|
||
875 | jPanel3.add(getJScrollPane2(), null);
|
||
876 | } |
||
877 | |||
878 | return jPanel3;
|
||
879 | } |
||
880 | |||
881 | /**
|
||
882 | * DOCUMENT ME!
|
||
883 | *
|
||
884 | * @param listener
|
||
885 | */
|
||
886 | public void addWizardListener(WizardListener listener) { |
||
887 | listenerSupport.addWizardListener(listener); |
||
888 | } |
||
889 | |||
890 | /**
|
||
891 | * DOCUMENT ME!
|
||
892 | *
|
||
893 | * @param listener
|
||
894 | */
|
||
895 | public void removeWizardListener(WizardListener listener) { |
||
896 | listenerSupport.removeWizardListener(listener); |
||
897 | } |
||
898 | |||
899 | /**
|
||
900 | * DOCUMENT ME!
|
||
901 | *
|
||
902 | * @return
|
||
903 | */
|
||
904 | public WizardDataSource getDataSource() {
|
||
905 | return dataSource;
|
||
906 | } |
||
907 | |||
908 | /**
|
||
909 | * DOCUMENT ME!
|
||
910 | *
|
||
911 | * @param source
|
||
912 | */
|
||
913 | public void setDataSource(WizardDataSource source) { |
||
914 | dataSource = source; |
||
915 | } |
||
916 | |||
917 | /**
|
||
918 | * DOCUMENT ME!
|
||
919 | *
|
||
920 | * @return DOCUMENT ME!
|
||
921 | */
|
||
922 | public String getLayersQuery() { |
||
923 | LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
|
||
924 | |||
925 | //Nombre separado por comas de las capas
|
||
926 | String layersQuery = layers[0].name; |
||
927 | |||
928 | for (int i = 1; i < layers.length; i++) { |
||
929 | layersQuery += ("," + layers[i].name);
|
||
930 | } |
||
931 | |||
932 | return layersQuery;
|
||
933 | } |
||
934 | |||
935 | /**
|
||
936 | * DOCUMENT ME!
|
||
937 | *
|
||
938 | * @return DOCUMENT ME!
|
||
939 | */
|
||
940 | public String getQueryableLayerQuery() { |
||
941 | LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
|
||
942 | |||
943 | //Nombre separado por comas de las capas
|
||
944 | String layersQuery = ""; |
||
945 | int i;
|
||
946 | |||
947 | for (i = 0; i < layers.length; i++) { |
||
948 | if (layers[i].queryable) {
|
||
949 | layersQuery = layers[i].name; |
||
950 | |||
951 | break;
|
||
952 | } |
||
953 | } |
||
954 | |||
955 | for (int j = i + 1; j < layers.length; j++) { |
||
956 | if (layers[j].queryable) {
|
||
957 | layersQuery += ("," + layers[j].name);
|
||
958 | } |
||
959 | } |
||
960 | |||
961 | return layersQuery;
|
||
962 | } |
||
963 | |||
964 | /**
|
||
965 | * DOCUMENT ME!
|
||
966 | *
|
||
967 | * @return DOCUMENT ME!
|
||
968 | */
|
||
969 | public String getSRS() { |
||
970 | return (String) lstSRSs.getSelectedValue(); |
||
971 | } |
||
972 | |||
973 | /**
|
||
974 | * DOCUMENT ME!
|
||
975 | *
|
||
976 | * @return DOCUMENT ME!
|
||
977 | */
|
||
978 | public String getFormat() { |
||
979 | return (String) lstFormats1.getSelectedValue(); |
||
980 | } |
||
981 | |||
982 | /**
|
||
983 | * DOCUMENT ME!
|
||
984 | *
|
||
985 | * @return DOCUMENT ME!
|
||
986 | */
|
||
987 | public TreePath[] getSelectedLayers() { |
||
988 | return getTreeLayers1().getSelectionPaths();
|
||
989 | } |
||
990 | |||
991 | /**
|
||
992 | * DOCUMENT ME!
|
||
993 | *
|
||
994 | * @return DOCUMENT ME!
|
||
995 | */
|
||
996 | public Rectangle2D getLayersRectangle() { |
||
997 | TreePath[] layers = getSelectedLayers(); |
||
998 | |||
999 | //Boundingbox de todas las capas
|
||
1000 | ArrayList rectangulos = new ArrayList(); |
||
1001 | |||
1002 | Rectangle2D rect;
|
||
1003 | |||
1004 | for (int i = 0; i < layers.length; i++) { |
||
1005 | String[] rutaCapa = new String[layers[i].getPathCount()]; |
||
1006 | |||
1007 | for (int j = 0; j < layers[i].getPathCount(); j++) { |
||
1008 | rutaCapa[j] = ((LayerInfo) layers[i].getPathComponent(j)).text; |
||
1009 | } |
||
1010 | |||
1011 | rect = dataSource.getBoundingBox(rutaCapa, getSRS()); |
||
1012 | |||
1013 | if (rect != null) { |
||
1014 | rectangulos.add(rect); |
||
1015 | } |
||
1016 | } |
||
1017 | |||
1018 | rect = getRectangle((Rectangle2D.Double[]) rectangulos.toArray( |
||
1019 | new Rectangle2D.Double[0])); |
||
1020 | |||
1021 | return rect;
|
||
1022 | } |
||
1023 | |||
1024 | /**
|
||
1025 | * Obtiene el rect?ngulo que contiene a todos los otros
|
||
1026 | *
|
||
1027 | * @param rects rectangulos
|
||
1028 | *
|
||
1029 | * @return Rectangulo que contiene a todos los demas
|
||
1030 | */
|
||
1031 | public static Rectangle2D getRectangle(Rectangle2D[] rects) { |
||
1032 | Rectangle2D ret = rects[0]; |
||
1033 | |||
1034 | for (int i = 1; i < rects.length; i++) { |
||
1035 | ret.add(rects[i]); |
||
1036 | } |
||
1037 | |||
1038 | return ret;
|
||
1039 | } |
||
1040 | |||
1041 | /**
|
||
1042 | * Devuelve el host que est? escrito en el cuadro de texto del host o null
|
||
1043 | * en caso de que no haya nada escrito o est? mal escrito
|
||
1044 | *
|
||
1045 | * @return URL del host
|
||
1046 | */
|
||
1047 | public URL getHost() { |
||
1048 | try {
|
||
1049 | return new URL(cmbHost.getModel().getSelectedItem().toString()); |
||
1050 | } catch (MalformedURLException e) { |
||
1051 | return null; |
||
1052 | } |
||
1053 | } |
||
1054 | |||
1055 | /**
|
||
1056 | * DOCUMENT ME!
|
||
1057 | *
|
||
1058 | * @return Nombre de la capa que aparece en el TOC.
|
||
1059 | */
|
||
1060 | public String getLayerName() { |
||
1061 | return jTxtNomCapa.getText();
|
||
1062 | } |
||
1063 | |||
1064 | /**
|
||
1065 | * This method initializes jPanel4
|
||
1066 | *
|
||
1067 | * @return javax.swing.JPanel
|
||
1068 | */
|
||
1069 | private JPanel getJPanel4() { |
||
1070 | if (jPanel4 == null) { |
||
1071 | jPanel4 = new JPanel(); |
||
1072 | jPanel4.setLayout(null);
|
||
1073 | jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder( |
||
1074 | null, PluginServices.getText(this, "nombre_capa"), |
||
1075 | javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, |
||
1076 | javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
1077 | jPanel4.setBounds(-1, 223, 493, 48); |
||
1078 | jPanel4.add(getJTxtNomCapa(), null);
|
||
1079 | } |
||
1080 | |||
1081 | return jPanel4;
|
||
1082 | } |
||
1083 | |||
1084 | /**
|
||
1085 | * This method initializes jTextField
|
||
1086 | *
|
||
1087 | * @return javax.swing.JTextField
|
||
1088 | */
|
||
1089 | private JTextField getJTxtNomCapa() { |
||
1090 | if (jTxtNomCapa == null) { |
||
1091 | jTxtNomCapa = new JTextField(); |
||
1092 | jTxtNomCapa.setBounds(10, 19, 474, 20); |
||
1093 | jTxtNomCapa.setText(PluginServices.getText(this, "capaWMS")); |
||
1094 | } |
||
1095 | |||
1096 | return jTxtNomCapa;
|
||
1097 | } |
||
1098 | |||
1099 | /* (non-Javadoc)
|
||
1100 | * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
|
||
1101 | */
|
||
1102 | public void initWizard() { |
||
1103 | setDataSource(new WMSDataSourceAdapter());
|
||
1104 | } |
||
1105 | |||
1106 | /* (non-Javadoc)
|
||
1107 | * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
|
||
1108 | */
|
||
1109 | public void execute() { |
||
1110 | } |
||
1111 | |||
1112 | /* (non-Javadoc)
|
||
1113 | * @see com.iver.cit.gvsig.gui.WizardPanel#getLayer()
|
||
1114 | */
|
||
1115 | public FLayer getLayer() {
|
||
1116 | WMSWizard wms = this;
|
||
1117 | return LayerFactory.createLayer(wms.getLayerName(),
|
||
1118 | wms.getLayersRectangle(), wms.getHost(), |
||
1119 | wms.getFormat(), wms.getLayersQuery(), |
||
1120 | wms.getQueryableLayerQuery(), wms.getSRS()); |
||
1121 | } |
||
1122 | } |
||
1123 | |||
1124 | // @jve:decl-index=0:visual-constraint="10,10"
|
||
1125 | // @jve:visual-info decl-index=0 visual-constraint="16,10"
|
||
1126 | // @jve:visual-info decl-index=0 visual-constraint="10,10"
|
||
1127 | // @jve:visual-info decl-index=0 visual-constraint="10,10"
|
||
1128 | // @jve:visual-info decl-index=0 visual-constraint="10,10" |