/* Copyright (c) 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.api.gbase.client; /** * Object representation of a location; an address and * optionally latitude and longitude. * * */ public class Location { private boolean hasCoordinates; private float latitude; private float longitude; private String address; /** * Creates an address location. * * @param address */ public Location(String address) { setAddress(address); } /** * Creates a location with latitude, longitude and address. * @param address * @param latitude * @param longitude */ public Location(String address, float latitude, float longitude) { setAddress(address); setLatitude(latitude); setLongitude(longitude); } /** * Check whether coordinates have been defined. * * @return true if coordinates have been defined */ public boolean hasCoordinates() { return hasCoordinates; } /** * Unset latitude and longitude.. */ public void clearCoordinates() { this.hasCoordinates = false; this.latitude = 0.0f; this.longitude = 0.0f; } /** * Gets latitude, if it has been defined. * * @return latitude * @exception IllegalStateException if no coordinates have * been defined (check with {@link #hasCoordinates()}. */ public float getLatitude() { assertHasCoordinates(); return latitude; } /** * Gets the longitude, if it has been defined. * * @return the longitude * @exception IllegalStateException if no coordinates have * been defined (check with {@link #hasCoordinates()}. */ public float getLongitude() { assertHasCoordinates(); return longitude; } private void assertHasCoordinates() { if (!hasCoordinates) { throw new IllegalStateException("No coordinates have been defined. " + "(Check with hasCoordinates() first)"); } } /** * Sets longitude. * * @param longitude */ public void setLongitude(float longitude) { this.hasCoordinates = true; this.longitude = longitude; } /** * Sets latitude. * * @param latitude */ public void setLatitude(float latitude) { this.hasCoordinates = true; this.latitude = latitude; } /** * Gets the address. * * @return address or null */ public String getAddress() { return address; } /** * Sets the address. * * @param address an address * @exception NullPointerException if the * address is null */ public void setAddress(String address) { if (address == null) { throw new NullPointerException("address cannot be null"); } this.address = address; } public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Location)) { return false; } final Location location = (Location) o; if (hasCoordinates != location.hasCoordinates) { return false; } if (hasCoordinates) { if (Float.compare(location.latitude, latitude) != 0) { return false; } if (Float.compare(location.longitude, longitude) != 0) { return false; } } return address.equals(location.address); } public int hashCode() { int result = address.hashCode(); if (hasCoordinates) { result = 29 * result + Float.floatToIntBits(latitude); result = 29 * result + Float.floatToIntBits(longitude); } return result; } }