/********************************************************************
 * Copyright © 2006 VHA. All rights reserved
 ********************************************************************/

package gov.va.med.fw.model.lookup;

/**
 * Well known applications of the Model Properties Service.
 * 
 * Created Sep 6, 2006 2:24:12 PM
 * 
 * @author DNS   BOHMEG
 */
public class ModelPropertiesApplicationType extends AbstractSimpleLookup {

	/**
	 * serialVersionUID long
	 */
	private static final long serialVersionUID = 2691206071436241022L;

	/**
	 * IDENTITY is used for pure equality/hashCode implementations and typically
	 * use ALL object properties including infrastructure properties (with
	 * expection to circular references)
	 */
	public static final ModelPropertiesApplicationType IDENTITY = new ModelPropertiesApplicationType(
			"identity");

	/**
	 * COPY is used to identify properties that should be copied onto a like
	 * target object
	 */
	public static final ModelPropertiesApplicationType COPY = new ModelPropertiesApplicationType(
			"copy");

	/**
	 * MATCH_DOMAIN_VALUES is used to determine if two like objects represent
	 * the same domain object with respect to all the configured domain
	 * properties.
	 * 
	 * <p>
	 * For example, when matching an Address object, this will include the type
	 * (eg, Permanent, Temporary), address, city, state, and zip. Assume these
	 * are all the domain properties.
	 * 
	 * <p>
	 * This differs from IDENTITY in that infrastructure properties are NOT
	 * accounted for (eg, identifier, lastUpdatedBy, createdDate, etc).
	 */
	public static final ModelPropertiesApplicationType MATCH_DOMAIN_VALUES = new ModelPropertiesApplicationType(
			"matchDomainValues");

	/**
	 * MATCH_DOMAIN_CONCEPT is used to determine if two like objects represent
	 * the same domain concept with respect to all the configured business
	 * properties. Typically this is implemented as a partial subset of
	 * configured properties for MATCH_DOMAIN_VALUES and allows for quick
	 * picking of a domain concept match in a collection of other like objects.
	 * 
	 * <p>
	 * For example, when matching an Address object, this will only include the
	 * type (eg, Permanent, Temporary).
	 * 
	 * <p>
	 * This differs from MATCH_DOMAIN_VALUES in that not all domain properties
	 * should be inspected.
	 */
	public static final ModelPropertiesApplicationType MATCH_DOMAIN_CONCEPT = new ModelPropertiesApplicationType(
			"matchDomainConcept");

	private ModelPropertiesApplicationType(String code) {
		super(code);
	}
}
