context: // ===================================================================================================
  //                           _  __     _ _
  //                          | |/ /__ _| | |_ _  _ _ _ __ _
  //                          | ' </ _` | |  _| || | '_/ _` |
  //                          |_|\_\__,_|_|\__|\_,_|_| \__,_|
  //
  // This file is part of the Kaltura Collaborative Media Suite which allows users
  // to do with audio, video, and animation what Wiki platforms allow them to do with
  // text.
  //
  // Copyright (C) 2006-2022  Kaltura Inc.
  //
  // This program is free software: you can redistribute it and/or modify
  // it under the terms of the GNU Affero General Public License as
  // published by the Free Software Foundation, either version 3 of the
  // License, or (at your option) any later version.
  //
  // This program is distributed in the hope that it will be useful,
  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  // GNU Affero General Public License for more details.
  //
  // You should have received a copy of the GNU Affero General Public License
  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
  //
  // @ignore
  // ===================================================================================================
  using System;
  using System.Xml;
  using System.Collections.Generic;
  using Kaltura.Enums;
  using Kaltura.Request;
  using Newtonsoft.Json;
  using Newtonsoft.Json.Linq;
  
  namespace Kaltura.Types
  {
  	public class AdCuePointBaseFilter : CuePointFilter
  	{
  		#region Constants
  		public const string PROTOCOL_TYPE_EQUAL = "protocolTypeEqual";
  		public const string PROTOCOL_TYPE_IN = "protocolTypeIn";
  		public const string TITLE_LIKE = "titleLike";
  		public const string TITLE_MULTI_LIKE_OR = "titleMultiLikeOr";
  		public const string TITLE_MULTI_LIKE_AND = "titleMultiLikeAnd";
  		public const string END_TIME_GREATER_THAN_OR_EQUAL = "endTimeGreaterThanOrEqual";
  		public const string END_TIME_LESS_THAN_OR_EQUAL = "endTimeLessThanOrEqual";
  		public const string DURATION_GREATER_THAN_OR_EQUAL = "durationGreaterThanOrEqual";
  		public const string DURATION_LESS_THAN_OR_EQUAL = "durationLessThanOrEqual";
  		#endregion
  
  		#region Private Fields
  		private AdProtocolType _ProtocolTypeEqual = null;
  		private string _ProtocolTypeIn = null;
  		private string _TitleLike = null;
  		private string _TitleMultiLikeOr = null;
  		private string _TitleMultiLikeAnd = null;
  		private int _EndTimeGreaterThanOrEqual = Int32.MinValue;
  		private int _EndTimeLessThanOrEqual = Int32.MinValue;
  		private int _DurationGreaterThanOrEqual = Int32.MinValue;
  		private int _DurationLessThanOrEqual = Int32.MinValue;
  		#endregion
  
  		#region Properties
  		/// <summary>
  		/// Use ProtocolTypeEqualAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public AdProtocolType ProtocolTypeEqual
  		{
  			get { return _ProtocolTypeEqual; }
  			set 
  			{ 
  				_ProtocolTypeEqual = value;
  				OnPropertyChanged("ProtocolTypeEqual");
  			}
  		}
  		/// <summary>
  		/// Use ProtocolTypeInAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public string ProtocolTypeIn
  		{
  			get { return _ProtocolTypeIn; }
  			set 
  			{ 
  				_ProtocolTypeIn = value;
  				OnPropertyChanged("ProtocolTypeIn");
  			}
  		}
  		/// <summary>
  		/// Use TitleLikeAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public string TitleLike
  		{
  			get { return _TitleLike; }
  			set 
  			{ 
  				_TitleLike = value;
  				OnPropertyChanged("TitleLike");
  			}
  		}
  		/// <summary>
  		/// Use TitleMultiLikeOrAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public string TitleMultiLikeOr
  		{
  			get { return _TitleMultiLikeOr; }
  			set 
  			{ 
  				_TitleMultiLikeOr = value;
  				OnPropertyChanged("TitleMultiLikeOr");
  			}
  		}
  		/// <summary>
  		/// Use TitleMultiLikeAndAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public string TitleMultiLikeAnd
  		{
  			get { return _TitleMultiLikeAnd; }
  			set 
  			{ 
  				_TitleMultiLikeAnd = value;
  				OnPropertyChanged("TitleMultiLikeAnd");
  			}
  		}
  		/// <summary>
  		/// Use EndTimeGreaterThanOrEqualAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public int EndTimeGreaterThanOrEqual
  		{
  			get { return _EndTimeGreaterThanOrEqual; }
  			set 
  			{ 
  				_EndTimeGreaterThanOrEqual = value;
  				OnPropertyChanged("EndTimeGreaterThanOrEqual");
  			}
  		}
  		/// <summary>
  		/// Use EndTimeLessThanOrEqualAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public int EndTimeLessThanOrEqual
  		{
  			get { return _EndTimeLessThanOrEqual; }
  			set 
  			{ 
  				_EndTimeLessThanOrEqual = value;
  				OnPropertyChanged("EndTimeLessThanOrEqual");
  			}
  		}
  		/// <summary>
  		/// Use DurationGreaterThanOrEqualAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public int DurationGreaterThanOrEqual
  		{
  			get { return _DurationGreaterThanOrEqual; }
  			set 
  			{ 
  				_DurationGreaterThanOrEqual = value;
  				OnPropertyChanged("DurationGreaterThanOrEqual");
  			}
  		}
  		/// <summary>
  		/// Use DurationLessThanOrEqualAsDouble property instead
  		/// </summary>
  		[JsonProperty]
  		public int DurationLessThanOrEqual
  		{
  			get { return _DurationLessThanOrEqual; }
  			set 
  			{ 
  				_DurationLessThanOrEqual = value;
  				OnPropertyChanged("DurationLessThanOrEqual");
  			}
  		}
  		#endregion
  
  		#region CTor
  		public AdCuePointBaseFilter()
  		{
  		}
  
  		public AdCuePointBaseFilter(JToken node) : base(node)
  		{
  			if(node["protocolTypeEqual"] != null)
  			{
  				this._ProtocolTypeEqual = (AdProtocolType)StringEnum.Parse(typeof(AdProtocolType), node["protocolTypeEqual"].Value<string>());
  			}
  			if(node["protocolTypeIn"] != null)
  			{
  				this._ProtocolTypeIn = node["protocolTypeIn"].Value<string>();
  			}
  			if(node["titleLike"] != null)
  			{
  
gt: 				this._TitleLike = node["titleLike"].Value<string>();