/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.shindig.social.opensocial.model;
import java.util.EnumSet;
import java.util.Map;
import org.apache.shindig.protocol.model.Exportablebean;
import org.apache.shindig.social.core.model.AddressImpl;
import com.google.common.base.Functions;
import com.google.common.collect.Maps;
import com.google.inject.ImplementedBy;
/**
* Base interface for all address objects
* see <a href="http://www.opensocial.org/Technical-Resources/opensocial-spec-v081/opensocial-reference#opensocial.Address">
* http://www.opensocial.org/Technical-Resources/opensocial-spec-v081/opensocial-reference#opensocial.Address</a>.
*/
@ImplementedBy(AddressImpl.class)
@Exportablebean
public interface Address {
/**
* The fields that represent the address object in json form.
*/
public static enum Field {
/** the field name for country. */
COUNTRY("country"),
/** the field name for latitude. */
LATITUDE("latitude"),
/** the field name for locality. */
LOCALITY("locality"),
/** the field name for longitude. */
LONGITUDE("longitude"),
/** the field name for postalCode. */
POSTAL_CODE("postalCode"),
/** the field name for region. */
REGION("region"),
/** the feild name for streetAddress this field may be multiple lines. */
STREET_ADDRESS("streetAddress"),
/** the field name for type. */
TYPE("type"),
/** the field name for formatted. */
FORMATTED("formatted"),
/** the field name for primary. */
PRIMARY("primary");
private static final Map<String, Field> LOOKUP = Maps.uniqueIndex(EnumSet.allOf(Field.class),
Functions.toStringFunction());
/**
* The json field that the instance represents.
*/
private final String jsonString;
/**
* create a field base on the a json element.
*
* @param jsonString the name of the element
*/
private Field(String jsonString) {
this.jsonString = jsonString;
}
/**
* emit the field as a json element.
*
* @return the field name
*/
@Override
public String toString() {
return this.jsonString;
}
public static Field getField(String jsonString) {
return LOOKUP.get(jsonString);
}
}
/**
* Get the country.
*
* @return the country
*/
String getCountry();
/**
* Set the country.
*
* @param country the country
*/
void setCountry(String country);
/**
* Get the latitude.
*
* @return latitude
*/
Float getLatitude();
/**
* Set the latitude.
*
* @param latitude latitude
*/
void setLatitude(Float latitude);
/**
* Get the locality.
*
* @return the locality
*/
String getLocality();
/**
* Set the locality.
*
* @param locality the locality
*/
void setLocality(String locality);
/**
* Get the longitude of the address in degrees.
*
* @return the longitude of the address in degrees
*/
Float getLongitude();
/**
* Set the longitude of the address in degrees.
*
* @param longitude the longitude of the address in degrees.
*/
void setLongitude(Float longitude);
/**
* Get the Postal code for the address.
*
* @return the postal code for the address
*/
String getPostalCode();
/**
* Set the postal code for the address.
*
* @param postalCode the postal code
*/
void setPostalCode(String postalCode);
/**
* Get the region.
*
* @return the region
*/
String getRegion();
/**
* Set the region.
*
* @param region the region
*/
void setRegion(String region);
/**
* Get the street address.
*
* @return the street address
*/
String getStreetAddress();
/**
* Set the street address.
*
* @param streetAddress the street address
*/
void setStreetAddress(String streetAddress);
/**
* Get the type of label of the address.
*
* @return the type or label of the address
*/
String getType();
/**
* Get the type of label of the address.
*
* @param type the type of label of the address.
*/
void setType(String type);
/**
* Get the formatted address.
*
* @return the formatted address
*/
String getFormatted();
/**
* Set the formatted address.
*
* @param formatted the formatted address
*/
void setFormatted(String formatted);
/**
* <p>
* Get a Boolean value indicating whether this instance of the Plural Field is the primary or
* preferred value of for this field, e.g. the preferred mailing address. Service Providers MUST
* NOT mark more than one instance of the same Plural Field as primary="true", and MAY choose not
* to mark any fields as primary, if this information is not available. Introduced in v0.8.1
* </p><p>
* The service provider may wish to share the address instance between items and primary related
* to the address from which this came, so if the address came from an Organization, primary
* relates to the primary address of the organization, and not necessary the primary address of
* all addresses.
* </p><p>
* If the address is not part of a list (eg Person.location ) primary has no meaning.
* <p>
* @return true if the instance if the primary instance.
*/
Boolean getPrimary();
/**
* @see org.apache.shindig.social.opensocial.model.Address#getPrimary()
* @param primary set the Primary status of this Address.
*/
void setPrimary(Boolean primary);
}