/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.core.region; import java.util.Set; import org.joda.beans.impl.flexi.FlexiBean; import org.threeten.bp.ZoneId; import com.opengamma.id.ExternalBundleIdentifiable; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.UniqueId; import com.opengamma.id.UniqueIdentifiable; import com.opengamma.util.PublicAPI; import com.opengamma.util.i18n.Country; import com.opengamma.util.money.Currency; /** * A region of the world. * <p> * Many aspects of business, algorithms and contracts are specific to a region. The region may be of any size, from a municipality to a super-national group. * <p> * This interface is read-only. Implementations may be mutable. */ @PublicAPI public interface Region extends UniqueIdentifiable, ExternalBundleIdentifiable { /** * Gets the unique identifier of the region. * <p> * This specifies a single version-correction of the region. * * @return the unique identifier for this region, not null within the engine */ @Override UniqueId getUniqueId(); /** * Gets the external identifier bundle that defines the region. * <p> * Each external system has one or more identifiers by which they refer to the region. * Some of these may be unique within that system, while others may be more descriptive. * This bundle stores the set of these external identifiers. * <p> * This will include the country, currency and time-zone. * * @return the bundle defining the region, not null */ @Override // override for Javadoc ExternalIdBundle getExternalIdBundle(); /** * Gets the classification of the region. * * @return the classification of region, such as SUPER_NATIONAL or INDEPENDENT_STATE, not null */ RegionClassification getClassification(); /** * Gets the unique identifiers of the regions that this region is a member of. For example, a country might be a member of the World, UN, European Union and NATO. * * @return the parent unique identifiers, null if this is the root entry */ Set<UniqueId> getParentRegionIds(); /** * Gets the country. * * @return the country, null if not applicable */ Country getCountry(); /** * Gets the currency. * * @return the currency, null if not applicable */ Currency getCurrency(); /** * Gets the time-zone. For larger regions, there can be multiple time-zones, so this is only reliable for municipalities. * * @return the time-zone, null if not applicable */ ZoneId getTimeZone(); /** * Gets the short descriptive name of the region. * * @return the name of the region, not null */ String getName(); /** * Gets the full descriptive name of the region. * * @return the full name of the region, not null */ String getFullName(); /** * Gets the extensible data store for additional information. Applications may store additional region based information here. * * @return the additional data, not null */ FlexiBean getData(); }