class DiscoveryEnabledZoneAvoidanceRule extends ZoneAvoidanceRuleDecorator {
    private CompositePredicate compositePredicate;
    private DiscoveryEnabledZoneAvoidancePredicate discoveryEnabledPredicate;

    public DiscoveryEnabledZoneAvoidanceRule() {
        super();
        discoveryEnabledPredicate = new DiscoveryEnabledZoneAvoidancePredicate(this, null);
        AvailabilityPredicate availabilityPredicate = new AvailabilityPredicate(this, null);
        compositePredicate = createCompositePredicate(discoveryEnabledPredicate, availabilityPredicate);
    }

    private CompositePredicate createCompositePredicate(DiscoveryEnabledZoneAvoidancePredicate discoveryEnabledPredicate, AvailabilityPredicate availabilityPredicate) {
        return CompositePredicate.withPredicates(discoveryEnabledPredicate, availabilityPredicate)
                // .addFallbackPredicate(availabilityPredicate)
                // .addFallbackPredicate(AbstractServerPredicate.alwaysTrue())
                .build();
    }

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {<FILL_FUNCTION_BODY>}

    @Override
    public AbstractServerPredicate getPredicate() {
        return compositePredicate;
    }

    public DiscoveryEnabledZoneAvoidancePredicate getDiscoveryEnabledPredicate() {
        return discoveryEnabledPredicate;
    }
}

        discoveryEnabledPredicate = new DiscoveryEnabledZoneAvoidancePredicate(this, clientConfig);
        AvailabilityPredicate availabilityPredicate = new AvailabilityPredicate(this, clientConfig);
        compositePredicate = createCompositePredicate(discoveryEnabledPredicate, availabilityPredicate);
    
<methods>public non-sealed void <init>() ,public Server choose(java.lang.Object) ,public Server filterChoose(java.lang.Object) <variables>private com.nepxion.discovery.plugin.framework.loadbalance.DiscoveryEnabledLoadBalance discoveryEnabledLoadBalance,private RuleWeightRandomLoadBalance<com.nepxion.discovery.common.entity.WeightFilterEntity> ruleWeightRandomLoadBalance,private StrategyWeightRandomLoadBalance<com.nepxion.discovery.common.entity.WeightFilterEntity> strategyWeightRandomLoadBalance