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

import java.io.File;
import java.net.URL;

/**
 * This class is used for declaring a constants used in Dicom package.
 */
public class DicomConstants
{
	
	/*
	 * These are constants used in Dicom
	 */
	/**
	 * This constant specifies byte array for Evaluation.
	 */
	public final static byte[] EVAL = getEVALArray();
	
	/**
	 * This constant specifies root path of JAR
	 */
	public final static String JAR_ROOT_PATH = getResourceLocation();

	//This string contains the path of support files relative to location of shared jar files

	/**
	 * This constant specifies path string resource properties file 
	 */
	public final static String STR_RESOURCE_PATH = JAR_ROOT_PATH + "../../SupportFiles-J/";

	/**
	 * This constant specifies path of DICOM configuration properties file 
	 */
	public final static String DICOM_CONFIG_FILE = STR_RESOURCE_PATH + "DicomConfig.properties";
	/**
	 * This constant specifies fully qualified name of Data Set. 
	 */
	public final static String DICOM_DATASET_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.commoninterface.IDataSet";

	/**
	 * This constant specifies fully qualified name of TLS SCU Session. 
	 */
	public final static String DICOM_TLSSCUSESSION_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.tlsscu.commons.TLSSCUSession";

	/**
	 * This constant specifies fully qualified name of CStoreSCU. 
	 */
	public final static String DICOM_CSTORESCU_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.cstore.scu.CStoreSCU";


	/**
	 * This constant specifies tag for value representation Application Entity 
	 */
	public static final int DCM_DT_AE = 0x4145;

	/**
	 * This constant specifies tag for value representation Age String
	 */
	public static final int DCM_DT_AS = 0x4153;

	/**
	 * This constant specifies tag for value representation Attribute Tag
	 */
	public static final int DCM_DT_AT = 0x4154;

	/**
	 * This constant specifies tag for value representation Code String
	 */
	public static final int DCM_DT_CS = 0x4353;

	/**
	 * This constant specifies tag for value representation Date
	 */
	public static final int DCM_DT_DA = 0x4441;
	/**
	 * This constant specifies tag for value representation Decimal String
	 */
	public static final int DCM_DT_DS = 0x4453;

	/**
	 * This constant specifies tag for value representation Date Time
	 */
	public static final int DCM_DT_DT = 0x4454;

	/**
	 * This constant specifies tag for value representation Floating Point Single
	 */
	public static final int DCM_DT_FL = 0x464C;

	/**
	 * This constant specifies tag for value representation Floating Point Double
	 */
	public static final int DCM_DT_FD = 0x4644;

	/**
	 * This constant specifies tag for value representation Interger String
	 */
	public static final int DCM_DT_IS = 0x4953;

	/**
	 * This constant specifies tag for value representation Long String
	 */
	public static final int DCM_DT_LO = 0x4C4F;

	/**
	 * This constant specifies tag for value representation Long Text
	 */
	public static final int DCM_DT_LT = 0x4C54;

	/**
	 * This constant specifies tag for value representation Other Byte String
	 */
	public static final int DCM_DT_OB = 0x4F42;

	/**
	 * This constant specifies tag for value representation Other Double String
	 */
	public static final int DCM_DT_OD = 0x4F44;

	/**
	 *This constant specifies tag for value representation Other Float String 
	 */
	public static final int DCM_DT_OF = 0x4F46;

	/**
	 *This constant specifies tag for value representation Other Word String 
	 */
	public static final int DCM_DT_OW = 0x4F57;

	/**
	 *This constant specifies tag for value representation Person Name 
	 */
	public static final int DCM_DT_PN = 0x504E;

	/**
	 * This constant specifies tag for value representation Short String
	 */
	public static final int DCM_DT_SH = 0x5348;
	/**
	 * This constant specifies tag for value representation Signed Long
	 */
	public static final int DCM_DT_SL = 0x534C;

	/**
	 * This constant specifies tag for Sequence 
	 */
	public static final int DCM_DT_SQ = 0x5351;

	/**
	 *This constant specifies tag for value representation Signed Short
	 */
	public static final int DCM_DT_SS = 0x5353;

	/**
	 * This constant specifies tag for value representation Short Text
	 */
	public static final int DCM_DT_ST = 0x5354;

	/**
	 * This constant specifies tag for value representation Time
	 */
	public static final int DCM_DT_TM = 0x544D;
	
	/**
	 * This constant specifies tag for value representation Unique Identifier
	 */
	public static final int DCM_DT_UC = 0x554A;
	/**
	 * This constant specifies tag for value representation Unique Identifier
	 */
	public static final int DCM_DT_UI = 0x5549;

	/**
	 * This constant specifies tag for value representation Unsigned Long 
	 */
	public static final int DCM_DT_UL = 0x554C;

	/**
	 * This constant specifies tag for value representation Unknown
	 */
	public static final int DCM_DT_UN = 0x554E;

	/**
	 * This constant specifies tag for value representation Unsigned Short
	 */
	public static final int DCM_DT_US = 0x5553;

	/**
	 * This constant specifies tag for value representation Unlimited Text
	 */
	public static final int DCM_DT_UR = 0x5557;

	/**
	 * This constant specifies tag for value representation Unlimited Text
	 */
	public static final int DCM_DT_UT = 0x5554;

	/**
	 * This constant specifies tag for value representation Time(for back ward compatibility)
	 */
	public static final int DCM_DT_TM_OLD = 0x544D;
	/**
	 * This constant specifies Maximum length of AE
	 */
	public static final long DCM_AE_MAXLENGTH = 16;
	/**
	 * This constant specifies Maximum length of AS
	 */
	public static final long DCM_AS_MAXLENGTH = 4;
	/**
	 * This constant specifies Maximum length of AT
	 */
	public static final long DCM_AT_MAXLENGTH = 4;
	/**
	 * This constant specifies Maximum length of CS
	 */
	public static final long DCM_CS_MAXLENGTH = 16;
	/**
	 * This constant specifies Maximum length of DA
	 */
	public static final long DCM_DA_MAXLENGTH = 18;
	/**
	 * This constant specifies Maximum length of DS
	 */
	public static final long DCM_DS_MAXLENGTH = 16;
	/**
	 * This constant specifies Maximum length of DT
	 */
	public static final long DCM_DT_MAXLENGTH = 26;
	/**
	 * This constant specifies Maximum length of FD
	 */
	public static final long DCM_FD_MAXLENGTH = 8;
	/**
	 * This constant specifies Maximum length of FL
	 */
	public static final long DCM_FL_MAXLENGTH = 4;
	/**
	 * This constant specifies Maximum length of IS
	 */
	public static final long DCM_IS_MAXLENGTH = 12;
	/**
	 * This constant specifies Maximum length of L0
	 */
	public static final long DCM_LO_MAXLENGTH = 64;
	/**
	 * This constant specifies Maximum length of LT
	 */
	public static final long DCM_LT_MAXLENGTH = 10240;
	/**
	 * This constant specifies Maximum length of PN
	 */
	public static final long DCM_PN_MAXLENGTH = 64;
	/**
	 * This constant specifies Maximum length of SH
	 */
	public static final long DCM_SH_MAXLENGTH = 16;
	/**
	 * This constant specifies Maximum length of SL
	 */
	public static final long DCM_SL_MAXLENGTH = 4;
	/**
	 * This constant specifies Maximum length of SS
	 */
	public static final long DCM_SS_MAXLENGTH = 2;
	/**
	 * This constant specifies Maximum length of ST
	 */
	public static final long DCM_ST_MAXLENGTH = 1024;
	/**
	 * This constant specifies Maximum length of TM
	 */
	public static final long DCM_TM_MAXLENGTH = 16;
	
	/**
	 * This constant specifies Maximum length of UC
	 */
	public static final long DCM_UC_MAXLENGTH = 2147483647;
	
	/**
	 * This constant specifies Maximum length of UI
	 */
	public static final long DCM_UI_MAXLENGTH = 64;
	/**
	 * This constant specifies Maximum length of UL
	 */
	public static final long DCM_UL_MAXLENGTH = 4;
	/**
	 * This constant specifies Maximum length of US
	 */
	public static final long DCM_US_MAXLENGTH = 2;
	
	/**
	 * This constant specifies Maximum length of UR
	 */
	public static final long DCM_UR_MAXLENGTH = 2147483647;

	/**
	 * This constant specifies Maximum length of UT
	 */
	public static final long DCM_UT_MAXLENGTH = 2147483647;

	/**
	 * This constant specifies space character
	 */
	public static final String DCM_SPACE = " ";

	/**
	 *  This constant specifies null character
	 */
	public static final String DCM_NULL = "\0";

	/**
	 * This constant specifies backslash character
	 */
	public static final String DCM_DOUBLE_BACKSLASH = "\\";

	/**
	 * This constant specifies quad backslash character
	 */
	public static final String DCM_QUADRUPLE_BACKSLASH = "\\\\";

	/**
	 * This constant specifies value for Invalid VR Type.
	 */
	public static final String STRING_INVALID_VR = "INVALID VR TYPE";

	/**
	 * This constant specifies undefined value representation
	 */
	public static final int DCM_UNDEFINED_VR = 0xFFFF;

	/**
	 *  This constant represent start of Item
	 */
	public static final int DCM_NESTED_ITEM_DATA_MAJOR_TAG = 0xFFFE;

	/**
	 * This constant represent start of Item
	 */
	public static final int DCM_NESTED_ITEM_DATA_MINOR_TAG = 0xE000;

	/**
	 * This constant represent end of Item
	 */
	public static final int DCM_NESTED_ITEM_DELIMITATION_DATA_MAJOR_TAG = 0xFFFE;

	/**
	 * This constant represent end of Item
	 */
	public static final int DCM_NESTED_ITEM_DELIMITATION_DATA_MINOR_TAG = 0xE00D;	

	/**
	 *  This constant represent end of Sequence 
	 */
	public static final int DCM_SQ_DELIMITATION_DATA_MAJOR_TAG = 0xFFFE;

	/**
	 *  This constant represent end of Sequence 
	 */
	public static final int DCM_SQ_DELIMITATION_DATA_MINOR_TAG = 0xE0DD;

	/**
	 * This constant specifies sequence or item is of undefined length
	 */
	public static final int DCM_UNDEFINED_LENGTH = 0xFFFFFFFF;

	//This section contains integer constants related to stream

	/**
	 * This constant used for representing stream type Input
	 */
	public static final int STREAM_TYPE_INPUT = 6;
	/**
	 * This constant used for represnting stream type Output
	 */
	public static final int STREAM_TYPE_OUTPUT = 7;
	/**
	 *  This constant used for represnting stream type Invalid
	 */
	public static final int STREAM_TYPE_INVALID = 8;
	/*
	 * This are constants for TransferSyntax.
	 */

	/**
	 * This constant represents endianness(bit/byte ordering) Big-endian
	 */
	public static final int DCM_ENDIANNESS_BIG_ENDIAN = 9;

	/**
	 * This constant represents endianness(bit/byte ordering) Little-endian
	 */
	public static final int DCM_ENDIANNESS_LITTLE_ENDIAN = 10;

	/**
	 * This constant specifies TransferSyntax of Value representation is Implicit 
	 */
	public static final int DCM_VR_IMPLICIT = 11;
	/**
	 * This constant specifies TransferSyntax of Value representation is Explicit 
	 */
	public static final int DCM_VR_EXPLICIT = 12;
	/**
	 *  This constant specifies TransferSyntax of Value representation is Invalid
	 */
	public static final int DCM_INVALID_VR = 13;

	//These constants are added for creating DataElement object

	/**
	 * This constant is used for creation of DataElement object
	 */
	public static final int DCM_DE_IMPLICIT =14;

	/**
	 * This constant is used for creation of DataElement object
	 */
	public static final int DCM_DE_EXPLICIT =15;

	/**
	 * This constant specifies presence file header 
	 */
	public static final int DCM_FILE_HEADER_PRESENT =16;
	/**
	 *  This constant specifies absence file header 
	 */
	public static final int DCM_FILE_HEADER_ABSENT = 17;

	/**
	 *  This constant specifies datatype of invalid length
	 */
	public static final int DCM_DT_INVALID_LENGTH = 18;

	/**
	 *  This constant specifies datatype of valid length
	 */
	public static final int DCM_DT_VALID_LENGTH = 19;

	/*
	 * This are constants declared for function status.
	 */
	/**
	 * This constant specifies function status fail
	 */
	public static final int DCM_FUNCTION_STATUS_FAIL = 0;
	/**
	 * This constant specifies function status success
	 */
	public static final int DCM_FUNCTION_STATUS_SUCCESS = 1;

	/**
	 * This constant specifiesmacro is at module level
	 */
	public static final int DCM_MODULE_LEVEL_MACRO = 22;

	/**
	 * This constant specifies macro is at item level
	 */
	public static final int DCM_ITEM_LEVEL_MACRO = 23;

	/*
	 * This is the constant to define no value for non string data types.
	 */

	/**
	 * This constant specifies null value of type short
	 */
	public static final short DCM_NO_VALUE = 0;


	//Constants required for Dicom Exception handlinng and Logging

	/**
	 *  This constant specifies empty string
	 */
	public static final String EMPTY_STRING ="";

	/**
	 *  This constant specifies new line character
	 */
	public static final String NEW_LINE = "\r\n";


	/**
	 * This constant specifies DataDictinary is populated
	 */
	public static final boolean POPULATED = true;

	/**
	 * This constant specifies DataDictinary is not populated
	 */
	public static final boolean NOT_POPULATED = false;

	//Constant added for CT Image Storage IOD and Enhanced CT Image Storage IOD

	/**
	 * This constant specifies SOP class UID for CT IMAGE STORAGE IOD
	 */
	public static final String DCM_CT_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.2";

	/**
	 *This constant specifies SOP class UID for ENHANCED CT IMAGE STORAGE IOD
	 */
	public static final String DCM_ENHANCED_CT_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.2.1";
	//Constants for CR Image Storage and MR Image Storage and NM Image Storage IODs 

	/**
	 * This constant specifies SOP class UID for MR IMAGE STORAGE IOD
	 */
	public static final String DCM_MR_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.4";

	/**
	 *This constant specifies SOP class UID for CR IMAGE STORAGE IOD
	 */
	public static final String DCM_CR_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.1";

	/**
	 * This constant specifies SOP class UID for NM IMAGE STORAGE IOD
	 */
	public static final String DCM_NM_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.20";

	/**
	 * This constant specifies SOP class UID for ULTRASOUND IMAGE STORAGE IOD 
	 */
	public static final String DCM_ULTRASOUND_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.6.1";

	/**
	 *This constant specifies SOP class UID for ULTRASOUND MULTIFRAME IMAGE STORAGE IOD
	 */
	public static final String DCM_ULTRASOUND_MULTIFRAME_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.3.1";

	/**
	 * This constant specifies SOP class UID for X-RAY ANGIOGRAPHIC IMAGE STORAGE IOD
	 */
	public static final String DCM_X_RAY_ANGIOGRAPHIC_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.12.1";

	/**
	 * This constant specifies SOP class UID for SECONDARY CAPTURE IMAGE STORAGE IOD
	 */
	public static final String DCM_SECONDARY_CAPTURE_IMAGE_STORAGE = "1.2.840.10008.5.1.4.1.1.7";

	/**
	 * This constant specifies UID for DEFAULT IMPLICIT VR LITTLE ENDIAN TransferSyntax
	 */
	public static final String TS_DEFAULT_IMPLICIT_VR_LITTLE_ENDIAN = "1.2.840.10008.1.2";

	/**
	 * This constant specifies UID for EXPLICIT VR LITTLE ENDIAN TransferSyntax
	 */
	public static final String TS_EXPLICIT_VR_LITTLE_ENDIAN = "1.2.840.10008.1.2.1";
	
	/**
	 * This constant specifies UID for JPEG 2000 PART 2 MULTI-COMPONENT IMAGE COMPRESSION (LOSSLESS ONLY)
	 */	
	public static final String TS_JPEG_2000_PART2_MULTI_COMPONENT_IMAGECOMPRESSION_LOSSLESS_ONLY = "1.2.840.10008.1.2.4.92";
	/**
	 * This constant specifies UID for DEFLATED EXPLICIT VR LITTLE ENDIAN TransferSyntax
	 */
	public static final String TS_DEFLATED_EXPLICIT_VR_LITTLE_ENDIAN = "1.2.840.10008.1.2.1.99";
	/**
	 *This constant specifies UID for EXPLICIT VR BIG ENDIAN TransferSyntax
	 */
	public static final String TS_EXPLICIT_VR_BIG_ENDIAN = "1.2.840.10008.1.2.2";

	/**
	 * This constant specifies UID for LOSSY JPEG 8 BIT TransferSyntax
	 */
	public static final String TS_LOSSY_JPEG_8_BIT = "1.2.840.10008.1.2.4.50";
	/**
	 * This constant specifies UID for LOSSY JPEG 12 BIT TransferSyntax
	 */
	public static final String TS_LOSSY_JPEG_12_BIT = "1.2.840.10008.1.2.4.51";
	/**
	 * This constant specifies UID for JPEG LOSSLESS NON HIERARCHICAL PROCESS 14 TransferSyntax
	 */
	public static final String TS_JPEG_LOSSLESS_NON_HIERARCHICAL_PROCESS_14 = "1.2.840.10008.1.2.4.57";
	/**
	 * This constant specifies UID for DEFAULT LOSSLESS JPEG TransferSyntax 
	 */
	public static final String TS_DEFAULT_LOSSLESS_JPEG = "1.2.840.10008.1.2.4.70";
	/**
	 * This constant specifies UID for JPEG LS LOSSLESS TransferSyntax
	 */
	public static final String TS_JPEG_LS_LOSSLESS = "1.2.840.10008.1.2.4.80";
	/**
	 * This constant specifies UID for JPEG LS LOSSY NEAR LOSSLESS TransferSyntax
	 */
	public static final String TS_JPEG_LS_LOSSY_NEAR_LOSSLESS = "1.2.840.10008.1.2.4.81";

	/**
	 * This constant specifies UID for JPEG 2000 LOSSLESS ONLY TransferSyntax
	 */
	public static final String TS_JPEG_2000_LOSSLESS_ONLY = "1.2.840.10008.1.2.4.90";

	/**
	 * This constant specifies UID for JPEG 2000 TransferSyntax
	 */
	public static final String TS_JPEG_2000 = "1.2.840.10008.1.2.4.91";
	
	/**
	 * This constant specifies UID for JPEG 2000 PART 2 MULTI-COMPONENT IMAGECOMPRESSION
	 */
	public static final String TS_JPEG_2000_PART2_MULTI_COMPONENT_IMAGECOMPRESSION = "1.2.840.10008.1.2.4.93";
	
	/**
	 * This constant specifies UID for TS_JPIP_REFERENCED
	 */
	public static final String TS_JPIP_REFERENCED = "1.2.840.10008.1.2.4.94";
	
	/**
	 * This constant specifies UID for JPIP REFERENCED DEFLATE
	 */
	public static final String TS_JPIP_REFERENCED_DEFLATE = "1.2.840.10008.1.2.4.95";

	/**
	 * This constant specifies UID for RLE LOSSLESS TransferSyntax
	 */
	public static final String TS_RLE_LOSSLESS = "1.2.840.10008.1.2.5";

	/**
	 * This constant specifies UID for MPEG MAIN PROFILE TransferSyntax
	 */
	public static final String TS_MPEG_MAIN_PROFILE = "1.2.840.10008.1.2.4.100";

	/**
	 * This constant specifies UID for MPEG2 MAIN PROFILE @ HIGH LEVEL
	 */
	public static final String TS_MPEG2_MAIN_PROFILE_HIGH_LEVEL = "1.2.840.10008.1.2.4.101";
	
	/**
	 * This constant specifies UID for MPEG-4 AVC/H.264 HIGH PROFILE / LEVEL 4.1
	 */
	public static final String TS_MPEG_4_AVC_H264_HIGH_PROFILE_LEVEL_4_1 = "1.2.840.10008.1.2.4.102";
	
	/**
	 * This constant specifies UID for MPEG-4 AVC/H.264 BD-COMPATIBLE HIGHPROFILE / LEVEL 4.1
	 */
	public static final String TS_MPEG_4_AVC_H264_BD_COMPATIBLE_HIGHPROFILE_LEVEL_4_1 = "1.2.840.10008.1.2.4.103";
	
	/**
	 * This constant specifies UID for MPEG-4 AVC/H.264 HIGH PROFILE / LEVEL 4.2 FOR 2D VIDEO
	 */
	public static final String TS_MPEG_4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_2D_VIDEO = "1.2.840.10008.1.2.4.104";
	
	/**
	 * This constant specifies UID for MPEG-4 AVC/H.264 HIGH PROFILE / LEVEL 4.2 FOR 3D VIDEO
	 */
	public static final String TS_MPEG_4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_3D_VIDEO = "1.2.840.10008.1.2.4.105";
	
	/**
	 * This constant specifies UID for MPEG-4 AVC/H.264 STEREO HIGH PROFILE /LEVEL 4.2
	 */
	public static final String TS_MPEG_4_AVC_H264_STEREO_HIGH_PROFILE_LEVEL_4_2 = "1.2.840.10008.1.2.4.106";
	
	/**
	 * This constant specifies UID for RFC 2557 MIME ENCAPSULATION
	 */
	public static final String TS_RFC_2557_MIME_ENCAPSULATION = "1.2.840.10008.1.2.6.1";
	
	/**
	 * This constant specifies UID for XML ENCODING
	 */
	public static final String TS_XML_ENCODING = "1.2.840.10008.1.2.6.2";
	
	/**
	 * This contant specifies Media Storage Directory Storage.
	 */
	public static final String DCM_MEDIA_STORAGE_DIRECTORY_STORAGE =  "1.2.840.10008.1.3.10";

	//Constant from DicomNetConstant

	/**
	 * This constant specifies DICOM Application Context Name
	 */
	public static final String DCM_APP_CONTEXT_NAME = "1.2.840.10008.3.1.1.1";

	/**
	 * This constant represent fully qualified name of Data Sink interface.
	 */
	public final static String DATA_SINK_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.dimsecommons.IDataSink";

	/**
	 * This constant represent fully qualified name of Data Source interface.
	 */
	public final static String DATA_SOURCE_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.dimsecommons.IDataSource";

	/**
	 * This constant represent fully qualified name of Data Message.
	 */
	public final static String DICOM_MESSAGE_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.dimsecommons.DicomMessage";

	/**
	 *  This constant represent fully qualified name of N-Event Report Request.
	 */
	public final static String NEVENTREPORT_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.neventreport.commons.NEventReportRQ";

	/**
	 * This constant represent fully qualified name of Data Message.
	 */
	public final static String CLIENT_SESSION_QUALIFIED_NAME = "cdac.medinfo.sdk.dcm30_04.services.scp.commons.ClientSession";

	/**
	 * This constant specifies AE Title Info File path.
	 */
	public final static String DICOM_AE_TITLE_INFO_FILE = STR_RESOURCE_PATH + "AETitleInfo.properties";

	/**
	 * This constant specifies path string resource properties file 
	 */
	public static final String DICOM_CSTORE_STORAGE_PATH = StandardMethods.getTempDirectoryStorage() + "CDAC-SDK"+File.separator+"DCM-J"+File.separator+"DicomDump";

	/** Constant representing absence of data set */
	public final static short DCM_DATASET_NOT_PRESENT = (short)0x0101;

	/** Constant representing the presence of data set */
	public final static short DCM_DATASET_PRESENT = (short)0x0000;

	/** SOP class UID of STUDY_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_STUDY_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.1.2.2.2";

	/** SOP class UID of PATIENT_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_PATIENT_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.1.2.1.2";

	/** SOP class UID of PATIENT_OR_STUDY_ONLY_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_PATIENT_OR_STUDY_ONLY_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.1.2.3.2";

	/** SOP class UID of STUDY_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_STUDY_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.1.2.2.3";

	/** SOP class UID of PATIENT_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_PATIENT_ROOT_QUERY_OR_RETRIVE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.1.2.1.3";

	/** SOP class UID of PATIENT_OR_STUDY_ONLY_QUERY_OR_RETRIVE_INFORMATION_MODEL_MOVE */
	public final static String DCM_PATIENT_OR_STUDY_ONLY_QUERY_OR_RETRIVE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.1.2.3.3";

	/** SOP class UID of Verification SOP Class */
	public final static String DCM_VERIFICATION_SOP_CLASS = "1.2.840.10008.1.1";

	/** SOP class UID of Study Root Query/Retrieve Information Model */
	public final static String DCM_STUDY_ROOT_QUERY_RETRIEVE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.1.2.2.1";

	/** SOP class UID of Patient Root Query/Retrieve Information Model */
	public final static String DCM_PATIENT_ROOT_QUERY_RETRIEVE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.1.2.1.1";

	/** SOP class UID of Patient or Study Root Query/Retrieve Information Model */
	public final static String DCM_PATIENT_OR_STUDY_ROOT_QUERY_RETRIEVE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.1.2.3.1";

	/** SOP class UID of Modality Worklist Information Model - FIND */
	public final static String DCM_MODALITY_WORKLIST_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.31";

	/** SOP class UID of Modality Performed Procedure Step SOP Class */
	public final static String DCM_MODALITY_PERFORMED_PROCEDURE_STEP = "1.2.840.10008.3.1.2.3.3";

	/** SOP class UID of Modality Performed Procedure Step SOP Class */
	public final static String DCM_MODALITY_PERFORMED_PROCEDURE_STEP_RETRIEVE = "1.2.840.10008.3.1.2.3.4";

	/** SOP class UID of Modality Performed Procedure Step SOP Class */
	public final static String DCM_MODALITY_PERFORMED_PROCEDURE_STEP_NOTIFICATION = "1.2.840.10008.3.1.2.3.5";

	/** SOP Class UID of GPPPS*/
	public final static String DCM_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEP = "1.2.840.10008.5.1.4.32.3";

	/** SOP Class UID of GPSPS*/
	public final static String DCM_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP = "1.2.840.10008.5.1.4.32.2";

	/** SOP Class UID of Storage Commitment Push Model */
	public final static String DCM_STORAGE_COMMITMENT_PUSH_MODEL_SOP_CLASS = "1.2.840.10008.1.20.1";

	/** SOP Instance UID of Storage Commitment Push Model */
	public final static String DCM_STORAGE_COMMITMENT_PUSH_MODEL_SOP_INSTANCE = "1.2.840.10008.1.20.1.1";

	/** SOP Class UID of General Purpose Worklist Model */
	public final static String DCM_GENERAL_PURPOSE_WORKLIST_SOP_CLASS = "1.2.840.10008.5.1.4.32.1";

	/** SOP Class UID of Procedure Event Logging  */
	public final static String DCM_PROCEDURE_EVENT_LOGGING_SOP_CLASS = "1.2.840.10008.1.40";

	/** SOP Class UID of Chest CAD SR IOD */
	public final static String DCM_CHEST_CAD_SR = "1.2.840.10008.5.1.4.1.1.88.65";

	/** SOP Class UID of Procedure Event Logging SOP Instance UID */
	public final static String DCM_PROCEDURE_EVENT_LOGGING_SOP_INSTANCE = "1.2.840.10008.1.40.1";

	/** SOP Class UID of Instance Availability Notification Model */
	public final static String DCM_INSTANCE_AVAILABILITY_NOTIFICATION_SOP_CLASS = "1.2.840.10008.5.1.4.33";

	public final static String DCM_PRINT_QUEUE_MANAGEMENT_SOP_INSTANCE = "1.2.840.10008.5.1.1.25";


	/** SOP class UID of General Relevant Patient Information Query - FIND */
	public final static String DCM_GENERAL_RELEVANT_PATIENT_INFORMATION_QUERY_FIND = "1.2.840.10008.5.1.4.37.1";

	/** SOP class UID of Breast Imaging Relevant Patient Information Query - FIND */
	public final static String DCM_BREAST_IMAGING_RELEVANT_PATIENT_INFORMATION_QUERY_FIND = "1.2.840.10008.5.1.4.37.2";

	/** SOP class UID of Cardiac Relevant Patient Information Query - FIND */
	public final static String DCM_CARDIAC_RELEVANT_PATIENT_INFORMATION_QUERY_FIND = "1.2.840.10008.5.1.4.37.3";

	/** SOP Instance UID of Printer SOP Instance */
	public static final String DCM_PRINTER_SOP_INSTANCE = "1.2.840.10008.5.1.1.17";

	/** SOP Instance UID of Product Characteristics Query SOP Instance */
	public static final String DCM_PRODUCT_CHARACTERSTICS_QUERY_SOP_INSTANCE = "1.2.840.10008.5.1.4.41";

	/** SOP Instance UID of Substance Approval Query SOP Instance */
	public static final String DCM_SUBSTANCE_APPROVAL_QUERY_SOP_INSTANCE = "1.2.840.10008.5.1.4.42";

	/** SOP Instance UID of Printer SOP Instance */
	public static final String DCM_PRINTER_CONFIGURATION_RETRIEVAL_SOP_INSTANCE = "1.2.840.10008.5.1.1.17.376";
	
	/** SOP Inastance UID of Color Palette Instance */
	public static final String DCM_COLOR_PALETTE_SOP_INSTANCE = "1.2.840.10008.5.1.4.39.1";
	
	/** SOP Inastance UID of Color Palette Instance */
	public static final String DCM_COLOR_PALETTE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.39.2";
	
	/** SOP Inastance UID of Color Palette Instance */
	public static final String DCM_COLOR_PALETTE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.39.3";
	
	/** SOP Inastance UID of Color Palette Instance */
	public static final String DCM_COLOR_PALETTE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.39.4";
	
	/** SOP Instance UID of Lensometry Measurements Storage */
	public static final String DCM_LESOMETRY_MEASUREMENTS_STORAGE = "1.2.840.10008.5.1.4.1.1.78.1";

	/** SOP Instance UID of Autorefraction Measurements Storage */
	public static final String DCM_AUTOREFRACTION_MEASUREMENTS_STORAGE = "1.2.840.10008.5.1.4.1.1.78.2";

	/** SOP Instance UID of Keratometry Measurements Storage*/
	public static final String DCM_KERAMETRY_MEASUREMENTS_STORAGE = "1.2.840.10008.5.1.4.1.1.78.3";

	/** SOP Instance UID of Subjective Refraction Measurements Storage */
	public static final String DCM_SUBJECTIVE_REFRACTION_MEASUREMENTS_STORAGE = "1.2.840.10008.5.1.4.1.1.78.4";

	/** SOP Instance UID of Visual Acuity Measurements Storage */
	public static final String DCM_VISUAL_ACUITY_MEASUREMENTS_STORAGE = "1.2.840.10008.5.1.4.1.1.78.5";

	/** SOP Class UID of Display System  */
	public final static String DCM_DISPLAY_SYSTEM_SOP_CLASS = "1.2.840.10008.5.1.1.40";

	/** SOP Instance UID of Display System  */
	public final static String DCM_DISPLAY_SYSTEM_SOP_INSTANCE = "1.2.840.10008.5.1.1.40.1";

	/** SOP Instance UID of Hanging Protocol Storage */
	public static final String DCM_HANGING_PROTOCOL_STORAGE = "1.2.840.10008.5.1.4.38.1";

	/** SOP Instance UID of Hanging Protocol Find */
	public static final String DCM_HANGING_PROTOCOL_FIND = "1.2.840.10008.5.1.4.38.2";

	/** SOP Instance UID of Hanging Protocol Get */
	public static final String DCM_HANGING_PROTOCOL_GET = "1.2.840.10008.5.1.4.38.4";

	/** SOP Instance UID of Hanging Protocol Move */
	public static final String DCM_HANGING_PROTOCOL_MOVE = "1.2.840.10008.5.1.4.38.3";

	/** SOP Class UID of Generic Implant Template Storage */
	public final static String DCM_Generic_Implant_Template_Storage_SOP_CLASS = "1.2.840.10008.5.1.4.43.1";

	/** SOP Class UID of Implant Assembly Template Storage */
	public final static String DCM_Implant_Assembly_Template_Storage_SOP_CLASS = "1.2.840.10008.5.1.4.44.1";

	/** SOP Class UID of Implant Template Group Storage */
	public final static String DCM_Implant_Template_Group_Storage_SOP_CLASS = "1.2.840.10008.5.1.4.45.1";

	/** SOP Class UID of Generic Implant Template Information Model - FIND  */
	public final static String DCM_GENERIC_IMPLANT_TEMPLATE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.43.2";

	/** SOP Class UID of Generic Implant Template Information Model - MOVE */
	public final static String DCM_GENERIC_IMPLANT_TEMPLATE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.43.3";

	/** SOP Class UID of Generic Implant Template Information Model - GET  */
	public final static String DCM_GENERIC_IMPLANT_TEMPLATE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.43.4";

	/** SOP Class UID of Implant Assembly Template Information Model - FIND  */
	public final static String DCM_IMPLANT_ASSEMBLY_TEMPLATE_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.44.2";

	/** SOP Class UID of Implant Assembly Template Information Model - MOVE  */
	public final static String DCM_IMPLANT_ASSEMBLY_TEMPLATE_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.44.3";

	/** SOP Class UID of Implant Assembly Template Information Model - GET  */
	public final static String DCM_IMPLANT_ASSEMBLY_TEMPLATE_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.44.4";

	/** SOP Class UID of Implant Template Group Information Model - FIND  */
	public final static String DCM_IMPLANT_TEMPLATE_GROUP_INFORMATION_MODEL_FIND = "1.2.840.10008.5.1.4.45.2";

	/** SOP Class UID of Implant Template Group Information Model - MOVE  */
	public final static String DCM_IMPLANT_TEMPLATE_GROUP_INFORMATION_MODEL_MOVE = "1.2.840.10008.5.1.4.45.3";

	/** SOP Class UID of Implant Template Group Information Model - GET  */
	public final static String DCM_IMPLANT_TEMPLATE_GROUP_INFORMATION_MODEL_GET = "1.2.840.10008.5.1.4.45.4";

	/** SOP Class UID of Composite Instance Retrieve Without Bulk Data - GET  */
	public final static String DCM_COMPOSITE_INSTANCE_RETRIEVE_WITHOUT_BULK_DATA_GET = "1.2.840.10008.5.1.4.1.2.5.3";

	/** SOP Class UID of Composite Instance Root Retrieve - MOVE  */
	public final static String DCM_COMPOSITE_INSTANCE_ROOT_RETRIEVE_MOVE = "1.2.840.10008.5.1.4.1.2.4.2";

	/** SOP Class UID of Composite Instance Root Retrieve - GET  */
	public final static String DCM_COMPOSITE_INSTANCE_ROOT_RETRIEVE_GET = "1.2.840.10008.5.1.4.1.2.4.3";

	/** SOP Class UID of UPS PUSH - CREATE  */
	public final static String DCM_UPS_CREATE = "1.2.840.10008.5.1.4.34.6.1";
	/** SOP Class UID of RT Conventional Machine Verification  */
	public final static String DCM_RT_CONVENTIONAL_MACHINE_VERIFICATION = "1.2.840.10008.5.1.4.34.8";
	/** SOP Class UID of UPS PUSH - CREATE  */
	public final static String DCM_UPS_PULL = "1.2.840.10008.5.1.4.34.6.3";

	/** SOP Class UID of UPS WATCH  */
	public final static String DCM_UPS_WATCH = "1.2.840.10008.5.1.4.34.6.2";

	/** SOP Class UID of UPS EVENT  */
	public final static String DCM_UPS_EVENT = "1.2.840.10008.5.1.4.34.6.4";


	/** SOP Class UID of RT Ion Machine Verification  */
	public final static String DCM_RT_ION_MACHINE_VERIFICATION = "1.2.840.10008.5.1.4.34.9";


	/** Byte value representing reserve byte*/
	public final static byte RESERVE_BYTE = (byte)0;	

	//	This method returns path of the location of shared jar.
	// This method is not used in library now. This needs to be delete in next build
	private static String getResourceLocation()
	{
		String strPath = null;
		URL tempURL = DicomConstants.class.getResource("DicomConstants.class");

		String strvfszip = tempURL.getProtocol();

		if(strvfszip.equalsIgnoreCase("vfszip"))
		{
			strPath = tempURL.getPath().substring(1, tempURL.getPath().length());

			int i = strPath.indexOf("DICOMBase30_04.jar");

			strPath = strPath.substring(0, i);
		}
		else
		{
			//URL contains '!' and path to the class in jar.
			int occur = tempURL.getPath().indexOf("!");
			strPath = tempURL.getPath().substring(0, occur);

			//String contains "file:/" trimming to remove that.
			strPath = strPath.substring(6,strPath.lastIndexOf("/")+1);
		}

		strPath = strPath.replace("%20", " ");

		String OsEnv = System.getProperty("os.name");

		if(OsEnv.toUpperCase().contains("LINUX")||OsEnv.toUpperCase().contains("MAC"))
		{
			strPath = File.separator + strPath;
		}	

		return strPath;
	}
	
	//This method returns the byte array for evaluation .
	private static byte[] getEVALArray()
	{
		return "EVAL".getBytes();
	}
}
