Method checks the filter count and if the filter count exceeds the maxComponents(number of filters), then the given filter
		objects get distributed among small groups and then again binded together in complex filters(like and , or) so that the
		count of filters can be reduced.

def HandleFilterMaxComponentLimit(handle, lfilter):
		"""
		Method checks the filter count and if the filter count exceeds the maxComponents(number of filters), then the given filter
		objects get distributed among small groups and then again binded together in complex filters(like and , or) so that the
		count of filters can be reduced.
		"""
		from Ucs import AndFilter, OrFilter, AbstractFilter

		maxComponents = 10
		if ((lfilter == None) or (lfilter.GetChildCount() <= maxComponents)):
			return lfilter

		if ((not (isinstance(lfilter, AndFilter))) and (not (isinstance(lfilter, OrFilter)))):
			return lfilter

		resultFilter = None
		if (isinstance(lfilter, AndFilter) == True):
			parentFilter = AndFilter()
			childFilter = AndFilter()
			parentFilter.AddChild(childFilter)
			for cf in lfilter.GetChild():
				if (isinstance(cf, AbstractFilter) == True):
					if (childFilter.GetChildCount() == maxComponents):
						childFilter = AndFilter()
						parentFilter.AddChild(childFilter)
					childFilter.AddChild(cf)
			resultFilter = parentFilter
		else:
			parentFilter = OrFilter()
			childFilter = OrFilter()
			parentFilter.AddChild(childFilter)
			for cf in lfilter.GetChild():
				if (isinstance(cf, AbstractFilter) == True):
					if (childFilter.GetChildCount() == maxComponents):
						childFilter = OrFilter()
						parentFilter.AddChild(childFilter)
					childFilter.AddChild(cf)
			resultFilter = parentFilter
		return UcsUtils.HandleFilterMaxComponentLimit(handle, resultFilter)