/*-
        * ============LICENSE_START=======================================================
        * OSAM Core
        * ================================================================================
        * Copyright (C) 2018 AT&T
        * ================================================================================
        * 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.
        * ============LICENSE_END=========================================================
        */

package org.onap.portalsdk.core.drools;
global String age

rule "Default"
when
$droolsRuleService : DroolsRuleServiceImpl( state != null )
then
System.out.println($droolsRuleService.accessLabel() +" "+ $droolsRuleService.getState() +" state legal age is " + getDefaultIfNull(age));
$droolsRuleService.setResultsString($droolsRuleService.getState()+" state legal age is " + getDefaultIfNull(age));
end

rule "Drools NJ"
when
$droolsRuleService : DroolsRuleServiceImpl( state == "NJ" )
then
System.out.println($droolsRuleService.accessLabel() +" "+ "NJ state legal age is " + getDefaultIfNull(age));
$droolsRuleService.setResultsString("NJ state legal age is " + getDefaultIfNull(age));
end

rule "Drools KY"
when
$droolsRuleService : DroolsRuleServiceImpl( state == "KY" )
then
System.out.println($droolsRuleService.accessLabel() +" "+ "KY state legal age is " + getDefaultIfNull("20"));
$droolsRuleService.setResultsString("KY state legal age is " + getDefaultIfNull("20"));
end

rule "Drools NY"
when
$droolsRuleService : DroolsRuleServiceImpl( state == "NY" )
then
System.out.println($droolsRuleService.accessLabel() +" "+ "NY state legal age is " + getDefaultIfNull("21"));
$droolsRuleService.setResultsString("NY state legal age is " + getDefaultIfNull("21"));
end

function String getDefaultIfNull(String age) {
return age == null ? "18" : age;
}
