text: #
  # Copyright (c) 2021 Citrix Systems, Inc.
  #
  #   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.
  #
  
  from nssrc.com.citrix.netscaler.nitro.resource.base.base_resource import base_resource
  from nssrc.com.citrix.netscaler.nitro.resource.base.base_resource import base_response
  from nssrc.com.citrix.netscaler.nitro.service.options import options
  from nssrc.com.citrix.netscaler.nitro.exception.nitro_exception import nitro_exception
  
  from nssrc.com.citrix.netscaler.nitro.util.nitro_util import nitro_util
  
  class contentinspectionpolicylabel(base_resource) :
  	""" Configuration for ContentInspection policy label resource. """
  	def __init__(self) :
  		self._labelname = None
  		self._type = None
  		self._comment = None
  		self._newname = None
  		self._numpol = None
  		self._hits = None
  		self._priority = None
  		self._gotopriorityexpression = None
  		self._labeltype = None
  		self._invoke_labelname = None
  		self._flowtype = None
  		self._isdefault = None
  		self.___count = None
  
  	@property
  	def labelname(self) :
  		r"""Name for the contentInspection policy label. Must begin with a letter, number, or the underscore character (_), and must contain only letters, numbers, and the hyphen (-), period (.) hash (#), space ( ), at (@), equals (=), colon (:), and underscore characters. Cannot be changed after the contentInspection policy label is added.
  		The following requirement applies only to the Citrix ADC CLI:
  		If the name includes one or more spaces, enclose the name in double or single quotation marks (for example, "my contentInspection policy label" or 'my contentInspection policy label').
  		"""
  		try :
  			return self._labelname
  		except Exception as e:
  			raise e
  
  	@labelname.setter
  	def labelname(self, labelname) :
  		r"""Name for the contentInspection policy label. Must begin with a letter, number, or the underscore character (_), and must contain only letters, numbers, and the hyphen (-), period (.) hash (#), space ( ), at (@), equals (=), colon (:), and underscore characters. Cannot be changed after the contentInspection policy label is added.
  		The following requirement applies only to the Citrix ADC CLI:
  		If the name includes one or more spaces, enclose the name in double or single quotation marks (for example, "my contentInspection policy label" or 'my contentInspection policy label').
  		"""
  		try :
  			self._labelname = labelname
  		except Exception as e:
  			raise e
  
  	@property
  	def type(self) :
  		r"""Type of packets (request or response packets) against which to match the policies bound to this policy label.<br/>Possible values = REQ, RES.
  		"""
  		try :
  			return self._type
  		except Exception as e:
  			raise e
  
  	@type.setter
  	def type(self, type) :
  		r"""Type of packets (request or response packets) against which to match the policies bound to this policy label.<br/>Possible values = REQ, RES
  		"""
  		try :
  			self._type = type
  		except Exception as e:
  			raise e
  
  	@property
  	def comment(self) :
  		r"""Any comments to preserve information about this contentInspection policy label.
  		"""
  		try :
  			return self._comment
  		except Exception as e:
  			raise e
  
  	@comment.setter
  	def comment(self, comment) :
  		r"""Any comments to preserve information about this contentInspection policy label.
  		"""
  		try :
  			self._comment = comment
  		except Exception as e:
  			raise e
  
  	@property
  	def newname(self) :
  		r"""New name for the contentInspection policy label.
  		Must begin with a letter, number, or the underscore character (_), and must contain only letters, numbers, and the hyphen (-), period (.) hash (#), space ( ), at (@), equals (=), colon (:), and underscore characters.
  		The following requirement applies only to the Citrix ADC CLI:
  		If the name includes one or more spaces, enclose the name in double or single quotation marks (for example, "my policy label" or 'my policy label').<br/>Minimum length =  1.
  		"""
  		try :
  			return self._newname
  		except Exception as e:
  			raise e
  
  	@newname.setter
  	def newname(self, newname) :
  		r"""New name for the contentInspection policy label.
  		Must begin with a letter, number, or the underscore character (_), and must contain only letters, numbers, and the hyphen (-), period (.) hash (#), space ( ), at (@), equals (=), colon (:), and underscore characters.
  		The following requirement applies only to the Citrix ADC CLI:
  		If the name includes one or more spaces, enclose the name in double or single quotation marks (for example, "my policy label" or 'my policy label').<br/>Minimum length =  1
  		"""
  		try :
  			self._newname = newname
  		except Exception as e:
  			raise e
  
  	@property
  	def numpol(self) :
  		r"""Number of polices bound to label.
  		"""
  		try :
  			return self._numpol
  		except Exception as e:
  			raise e
  
  	@property
  	def hits(self) :
  		r"""Number of times policy label was invoked.
  		"""
  		try :
  			return self._hits
  		except Exception as e:
  			raise e
  
  	@property
  	def priority(self) :
  		r"""Specifies the priority of the policy.
  		"""
  		try :
  			return self._priority
  		except Exception as e:
  			raise e
  
  	@property
  	def gotopriorityexpression(self) :
  		r"""Expression specifying the priority of the next policy which will get evaluated if the current policy rule evaluates to TRUE.
  		"""
  		try :
  			return self._gotopriorityexpression
  		except Exception as e:
  			raise e
  
  	@property
  	def labeltype(self) :
  		r"""Type of invocation. Available settings function as follows:
  		* reqvserver - Forward the request to the specified request virtual server.
  		* resvserver - Forward the response to the specified response virtual server.
  		* policylabel - Invoke the specified policy label.<br/>Possible values = reqvserver, resvserver, policylabel.
  		"""
  		try :
  			return self._labeltype
  		except Exception as e:
  			raise e
  
  	@property
  	def invoke_labelname(self) :
  		r"""* If labelType is policylabel, name of the policy label to invoke.
  		* If labelType is reqvserver or resvserver, name of the virtual server to which to forward the request or response.
  		"""
  		try :
  			return self._invoke_labelname
  		except Exception as e:
  			raise e
  
  	@property
  	def flowtype(self) :
  		r"""Flowtype of the bound contentInspection policy.
  		"""
  		try :
  			return self._flowtype
  		except Exception as e:
  			raise e
  
  	@property
  	def isdefault(self) :
  		r"""A value of true is returned if it is a default cipolicylabel.
  		"""
  		try :
  			return self._isdefault
  		except Exception as e:
  			raise e
  
  	def _get_nitro_response(self, service, response) :
  		r""" converts nitro response into object and returns the object array in case of get request.
  		"""
  		try :
  			result = service.payload_formatter.string_to_resource(contentinspectionpolicylabel_response, response, self.__class__.__name__)
  			if(result.errorcode != 0) :
  				if (result.errorcode == 444) :
  					service.clear_session(self)
  				if result.severity :
  					if (result.severity == "ERROR") :
  						raise nitro_exception(result.errorcode, str(result.message), str(result.severity))
  				else :
  					raise nitro_exception(result.errorcode, str(result.message), str(result.severity))
  			return result.contentinspectionpolicylabel
  		except Exception as e :
  			raise e
  
  	def _get_object_name(self) :
  		r""" Returns the value of object identifier argument
  		"""
  		try :
  			if self.labelname is not None :
  				return str(self.labelname)
  			return None
  		except Exception as e :
  			raise e
  
  
  
  	@classmethod
  	def filter_add_parameters(cls, resource) :
  		r""" Use this function to create a resource with only add operation specific parameters.
  		"""
  		addresource = contentinspectionpolicylabel()
  		addresource.labelname = resource.labelname
  		addresource.type = resource.type
  		addresource.comment = resource.comment
  		return addresource
  
  	@classmethod
  	def add(cls, client, resource) :
  		r""" Use this API to add contentinspectionpolicylabel.
  		"""
  		try :
  			if type(resource) is not list :
  				addresource = cls.filter_add_parameters(resource)
  				return addresource.add_resource(client)
  			else :
  				if (resource and len(resource) > 0) :
  					addresources = [ contentinspectionpolicylabel() for _ in range(len(resource))]
  					for i in range(len(resource)) :
  						addresources[i] = cls.filter_add_parameters(resource[i])
  				result = cls.add_bulk_request(client, addresources)
  			return result
  		except Exception as e :
  			raise e
  
  	@classmethod
  	def filter_delete_parameters(cls, resource) :
  		r""" Use this function to create a resource with only delete operation specific parameters.
  		"""
  		deleteresource = contentinspectionpolicylabel()
  		deleteresource.labelname = resource.labelname
  		return deleteresource
  
  	@classmethod
  	def delete(cls, client, resource) :
  		r""" Use this API to delete contentinspectionpolicylabel.
  		"""
  		try :
  			if type(resource) is not list :
  				deleteresource = contentinspectionpolicylabel()
  				if type(resource) !=  type(deleteresource):
  					deleteresource.labelname = resource
  				else :
  					deleteresource = cls.filter_delete_parameters(resource)
  				return deleteresource.delete_resource(client)
  			else :
  				if type(resource[0]) != cls :
  					if (resource and len(resource) > 0) :
  						deleteresources = [ contentinspectionpolicylabel() for _ in range(len(resource))]
  						for i in range(len(resource)) :
  							deleteresources[i].labelname = resource[i]
  				else :
  					if (resource and len(resource) > 0) :
  						deleteresources = [ contentinspectionpolicylabel() for _ in range(len(resource))]
  						for i in range(len(resource)) :
  							deleteresources[i] = cls.filter_delete_parameters(resource)
  				result = cls.delete_bulk_request(client, deleteresources)
  			return result
  		except Exception as e :
  			raise e
  
  	@classmethod
  	def rename(cls, client, resource, new_labelname) :
  		r""" Use this API to rename a contentinspectionpolicylabel resource.
  		"""
  		try :
  			renameresource = contentinspectionpolicylabel()
  			if type(resource) == cls :
  				renameresource.labelname = resource.labelname
  			else :
  				renameresource.labelname = resource
  			return renameresource.rename_resource(client,new_labelname)
  		except Exception as e :
  			raise e
  
  	@classmethod
  	def get(cls, client, name="", option_="") :
  		r""" Use this API to fetch all the contentinspectionpolicylabel resources that are configured on netscaler.
  		"""
  		try :
  			if not name :
  				obj = contentinspectionpolicylabel()
  				response = obj.get_resources(client, option_)
  			else :
  				if type(name) is not list :
  					if type(name) == cls :
  						raise Exception('Invalid parameter name:{0}'.format(type(name)))
  					obj = contentinspectionpolicylabel()
  					obj.labelname = name
  					response = obj.get_resource(client, option_)
  				else :
  					if name and len(name) > 0 :
  						if type(name[0]) == cls :
  							raise Exception('Invalid parameter name:{0}'.format(type(name[0])))
  						response = [contentinspectionpolicylabel() for _ in range(len(name))]
  						obj = [contentinspectionpolicylabel() for _ in range(len(name))]
  						for i in range(len(name)) :
  							obj[i] = contentinspectionpolicylabel()
  							obj[i].labelname = name[i]
  							response[i] = obj[i].get_resource(client, option_)
  			return response
  		except Exception as e :
  			raise e
  
  
  	@classmethod
  	def get_filtered(cls, client, filter_) :
  		r""" Use this API to fetch filtered set of contentinspectionpolicylabel resources.
  		filter string should be in JSON format.eg: "port:80,servicetype:HTTP".
  		"""
  		try :
  			obj = contentinspectionpolicylabel()
  			option_ = options()
  			option_.filter = filter_
  			response = obj.getfiltered(client, option_)
  			return response
  		except Exception as e :
  			raise e
  
  
  	@classmethod
  	def count(cls, client) :
  		r""" Use this API to count the contentinspectionpolicylabel resources configured on NetScaler.
  		"""
  		try :
  			obj = contentinspectionpolicylabel()
  			option_ = options()
  			option_.count = True
  			response = obj.get_resources(client, option_)
  			if response :
  				return response[0].__dict__['___count']
  			return 0
  		except Exception as e :
  			raise e
  
  	@classmethod
  	def count_filtered(cls, client, filter_) :
  		r""" Use this API to count filtered the set of contentinspectionpolicylabel resources.
  		Filter string should be in JSON format.eg: "port:80,servicetype:HTTP".
  		"""
  		try :
  			obj = contentinspectionpolicylabel()
  			option_ = options()
  			option_.count = True
  			option_.filter = filter_
  			response = obj.getfiltered(client, option_)
  			if response :
  				return response[0].__dict__['___count']
  			return 0
  		except Exception as e :
  			raise e
  
  
  	class Labeltype:
  		reqvserver = "reqvserver"
  		resvserver = "resvserver"
  		policylabel = "policylabel"
  
  	class Type:
  		REQ = "REQ"
  		RES = "RES"
  
  class contentinspectionpolicylabel_response(base_response) :
  	def __init__(self, length=1) :
  		self.contentinspectionpolicylabel = []
  		self.errorcode = 0
  		self.message = ""
  		self.severity = ""
  		self.sessionid = ""
  		self.contentinspectionpolicylabel = [contentinspectionpolicylabel() for _ in range(length)]
  
  