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

import cdac.medinfo.sdk.dcm30_04.baselibs.ContentSequenceItem;
import cdac.medinfo.sdk.dcm30_04.templates.cid.ChestFindingOrFeatureModifier_CID6102;
import cdac.medinfo.sdk.dcm30_04.srtree.SRTree;
import cdac.medinfo.sdk.dcm30_04.templates.cid.BaselineCategory_CID6145;
import cdac.medinfo.sdk.dcm30_04.templates.cid.ChestComponentCategories_CID6100;
import cdac.medinfo.sdk.dcm30_04.templates.cid.ChestFindingOrFeature_CID6101;
import cdac.medinfo.sdk.dcm30_04.templates.cid.IntendedUseOfCADOutput_CID6034;
import cdac.medinfo.sdk.dcm30_04.templates.cid.NonLesionModifiers_CID6139;
import cdac.medinfo.sdk.dcm30_04.templates.cid.OsseousAnatomyModifiers_CID6115;
import cdac.medinfo.sdk.dcm30_04.templates.enums.EnumCodingSchemeDesignator;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_BaselineCategory;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_ChestCADCompositeFeatureTemplate;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_ChestComponentCategories;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_ChestFindingOrFeature;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_IntendedUseOfCADOutput;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_NonLesionModifiers;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cm.EnumCM_OsseousAnatomyModifiers;
import cdac.medinfo.sdk.dcm30_04.templates.enums.cv.EnumCV_ChestCADCompositeFeatureTemplate;
import cdac.medinfo.sdk.dcm30_04.templates.generaltemplates.Template;
import cdac.medinfo.sdk.dcm30_04.templates.mammographycadsriodtemplates.CADAlgorithmIdentificationTemplate_TID4019;
import cdac.medinfo.sdk.dcm30_04.templates.mammographycadsriodtemplates.CADObservationContextTemplate_TID4022;

/**
 * This class represents ChestCADCompositeFeature - TID4102
 */
public class ChestCADCompositeFeatureTemplate_TID4102 extends Template {

	/**
	 * Object of TrackingIdentifier_TID4108
	 */
	private TrackingIdentifier_TID4108 objTrackingIdentifier_TID4108;
	/**
	 * Object of CADObservationContextTemplate_TID4022
	 */
	private CADObservationContextTemplate_TID4022 objCADObservationContextTemplate_TID4022;
	/**
	 * Object of BaselineCategory_CID6145
	 */
	private BaselineCategory_CID6145 objBaselineCategoryCID6145;
	/**
	 * Object of IntendedUseOfCADOutput_CID6034
	 */
	private IntendedUseOfCADOutput_CID6034 objIntendedUseOfCADOutputCID6034;
	/**
	 * Object of OsseousAnatomyModifiers_CID6115
	 */
	private OsseousAnatomyModifiers_CID6115 objOsseousAnatomyModifiers_CID6115;
	/**
	 * Object of CADAlgorithmIdentificationTemplate_TID4019
	 */
	private CADAlgorithmIdentificationTemplate_TID4019 objCADAlgorithmIdentificationTemplate_TID4019;
	/**
	 * Object of ChestCADCompositeFeatureBodyTemplate_TID4103
	 */
	private ChestCADCompositeFeatureBodyTemplate_TID4103 objChestCADCompositeFeatureBodyTemplate_TID4103;
	/**
	 * Object of NonLesionModifiers_CID6139
	 */
	private NonLesionModifiers_CID6139 objNonLesionModifiersCID6139;
	/**
	 * Object of ChestCADSingleImageFindingTemplate_TID4104
	 */
	private ChestCADSingleImageFindingTemplate_TID4104 objChestCADSingleImageFindingTemplate_TID4104;
	/**
	 * Object of ChestComponentCategories_CID6100
	 */
	private ChestComponentCategories_CID6100 objComponentCategoriesCID6100;
	/**
	 * Object of ChestCADCompositeFeatureTemplate_TID4102
	 */
	private ChestCADCompositeFeatureTemplate_TID4102 objChestCADCompositeFeatureTemplate_TID4102;
	private ChestFindingOrFeature_CID6101 objChestFindingOrFeature_CID6101;
	private ChestFindingOrFeatureModifier_CID6102 objChestFindingOrFeatureModifier_CID6102;
	/**
	 * @return objChestCADCompositeFeatureTemplate_TID4102 Object of ChestCADCompositeFeatureTemplate_TID4102 
	 */
	public ChestCADCompositeFeatureTemplate_TID4102 getChestCADCompositeFeatureTemplate() 
	{
		if(null == this.objChestCADCompositeFeatureTemplate_TID4102)
			this.objChestCADCompositeFeatureTemplate_TID4102 = new ChestCADCompositeFeatureTemplate_TID4102(getSRTree());
		return this.objChestCADCompositeFeatureTemplate_TID4102;
	}
	
	/**
	 * @return objChestCADSingleImageFindingTemplate_TID4104 Object of ChestCADSingleImageFindingTemplate_TID4104 
	 */
	public ChestCADSingleImageFindingTemplate_TID4104 getChestCADSingleImageFindingTemplate() 
	{
		if(null == this.objChestCADSingleImageFindingTemplate_TID4104)
			this.objChestCADSingleImageFindingTemplate_TID4104 = new ChestCADSingleImageFindingTemplate_TID4104(getSRTree());
		return this.objChestCADSingleImageFindingTemplate_TID4104;
	}
	
	/**
	 * @return objCADAlgorithmIdentificationTemplate_TID4019 Object of CADAlgorithmIdentificationTemplate_TID4019 
	 */
	public CADAlgorithmIdentificationTemplate_TID4019 getCADAlgorithmIdentificationTemplate() 
	{
		if(null == this.objCADAlgorithmIdentificationTemplate_TID4019)
			this.objCADAlgorithmIdentificationTemplate_TID4019 = new CADAlgorithmIdentificationTemplate_TID4019(getSRTree());
		return this.objCADAlgorithmIdentificationTemplate_TID4019;
	}
	
	/**
	 * @return objChestCADCompositeFeatureBodyTemplate_TID4103 Object of ChestCADCompositeFeatureBodyTemplate_TID4103 
	 */
	public ChestCADCompositeFeatureBodyTemplate_TID4103 getChestCADCompositeFeatureBodyTemplate() 
	{
		if(null == this.objChestCADCompositeFeatureBodyTemplate_TID4103)
			this.objChestCADCompositeFeatureBodyTemplate_TID4103 = new ChestCADCompositeFeatureBodyTemplate_TID4103(getSRTree());
		return this.objChestCADCompositeFeatureBodyTemplate_TID4103;
	}
	/**
	 * @return objCADObservationContextTemplate_TID4022 Object of CADObservationContextTemplate_TID4022 
	 */
	public CADObservationContextTemplate_TID4022 getCADObservationContextTemplate() 
	{
		if(null == this.objCADObservationContextTemplate_TID4022)
			this.objCADObservationContextTemplate_TID4022 = new CADObservationContextTemplate_TID4022(getSRTree());
		return this.objCADObservationContextTemplate_TID4022;
	}
	/**
	 * @return objCADObservationContextTemplate_TID4022 Object of CADObservationContextTemplate_TID4022 
	 */
	public TrackingIdentifier_TID4108 getTrackingIdentifier() 
	{
		if(null == this.objTrackingIdentifier_TID4108)
			this.objTrackingIdentifier_TID4108 = new TrackingIdentifier_TID4108(getSRTree());
		return this.objTrackingIdentifier_TID4108;
	}
	/**
	 * Instantiates hestCADCompositeFeatureTemplate_TID4102 Template.
	 * @param objTree Object of SRTree.
	 */
	public ChestCADCompositeFeatureTemplate_TID4102(SRTree objTree) {
		super(objTree);
		
	}
	/**
	 * Sets value for Summary of Detections.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumChestFindingOrFeature Enumerated value for ChestFindingOrFeature
	 */
	public void setCompositeFeature(int[] arrPosition, EnumCM_ChestFindingOrFeature enumChestFindingOrFeature)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.COMPOSITE_FEATURE.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.COMPOSITE_FEATURE_111015.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 * Setting value for Quality Assessment
		 */
		if(null== this.objChestFindingOrFeature_CID6101)
			this.objChestFindingOrFeature_CID6101 = new ChestFindingOrFeature_CID6101();
		this.objChestFindingOrFeature_CID6101.setChestFindingOrFeature(enumChestFindingOrFeature);

		String strCM = objChestFindingOrFeature_CID6101.getCodeMeaning();
		String strCV = objChestFindingOrFeature_CID6101.getCodeValue();
		String strCSD = objChestFindingOrFeature_CID6101.getCodingSchemeDesignator();

		/**
		 * 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, strCSDesg, strCV, strCSD, "", strCM);
		getSRTree().addChild(objContentSequenceItem);
	} 
	/**
	 * Sets value for Single Image Finding Modifier.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumValue This value can be one of the three Enum - EnumCM_AbnormalLinesFindingOrFeature, EnumAbnormalOpacityFindingOrFeature
	 * EnumCM_AbnormalLucencyFindingOrFeature, EnumAbnormalTextureFindingOrFeature,EnumChestNonLesionObjectType,EnumCM_RadiographicAnatomyFindingOrFeature,
	 * EnumCM_LungAnatomyFindingOrFeature, EnumCM_BronchovascularAnatomyFindingOrFeature, EnumCM_PleuraAnatomyFindingOrFeature,EnumCM_MediastinumAnatomyFindingOrFeature,
	 * EnumCM_OsseousAnatomyFindingOrFeature, EnumCM_MuscularAnatomy,EnumCM_VascularAnatomy,EnumCM_CoronaryArteries,EnumCM_CoronaryArterySegments.
	 */
	public void setCompositeFeatureModifier(int[] arrPosition, Enum enumValue)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.COMPOSITE_FEATURE_MODIFIER.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.COMPOSITE_FEATURE_MODIFIER_112023.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 * Setting value for Quality Assessment
		 */
		if(null== this.objChestFindingOrFeatureModifier_CID6102)
			this.objChestFindingOrFeatureModifier_CID6102 = new ChestFindingOrFeatureModifier_CID6102();
		this.objChestFindingOrFeatureModifier_CID6102.setChestFindingOrFeatureModifier(enumValue);

		String strCM = objChestFindingOrFeatureModifier_CID6102.getCodeMeaning();
		String strCV = objChestFindingOrFeatureModifier_CID6102.getCodeValue();
		String strCSD = objChestFindingOrFeatureModifier_CID6102.getCodingSchemeDesignator();
		String strSNMDCTID = objChestFindingOrFeatureModifier_CID6102.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, strCSDesg, strCV, strCSD, "", strCM,strSNMDCTID);
		getSRTree().addChild(objContentSequenceItem);
	} 
	/**
	 * Sets the value for Anatomic Identifier
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param strAnatomicIdentifier String value for Anatomic Identifier.
	 */
	public void setAnatomicIdentifier(int[] arrPosition, String strAnatomicIdentifier)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.ANATOMIC_IDENTIFIER.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.ANATOMIC_IDENTIFIER_112025.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, strAnatomicIdentifier);
		getSRTree().addChild(objContentSequenceItem);
	}
	/**
	 * Sets value for Associated Chest Component.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumChestComponentCategories Enumerated value for ChestComponentCategories
	 */
	public void setAssociatedChestComponent(int[] arrPosition, EnumCM_ChestComponentCategories enumChestComponentCategories)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.ASSOCIATED_CHEST_COMPONENT.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.ASSOCIATED_CHEST_COMPONENT_112003.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 * Setting value for Assessment Category
		 */
		if(null== this.objComponentCategoriesCID6100)
			this.objComponentCategoriesCID6100 = new ChestComponentCategories_CID6100();
		this.objComponentCategoriesCID6100.setChestComponentCategories(enumChestComponentCategories);

		String strCM = objComponentCategoriesCID6100.getCodeMeaning();
		String strCV = objComponentCategoriesCID6100.getCodeValue();
		String strCSD = objComponentCategoriesCID6100.getCodingSchemeDesignator();
		String strSNMDCTID = objComponentCategoriesCID6100.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, strCSDesg, strCV, strCSD, "", strCM,strSNMDCTID);
		getSRTree().addChild(objContentSequenceItem);
	}

	public void setNonlesionModifier(int[] arrPosition, EnumCM_NonLesionModifiers enumNonLesionModifiers)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.NONLESION_MODIFIER.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.NONLESION_MODIFIER_112037.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		
		/**
		 * Setting value for Assessment Category
		 */
		if(null== this.objNonLesionModifiersCID6139)
			this.objNonLesionModifiersCID6139 = new NonLesionModifiers_CID6139();
		this.objNonLesionModifiersCID6139.setNonLesionModifiers(enumNonLesionModifiers);

		String strCM = objNonLesionModifiersCID6139.getCodeMeaning();
		String strCV = objNonLesionModifiersCID6139.getCodeValue();
		String strCSD = objNonLesionModifiersCID6139.getCodingSchemeDesignator();
		String strSNMD =objNonLesionModifiersCID6139.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, strCSDesg, strCV, strCSD, "", strCM,strSNMD);
		getSRTree().addChild(objContentSequenceItem);
	}
	public void setOsseousModifier(int[] arrPosition, EnumCM_OsseousAnatomyModifiers enumOsseousAnatomyModifiers)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.OSSEOUS_MODIFIER.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.OSSEOUS_MODIFIER_112038.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();
		
		/**
		 * Setting value for Assessment Category
		 */
		if(null== this.objOsseousAnatomyModifiers_CID6115)
			this.objOsseousAnatomyModifiers_CID6115 = new OsseousAnatomyModifiers_CID6115();
		this.objOsseousAnatomyModifiers_CID6115.setOsseousAnatomyModifiers(enumOsseousAnatomyModifiers);

		String strCM = objOsseousAnatomyModifiers_CID6115.getCodeMeaning();
		String strCV = objOsseousAnatomyModifiers_CID6115.getCodeValue();
		String strCSD = objOsseousAnatomyModifiers_CID6115.getCodingSchemeDesignator();
		String strSNMD =objOsseousAnatomyModifiers_CID6115.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, strCSDesg, strCV, strCSD, "", strCM,strSNMD);
		getSRTree().addChild(objContentSequenceItem);
	}
	/**
	 * Sets value for Rendering Intent.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumIntendedUseOfCADOutput Enumerated value for IntendedUseOfCADOutput
	 */
	public void setRenderingIntent(int[] arrPosition, EnumCM_IntendedUseOfCADOutput enumIntendedUseOfCADOutput)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.RENDERING_INTENT.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.RENDERING_INTENT_111056.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 * Setting value for Assessment Category
		 */
		if(null== this.objIntendedUseOfCADOutputCID6034)
			this.objIntendedUseOfCADOutputCID6034 = new IntendedUseOfCADOutput_CID6034();
		this.objIntendedUseOfCADOutputCID6034.setIntendedUseOfCADOutput(enumIntendedUseOfCADOutput);

		String strCM = objIntendedUseOfCADOutputCID6034.getCodeMeaning();
		String strCV = objIntendedUseOfCADOutputCID6034.getCodeValue();
		String strCSD = objIntendedUseOfCADOutputCID6034.getCodingSchemeDesignator();

		/**
		 * 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, strCSDesg, strCV, strCSD, "", strCM);
		getSRTree().addChild(objContentSequenceItem);
	}
	/**
	 * Sets value for Baseline Category.
	 * @param arrPosition Identifier which shows the position of the node in the SR Tree.
	 * @param enumBaselineCategory Enumerated value for BaselineCategory
	 */
	public void setBaselineCategory(int[] arrPosition, EnumCM_BaselineCategory enumBaselineCategory)
	{
		/**
		 * Retrieves the corresponding values of CodeMeaning,CodeValue and CodingSchemeDesignator.
		 */
		String strCodeMeaning = EnumCM_ChestCADCompositeFeatureTemplate.BASELINE_CATEGORY.getValue();
		String strCodeValue = EnumCV_ChestCADCompositeFeatureTemplate.BASELINE_CATEGORY_112016.getValue();
		String strCSDesg = EnumCodingSchemeDesignator.DCM.getValue();

		/**
		 * Setting value for Assessment Category
		 */
		if(null== this.objBaselineCategoryCID6145)
			this.objBaselineCategoryCID6145 = new BaselineCategory_CID6145();
		this.objBaselineCategoryCID6145.setBaselineCategory(enumBaselineCategory);

		String strCM = objBaselineCategoryCID6145.getCodeMeaning();
		String strCV = objBaselineCategoryCID6145.getCodeValue();
		String strCSD = objBaselineCategoryCID6145.getCodingSchemeDesignator();
		
		/**
		 * 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, strCSDesg, strCV, strCSD, "", strCM);
		getSRTree().addChild(objContentSequenceItem);
	}
	
}
	
