text: /*
  * Copyright 2006 Sony Computer Entertainment Inc.
  *
  * Licensed under the MIT Open Source License, for details please see license.txt or the website
  * http://www.opensource.org/licenses/mit-license.php
  *
  */ 
  
  #ifndef __domController_h__
  #define __domController_h__
  
  #include <dae/daeDocument.h>
  #include <dom/domTypes.h>
  #include <dom/domElements.h>
  
  #include <dom/domAsset.h>
  #include <dom/domSkin.h>
  #include <dom/domMorph.h>
  #include <dom/domExtra.h>
  class DAE;
  
  /**
   * The controller element categorizes the declaration of generic control information.
   * A controller is a device or mechanism that manages and directs the operations
   * of another object.
   */
  class domController : public daeElement
  {
  public:
  	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::CONTROLLER; }
  	static daeInt ID() { return 655; }
  	virtual daeInt typeID() const { return ID(); }
  protected:  // Attributes
  /**
   *  The id attribute is a text string containing the unique identifier of
   * this element. This value  must be unique within the instance document.
   * Optional attribute. 
   */
  	xsID attrId;
  /**
   *  The name attribute is the text string name of this element. Optional attribute.
   */
  	xsNCName attrName;
  
  protected:  // Elements
  /**
   *  The controller element may contain an asset element.  @see domAsset
   */
  	domAssetRef elemAsset;
  /**
   *  The controller element may contain either a skin element or a morph element.
   * @see domSkin
   */
  	domSkinRef elemSkin;
  /**
   *  The controller element may contain either a skin element or a morph element.
   * @see domMorph
   */
  	domMorphRef elemMorph;
  /**
   *  The extra element may appear any number of times.  @see domExtra
   */
  	domExtra_Array elemExtra_array;
  	/**
  	 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
  	 */
  	daeElementRefArray _contents;
  	/**
  	 * Used to preserve order in elements that have a complex content model.
  	 */
  	daeUIntArray       _contentsOrder;
  
  	/**
  	 * Used to store information needed for some content model objects.
  	 */
  	daeTArray< daeCharArray * > _CMData;
  
  
  public:	//Accessors and Mutators
  	/**
  	 * Gets the id attribute.
  	 * @return Returns a xsID of the id attribute.
  	 */
  	xsID getId() const { return attrId; }
  	/**
  	 * Sets the id attribute.
  	 * @param atId The new value for the id attribute.
  	 */
  	void setId( xsID atId ) { *(daeStringRef*)&attrId = atId; _validAttributeArray[0] = true; 
  		if( _document != NULL ) _document->changeElementID( this, attrId );
  	}
  
  	/**
  	 * Gets the name attribute.
  	 * @return Returns a xsNCName of the name attribute.
  	 */
  	xsNCName getName() const { return attrName; }
  	/**
  	 * Sets the name attribute.
  	 * @param atName The new value for the name attribute.
  	 */
  	void setName( xsNCName atName ) { *(daeStringRef*)&attrName = atName; _validAttributeArray[1] = true; }
  
  	/**
  	 * Gets the asset element.
  	 * @return a daeSmartRef to the asset element.
  	 */
  	const domAssetRef getAsset() const { return elemAsset; }
  	/**
  	 * Gets the skin element.
  	 * @return a daeSmartRef to the skin element.
  	 */
  	const domSkinRef getSkin() const { return elemSkin; }
  	/**
  	 * Gets the morph element.
  	 * @return a daeSmartRef to the morph element.
  	 */
  	const domMorphRef getMorph() const { return elemMorph; }
  	/**
  	 * Gets the extra element array.
  	 * @return Returns a reference to the array of extra elements.
  	 */
  	domExtra_Array &getExtra_array() { return elemExtra_array; }
  	/**
  	 * Gets the extra element array.
  	 * @return Returns a constant reference to the array of extra elements.
  	 */
  	const domExtra_Array &getExtra_array() const { return elemExtra_array; }
  	/**
  	 * Gets the _contents array.
  	 * @return Returns a reference to the _contents element array.
  	 */
  	daeElementRefArray &getContents() { return _contents; }
  	/**
  	 * Gets the _contents array.
  	 * @return Returns a constant reference to the _contents element array.
  	 */
  	const daeElementRefArray &getContents() const { return _contents; }
  
  protected:
  	/**
  	 * Constructor
  	 */
  	domController(DAE& dae) : daeElement(dae), attrId(), attrName(), elemAsset(), elemSkin(), elemMorph(), elemExtra_array() {}
  	/**
  	 * Destructor
  	 */
  	virtual ~domController() { daeElement::deleteCMDataArray(_CMData); }
  	/**
  	 * Overloaded assignment operator
  	 */
  	virtual domController &operator=( const domController &cpy ) { (void)cpy; return *this; }
  
  public: // STATIC METHODS
  	/**
  	 * Creates an instance of this class and returns a daeElementRef referencing it.
  	 * @return a daeElementRef referencing an instance of this object.
  	 */
  	static DLLSPEC daeElementRef create(DAE& dae);
  	/**
  	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
  	 * If a daeMetaElement already exists it will return that instead of creating a new one. 
  	 * @return A daeMetaElement describing this COLLADA element.
  	 */
  	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
  };
  
  
  #endif
  