/* ==================================================================
* BasicLocation.java - Oct 22, 2014 12:06:47 PM
*
* Copyright 2007-2014 SolarNetwork.net Dev Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA
* ==================================================================
*/
package net.solarnetwork.domain;
import java.math.BigDecimal;
import java.util.TimeZone;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* Basic implementation of {@link Location}.
*
* @author matt
* @version 1.0
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class BasicLocation implements Location {
private String name;
private String country;
private String region;
private String stateOrProvince;
private String locality;
private String postalCode;
private String street;
private BigDecimal latitude;
private BigDecimal longitude;
private BigDecimal elevation;
private String timeZoneId;
/**
* Default constructor.
*/
public BasicLocation() {
super();
}
/**
* Copy constructor for {@link Location} objects.
*
* @param loc
* the location to copy
*/
public BasicLocation(Location loc) {
super();
setName(loc.getName());
setCountry(loc.getCountry());
setRegion(loc.getRegion());
setStateOrProvince(loc.getStateOrProvince());
setLocality(loc.getLocality());
setPostalCode(loc.getPostalCode());
setStreet(loc.getStreet());
setLatitude(loc.getLatitude());
setLongitude(loc.getLongitude());
setElevation(loc.getElevation());
setTimeZoneId(loc.getTimeZoneId());
}
/**
* Change values that are non-null but empty to null.
*
* <p>
* This method is helpful for web form submission, to remove filter values
* that are empty and would otherwise try to match on empty string values.
* </p>
*/
public void removeEmptyValues() {
if ( hasText(country) ) {
country = null;
}
if ( !hasText(locality) ) {
locality = null;
}
if ( !hasText(name) ) {
name = null;
}
if ( !hasText(postalCode) ) {
postalCode = null;
}
if ( !hasText(region) ) {
region = null;
}
if ( !hasText(stateOrProvince) ) {
stateOrProvince = null;
}
if ( !hasText(street) ) {
street = null;
}
if ( !hasText(timeZoneId) ) {
timeZoneId = null;
}
}
private static boolean hasText(String s) {
if ( s == null || s.length() < 1 ) {
return false;
}
int strLen = s.length();
for ( int i = 0; i < strLen; i++ ) {
if ( !Character.isWhitespace(s.charAt(i)) ) {
return true;
}
}
return false;
}
/**
* Return a new SolarLocation with normalized values from another Location.
*
* @param loc
* the location to normalize
* @return the normalized location
*/
public static BasicLocation normalizedLocation(Location loc) {
assert loc != null;
BasicLocation norm = new BasicLocation();
if ( loc.getName() != null ) {
String name = loc.getName().trim();
if ( name.length() > 0 ) {
norm.setName(name);
}
}
if ( loc.getCountry() != null && loc.getCountry().length() >= 2 ) {
String country = loc.getCountry();
if ( country.length() > 2 ) {
country = country.substring(0, 2);
}
norm.setCountry(country.toUpperCase());
}
if ( loc.getTimeZoneId() != null ) {
TimeZone tz = TimeZone.getTimeZone(loc.getTimeZoneId());
if ( tz != null ) {
norm.setTimeZoneId(tz.getID());
}
}
if ( loc.getRegion() != null ) {
String region = loc.getRegion().trim();
if ( region.length() > 0 ) {
norm.setRegion(region);
}
}
if ( loc.getStateOrProvince() != null ) {
String state = loc.getStateOrProvince().trim();
if ( state.length() > 0 ) {
norm.setStateOrProvince(state);
}
}
if ( loc.getLocality() != null ) {
String locality = loc.getLocality().trim();
if ( locality.length() > 0 ) {
norm.setLocality(locality);
}
}
if ( loc.getPostalCode() != null ) {
String postalCode = loc.getPostalCode().trim().toUpperCase();
if ( postalCode.length() > 0 ) {
norm.setPostalCode(postalCode);
}
}
if ( loc.getStreet() != null ) {
String street = loc.getStreet().trim();
if ( street.length() > 0 ) {
norm.setStreet(street);
}
}
norm.setLatitude(loc.getLatitude());
norm.setLongitude(loc.getLongitude());
norm.setElevation(loc.getElevation());
return norm;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("BasicLocation{");
if ( name != null ) {
builder.append("name=");
builder.append(name);
builder.append(", ");
}
if ( country != null ) {
builder.append("country=");
builder.append(country);
builder.append(", ");
}
if ( region != null ) {
builder.append("region=");
builder.append(region);
builder.append(", ");
}
if ( locality != null ) {
builder.append("locality=");
builder.append(locality);
}
builder.append("}");
return builder.toString();
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
@Override
public String getStateOrProvince() {
return stateOrProvince;
}
public void setStateOrProvince(String stateOrProvince) {
this.stateOrProvince = stateOrProvince;
}
@Override
public String getLocality() {
return locality;
}
public void setLocality(String locality) {
this.locality = locality;
}
@Override
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
@Override
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Override
public BigDecimal getLatitude() {
return latitude;
}
public void setLatitude(BigDecimal latitude) {
this.latitude = latitude;
}
@Override
public BigDecimal getLongitude() {
return longitude;
}
public void setLongitude(BigDecimal longitude) {
this.longitude = longitude;
}
@Override
public BigDecimal getElevation() {
return elevation;
}
public void setElevation(BigDecimal elevation) {
this.elevation = elevation;
}
@Override
public String getTimeZoneId() {
return timeZoneId;
}
public void setTimeZoneId(String timeZoneId) {
this.timeZoneId = timeZoneId;
}
}