/*******************************************************************************
 *  Copyright 2017-2018 Centre for Development of Advanced Computing(C-DAC), Pune
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *   http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package cdac.medinfo.sdk.dcm30_04.templates.ctmrcardiovascularanalysisreporttemplates;

import cdac.medinfo.sdk.dcm30_04.baselibs.ContentSequenceItem;
import cdac.medinfo.sdk.dcm30_04.enums.EnumContinuityOfContent;
import cdac.medinfo.sdk.dcm30_04.srtree.SRTree;
import cdac.medinfo.sdk.dcm30_04.templates.cid.CardiovascularAnatomicLocationModifiers_CID3019;
import cdac.medinfo.sdk.dcm30_04.templates.cid.NonInvasiveVascularProcedures_CID3820;
import cdac.medinfo.sdk.dcm30_04.templates.cid.VascularMorphology_CID3810;
import cdac.medinfo.sdk.dcm30_04.templates.cid.VesselBranchModifiers_CID12117;
import cdac.medinfo.sdk.dcm30_04.templates.cid.VesselSegmentModifiers_CID12116;
import cdac.medinfo.sdk.dcm30_04.templates.enums.EnumCodingSchemeDesignator;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_CardiacSynchronizationTechnique;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_CardiovascularAnatomicLocationModifiers;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularAnalysis;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularMorphology;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularSectionMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VesselBranchModifiers;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VesselSegmentModifiers;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VascularAnalysis;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VascularSectionMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.NegationModifierPresenceOfFinding_TID1350;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.Template;

/**
 * This class represents VascularSectionMeasurements_TID3906
 */
public class VascularSectionMeasurements_TID3906 extends Template
{
	private static final String strCM = null;

	/**
	 * Object of VascularMorphology_CID3810
	 */
	private VascularMorphology_CID3810 objVascularMorphologyCID3810;
	
	/**
	 * Object of CardiovascularAnatomicLocationModifiers_CID3019
	 */
	private CardiovascularAnatomicLocationModifiers_CID3019 objCardiovascularAnatomicLocationModifiersCID3019;
	
	/**
	 * Object of VesselBranchModifiers_CID12117
	 */
	private VesselBranchModifiers_CID12117 objVesselBranchModifiersCID12117;
	
	/**
	 * Object of VesselSegmentModifiers_CID12116
	 */
	private VesselSegmentModifiers_CID12116 objVesselSegmentModifiersCID12116;
	
	/**
	 * Object of NegationModifierPresenceOfFinding_TID1350
	 */
	private NegationModifierPresenceOfFinding_TID1350 objNegationModifierPresenceOfFindingTID1350;
	
	/**
	 * Object of CalciumScoringResults_TID3905
	 */
	private CalciumScoringResults_TID3905 objCalciumScoringResultsTID3905;
	
	/**
	 * Object of VesselMeasurements_TID3907
	 */
	private VesselMeasurements_TID3907 objVesselMeasurementsTID3907;
	
	/**
	 * Object of VascularLesion_TID3908
	 */
	private VascularLesion_TID3908 objVascularLesionTID3908;
	
	/**
	 * Object of FlowQuantification_TID3910
	 */
	private FlowQuantification_TID3910 objFlowQuantificationTID3910;
	
	/**
	 * Instantiates a new VascularSectionMeasurements_TID3906 Template.
	 * @param objTree Object of SRTree.
	 */
	public VascularSectionMeasurements_TID3906(SRTree objTree)
	{
		super(objTree);
	}

	/**
	 * Retrieves Negation Modifier Presence Of Finding.
	 * @return objNegationModifierPresenceOfFindingTID1350 Object of NegationModifierPresenceOfFinding_TID1350 
	 */
	public NegationModifierPresenceOfFinding_TID1350 getNegationModifierPresenceOfFinding()
	{
		if(null == this.objNegationModifierPresenceOfFindingTID1350)
			this.objNegationModifierPresenceOfFindingTID1350 = new NegationModifierPresenceOfFinding_TID1350(getSRTree());
		return this.objNegationModifierPresenceOfFindingTID1350;
	}
	
	/**
	 * Retrieves Vessel Measurements.
	 * @return objVesselMeasurementsTID3907 Object of VesselMeasurements_TID3907 
	 */
	public VesselMeasurements_TID3907 getVesselMeasurements()
	{
		if(null == this.objVesselMeasurementsTID3907)
			this.objVesselMeasurementsTID3907 = new VesselMeasurements_TID3907(getSRTree());
		return this.objVesselMeasurementsTID3907;
	}
	
	/**
	 * Retrieves Vascular Lesion.
	 * @return objVascularLesionTID3908 Object of VascularLesion_TID3908 
	 */
	public VascularLesion_TID3908 getVascularLesion()
	{
		if(null == this.objVascularLesionTID3908)
			this.objVascularLesionTID3908 = new VascularLesion_TID3908(getSRTree());
		return this.objVascularLesionTID3908;
	}
	
	/**
	 * Retrieves Flow Quantification.
	 * @return objFlowQuantificationTID3910 Object of FlowQuantification_TID3910 
	 */
	public FlowQuantification_TID3910 getFlowQuantification()
	{
		if(null == this.objFlowQuantificationTID3910)
			this.objFlowQuantificationTID3910 = new FlowQuantification_TID3910(getSRTree());
		return this.objFlowQuantificationTID3910;
	}
	
	/**
	 * Retrieves Calcium Scoring Results.
	 * @return objCalciumScoringResultsTID3905 Object of CalciumScoringResults_TID3905 
	 */
	public CalciumScoringResults_TID3905 getCalciumScoringResults()
	{
		if(null == this.objCalciumScoringResultsTID3905)
			this.objCalciumScoringResultsTID3905 = new CalciumScoringResults_TID3905(getSRTree());
		return this.objCalciumScoringResultsTID3905;
	}
	
	/**
	 * Sets the value for Findings.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumContinuityOfContent 
	 */
	public void setFindings(int[] arrPosition, EnumContinuityOfContent enumContinuityOfContent)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.FINDINGS.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.FINDINGS_121070.getValue();
		String strCSD = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 *Creating a node of Value Type CONTAINER and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createContainer(arrPosition, strCodeMeaning, strCodeValue, strCSD, enumContinuityOfContent);
		getSRTree().addChild(objContentSequenceItem);
	}
	

	/**
	 * Sets the value for Laterality.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setLaterality(int[] arrPosition)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.LATERALITY.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.LATERALITY_G_C171.getValue();
		String strCSD = EnumCodingSchemeDesignator.SRT.getValue();

		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, "", "", "", "");
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Finding Site.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setFindingSite(int[] arrPosition)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.FINDINGS_SITE.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.FINDINGS_SITE_G_C0E3.getValue();
		String strCSD = EnumCodingSchemeDesignator.SRT.getValue();

		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, "", "", "", "");
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Vessel Branch.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setVesselBranch(int[] arrPosition, EnumCM_VesselBranchModifiers enumVesselBranchModifiers)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.VESSEL_BRANCH.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.VESSEL_BRANCH_125101.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		
		if(null== this.objVesselBranchModifiersCID12117)
			this.objVesselBranchModifiersCID12117 = new VesselBranchModifiers_CID12117();
		this.objVesselBranchModifiersCID12117.setVesselBranchModifiers(enumVesselBranchModifiers);

		String strCM = objVesselBranchModifiersCID12117.getCodeMeaning();
		String strCV = objVesselBranchModifiersCID12117.getCodeValue();
		String strCSD = objVesselBranchModifiersCID12117.getCodingSchemeDesignator();
		String strSNOMEDCTID = objVesselBranchModifiersCID12117.getSNOMEDCTID();
		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strCSDesg, strCV, strCM,strSNOMEDCTID);
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Topographical Modifier.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setTopographicalModifier(int[] arrPosition, EnumCM_VesselSegmentModifiers enumVesselSegmentModifiers)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.TOPOGRAPHICAL_MODIFIER.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.TOPOGRAPHICAL_MODIFIER_G_A1F8.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		
		if(null== this.objVesselSegmentModifiersCID12116)
			this.objVesselSegmentModifiersCID12116 = new VesselSegmentModifiers_CID12116();
		this.objVesselSegmentModifiersCID12116.setVesselSegmentModifiers(enumVesselSegmentModifiers);

		String strCM = objVesselSegmentModifiersCID12116.getCodeMeaning();
		String strCV = objVesselSegmentModifiersCID12116.getCodeValue();
		String strCSD = objVesselSegmentModifiersCID12116.getCodingSchemeDesignator();
		String strSNOMEDCTID = objVesselSegmentModifiersCID12116.getSNOMEDCTID();
		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strCSDesg, strCV, strCM,strSNOMEDCTID);
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Topographical Modifier.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setTopographicalModifier(int[] arrPosition, EnumCM_CardiovascularAnatomicLocationModifiers enumCardiovascularAnatomicLocationModifiers)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.TOPOGRAPHICAL_MODIFIER.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.TOPOGRAPHICAL_MODIFIER_G_A1F8.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		
		if(null== this.objCardiovascularAnatomicLocationModifiersCID3019)
			this.objCardiovascularAnatomicLocationModifiersCID3019 = new CardiovascularAnatomicLocationModifiers_CID3019();
		this.objCardiovascularAnatomicLocationModifiersCID3019.setCardiovascularAnatomicLocationModifiers(enumCardiovascularAnatomicLocationModifiers);

		String strCM = objCardiovascularAnatomicLocationModifiersCID3019.getCodeMeaning();
		String strCV = objCardiovascularAnatomicLocationModifiersCID3019.getCodeValue();
		String strCSD = objCardiovascularAnatomicLocationModifiersCID3019.getCodingSchemeDesignator();
		String strSNOMEDCTID = objCardiovascularAnatomicLocationModifiersCID3019.getSNOMEDCTID();
		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strCSDesg, strCV, strCM,strSNOMEDCTID);
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Parent Vessel Finding.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setParentVesselFinding(int[] arrPosition, EnumCM_VascularMorphology enumVascularMorphology)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularSectionMeasurements.PARENT_VESSEL_FINDING.getValue();
		String strCodeValue = EnumCV_VascularSectionMeasurements.PARENT_VESSEL_FINDING_122686.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		if(null== this.objVascularMorphologyCID3810)
			this.objVascularMorphologyCID3810 = new VascularMorphology_CID3810();
		this.objVascularMorphologyCID3810.setVascularMorphology(enumVascularMorphology);

		String strCM = objVascularMorphologyCID3810.getCodeMeaning();
		String strCV = objVascularMorphologyCID3810.getCodeValue();
		String strCSD = objVascularMorphologyCID3810.getCodingSchemeDesignator();
		String strSNOMEDCTID = objVascularMorphologyCID3810.getSNOMEDCTID();
		
		/**
		 *Creating a node of Value Type CODE and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createCodeNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strCSDesg, strCM ,strCV, strSNOMEDCTID);
		getSRTree().addChild(objContentSequenceItem);
	}

}
