content: /*
   *  Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation)
   *
   *  This file is part of Akvo FLOW.
   *
   *  Akvo FLOW is free software: you can redistribute it and modify it under the terms of
   *  the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
   *  either version 3 of the License or any later version.
   *
   *  Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *  See the GNU Affero General Public License included below for more details.
   *
   *  The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
   */
  
  package org.waterforpeople.mapping.domain;
  
  public class GeoCoordinates {
      private Double latitude;
      private Double longitude;
      private Double altitude;
      private String code;
  
      public Double getLatitude() {
          return latitude;
      }
  
      public void setLatitude(Double latitude) {
          this.latitude = latitude;
      }
  
      public Double getLongitude() {
          return longitude;
      }
  
      public void setLongitude(Double longitude) {
          this.longitude = longitude;
      }
  
      public Double getAltitude() {
          return altitude;
      }
  
      public void setAltitude(Double altitude) {
          this.altitude = altitude;
      }
  
      public String getCode() {
          return code;
      }
  
      public void setCode(String code) {
          this.code = code;
      }
  
      public static GeoCoordinates extractGeoCoordinate(String line) {
          GeoCoordinates gc = null;
          if (line != null && line.trim().length() > 0
                  && !line.trim().equals("||") && !line.startsWith("||")) {
              gc = new GeoCoordinates();
              String[] coordinates = line.split("\\|", -1);
              if (coordinates.length > 1) {
                  try {
                      gc.setLatitude(Double.parseDouble(coordinates[0]));
                      gc.setLongitude(Double.parseDouble(coordinates[1]));
                  } catch (NumberFormatException nfe) {
                      // if we can't parse the lat/lon, the whole operation should fail
                      return null;
                  }
              } else {
                  return null;
              }
              if (coordinates.length > 2) {
                  if (coordinates[2] != null
                          && coordinates[2].trim().length() > 0) {
                      try {
                          gc.setAltitude(Double.parseDouble(coordinates[2]));
                      } catch (NumberFormatException nfe) {
                          // the altitude cannot be parsed as double, so set it to null
                          gc.setAltitude(null);
                      }
                  }
              }
              if (coordinates.length > 3) {
                  gc.setCode(coordinates[3]);
              }
          }
          return gc;
      }
  
      public String toString() {
          StringBuilder sb = new StringBuilder();
          sb.append("GeoCoordinates:");
          sb.append("\n--Latitude: " + this.latitude);
          sb.append("\n--Longitude: " + this.longitude);
          sb.append("\n--Altitude: " + this.altitude);
          return sb.toString();
      }
  
  }
  