/*******************************************************************************
 *  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.cid;


import cdac.medinfo.sdk.dcm30_04.templates.dicomsnomedmap.EnumAnatomicSNOMEDMap;
import cdac.medinfo.sdk.dcm30_04.templates.enums.EnumCodingSchemeDesignator;
import cdac.medinfo.sdk.dcm30_04.templates.enums.EnumCodingSchemeVersion;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_OrganizationalRoles;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VascularAnatomy;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_VascularAnatomy;


/**
 * This class represents VascularAnatomy - CID6117
 */
public class VascularAnatomy_CID6117
{
	/**
	 * The SNOMED CT ID for template.
	 */
	private String strSNOMEDCTID = null;
	/**
	 * The Code Value for template.
	 */
	private String strCodeValue = null;

	/**
	 * The Code Meaning for template.
	 */
	private String strCodeMeaning = null;

	/**
	 * The Coding Scheme Designator for template.
	 */
	private String strCodingSchemeDesignator;

	/**
	 * The Coding Scheme Version for template.
	 */
	private String strCodingSchemeVersion;
	
	/**
	 * Object of CoronaryArteries_CID3015
	 */
	private CoronaryArteries_CID3015 objCoronaryArteriesCID3015;
	
	/**
	 * Retrieves the value for Code Meaning.
	 * @return String value for Code Meaning.
	 */
	public String getCodeMeaning()
	{
		return strCodeMeaning;
	}

	/**
	 * Retrieves the value for Code Value.
	 * @return String value for Code Value.
	 */
	public String getCodeValue() 
	{
		return strCodeValue;
	}

	/**
	 * Retrieves the value for Coding Scheme Designator.
	 * @return String value for Coding Scheme Designator.
	 */
	public String getCodingSchemeDesignator() 
	{
		return strCodingSchemeDesignator;
	}
	
	/**
	 * Retrieves the value for Coding Scheme Version
	 * @return String value for Coding Scheme Version
	 */
	public String getCodingSchemeVersion() 
	{
		return strCodingSchemeVersion;
	}

	/**
	 * Instantiates a new VascularAnatomy_CID6117 Template 
	 */
	public VascularAnatomy_CID6117()
	{

	}

	/**
	 * Sets the Code Value according to Code Meaning.
	 * @param enumVascularAnatomy Object of EnumCM_VascularAnatomy represents Code Meaning.
	 */
	private void setCodeValue(EnumCM_VascularAnatomy enumVascularAnatomy)
	{
		switch(enumVascularAnatomy)
		{
		case AORTIC_ARCH: this.strCodeValue =EnumCV_VascularAnatomy.AORTIC_ARCH_T_42300.getValue(); break;
		case AORTIC_ISTHMUS: this.strCodeValue =EnumCV_VascularAnatomy.AORTIC_ISTHMUS_T_42310.getValue(); break;
		case AORTIC_KNOB: this.strCodeValue =EnumCV_VascularAnatomy.AORTIC_KNOB_112102.getValue(); break;
		case ARCH_OF_THE_AZYGOS_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.ARCH_OF_THE_AZYGOS_VEIN_112103.getValue(); break;
		case ASCENDING_AORTA: this.strCodeValue =EnumCV_VascularAnatomy.ASCENDING_AORTA_T_42100.getValue(); break;
		case AXILLARY_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.AXILLARY_ARTERY_T_47100.getValue(); break;
		case AXILLARY_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.AXILLARY_VEIN_T_49110.getValue(); break;
		case AZYGOS_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.AZYGOS_VEIN_T_48340.getValue(); break;
		case BRACHIAL_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.BRACHIAL_ARTERY_T_47160.getValue(); break;
		case BRACHIAL_PLEXUS: this.strCodeValue =EnumCV_VascularAnatomy.BRACHIAL_PLEXUS_T_A9090.getValue(); break;
		case BRACHIOCEPHALIC_TRUNK: this.strCodeValue =EnumCV_VascularAnatomy.BRACHIOCEPHALIC_TRUNK_T_46010.getValue(); break;
		case BRACHIOCEPHALIC_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.BRACHIOCEPHALIC_VEIN_T_48620.getValue(); break;
		case BRONCHIAL_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.BRONCHIAL_ARTERY_T_46310.getValue(); break;
		case COMMON_CAROTID_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.COMMON_CAROTID_ARTERY_T_45100.getValue(); break;
		case COSTOCERVICAL_TRUNK: this.strCodeValue =EnumCV_VascularAnatomy.COSTOCERVICAL_TRUNK_T_46180.getValue(); break;
		case DESCENDING_AORTA: this.strCodeValue =EnumCV_VascularAnatomy.DESCENDING_AORTA_T_D0765.getValue(); break;
		case DORSAL_SCAPULAR_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.DORSAL_SCAPULAR_ARTERY_T_461A0.getValue(); break;
		case ESOPHAGEAL_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.ESOPHAGEAL_ARTERY_T_4630D.getValue(); break;
		case INFERIOR_PHRENIC_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.INFERIOR_PHRENIC_ARTERY_T_46940.getValue(); break;
		case INFERIOR_VENA_CAVA: this.strCodeValue =EnumCV_VascularAnatomy.INFERIOR_VENA_CAVA_T_48710.getValue(); break;
		case INTERCOSTAL_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.INTERCOSTAL_ARTERY_T_D305A.getValue(); break;
		case INTERNAL_JUGULAR_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.INTERNAL_JUGULAR_VEIN_T_48170.getValue(); break;
		case INTERNAL_THORACIC_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.INTERNAL_THORACIC_ARTERY_T_46200.getValue(); break;
		case PERICARDIOPHRENIC_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.PERICARDIOPHRENIC_ARTERY_T_46210.getValue(); break;
		case PULMONARY_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.PULMONARY_ARTERY_T_44000.getValue(); break;
		case PULMONARY_TRUNK: this.strCodeValue =EnumCV_VascularAnatomy.PULMONARY_TRUNK_T_44100.getValue(); break;
		case PULMONARY_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.PULMONARY_VEIN_T_48581.getValue(); break;
		case SUBCLAVIAN_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.SUBCLAVIAN_ARTERY_T_46100.getValue(); break;
		case SUBCLAVIAN_VEIN: this.strCodeValue =EnumCV_VascularAnatomy.SUBCLAVIAN_VEIN_T_48330.getValue(); break;
		case SUPERIOR_PHRENIC_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.SUPERIOR_PHRENIC_ARTERY_T_46350.getValue(); break;
		case SUPERIOR_VENA_CAVA: this.strCodeValue =EnumCV_VascularAnatomy.SUPERIOR_VENA_CAVA_T_48610.getValue(); break;
		case THYROCERVICAL_TRUNK: this.strCodeValue =EnumCV_VascularAnatomy.THYROCERVICAL_TRUNK_T_46130.getValue(); break;
		case VERTEBRAL_ARTERY: this.strCodeValue =EnumCV_VascularAnatomy.VERTEBRAL_ARTERY_T_45700.getValue(); break;
		}
	}
	/**
	 * Sets the SNOMED-CT ID.
	 * @param enumVascularAnatomy Object of EnumCM_VascularAnatomy represents Code Meaning.
	 */
	private void setSNOMEDCTID(EnumCM_VascularAnatomy enumVascularAnatomy)
	{
		switch(enumVascularAnatomy)
		{
		case AORTIC_ARCH : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.AORTIC_ARCH.getSNOMEDCTID(); break;
		case AORTIC_ISTHMUS : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.AORTIC_ISTHMUS.getSNOMEDCTID(); break;
		case ASCENDING_AORTA : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.ASCENDING_AORTA.getSNOMEDCTID(); break;
		case AXILLARY_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.AXILLARY_ARTERY.getSNOMEDCTID(); break;
		case AXILLARY_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.AXILLARY_VEIN.getSNOMEDCTID(); break;
		case AZYGOS_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.AZYGOS_VEIN.getSNOMEDCTID(); break;
		case BRACHIAL_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.BRACHIAL_ARTERY.getSNOMEDCTID(); break;
		case BRACHIAL_PLEXUS : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.BRACHIAL_PLEXUS.getSNOMEDCTID(); break;
		case BRACHIOCEPHALIC_TRUNK : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.BRACHIOCEPHALIC_TRUNK.getSNOMEDCTID(); break;
		case BRACHIOCEPHALIC_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.BRACHIOCEPHALIC_VEIN.getSNOMEDCTID(); break;
		case BRONCHIAL_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.BRONCHIAL_ARTERY.getSNOMEDCTID(); break;
		case COMMON_CAROTID_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.COMMON_CAROTID_ARTERY.getSNOMEDCTID(); break;
		case COSTOCERVICAL_TRUNK : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.COSTOCERVICAL_TRUNK.getSNOMEDCTID(); break;
		case DESCENDING_AORTA : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.DESCENDING_AORTA.getSNOMEDCTID(); break;
		case DORSAL_SCAPULAR_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.DORSAL_SCAPULAR_ARTERY.getSNOMEDCTID(); break;
		case ESOPHAGEAL_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.ESOPHAGEAL_ARTERY.getSNOMEDCTID(); break;
		case INFERIOR_PHRENIC_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.INFERIOR_PHRENIC_ARTERY.getSNOMEDCTID(); break;
		case INFERIOR_VENA_CAVA : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.INFERIOR_VENA_CAVA.getSNOMEDCTID(); break;
		case INTERCOSTAL_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.INTERCOSTAL_ARTERY.getSNOMEDCTID(); break;
		case INTERNAL_JUGULAR_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.INTERNAL_JUGULAR_VEIN.getSNOMEDCTID(); break;
		case INTERNAL_THORACIC_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.INTERNAL_THORACIC_ARTERY.getSNOMEDCTID(); break;
		case PERICARDIOPHRENIC_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.PERICARDIOPHRENIC_ARTERY.getSNOMEDCTID(); break;
		case PULMONARY_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.PULMONARY_ARTERY.getSNOMEDCTID(); break;
		case PULMONARY_TRUNK : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.PULMONARY_TRUNK.getSNOMEDCTID(); break;
		case PULMONARY_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.PULMONARY_VEIN.getSNOMEDCTID(); break;
		case SUBCLAVIAN_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.SUBCLAVIAN_ARTERY.getSNOMEDCTID(); break;
		case SUBCLAVIAN_VEIN : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.SUBCLAVIAN_VEIN.getSNOMEDCTID(); break;
		case SUPERIOR_PHRENIC_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.SUPERIOR_PHRENIC_ARTERY.getSNOMEDCTID(); break;
		case SUPERIOR_VENA_CAVA : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.SUPERIOR_VENA_CAVA.getSNOMEDCTID(); break;
		case THYROCERVICAL_TRUNK : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.THYROCERVICAL_TRUNK.getSNOMEDCTID(); break;
		case VERTEBRAL_ARTERY : this.strSNOMEDCTID =EnumAnatomicSNOMEDMap.VERTEBRAL_ARTERY.getSNOMEDCTID(); break;
		}
	}

	/**
	 * Sets the value for VascularAnatomy
	 * @param enumValue This Enum value can be one of the following enums - EnumCM_VascularAnatomy,
	 * or EnumCM_CathComplications.
	 */
	public void setVascularAnatomy(Enum enumValue)
	{
		if (enumValue instanceof EnumCM_VascularAnatomy) 
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_VascularAnatomy new_enumVascularAnatomy = (EnumCM_VascularAnatomy)enumValue;
			
			this.strCodeMeaning = new_enumVascularAnatomy.getValue();
			if(strCodeMeaning.equalsIgnoreCase(EnumCM_VascularAnatomy.AORTIC_KNOB.getValue())
					|| strCodeMeaning.equalsIgnoreCase(EnumCM_VascularAnatomy.ARCH_OF_THE_AZYGOS_VEIN.getValue()))
				this.strCodingSchemeDesignator = EnumCodingSchemeDesignator.DCM.getValue();
			else
			this.strCodingSchemeDesignator = EnumCodingSchemeDesignator.SRT.getValue();
			
			setCodeValue(new_enumVascularAnatomy);
			/**
			 * set SNOMED-CT ID
			 */
			setSNOMEDCTID(new_enumVascularAnatomy);
		}
		else
		{
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objCoronaryArteriesCID3015)
	this.objCoronaryArteriesCID3015 = new CoronaryArteries_CID3015();
			this.objCoronaryArteriesCID3015.setCoronaryArteryOrSegment(enumValue);

			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			if(objCoronaryArteriesCID3015 != null)
			{
				this.strCodeMeaning = objCoronaryArteriesCID3015.getCodeMeaning();
				this.strCodeValue = objCoronaryArteriesCID3015.getCodeValue();
				this.strCodingSchemeDesignator = objCoronaryArteriesCID3015.getCodingSchemeDesignator();
				this.strCodingSchemeVersion =  objCoronaryArteriesCID3015.getCodingSchemeVersion();
				this.strSNOMEDCTID = objCoronaryArteriesCID3015.getSNOMEDCTID();
			}
		}
	}

	/**
	 * Retrieves the value for SNOMED-CT ID.
	 * @return String value for SNOMED-CT ID.
	 */
	public String getSNOMEDCTID() 
	{
		return strSNOMEDCTID;
	}
}
