/*******************************************************************************
 *  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.enums.EnumGraphicType;
import cdac.medinfo.sdk.dcm30_04.enums.EnumTemporalRangeType;
import cdac.medinfo.sdk.dcm30_04.srtree.SRTree;
import cdac.medinfo.sdk.dcm30_04.templates.cid.FiducialFeature_CID3837;
import cdac.medinfo.sdk.dcm30_04.templates.cid.VascularMorphology_CID3810;
import cdac.medinfo.sdk.dcm30_04.templates.cid.VascularSclerosisTypes_CID3817;
import cdac.medinfo.sdk.dcm30_04.templates.enums.EnumCodingSchemeDesignator;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_BestIllustrationOfFindings;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_FiducialFeature;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularLesion;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularMorphology;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularSclerosisTypes;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularSectionMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VesselMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_BestIllustrationOfFindings;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VascularLesion;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VascularSectionMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VesselMeasurements;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.Measurement_TID300;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.ObservationContext_TID1001;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.Template;

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

	/**
	 * Object of BestIllustrationOfFindings_TID3909
	 */
	private BestIllustrationOfFindings_TID3909 objBestIllustrationOfFindingsTID3909;
	
	/**
	 * Object of Measurement_TID300
	 */
	private Measurement_TID300 objMeasurementTID300;
	
	/**
	 * Object of PlaqueProperties_TID3911
	 */
	private PlaqueProperties_TID3911 objPlaquePropertiesTID3911;
	
	/**
	 * Object of StenosisProperties_TID3912
	 */
	private StenosisProperties_TID3912 objStenosisPropertiesTID3912;
	
	/**
	 * Object of AneurysmProperties_TID3913
	 */
	private AneurysmProperties_TID3913 objAneurysmPropertiesTID3913;
	
	/**
	 * Object of ArterialDissectionProperties_TID3914
	 */
	private ArterialDissectionProperties_TID3914 objArterialDissectionPropertiesTID3914;
	
	/**
	 * Object of VascularOcclusionProperties_TID3915
	 */
	private VascularOcclusionProperties_TID3915 objVascularOcclusionPropertiesTID3915;
	
	/**
	 * Object of StentProperties_TID3916
	 */
	private StentProperties_TID3916 objStentPropertiesTID3916;
	
	/**
	 * Object of FiducialFeature_CID3837
	 */
	private FiducialFeature_CID3837 objFiducialFeatureCID3837;
	
	/**
	 * Object of VascularSclerosisTypes_CID3817
	 */
	private VascularSclerosisTypes_CID3817 objVascularSclerosisTypesCID3817;
	
	/**
	 * Object of VascularMorphology_CID3810
	 */
	private VascularMorphology_CID3810 objVascularMorphologyCID3810;
	
	/**
	 * Instantiates a new VascularLesion_TID3908 Template.
	 * @param objTree Object of SRTree.
	 */
	public VascularLesion_TID3908(SRTree objTree)
	{
		super(objTree);
	}


	/**
	 * Retrieves Best Illustration Of Findings.
	 * @return objBestIllustrationOfFindingsTID3909 Object of BestIllustrationOfFindings_TID3909 
	 */
	public BestIllustrationOfFindings_TID3909 getBestIllustrationOfFindings() 
	{
		if(null == this.objBestIllustrationOfFindingsTID3909)
			this.objBestIllustrationOfFindingsTID3909 = new BestIllustrationOfFindings_TID3909(getSRTree());
		return this.objBestIllustrationOfFindingsTID3909;
	}
	/**
	 * Retrieves PlaqueProperties.
	 * @return objPlaquePropertiesTID3911 Object of PlaqueProperties_TID3911 
	 */
	public PlaqueProperties_TID3911 getPlaqueProperties() 
	{
		if(null == this.objPlaquePropertiesTID3911)
			this.objPlaquePropertiesTID3911 = new PlaqueProperties_TID3911(getSRTree());
		return this.objPlaquePropertiesTID3911;
	}
	
	/**
	 * Retrieves StenosisProperties.
	 * @return objStenosisPropertiesTID3912 Object of StenosisProperties_TID3912 
	 */
	public StenosisProperties_TID3912 getStenosisProperties() 
	{
		if(null == this.objStenosisPropertiesTID3912)
			this.objStenosisPropertiesTID3912 = new StenosisProperties_TID3912(getSRTree());
		return this.objStenosisPropertiesTID3912;
	}
	
	/**
	 * Retrieves Aneurysm Properties.
	 * @return objAneurysmPropertiesTID3913 Object of AneurysmProperties_TID3913 
	 */
	public AneurysmProperties_TID3913 getAneurysmProperties()
	{
		if(null == this.objAneurysmPropertiesTID3913)
			this.objAneurysmPropertiesTID3913 = new AneurysmProperties_TID3913(getSRTree());
		return this.objAneurysmPropertiesTID3913;
	}
	
	/**
	 * Retrieves Arterial Dissection Properties.
	 * @return objArterialDissectionPropertiesTID3914 Object of ArterialDissectionProperties_TID3914 
	 */
	public ArterialDissectionProperties_TID3914 getArterialDissectionProperties()
	{
		if(null == this.objArterialDissectionPropertiesTID3914)
			this.objArterialDissectionPropertiesTID3914 = new ArterialDissectionProperties_TID3914(getSRTree());
		return this.objArterialDissectionPropertiesTID3914;
	}
	
	/**
	 * Retrieves VascularOcclusionProperties.
	 * @return objVascularOcclusionPropertiesTID3915 Object of VascularOcclusionProperties_TID3915 
	 */
	public VascularOcclusionProperties_TID3915 getVascularOcclusionProperties()
	{
		if(null == this.objVascularOcclusionPropertiesTID3915)
			this.objVascularOcclusionPropertiesTID3915 = new VascularOcclusionProperties_TID3915(getSRTree());
		return this.objVascularOcclusionPropertiesTID3915;
	}
	
	/**
	 * Retrieves Stent Properties.
	 * @return objStentPropertiesTID3916 Object of StentProperties_TID3916 
	 */
	public StentProperties_TID3916 getStentProperties()
	{
		if(null == this.objStentPropertiesTID3916)
			this.objStentPropertiesTID3916 = new StentProperties_TID3916(getSRTree());
		return this.objStentPropertiesTID3916;
	}
	
	/**
	 * Retrieves Measurement.
	 * @return objMeasurementTID300 Object of Measurement_TID300 
	 */
	public Measurement_TID300 getMeasurement() 
	{
		if(null == this.objMeasurementTID300)
			this.objMeasurementTID300 = new Measurement_TID300(getSRTree());
		return this.objMeasurementTID300;
	}
	
	/**
	 * Sets the value for Fiducial Feature.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setFiducialFeature(int[] arrPosition, EnumCM_FiducialFeature enumFiducialFeature)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.FIDUCIAL_FEATURE.getValue();
		String strCodeValue = EnumCV_VascularLesion.FIDUCIAL_FEATURE_122340.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		if(null== this.objFiducialFeatureCID3837)
			this.objFiducialFeatureCID3837 = new FiducialFeature_CID3837();
		this.objFiducialFeatureCID3837.setFiducialFeature(enumFiducialFeature);

		String strCM = objFiducialFeatureCID3837.getCodeMeaning();
		String strCV = objFiducialFeatureCID3837.getCodeValue();
		String strCSD = objFiducialFeatureCID3837.getCodingSchemeDesignator();
		String strSNOMEDCTID = objFiducialFeatureCID3837.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);
	}
	
	/**
	 * Sets the value for Associated Morphology.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setAssociatedMorphology(int[] arrPosition, EnumCM_VascularMorphology enumVascularMorphology)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.ASSOCIATED_MORPHOLOGY.getValue();
		String strCodeValue = EnumCV_VascularLesion.ASSOCIATED_MORPHOLOGY_G_C504.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);
	}
	
	/**
	 * Sets the value for Associated Morphology.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 */
	public void setAssociatedMorphology(int[] arrPosition, EnumCM_VascularSclerosisTypes enumVascularSclerosisTypes)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.ASSOCIATED_MORPHOLOGY.getValue();
		String strCodeValue = EnumCV_VascularLesion.ASSOCIATED_MORPHOLOGY_G_C504.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		if(null== this.objVascularSclerosisTypesCID3817)
			this.objVascularSclerosisTypesCID3817 = new VascularSclerosisTypes_CID3817();
		this.objVascularSclerosisTypesCID3817.setVascularSclerosisTypes(enumVascularSclerosisTypes);

		String strCM = objVascularSclerosisTypesCID3817.getCodeMeaning();
		String strCV = objVascularSclerosisTypesCID3817.getCodeValue();
		String strCSD = objVascularSclerosisTypesCID3817.getCodingSchemeDesignator();
		String strSNOMEDCTID = objVascularSclerosisTypesCID3817.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);
	}
	
	/**
	 * Sets the value for Lesion Finding.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumContinuityOfContent 
	 * @param string 
	 */
	public void setLesionFinding(int[] arrPosition, EnumContinuityOfContent enumContinuityOfContent)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.LESION_FINDINGS.getValue();
		String strCodeValue = EnumCV_VascularLesion.LESION_FINDINGS_F_00585.getValue();
		String strCSD = EnumCodingSchemeDesignator.SRT.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 Lesion Identifier.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param strValue 
	 */
	public void setLesionIdentifier(int[] arrPosition, String strValue)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.LESION_IDENTIFIER.getValue();
		String strCodeValue = EnumCV_VascularLesion.LESION_IDENTIFIER_121151.getValue();
		String strCSD = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 *Creating a node of Value Type TEXT and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createTextNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strValue);
		getSRTree().addChild(objContentSequenceItem);
	}
	/**
	 * Sets the value for Comment.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param strValue 
	 * @param string 
	 */
	public void setComment(int[] arrPosition, String strValue)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.COMMENT.getValue();
		String strCodeValue = EnumCV_VascularLesion.COMMENT_121106.getValue();
		String strCSD = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 *Creating a node of Value Type TEXT and adding this node at specified identifier in the SR Tree.
		 */
		ContentSequenceItem objContentSequenceItem = getSRTree().createTextNode(arrPosition, strCodeMeaning, strCodeValue, strCSD, strValue);
		getSRTree().addChild(objContentSequenceItem);
	}
	
	/**
	 * Sets the value for Relative Position.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree. 
	 * @param arrNumericValue 
	 */
	public void setRelativePosition(int[] arrPosition, String[] arrStrReferencedDatetime, int[] lArrReferencedSamplePositions, String[] arrStrReferencedTimeOffsets, String[] arrNumericValue)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_VascularLesion.RELATIVE_POSITION.getValue();
		String strCodeValue = EnumCV_VascularLesion.RELATIVE_POSITION_122337.getValue();
		String strCSD = EnumCodingSchemeDesignator.DCM.getValue();

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

}
