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


import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_ArterialSourceLocations;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_AtrialSourceLocations;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_GradientSourceLocations;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VenousSourceLocations;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_VentricularSourceLocations;
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 CardiovascularAnatomicLocations - CID3630
 */
public class CardiovascularAnatomicLocations_CID3630  
{
	
	/**
	 * 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;
	
	/**
	 * Object of ArterialSourceLocations_CID3606
	 */
	private ArterialSourceLocations_CID3606 objArterialSourceLocations_CID3606;
	
	/**
	 * Object of VenousSourceLocations_CID3607
	 */
	private VenousSourceLocations_CID3607 objVenousSourceLocations_CID3607;
	
	/**
	 * Object of AtrialSourceLocations_CID3608
	 */
	private AtrialSourceLocations_CID3608 objAtrialSourceLocations_CID3608;
	
	/**
	 * Object of VentricularSourceLocations_CID3609
	 */
	private VentricularSourceLocations_CID3609 objVentricularSourceLocations_CID3609;
	
	/**
	 * Object of GradientSourceLocations_CID3610
	 */
	private GradientSourceLocations_CID3610 objGradientSourceLocations_CID3610;
	/**
	 * The SNOMED CT ID for template.
	 */
	private String strSNOMEDCTID = null;
	/**
	 * 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;
	}

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

	}
	/**
	 * Retrieves the value for SNOMED-CT ID.
	 * @return String value for SNOMED-CT ID.
	 */
	public String getSNOMEDCTID() 
	{
		return strSNOMEDCTID;
	}
	/**
	 * Sets the value for Cardiovascular Anatomic Locations
	 * @param enumValue This value can be one of the three Enum - EnumCM_ArterialSourceLocations, EnumVenousSourceLocations
	 * EnumCM_AtrialSourceLocations, EnumVentricularSourceLocations,EnumGradientSourceLocations.
	 */
	public void setCardiovascularAnatomicLocations(Enum enumValue)
	{
		if(enumValue instanceof EnumCM_ArterialSourceLocations)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_ArterialSourceLocations new_enumArterialSourceLocations = (EnumCM_ArterialSourceLocations) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objArterialSourceLocations_CID3606)
	this.objArterialSourceLocations_CID3606 = new ArterialSourceLocations_CID3606();
			this.objArterialSourceLocations_CID3606.setArterialSourceLocations(new_enumArterialSourceLocations);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objArterialSourceLocations_CID3606.getCodeMeaning();
			this.strCodeValue = objArterialSourceLocations_CID3606.getCodeValue();
			this.strCodingSchemeDesignator = objArterialSourceLocations_CID3606.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objArterialSourceLocations_CID3606.getSNOMEDCTID();
		}
		else if(enumValue instanceof EnumCM_VenousSourceLocations)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_VenousSourceLocations new_enumVenousSourceLocations = (EnumCM_VenousSourceLocations) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objVenousSourceLocations_CID3607)
	this.objVenousSourceLocations_CID3607 = new VenousSourceLocations_CID3607();
			this.objVenousSourceLocations_CID3607.setVenousSourceLocations(new_enumVenousSourceLocations);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objVenousSourceLocations_CID3607.getCodeMeaning();
			this.strCodeValue = objVenousSourceLocations_CID3607.getCodeValue();
			this.strCodingSchemeDesignator = objVenousSourceLocations_CID3607.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objVenousSourceLocations_CID3607.getSNOMEDCTID();
		}
		else if(enumValue instanceof EnumCM_AtrialSourceLocations)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_AtrialSourceLocations new_enumAtrialSourceLocations = (EnumCM_AtrialSourceLocations) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objAtrialSourceLocations_CID3608)
	this.objAtrialSourceLocations_CID3608 = new AtrialSourceLocations_CID3608();
			this.objAtrialSourceLocations_CID3608.setAtrialSourceLocations(new_enumAtrialSourceLocations);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objAtrialSourceLocations_CID3608.getCodeMeaning();
			this.strCodeValue = objAtrialSourceLocations_CID3608.getCodeValue();
			this.strCodingSchemeDesignator = objAtrialSourceLocations_CID3608.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objAtrialSourceLocations_CID3608.getSNOMEDCTID();
		}
		else if(enumValue instanceof EnumCM_VentricularSourceLocations)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_VentricularSourceLocations new_enumVentricularSourceLocations = (EnumCM_VentricularSourceLocations) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objVentricularSourceLocations_CID3609)
	this.objVentricularSourceLocations_CID3609 = new VentricularSourceLocations_CID3609();
			this.objVentricularSourceLocations_CID3609.setVentricularSourceLocations(new_enumVentricularSourceLocations);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objVentricularSourceLocations_CID3609.getCodeMeaning();
			this.strCodeValue = objVentricularSourceLocations_CID3609.getCodeValue();
			this.strCodingSchemeDesignator = objVentricularSourceLocations_CID3609.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objVentricularSourceLocations_CID3609.getSNOMEDCTID();
		}
		else if(enumValue instanceof EnumCM_GradientSourceLocations)
		{
			/**
			 * Casting EnumValue to required Enum.
			 */
			EnumCM_GradientSourceLocations new_enumGradientSourceLocations = (EnumCM_GradientSourceLocations) enumValue;
			
			/**
			 * Creating object of require CID with respect to enum and setting value accordingly.
			 */
			if(null== this.objGradientSourceLocations_CID3610)
	this.objGradientSourceLocations_CID3610 = new GradientSourceLocations_CID3610();
			this.objGradientSourceLocations_CID3610.setGradientSourceLocations(new_enumGradientSourceLocations);
			
			/**
			 * Retrieving attributes and setting it to member variables. 
			 */
			this.strCodeMeaning = objGradientSourceLocations_CID3610.getCodeMeaning();
			this.strCodeValue = objGradientSourceLocations_CID3610.getCodeValue();
			this.strCodingSchemeDesignator = objGradientSourceLocations_CID3610.getCodingSchemeDesignator();
			this.strSNOMEDCTID = objGradientSourceLocations_CID3610.getSNOMEDCTID();
		}
		else
		{
			if(DicomConfig.createInstance().isLoggingOn())
			{
				DicomLogger objDicomLogger = DicomLogger.getLogger();
				objDicomLogger.log(ResourceBundleWrapper.getValue("warning","InvalidEnumeratedValue",new Locale(DicomConfig.createInstance().getLocale())));
			}
		}
	}
}
