text: using NHapi.Base.Parser;
  using NHapi.Base;
  using NHapi.Base.Log;
  using System;
  using System.Collections.Generic;
  using NHapi.Model.V28.Segment;
  using NHapi.Model.V28.Datatype;
  using NHapi.Base.Model;
  
  namespace NHapi.Model.V28.Group
  {
  ///<summary>
  ///Represents the CCR_I16_ROLE_PATHWAY Group.  A Group is an ordered collection of message 
  /// segments that can repeat together or be optionally in/excluded together.
  /// This Group contains the following elements: 
  ///<ol>
  ///<li>0: ROL (Role) </li>
  ///<li>1: PRD (Provider Data) </li>
  ///<li>2: VAR (Variance) optional repeating</li>
  ///</ol>
  ///</summary>
  [Serializable]
  public class CCR_I16_ROLE_PATHWAY : AbstractGroup {
  
  	///<summary> 
  	/// Creates a new CCR_I16_ROLE_PATHWAY Group.
  	///</summary>
  	public CCR_I16_ROLE_PATHWAY(IGroup parent, IModelClassFactory factory) : base(parent, factory){
  	   try {
  	      this.add(typeof(ROL), true, false);
  	      this.add(typeof(PRD), true, false);
  	      this.add(typeof(VAR), false, true);
  	   } catch(HL7Exception e) {
  	      HapiLogFactory.GetHapiLog(GetType()).Error("Unexpected error creating CCR_I16_ROLE_PATHWAY - this is probably a bug in the source code generator.", e);
  	   }
  	}
  
  	///<summary>
  	/// Returns ROL (Role) - creates it if necessary
  	///</summary>
  	public ROL ROL { 
  get{
  	   ROL ret = null;
  	   try {
  	      ret = (ROL)this.GetStructure("ROL");
  	   } catch(HL7Exception e) {
  	      HapiLogFactory.GetHapiLog(GetType()).Error("Unexpected error accessing data - this is probably a bug in the source code generator.", e);
  	      throw new System.Exception("An unexpected error ocurred",e);
  	   }
  	   return ret;
  	}
  	}
  
  	///<summary>
  	/// Returns PRD (Provider Data) - creates it if necessary
  	///</summary>
  	public PRD PRD { 
  get{
  	   PRD ret = null;
  	   try {
  	      ret = (PRD)this.GetStructure("PRD");
  	   } catch(HL7Exception e) {
  	      HapiLogFactory.GetHapiLog(GetType()).Error("Unexpected error accessing data - this is probably a bug in the source code generator.", e);
  	      throw new System.Exception("An unexpected error ocurred",e);
  	   }
  	   return ret;
  	}
  	}
  
  	///<summary>
  	/// Returns  first repetition of VAR (Variance) - creates it if necessary
  	///</summary>
  	public VAR GetVAR() {
  	   VAR ret = null;
  	   try {
  	      ret = (VAR)this.GetStructure("VAR");
  	   } catch(HL7Exception e) {
  	      HapiLogFactory.GetHapiLog(GetType()).Error("Unexpected error accessing data - this is probably a bug in the source code generator.", e);
  	      throw new System.Exception("An unexpected error ocurred",e);
  	   }
  	   return ret;
  	}
  
  	///<summary>
  	///Returns a specific repetition of VAR
  	/// * (Variance) - creates it if necessary
  	/// throws HL7Exception if the repetition requested is more than one 
  	///     greater than the number of existing repetitions.
  	///</summary>
  	public VAR GetVAR(int rep) { 
  	   return (VAR)this.GetStructure("VAR", rep);
  	}
  
  	/** 
  	 * Returns the number of existing repetitions of VAR 
  	 */ 
  	public int VARRepetitionsUsed { 
  get{
  	    int reps = -1; 
  	    try { 
  	        reps = this.GetAll("VAR").Length; 
  	    } catch (HL7Exception e) { 
  	        string message = "Unexpected error accessing data - this is probably a bug in the source code generator."; 
  	        HapiLogFactory.GetHapiLog(GetType()).Error(message, e); 
  	        throw new System.Exception(message);
  	    } 
  	    return reps; 
  	}
  	} 
  
  	/** 
  	 * Enumerate over the VAR results 
  	 */ 
  	public IEnumerable<VAR> VARs 
  	{ 
  		get
  		{
  			for (int rep = 0; rep < VARRepetitionsUsed; rep++)
  			{
  				yield return (VAR)this.GetStructure("VAR", rep);
  			}
  		}
  	}
  
  	///<summary>
  	///Adds a new VAR
  	///</summary>
  	public VAR AddVAR()
  	{
  		return this.AddStructure("VAR") as VAR;
  	}
  
  	///<summary>
  	///Removes the given VAR
  	///</summary>
  	public void RemoveVAR(VAR toRemove)
  	{
  		this.RemoveStructure("VAR", toRemove);
  	}
  
  	///<summary>
  	///Removes the VAR at the given index
  	///</summary>
  	public void RemoveVARAt(int index)
  	{
  		this.RemoveRepetition("VAR", index);
  	}
  
  }
  }
  