1   package org.wcb.gui.forms.e6b;
2   
3   import org.wcb.e6b.SphericalDistanceCalculator;
4   import org.wcb.gui.forms.e6b.event.CalculateFormActionListener;
5   import org.wcb.gui.renderer.AirportLocationListCellRender;
6   import org.wcb.model.vo.hibernate.AirportBO;
7   import org.wcb.model.bd.AirportDelegate;
8   import org.wcb.model.util.SpringUtil;
9   import org.wcb.model.service.IServicesConstants;
10  import org.apache.commons.lang.StringUtils;
11  
12  import javax.swing.*;
13  import java.awt.*;
14  import java.awt.event.ItemListener;
15  import java.awt.event.ItemEvent;
16  import java.text.DecimalFormat;
17  import java.util.StringTokenizer;
18  
19  /**
20   * <small>
21   * <p/>
22   * Copyright (C)  2006  wbogaardt.
23   * This library is free software; you can redistribute it and/or
24   * modify it under the terms of the GNU Lesser General Public
25   * License as published by the Free Software Foundation; either
26   * version 2.1 of the License, or (at your option) any later version.
27   * <p/>
28   * This library is distributed in the hope that it will be useful,
29   * but WITHOUT ANY WARRANTY; without even the implied warranty of
30   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
31   * Lesser General Public License for more details.
32   * <p/>
33   * You should have received a copy of the GNU Lesser General Public
34   * License along with this library; if not, write to the Free Software
35   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
36   * <p/>
37   * $File:  $ <br>
38   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Dec 1, 2006 9:47:06 AM $ <br>
39   * </small>
40   *
41   * @author wbogaardt
42   *         This panel allows selection or entering of latitude and longitudes
43   * and calculating distances between the two.
44   */
45  
46  public class DistanceCalculationPanel extends JPanel implements ICalculateForm, ItemListener {
47  
48      private JComboBox jCBStartLocation;
49      private JTextField jTextFieldStartLatitudeDegree;
50      private JTextField jTextFieldStartLatitudeMinute;
51      private JTextField jTextFieldStartLatitudeSecond;
52      private JComboBox jCBStartSphereNS;
53      private JTextField jTextFieldStartLongitudeDegree;
54      private JTextField jTextFieldStartLongitudeMinute;
55      private JTextField jTextFieldStartLongitudeSecond;
56      private JComboBox jCBStartSphereEW;
57  
58      private JComboBox jCBEndLocation;
59      private JTextField jTextFieldEndLatitudeDegree;
60      private JTextField jTextFieldEndLatitudeMinute;
61      private JTextField jTextFieldEndLatitudeSecond;
62      private JComboBox jCBEndSphereNS;
63      private JTextField jTextFieldEndLongitudeDegree;
64      private JTextField jTextFieldEndLongitudeMinute;
65      private JTextField jTextFieldEndLongitudeSecond;
66      private JComboBox jCBEndSphereEW;
67  
68      private JButton calculateButton;
69      private JButton clearButton;
70      private JTextField resultsDistance;
71      private JTextField resultsHdgTo;
72      private JTextField resultsHdgFrom;
73      private final DecimalFormat formatter = new DecimalFormat("###,##0.0");
74  
75      public DistanceCalculationPanel() {
76          setBorder(BorderFactory.createTitledBorder("Calculate Distances"));
77          initComponents();
78      }
79  
80      private void initComponents() {
81          //start location fields
82          jCBStartLocation = new JComboBox(this.getLocations().toArray());
83          jCBStartLocation.setRenderer(new AirportLocationListCellRender());
84          jCBStartLocation.addItemListener(this);
85          jTextFieldStartLatitudeDegree = new JTextField(3);
86          jTextFieldStartLatitudeMinute= new JTextField(2);
87          jTextFieldStartLatitudeSecond = new JTextField(6);
88          jCBStartSphereNS = new JComboBox(new String[]{"N","S"});
89          jTextFieldStartLongitudeDegree = new JTextField(3);
90          jTextFieldStartLongitudeMinute= new JTextField(2);
91          jTextFieldStartLongitudeSecond = new JTextField(6);
92          jCBStartSphereEW = new JComboBox(new String[]{"W","E"});
93  
94          //end or destination location fields.
95          jCBEndLocation = new JComboBox(this.getLocations().toArray());
96          jCBEndLocation.setRenderer(new AirportLocationListCellRender());
97          jCBEndLocation.addItemListener(this);
98          jTextFieldEndLatitudeDegree = new JTextField(3);
99          jTextFieldEndLatitudeMinute= new JTextField(2);
100         jTextFieldEndLatitudeSecond = new JTextField(6);
101         jCBEndSphereNS = new JComboBox(new String[]{"N","S"});
102         jTextFieldEndLongitudeDegree = new JTextField(3);
103         jTextFieldEndLongitudeMinute= new JTextField(2);
104         jTextFieldEndLongitudeSecond = new JTextField(6);
105         jCBEndSphereEW = new JComboBox(new String[]{"W","E"});
106 
107         calculateButton = new JButton("Calculate Distance");
108         clearButton = new JButton("Clear Distance Values");
109         calculateButton.addActionListener(new CalculateFormActionListener(this));
110         clearButton.addActionListener(new CalculateFormActionListener(this));
111         resultsDistance = new JTextField(4);
112         resultsHdgTo = new JTextField(4);
113         resultsHdgFrom = new JTextField(4);
114 
115         setLayout(new GridBagLayout());
116         GridBagConstraints gridBagConstraints;
117 
118         gridBagConstraints = new GridBagConstraints();
119         gridBagConstraints.gridx = 0;
120         gridBagConstraints.gridy = 1;
121         gridBagConstraints.gridwidth = 3;
122         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
123         gridBagConstraints.anchor = GridBagConstraints.WEST;
124         add(createStartLocationPanel(), gridBagConstraints);
125 
126         gridBagConstraints = new GridBagConstraints();
127         gridBagConstraints.gridx = 0;
128         gridBagConstraints.gridy = 2;
129         gridBagConstraints.gridwidth = 3;
130         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
131         gridBagConstraints.anchor = GridBagConstraints.WEST;
132         add(createEndLocationPanel(), gridBagConstraints);
133 
134         //standard calculate and reset buttons
135         gridBagConstraints = new GridBagConstraints();
136         gridBagConstraints.gridx = 0;
137         gridBagConstraints.gridy = 3;
138         gridBagConstraints.anchor = GridBagConstraints.WEST;
139         add(calculateButton, gridBagConstraints);
140 
141         gridBagConstraints = new GridBagConstraints();
142         gridBagConstraints.gridx = 1;
143         gridBagConstraints.gridy = 3;
144         gridBagConstraints.gridwidth = 2;
145         gridBagConstraints.anchor = GridBagConstraints.WEST;
146         add(clearButton, gridBagConstraints);
147 
148         gridBagConstraints = new GridBagConstraints();
149         gridBagConstraints.gridx = 0;
150         gridBagConstraints.gridy = 4;
151         gridBagConstraints.anchor = GridBagConstraints.EAST;
152         add(new JLabel("Distance "), gridBagConstraints);
153 
154         gridBagConstraints = new GridBagConstraints();
155         gridBagConstraints.gridx = 1;
156         gridBagConstraints.gridy = 4;
157         gridBagConstraints.anchor = GridBagConstraints.WEST;
158         add(resultsDistance, gridBagConstraints);
159 
160         gridBagConstraints = new GridBagConstraints();
161         gridBagConstraints.gridx = 2;
162         gridBagConstraints.gridy = 4;
163         gridBagConstraints.anchor = GridBagConstraints.WEST;
164         add(new JLabel("Nautical Miles"), gridBagConstraints);
165 
166         gridBagConstraints = new GridBagConstraints();
167         gridBagConstraints.gridx = 0;
168         gridBagConstraints.gridy = 5;
169         gridBagConstraints.anchor = GridBagConstraints.EAST;
170         add(new JLabel("Heading To Destination"), gridBagConstraints);
171 
172         gridBagConstraints = new GridBagConstraints();
173         gridBagConstraints.gridx = 1;
174         gridBagConstraints.gridy = 5;
175         gridBagConstraints.anchor = GridBagConstraints.WEST;
176         add(resultsHdgTo, gridBagConstraints);
177 
178         gridBagConstraints = new GridBagConstraints();
179         gridBagConstraints.gridx = 0;
180         gridBagConstraints.gridy = 6;
181         gridBagConstraints.anchor = GridBagConstraints.EAST;
182         add(new JLabel("Heading From Destination"), gridBagConstraints);
183 
184         gridBagConstraints = new GridBagConstraints();
185         gridBagConstraints.gridx = 1;
186         gridBagConstraints.gridy = 6;
187         gridBagConstraints.anchor = GridBagConstraints.WEST;
188         add(resultsHdgFrom, gridBagConstraints);
189 
190     }
191 
192     private JPanel createStartLocationPanel() {
193         JPanel returnPanel = new JPanel();
194         returnPanel.setBorder(BorderFactory.createTitledBorder("Start Location"));
195         returnPanel.setLayout(new GridBagLayout());
196         GridBagConstraints gridBagConstraints = new GridBagConstraints();
197 
198         gridBagConstraints.gridwidth = 7;
199         returnPanel.add(jCBStartLocation, gridBagConstraints);
200 
201         gridBagConstraints = new GridBagConstraints();
202         gridBagConstraints.gridx = 0;
203         gridBagConstraints.gridy = 1;
204         gridBagConstraints.anchor = GridBagConstraints.EAST;
205         returnPanel.add(new JLabel("Latitude"), gridBagConstraints);
206 
207         gridBagConstraints = new GridBagConstraints();
208         gridBagConstraints.gridx = 1;
209         gridBagConstraints.gridy = 1;
210         gridBagConstraints.anchor = GridBagConstraints.WEST;
211         returnPanel.add(jTextFieldStartLatitudeDegree, gridBagConstraints);
212 
213         gridBagConstraints = new GridBagConstraints();
214         gridBagConstraints.gridx = 2;
215         gridBagConstraints.gridy = 1;
216         gridBagConstraints.anchor = GridBagConstraints.WEST;
217         returnPanel.add(new JLabel("-"), gridBagConstraints);
218 
219         gridBagConstraints = new GridBagConstraints();
220         gridBagConstraints.gridx = 3;
221         gridBagConstraints.gridy = 1;
222         gridBagConstraints.anchor = GridBagConstraints.WEST;
223         returnPanel.add(jTextFieldStartLatitudeMinute, gridBagConstraints);
224 
225         gridBagConstraints = new GridBagConstraints();
226         gridBagConstraints.gridx = 4;
227         gridBagConstraints.gridy = 1;
228         gridBagConstraints.anchor = GridBagConstraints.WEST;
229         returnPanel.add(new JLabel("-"), gridBagConstraints);
230 
231         gridBagConstraints = new GridBagConstraints();
232         gridBagConstraints.gridx = 5;
233         gridBagConstraints.gridy = 1;
234         gridBagConstraints.anchor = GridBagConstraints.WEST;
235         returnPanel.add(jTextFieldStartLatitudeSecond, gridBagConstraints);
236 
237         gridBagConstraints = new GridBagConstraints();
238         gridBagConstraints.gridx = 6;
239         gridBagConstraints.gridy = 1;
240         gridBagConstraints.anchor = GridBagConstraints.WEST;
241         //gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
242         returnPanel.add(jCBStartSphereNS, gridBagConstraints);
243 
244         gridBagConstraints = new GridBagConstraints();
245         gridBagConstraints.gridx = 0;
246         gridBagConstraints.gridy = 2;
247         gridBagConstraints.anchor = GridBagConstraints.EAST;
248         returnPanel.add(new JLabel("Longitude"), gridBagConstraints);
249 
250         gridBagConstraints = new GridBagConstraints();
251         gridBagConstraints.gridx = 1;
252         gridBagConstraints.gridy = 2;
253         gridBagConstraints.anchor = GridBagConstraints.WEST;
254         returnPanel.add(jTextFieldStartLongitudeDegree, gridBagConstraints);
255 
256         gridBagConstraints = new GridBagConstraints();
257         gridBagConstraints.gridx = 2;
258         gridBagConstraints.gridy = 2;
259         gridBagConstraints.anchor = GridBagConstraints.WEST;
260         returnPanel.add(new JLabel("-"), gridBagConstraints);
261 
262         gridBagConstraints = new GridBagConstraints();
263         gridBagConstraints.gridx = 3;
264         gridBagConstraints.gridy = 2;
265         gridBagConstraints.anchor = GridBagConstraints.WEST;
266         returnPanel.add(jTextFieldStartLongitudeMinute, gridBagConstraints);
267 
268         gridBagConstraints = new GridBagConstraints();
269         gridBagConstraints.gridx = 4;
270         gridBagConstraints.gridy = 2;
271         gridBagConstraints.anchor = GridBagConstraints.WEST;
272         returnPanel.add(new JLabel("-"), gridBagConstraints);
273 
274         gridBagConstraints = new GridBagConstraints();
275         gridBagConstraints.gridx = 5;
276         gridBagConstraints.gridy = 2;
277         gridBagConstraints.anchor = GridBagConstraints.WEST;
278         returnPanel.add(jTextFieldStartLongitudeSecond, gridBagConstraints);
279 
280         gridBagConstraints = new GridBagConstraints();
281         gridBagConstraints.gridx = 6;
282         gridBagConstraints.gridy = 2;
283         gridBagConstraints.anchor = GridBagConstraints.WEST;
284         returnPanel.add(jCBStartSphereEW, gridBagConstraints);
285         return returnPanel;
286     }
287 
288     private JPanel createEndLocationPanel() {
289         JPanel returnPanel = new JPanel();
290         returnPanel.setBorder(BorderFactory.createTitledBorder("Destination location"));
291         returnPanel.setLayout(new GridBagLayout());
292         GridBagConstraints gridBagConstraints = new GridBagConstraints();
293 
294         gridBagConstraints.gridwidth = 7;
295         returnPanel.add(jCBEndLocation, gridBagConstraints);
296 
297         gridBagConstraints = new GridBagConstraints();
298         gridBagConstraints.gridx = 0;
299         gridBagConstraints.gridy = 1;
300         gridBagConstraints.anchor = GridBagConstraints.EAST;
301         returnPanel.add(new JLabel("Latitude"), gridBagConstraints);
302 
303         gridBagConstraints = new GridBagConstraints();
304         gridBagConstraints.gridx = 1;
305         gridBagConstraints.gridy = 1;
306         gridBagConstraints.anchor = GridBagConstraints.WEST;
307         returnPanel.add(jTextFieldEndLatitudeDegree, gridBagConstraints);
308 
309         gridBagConstraints = new GridBagConstraints();
310         gridBagConstraints.gridx = 2;
311         gridBagConstraints.gridy = 1;
312         gridBagConstraints.anchor = GridBagConstraints.WEST;
313         returnPanel.add(new JLabel("-"), gridBagConstraints);
314 
315         gridBagConstraints = new GridBagConstraints();
316         gridBagConstraints.gridx = 3;
317         gridBagConstraints.gridy = 1;
318         gridBagConstraints.anchor = GridBagConstraints.WEST;
319         returnPanel.add(jTextFieldEndLatitudeMinute, gridBagConstraints);
320 
321         gridBagConstraints = new GridBagConstraints();
322         gridBagConstraints.gridx = 4;
323         gridBagConstraints.gridy = 1;
324         gridBagConstraints.anchor = GridBagConstraints.WEST;
325         returnPanel.add(new JLabel("-"), gridBagConstraints);
326 
327         gridBagConstraints = new GridBagConstraints();
328         gridBagConstraints.gridx = 5;
329         gridBagConstraints.gridy = 1;
330         gridBagConstraints.anchor = GridBagConstraints.WEST;
331         returnPanel.add(jTextFieldEndLatitudeSecond, gridBagConstraints);
332 
333         gridBagConstraints = new GridBagConstraints();
334         gridBagConstraints.gridx = 6;
335         gridBagConstraints.gridy = 1;
336         gridBagConstraints.anchor = GridBagConstraints.WEST;
337         //gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
338         returnPanel.add(jCBEndSphereNS, gridBagConstraints);
339 
340         gridBagConstraints = new GridBagConstraints();
341         gridBagConstraints.gridx = 0;
342         gridBagConstraints.gridy = 2;
343         gridBagConstraints.anchor = GridBagConstraints.EAST;
344         returnPanel.add(new JLabel("Longitude"), gridBagConstraints);
345 
346         gridBagConstraints = new GridBagConstraints();
347         gridBagConstraints.gridx = 1;
348         gridBagConstraints.gridy = 2;
349         gridBagConstraints.anchor = GridBagConstraints.WEST;
350         returnPanel.add(jTextFieldEndLongitudeDegree, gridBagConstraints);
351 
352         gridBagConstraints = new GridBagConstraints();
353         gridBagConstraints.gridx = 2;
354         gridBagConstraints.gridy = 2;
355         gridBagConstraints.anchor = GridBagConstraints.WEST;
356         returnPanel.add(new JLabel("-"), gridBagConstraints);
357 
358         gridBagConstraints = new GridBagConstraints();
359         gridBagConstraints.gridx = 3;
360         gridBagConstraints.gridy = 2;
361         gridBagConstraints.anchor = GridBagConstraints.WEST;
362         returnPanel.add(jTextFieldEndLongitudeMinute, gridBagConstraints);
363 
364         gridBagConstraints = new GridBagConstraints();
365         gridBagConstraints.gridx = 4;
366         gridBagConstraints.gridy = 2;
367         gridBagConstraints.anchor = GridBagConstraints.WEST;
368         returnPanel.add(new JLabel("-"), gridBagConstraints);
369 
370         gridBagConstraints = new GridBagConstraints();
371         gridBagConstraints.gridx = 5;
372         gridBagConstraints.gridy = 2;
373         gridBagConstraints.anchor = GridBagConstraints.WEST;
374         returnPanel.add(jTextFieldEndLongitudeSecond, gridBagConstraints);
375 
376         gridBagConstraints = new GridBagConstraints();
377         gridBagConstraints.gridx = 6;
378         gridBagConstraints.gridy = 2;
379         gridBagConstraints.anchor = GridBagConstraints.WEST;
380         returnPanel.add(jCBEndSphereEW, gridBagConstraints);
381         return returnPanel;
382     }
383 
384     /**
385      * Get a list of locations from the database.
386      * @return the List of airports in the database.
387      */
388     private java.util.List<AirportBO> getLocations() {
389         AirportDelegate delegate = (AirportDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.AIRPORT_DELEGATE);
390         java.util.List<AirportBO> airportsList = delegate.getAllAirports();
391         airportsList.add(0, new AirportBO("",null, null,"Select Airport", null, null, null, null, null, null));
392         return airportsList;
393     }
394 
395     public void clearForm() {
396         //start location fields
397         jTextFieldStartLatitudeDegree.setText(null);
398         jTextFieldStartLatitudeMinute.setText(null);
399         jTextFieldStartLatitudeSecond.setText(null);
400         jCBStartSphereNS.setSelectedIndex(0);
401         jTextFieldStartLongitudeDegree.setText(null);
402         jTextFieldStartLongitudeMinute.setText(null);
403         jTextFieldStartLongitudeSecond.setText(null);
404         jCBStartSphereEW.setSelectedIndex(0);
405 
406         //end or destination location fields.
407         jTextFieldEndLatitudeDegree.setText(null);
408         jTextFieldEndLatitudeMinute.setText(null);
409         jTextFieldEndLatitudeSecond.setText(null);
410         jCBEndSphereNS.setSelectedIndex(0);
411         jTextFieldEndLongitudeDegree.setText(null);
412         jTextFieldEndLongitudeMinute.setText(null);
413         jTextFieldEndLongitudeSecond.setText(null);
414         jCBEndSphereEW.setSelectedIndex(0);
415     }
416 
417     public void calculateResult() {
418         if (this.validateEntry()) {
419             SphericalDistanceCalculator calculator = new SphericalDistanceCalculator();
420             int startLatDeg = Integer.parseInt(jTextFieldStartLatitudeDegree.getText());
421             double startLatMin = Double.parseDouble(jTextFieldStartLatitudeMinute.getText());
422             double startLatSec = Double.parseDouble(jTextFieldStartLatitudeSecond.getText());
423             int startLonDeg = Integer.parseInt(jTextFieldStartLongitudeDegree.getText());
424             double startLonMin = Double.parseDouble(jTextFieldStartLongitudeMinute.getText());
425             double startLonSec = Double.parseDouble(jTextFieldStartLongitudeSecond.getText());
426             int endLatDeg = Integer.parseInt(jTextFieldEndLatitudeDegree.getText());
427             double endLatMin = Double.parseDouble(jTextFieldEndLatitudeMinute.getText());
428             double endLatSec = Double.parseDouble(jTextFieldEndLatitudeSecond.getText());
429             int endLonDeg = Integer.parseInt(jTextFieldEndLongitudeDegree.getText());
430             double endLonMin = Double.parseDouble(jTextFieldEndLongitudeMinute.getText());
431             double endLonSec = Double.parseDouble(jTextFieldEndLongitudeSecond.getText());
432             calculator.setLatitudeFrom(startLatDeg, startLatMin, startLatSec, getSphericalLocation((String) jCBStartSphereNS.getSelectedItem()));
433             calculator.setLongitudeFrom(startLonDeg, startLonMin, startLonSec, getSphericalLocation((String) jCBStartSphereEW.getSelectedItem()));
434             calculator.setLatitudeTo(endLatDeg, endLatMin, endLatSec, getSphericalLocation((String) jCBEndSphereNS.getSelectedItem()));
435             calculator.setLongitudeTo(endLonDeg, endLonMin, endLonSec, getSphericalLocation((String) jCBEndSphereEW.getSelectedItem()));
436             calculator.calculate();
437             resultsDistance.setText(formatter.format(calculator.getCalculatedDistance()));
438             resultsHdgTo.setText(formatter.format(calculator.getCalculatedCourseTo()));
439             resultsHdgFrom.setText(formatter.format(calculator.getCalculatedCourseFrom()));
440         }
441     }
442 
443     public void itemStateChanged(ItemEvent evt) {
444         Object src = evt.getSource();
445         if (src.equals(jCBStartLocation)) {
446             AirportBO airportItem = (AirportBO) jCBStartLocation.getSelectedItem();
447             this.setStartLatitude(airportItem.getLatitude());
448             this.setStartLongitude(airportItem.getLongitude());
449         } else if (src.equals(jCBEndLocation)) {
450             AirportBO airportItem = (AirportBO) jCBEndLocation.getSelectedItem();
451             this.setEndLatitude(airportItem.getLatitude());
452             this.setEndLongitude(airportItem.getLongitude());
453         }
454     }
455 
456     /**
457      * allows setting of latitude in degrees, minutes seconds the passed in string should
458      * look like this 34-12-02.9000N then it will parse correctly.
459      * @param latitude the latitude in degrees-minutes-seconds[delineation]
460      */
461     public void setStartLatitude(String latitude) {
462         if (StringUtils.trimToNull(latitude) != null) {
463             StringTokenizer tokens = new StringTokenizer(latitude, "-");
464             this.jTextFieldStartLatitudeDegree.setText(tokens.nextToken());
465             this.jTextFieldStartLatitudeMinute.setText(tokens.nextToken());
466             String secondsPartial = tokens.nextToken();
467             String secondsToken = secondsPartial.substring(0,secondsPartial.length()-1);
468             this.jTextFieldStartLatitudeSecond.setText(secondsToken);
469             String ns = secondsPartial.substring(secondsPartial.length()-1);
470             this.jCBStartSphereNS.setSelectedItem(ns);
471         } else {
472             jTextFieldStartLatitudeDegree.setText(null);
473             jTextFieldStartLatitudeMinute.setText(null);
474             jTextFieldStartLatitudeSecond.setText(null);
475             jCBStartSphereNS.setSelectedIndex(0);
476         }
477     }
478 
479     /**
480      * allows setting of longitude in degrees, minutes seconds the passed in string should
481      * look like this 119-12-26.0000W then it will parse correctly.
482      * @param longitude the longitude in degrees-minutes-seconds[delineation]
483      */
484     public void setStartLongitude(String longitude) {
485         if (StringUtils.trimToNull(longitude) != null) {
486             StringTokenizer tokens = new StringTokenizer(longitude, "-");
487             this.jTextFieldStartLongitudeDegree.setText(tokens.nextToken());
488             this.jTextFieldStartLongitudeMinute.setText(tokens.nextToken());
489             String secondsPartial = tokens.nextToken();
490             String secondsToken = secondsPartial.substring(0,secondsPartial.length()-1);
491             this.jTextFieldStartLongitudeSecond.setText(secondsToken);
492             String ew = secondsPartial.substring(secondsPartial.length()-1);
493             this.jCBStartSphereEW.setSelectedItem(ew);
494         }  else {
495             jTextFieldStartLongitudeDegree.setText(null);
496             jTextFieldStartLongitudeMinute.setText(null);
497             jTextFieldStartLongitudeSecond.setText(null);
498             jCBStartSphereEW.setSelectedIndex(0);
499         }
500     }
501 
502     /**
503      * allows setting of latitude in degrees, minutes seconds the passed in string should
504      * look like this 34-12-02.9000N then it will parse correctly.
505      * @param latitude the latitude in degrees-minutes-seconds[delineation]
506      */
507     public void setEndLatitude(String latitude) {
508         if (StringUtils.trimToNull(latitude) != null) {
509             StringTokenizer tokens = new StringTokenizer(latitude, "-");
510             this.jTextFieldEndLatitudeDegree.setText(tokens.nextToken());
511             this.jTextFieldEndLatitudeMinute.setText(tokens.nextToken());
512             String secondsPartial = tokens.nextToken();
513             String secondsToken = secondsPartial.substring(0,secondsPartial.length()-1);
514             this.jTextFieldEndLatitudeSecond.setText(secondsToken);
515             String ns = secondsPartial.substring(secondsPartial.length()-1);
516             this.jCBEndSphereNS.setSelectedItem(ns);
517         } else {
518             jTextFieldEndLatitudeDegree.setText(null);
519             jTextFieldEndLatitudeMinute.setText(null);
520             jTextFieldEndLatitudeSecond.setText(null);
521             jCBEndSphereNS.setSelectedIndex(0);
522         }
523     }
524 
525     /**
526      * allows setting of longitude in degrees, minutes seconds the passed in string should
527      * look like this 119-12-26.0000W then it will parse correctly.
528      * @param longitude the longitude in degrees-minutes-seconds[delineation]
529      */
530     public void setEndLongitude(String longitude) {
531         if (StringUtils.trimToNull(longitude) != null) {
532             StringTokenizer tokens = new StringTokenizer(longitude, "-");
533             this.jTextFieldEndLongitudeDegree.setText(tokens.nextToken());
534             this.jTextFieldEndLongitudeMinute.setText(tokens.nextToken());
535             String secondsPartial = tokens.nextToken();
536             String secondsToken = secondsPartial.substring(0,secondsPartial.length()-1);
537             this.jTextFieldEndLongitudeSecond.setText(secondsToken);
538             String ew = secondsPartial.substring(secondsPartial.length()-1);
539             this.jCBEndSphereEW.setSelectedItem(ew);
540         } else {
541             jTextFieldEndLongitudeDegree.setText(null);
542             jTextFieldEndLongitudeMinute.setText(null);
543             jTextFieldEndLongitudeSecond.setText(null);
544             jCBEndSphereEW.setSelectedIndex(0);
545         }
546     }
547 
548     /**
549      * Converts the hemispherical values over so that the e6b calculator functions
550      * understand what the user selected.
551      * @param selectValue The value can be N, S, E, W
552      * @return the proper E6b value;
553      */
554     private String getSphericalLocation(String selectValue) {
555         if (selectValue.equalsIgnoreCase("N")) {
556             return SphericalDistanceCalculator.NORTH_HEMISPHERE;
557         }
558         if (selectValue.equalsIgnoreCase("S")) {
559             return SphericalDistanceCalculator.SOUTH_HEMISPHERE;
560         }
561         if (selectValue.equalsIgnoreCase("E")) {
562             return SphericalDistanceCalculator.EAST_HEMISPHERE;
563         }
564         if (selectValue.equalsIgnoreCase("W")) {
565             return SphericalDistanceCalculator.WEST_HEMISPHERE;
566         }
567         return "";
568     }
569     /**
570      * See if all the entries are not null;
571      * @return true that everything is populated
572      */
573     private boolean validateEntry() {
574         if (StringUtils.trimToNull(jTextFieldStartLatitudeDegree.getText()) == null
575                 || StringUtils.trimToNull(jTextFieldStartLatitudeMinute.getText()) == null
576                 || StringUtils.trimToNull(jTextFieldStartLatitudeSecond.getText()) == null)
577         {
578             return false;
579         }
580         if (StringUtils.trimToNull(jTextFieldStartLongitudeDegree.getText()) == null
581                 || StringUtils.trimToNull(jTextFieldStartLongitudeMinute.getText()) == null
582                 || StringUtils.trimToNull(jTextFieldStartLongitudeSecond.getText()) == null)
583         {
584             return false;
585         }
586         if (StringUtils.trimToNull(jTextFieldEndLatitudeDegree.getText()) == null
587                 || StringUtils.trimToNull(jTextFieldEndLatitudeMinute.getText()) == null
588                 || StringUtils.trimToNull(jTextFieldEndLatitudeSecond.getText()) == null)
589         {
590             return false;
591         }
592         if (StringUtils.trimToNull(jTextFieldEndLongitudeDegree.getText()) == null
593                 || StringUtils.trimToNull(jTextFieldEndLongitudeMinute.getText()) == null
594                 || StringUtils.trimToNull(jTextFieldEndLongitudeSecond.getText()) == null)
595         {
596             return false;
597         }
598         return true;
599     }
600 }