Adds an event handler.
		
		An event handler can be added using this method where an user can subscribe for the event channel from UCS and can monitor those events for any 
		specific success value or failure value for a managed object.
		- classId specifies the class name for which events should be monitored.
		- managedObject specifies a particular managed object that user wants to monitor. prop specifies the the property of the managed object which will
		  be monitored. successValue, failureValue, transientValue specifies the respective scenarios(success, failure etc) about the prop of managed object.
		- pollSec specifies the time in seconds for polling event.
		- timeoutSec specifies the time after which method should stop polling or timeOut.
		- callBack specifies the call Back Method or operation that can be given to this method

def AddEventHandler(self, classId=None, managedObject=None, prop=None, successValue=[], failureValue=[],
						transientValue=[], pollSec=None, timeoutSec=None, callBack=None):
		"""
		Adds an event handler.
		
		An event handler can be added using this method where an user can subscribe for the event channel from UCS and can monitor those events for any 
		specific success value or failure value for a managed object.
		- classId specifies the class name for which events should be monitored.
		- managedObject specifies a particular managed object that user wants to monitor. prop specifies the the property of the managed object which will
		  be monitored. successValue, failureValue, transientValue specifies the respective scenarios(success, failure etc) about the prop of managed object.
		- pollSec specifies the time in seconds for polling event.
		- timeoutSec specifies the time after which method should stop polling or timeOut.
		- callBack specifies the call Back Method or operation that can be given to this method
		"""
		from UcsBase import WriteObject, _GenericMO, UcsUtils, WriteUcsWarning, UcsValidationException

		if (self._transactionInProgress):
			raise UcsValidationException(
				"UCS transaction in progress. Cannot execute WatchUcs. Complete or Undo UCS transaction.")
		# WriteUcsWarning("UCS transaction in progress. Cannot execute WatchUcs. Complete or Undo UCS transaction.")
		# return False

		if (classId != None and managedObject == None):
			if (UcsUtils.FindClassIdInMoMetaIgnoreCase(classId) == None):
				raise UcsValidationException("Invalid ClassId %s specified." % (classId))
				# raise Exception("Invalid ClassId %s specified." %(classId))

		elif (managedObject != None and classId == None):
			if (UcsUtils.FindClassIdInMoMetaIgnoreCase(managedObject.getattr("classId")) == None):
				raise UcsValidationException(
					"Object of unknown ClassId %s provided." % (managedObject.getattr("classId")))
			# raise Exception("Object of unknown ClassId %s provided." %(managedObject.getattr("classId")))

			if prop == None:
				raise UcsValidationException("prop parameter is not provided.")
			# raise Exception("prop parameter is not provided.")

			propMeta = UcsUtils.GetUcsPropertyMeta(managedObject.getattr("classId"), UcsUtils.WordU(prop))
			if propMeta == None:
				raise UcsValidationException("Unknown Property %s provided." % (prop))
			# raise Exception("Unknown Property %s provided." %(prop))

			if not successValue:
				raise UcsValidationException("successValue parameter is not provided.")
				# raise Exception("successValue parameter is not provided.")

		elif (classId != None and managedObject != None):
			raise UcsValidationException("You cannot provide both classId and mandgedObject")
		# raise Exception("You cannot provide both classId and mandgedObject")

		wb = None
		paramDict = {'classId': classId, 'managedObject': managedObject, 'prop': prop, 'successValue': successValue,
					 'failureValue': failureValue, 'transientValue': transientValue, 'pollSec': pollSec,
					 'timeoutSec': timeoutSec, 'callBack': callBack, 'startTime': datetime.datetime.now()}

		if (classId == None and managedObject == None):
			def WatchUcsAllFilter(mce):
				return True

			wb = self._add_watch_block(params=paramDict, filterCb=WatchUcsAllFilter, cb=callBack)
		elif (classId != None and managedObject == None):
			def WatchUcsTypeFilter(mce):
				if ((mce.mo.getattr("classId")).lower() == classId.lower()):
					return True
				return False

			wb = self._add_watch_block(params=paramDict, filterCb=WatchUcsTypeFilter, cb=callBack)
		elif (classId == None and managedObject != None):
			if (pollSec == None):
				def WatchUcsMoFilter(mce):
					if (mce.mo.getattr("Dn") == managedObject.getattr("Dn")):
						return True
					return False

				wb = self._add_watch_block(params=paramDict, filterCb=WatchUcsMoFilter, cb=callBack)
			else:
				def WatchUcsNoneFilter(mce):
					return False

				wb = self._add_watch_block(params=paramDict, filterCb=WatchUcsNoneFilter, cb=callBack)

		signal.signal(signal.SIGINT, self._stop_wb_callback)

		if (wb == None):
			raise UcsValidationException("Error adding WatchBlock...")
		# raise Exception("Error adding WatchBlock...")

		if wb != None and len(self._wbs) == 1:
			self._start_dequeue_thread()

		return wb