/**
 * 
 * @param instance
 */
void ntfa_filter_hdl_rec_destructor(ntfa_filter_hdl_rec_t *filter_rec)
{
	switch (filter_rec->ntfType) {
	case SA_NTF_TYPE_OBJECT_CREATE_DELETE:
		ntfsv_filter_obj_cr_del_free(&filter_rec->notificationFilter.objectCreateDeleteNotificationfilter);
		break;
	case SA_NTF_TYPE_ATTRIBUTE_CHANGE:
		ntfsv_filter_attr_ch_free(&filter_rec->notificationFilter.attributeChangeNotificationfilter);
		break;
	case SA_NTF_TYPE_STATE_CHANGE:
		ntfsv_filter_state_ch_free(&filter_rec->notificationFilter.stateChangeNotificationfilter);
		break;
	case SA_NTF_TYPE_SECURITY_ALARM:
		ntfsv_filter_sec_alarm_free(&filter_rec->notificationFilter.securityAlarmNotificationfilter);
		break;
	case SA_NTF_TYPE_ALARM:
		ntfsv_filter_alarm_free(&filter_rec->notificationFilter.alarmNotificationfilter);
		break;
	default:
		assert(0);
	}
}
SaAisErrorT ntfsv_filter_sec_alarm_alloc(SaNtfSecurityAlarmNotificationFilterT *filter,
													  SaUint32T numProbableCauses,
													  SaUint32T numSeverities,
													  SaUint32T numSecurityAlarmDetectors,
													  SaUint32T numServiceUsers,
													  SaUint32T numServiceProviders)
{
	SaAisErrorT rc = SA_AIS_OK;

	filter->probableCauses = NULL;
	filter->severities = NULL;
	filter->securityAlarmDetectors = NULL;
	filter->serviceUsers = NULL;
	filter->serviceProviders = NULL;

	filter->numProbableCauses = numProbableCauses;
	filter->numSeverities = numSeverities;
	filter->numSecurityAlarmDetectors = numSecurityAlarmDetectors;
	filter->numServiceUsers = numServiceUsers;
	filter->numServiceProviders = numServiceProviders;

	if (numProbableCauses != 0) {
		filter->probableCauses = (SaNtfProbableCauseT *) malloc(numProbableCauses * sizeof(SaNtfProbableCauseT));
		if (filter->probableCauses == NULL) {
			TRACE_1("Out of memory in probableCauses field");
			rc = SA_AIS_ERR_NO_MEMORY;
			goto error_free;
		}
	}
	if (numSeverities != 0) {
		filter->severities = (SaNtfSeverityT *) malloc(numSeverities * sizeof(SaNtfSeverityT));
		if (filter->severities == NULL) {
			TRACE_1("Out of memory in perceivedSeverities field");
			rc = SA_AIS_ERR_NO_MEMORY;
			goto error_free;
		}
	}
	if (numSecurityAlarmDetectors != 0) {
		filter->securityAlarmDetectors = (SaNtfSecurityAlarmDetectorT *) malloc(numSecurityAlarmDetectors * sizeof(SaNtfSecurityAlarmDetectorT));
		if (filter->securityAlarmDetectors == NULL) {
			TRACE_1("Out of memory in securityAlarmDetector field");
			rc = SA_AIS_ERR_NO_MEMORY;
			goto error_free;
		}
	}
	if (numServiceUsers != 0) {
		filter->serviceUsers = (SaNtfServiceUserT *) malloc(numServiceUsers * sizeof(SaNtfServiceUserT));
		if (filter->serviceUsers == NULL) {
			TRACE_1("Out of memory in ServiceUsers field");
			rc = SA_AIS_ERR_NO_MEMORY;
			goto error_free;
		}
	}
	if (numServiceProviders != 0) {
		filter->serviceProviders = (SaNtfServiceUserT *) malloc(numServiceProviders * sizeof(SaNtfServiceUserT));
		if (filter->serviceProviders == NULL) {
			TRACE_1("Out of memory in ServiceProviders field");
			rc = SA_AIS_ERR_NO_MEMORY;
			goto error_free;
		}
	}
done:
	return rc;  
error_free:
	ntfsv_filter_sec_alarm_free(filter, false);
	goto done;
}