/** 
 * 
 */
package org.sana.core;

import org.sana.api.IConcept;

import com.google.gson.annotations.Expose;


/**
 * A functional unit of meaning. All data must be annotated by at least one
 * Concept. Furthermore, all Classes defined within the data model are 
 * essentially convenience wrappers for the concrete implementation of a 
 * Concept.
 * 
 * @author Sana Development
 *
 */
public class Concept extends Model implements IConcept{
	
	/** 
	 * A machine friendly short name or identifier. <code>name</code> values
	 * should be formatted as [A-Z](_?[A-Z])*? 
	 */
	@Expose
	public String name;
	
	/** Human-readable name */
	@Expose
	public String display_name;

	/** Longer human-readable, narrative description. */
	@Expose
	public String description;
	
	/** XML compliant data type. @see org.sana.Datatype */
	@Expose
	public String datatype;
	
	/** Mime type. Default should be text/plain.  */
	@Expose
	public String mediatype;
	
	/** A validation function string to enforce on associated values
	 *  @see Observation#setValue(Object)
	 */
	@Expose
	public String constraint;
	@Expose
	public String conceptclass;
	/** Default Constructor */
	public Concept(){}
	
	/**
	 * Creates a new instance with a specified unique id.
	 * 
	 * @param uuid The UUID of the instance
	 */
	public Concept(String uuid){
		this.uuid = uuid;
	}
	
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the display_name
	 */
	public String getDisplayName() {
		return display_name;
	}

	/**
	 * @param display_name the display_name to set
	 */
	public void setDisplayName(String displayName) {
		this.display_name = displayName;
	}

	/**
	 * @return the description
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * @param description the description to set
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * @return the datatype
	 */
	public String getDatatype() {
		return datatype;
	}

	/**
	 * @param datatype the datatype to set
	 */
	public void setDatatype(String datatype) {
		this.datatype = datatype;
	}

	/**
	 * @return the mediatype
	 */
	public String getMediatype() {
		return mediatype;
	}

	/**
	 * @param mediatype the mediatype to set
	 */
	public void setMediatype(String mediatype) {
		this.mediatype = mediatype;
	}

	/**
	 * @return the constraint
	 */
	public String getConstraints() {
		return constraint;
	}

	/**
	 * @param constraint the constraint to set
	 */
	public void setConstraints(String constraints) {
		this.constraint = constraints;
	}


	/**
	 * Returns whether this instance's stored valued should be treated as either
	 * a File or String based on the mimetype of the Concept. 
	 * 
	 * @return
	 */
	public boolean isComplex(){
		return !getMediatype().equals("text/plain");
	}
	
}

@@ -934,24 +934,39 @@
 ng mediatype
+ = %22text/plain%22
 ;%0A%09%0A%09/** A v
@@ -1655,26 +1655,25 @@
 aram display
-_n
+N
 ame the disp
@@ -2585,16 +2585,17 @@
 nstraint
+s
  the con

Set default mimetype to plain text.