/*******************************************************************************
 *  Copyright 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 java.util.Locale;

import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_AbdominalArteriesLateral;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_AbdominalArteriesUnilateral;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_AbdominalVeinsLateral;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_AbdominalVeinsUnilateral;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_CoronaryVeins;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_ExtracranialArteries;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_IntracranialCerebralVessels;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_IntracranialCerebralVesselsUnilateral;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_LowerExtremityArteries;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_LowerExtremityVeins;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_PulmonaryVeins;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_RenalVessels;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_UpperExtremityArteries;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_UpperExtremityVeins;
import cdac.medinfo.sdk.dcm30_04.utils.DicomConfig;
import cdac.medinfo.sdk.dcm30_04.utils.DicomLogger;
import cdac.medinfo.sdk.dcm30_04.utils.ResourceBundleWrapper;

/**
 * This class represents VesselSegments - CID12103
 */
public class VesselSegments_CID3827 {

	/**
	 * 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 SNOMED CT ID for template.
	 */
	private String strSNOMEDCTID = null;
	
	/**
	 * Object of ExtracranialArteries_CID12104
	 */
	private ExtracranialArteries_CID12104 objExtracranialArteriesCID12104;
	
	/**
	 * Object of IntracranialCerebralVessels_CID12105
	 */
	private IntracranialCerebralVessels_CID12105 objIntracranialCerebralVesselsCID12105;
	
	/**
	 * Object of IntracranialCerebralVesselsUnilateral_CID12106
	 */
	private IntracranialCerebralVesselsUnilateral_CID12106 objCerebralVesselsUnilateralCID12106;
	
	/**
	 * Object of UpperExtremityArteries_CID12107
	 */
	private UpperExtremityArteries_CID12107 objExtremityArteriesCID12107;
	
	/**
	 * Object of UpperExtremityVeins_CID12108
	 */
	private UpperExtremityVeins_CID12108 objExtremityVeinsCID12108;
	
	/**
	 * Object of LowerExtremityArteries_CID12109
	 */
	private LowerExtremityArteries_CID12109 objExtremityArteriesCID12109;
	
	/**
	 * Object of LowerExtremityVeins_CID12110
	 */
	private LowerExtremityVeins_CID12110 objLowerExtremityVeinsCID12110;
	
	/**
	 * Object of AbdominalArteriesLateral_CID12111
	 */
	private AbdominalArteriesLateral_CID12111 objAbdominalArteriesLateralCID12111;
	
	/**
	 * Object of AbdominalArteriesUnilateral_CID12112
	 */
	private AbdominalArteriesUnilateral_CID12112 objAbdominalArteriesUnilateralCID12112;
	
	/**
	 * Object of AbdominalVeinsLateral_CID12113
	 */
	private AbdominalVeinsLateral_CID12113 objAbdominalVeinsLateralCID12113;
	
	/**
	 * Object of AbdominalVeinsUnilateral_CID12114
	 */
	private AbdominalVeinsUnilateral_CID12114 objAbdominalVeinsUnilateralCID12114;
	
	/**
	 * Object of RenalVessels_CID12115
	 */
	private RenalVessels_CID12115 objRenalVesselsCID12115;
	
	/**
	 * Object of RenalVessels_CID12115
	 */
	private CoronaryVeins_CID3839 objCoronaryVeinsCID3839;
	
	/**
	 * Object of RenalVessels_CID12115
	 */
	private PulmonaryVeins_CID3840 objPulmonaryVeinsCID3840;
	
	/**
	 * 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 SNOMED-CT ID.
	 * @return String value for SNOMED-CT ID.
	 */
	public String getSNOMEDCTID() 
	{
		return strSNOMEDCTID;
	}
	
	/**
	 * Instantiates a new VesselSegments_CID3827 Template 
	 */
	public VesselSegments_CID3827()
	{

	}

	/**
	 * Sets the value for VesselSegments
	 * @param enumValue This value can be one of the three Enum - EnumCM_ExtracranialArteries, EnumIntracranialCerebralVessels
	 * EnumCM_IntracranialCerebralVesselsUnilateral, EnumCM_UpperExtremityArteries,EnumCM_UpperExtremityVeins,EnumCM_LowerExtremityArteries
	 * EnumCM_LowerExtremityVeins, EnumCM_AbdominalArteriesLateral,EnumCM_AbdominalArteriesUnilateral, EnumCM_AbdominalVeinsLateral,
	 * EnumCM_AbdominalVeinsUnilateral, EnumCM_RenalVessels.
	 */
	public void setVesselSegments(Enum enumValue)
	{
		if(enumValue instanceof EnumCM_ExtracranialArteries)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_ExtracranialArteries new_enumExtracranialArteries = (EnumCM_ExtracranialArteries) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objExtracranialArteriesCID12104)
	this.objExtracranialArteriesCID12104 = new ExtracranialArteries_CID12104();
			this.objExtracranialArteriesCID12104.setExtracranialArteries(new_enumExtracranialArteries);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objExtracranialArteriesCID12104.getCodeMeaning();
			this.strCodeValue = objExtracranialArteriesCID12104.getCodeValue();
			this.strCodingSchemeDesignator = objExtracranialArteriesCID12104.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objExtracranialArteriesCID12104.getSNOMEDCTID();
		}
		else if(enumValue instanceof EnumCM_IntracranialCerebralVessels)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_IntracranialCerebralVessels new_enumIntracranialCerebralVessels = (EnumCM_IntracranialCerebralVessels) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objIntracranialCerebralVesselsCID12105)
	this.objIntracranialCerebralVesselsCID12105 = new IntracranialCerebralVessels_CID12105();
			this.objIntracranialCerebralVesselsCID12105.setIntracranialCerebralVessels(new_enumIntracranialCerebralVessels);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objIntracranialCerebralVesselsCID12105.getCodeMeaning();
			this.strCodeValue = objIntracranialCerebralVesselsCID12105.getCodeValue();
			this.strCodingSchemeDesignator = objIntracranialCerebralVesselsCID12105.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objIntracranialCerebralVesselsCID12105.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_IntracranialCerebralVesselsUnilateral)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_IntracranialCerebralVesselsUnilateral new_enumIntracranialCerebralVesselsUnilateral = (EnumCM_IntracranialCerebralVesselsUnilateral) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objCerebralVesselsUnilateralCID12106)
	this.objCerebralVesselsUnilateralCID12106 = new IntracranialCerebralVesselsUnilateral_CID12106();
			this.objCerebralVesselsUnilateralCID12106.setIntracranialCerebralVesselsUnilateral(new_enumIntracranialCerebralVesselsUnilateral);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objCerebralVesselsUnilateralCID12106.getCodeMeaning();
			this.strCodeValue = objCerebralVesselsUnilateralCID12106.getCodeValue();
			this.strCodingSchemeDesignator = objCerebralVesselsUnilateralCID12106.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objCerebralVesselsUnilateralCID12106.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_UpperExtremityArteries)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_UpperExtremityArteries new_enumUpperExtremityArteries = (EnumCM_UpperExtremityArteries) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objExtremityArteriesCID12107)
	this.objExtremityArteriesCID12107 = new UpperExtremityArteries_CID12107();
			this.objExtremityArteriesCID12107.setUpperExtremityArteries(new_enumUpperExtremityArteries);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objExtremityArteriesCID12107.getCodeMeaning();
			this.strCodeValue = objExtremityArteriesCID12107.getCodeValue();
			this.strCodingSchemeDesignator = objExtremityArteriesCID12107.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objExtremityArteriesCID12107.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_UpperExtremityVeins)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_UpperExtremityVeins new_enumUpperExtremityVeins = (EnumCM_UpperExtremityVeins) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objExtremityVeinsCID12108)
	this.objExtremityVeinsCID12108 = new UpperExtremityVeins_CID12108();
			this.objExtremityVeinsCID12108.setUpperExtremityVeins(new_enumUpperExtremityVeins);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objExtremityVeinsCID12108.getCodeMeaning();
			this.strCodeValue = objExtremityVeinsCID12108.getCodeValue();
			this.strCodingSchemeDesignator = objExtremityVeinsCID12108.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objExtremityVeinsCID12108.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_LowerExtremityArteries)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_LowerExtremityArteries new_enumLowerExtremityArteries = (EnumCM_LowerExtremityArteries) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objExtremityArteriesCID12109)
	this.objExtremityArteriesCID12109 = new LowerExtremityArteries_CID12109();
			this.objExtremityArteriesCID12109.setLowerExtremityArteries(new_enumLowerExtremityArteries);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objExtremityArteriesCID12109.getCodeMeaning();
			this.strCodeValue = objExtremityArteriesCID12109.getCodeValue();
			this.strCodingSchemeDesignator = objExtremityArteriesCID12109.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objExtremityArteriesCID12109.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_LowerExtremityVeins)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_LowerExtremityVeins new_enumLowerExtremityVeins = (EnumCM_LowerExtremityVeins) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objLowerExtremityVeinsCID12110)
	this.objLowerExtremityVeinsCID12110 = new LowerExtremityVeins_CID12110();
			this.objLowerExtremityVeinsCID12110.setLowerExtremityVeins(new_enumLowerExtremityVeins);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objLowerExtremityVeinsCID12110.getCodeMeaning();
			this.strCodeValue = objLowerExtremityVeinsCID12110.getCodeValue();
			this.strCodingSchemeDesignator = objLowerExtremityVeinsCID12110.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objLowerExtremityVeinsCID12110.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_AbdominalArteriesLateral)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_AbdominalArteriesLateral new_enumAbdominalArteriesLateral = (EnumCM_AbdominalArteriesLateral) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objAbdominalArteriesLateralCID12111)
	this.objAbdominalArteriesLateralCID12111 = new AbdominalArteriesLateral_CID12111();
			this.objAbdominalArteriesLateralCID12111.setAbdominalArteriesLateral(new_enumAbdominalArteriesLateral);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objAbdominalArteriesLateralCID12111.getCodeMeaning();
			this.strCodeValue = objAbdominalArteriesLateralCID12111.getCodeValue();
			this.strCodingSchemeDesignator = objAbdominalArteriesLateralCID12111.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objAbdominalArteriesLateralCID12111.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_AbdominalArteriesUnilateral)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_AbdominalArteriesUnilateral new_enumAbdominalArteriesUnilateral = (EnumCM_AbdominalArteriesUnilateral) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objAbdominalArteriesUnilateralCID12112)
	this.objAbdominalArteriesUnilateralCID12112 = new AbdominalArteriesUnilateral_CID12112();
			this.objAbdominalArteriesUnilateralCID12112.setAbdominalArteriesUnilateral(new_enumAbdominalArteriesUnilateral);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objAbdominalArteriesUnilateralCID12112.getCodeMeaning();
			this.strCodeValue = objAbdominalArteriesUnilateralCID12112.getCodeValue();
			this.strCodingSchemeDesignator = objAbdominalArteriesUnilateralCID12112.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objAbdominalArteriesUnilateralCID12112.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_AbdominalVeinsLateral)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_AbdominalVeinsLateral new_enumAbdominalVeinsLateral = (EnumCM_AbdominalVeinsLateral) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objAbdominalVeinsLateralCID12113)
	this.objAbdominalVeinsLateralCID12113 = new AbdominalVeinsLateral_CID12113();
			this.objAbdominalVeinsLateralCID12113.setAbdominalVeinsLateral(new_enumAbdominalVeinsLateral);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objAbdominalVeinsLateralCID12113.getCodeMeaning();
			this.strCodeValue = objAbdominalVeinsLateralCID12113.getCodeValue();
			this.strCodingSchemeDesignator = objAbdominalVeinsLateralCID12113.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objAbdominalVeinsLateralCID12113.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_AbdominalVeinsUnilateral)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_AbdominalVeinsUnilateral new_enumAbdominalVeinsUnilateral = (EnumCM_AbdominalVeinsUnilateral) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objAbdominalVeinsUnilateralCID12114)
	this.objAbdominalVeinsUnilateralCID12114 = new AbdominalVeinsUnilateral_CID12114();
			this.objAbdominalVeinsUnilateralCID12114.setAbdominalVeinsUnilateral(new_enumAbdominalVeinsUnilateral);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objAbdominalVeinsUnilateralCID12114.getCodeMeaning();
			this.strCodeValue = objAbdominalVeinsUnilateralCID12114.getCodeValue();
			this.strCodingSchemeDesignator = objAbdominalVeinsUnilateralCID12114.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objAbdominalVeinsUnilateralCID12114.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_RenalVessels)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_RenalVessels new_enumRenalVessels = (EnumCM_RenalVessels) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objRenalVesselsCID12115)
	this.objRenalVesselsCID12115 = new RenalVessels_CID12115();
			this.objRenalVesselsCID12115.setRenalVessels(new_enumRenalVessels);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objRenalVesselsCID12115.getCodeMeaning();
			this.strCodeValue = objRenalVesselsCID12115.getCodeValue();
			this.strCodingSchemeDesignator = objRenalVesselsCID12115.getCodingSchemeDesignator();
			this.strSNOMEDCTID =  objRenalVesselsCID12115.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_CoronaryVeins)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_CoronaryVeins new_enumCoronaryVeins = (EnumCM_CoronaryVeins) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objCoronaryVeinsCID3839)
	this.objCoronaryVeinsCID3839 = new CoronaryVeins_CID3839();
			this.objCoronaryVeinsCID3839.setCoronaryVeins(new_enumCoronaryVeins);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objCoronaryVeinsCID3839.getCodeMeaning();
			this.strCodeValue = objCoronaryVeinsCID3839.getCodeValue();
			this.strCodingSchemeDesignator = objCoronaryVeinsCID3839.getCodingSchemeDesignator();
			this.strSNOMEDCTID =  objCoronaryVeinsCID3839.getSNOMEDCTID();

		}
		else if(enumValue instanceof EnumCM_PulmonaryVeins)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_PulmonaryVeins new_enumPulmonaryVeins = (EnumCM_PulmonaryVeins) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objPulmonaryVeinsCID3840)
	this.objPulmonaryVeinsCID3840 = new PulmonaryVeins_CID3840();
			this.objPulmonaryVeinsCID3840.setPulmonaryVeins(new_enumPulmonaryVeins);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objPulmonaryVeinsCID3840.getCodeMeaning();
			this.strCodeValue = objPulmonaryVeinsCID3840.getCodeValue();
			this.strCodingSchemeDesignator = objPulmonaryVeinsCID3840.getCodingSchemeDesignator();
			this.strSNOMEDCTID =  objPulmonaryVeinsCID3840.getSNOMEDCTID();

		}
		else
		{
			if(DicomConfig.createInstance().isLoggingOn())
			{
				DicomLogger objDicomLogger = DicomLogger.getLogger();
				objDicomLogger.log(ResourceBundleWrapper.getValue("warning","InvalidEnumeratedValue",new Locale(DicomConfig.createInstance().getLocale())));
			}
		}
	}
}
