class MeetsFunction extends BaseFEELFunction {

    public FEELFnResult<Boolean> invoke(@ParameterName( "range1" ) Range range1, @ParameterName( "range2" ) Range range2) {
        if ( range1 == null ) {
            return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "range1", "cannot be null"));
        }
        if ( range2 == null ) {
            return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "range2", "cannot be null"));
        }
        try {
            boolean result = range1.getHighBoundary() == Range.RangeBoundary.CLOSED &&
                             range2.getLowBoundary() == Range.RangeBoundary.CLOSED &&
                             range1.getHighEndPoint().compareTo(range2.getLowEndPoint()) == 0;
            return FEELFnResult.ofResult( result );
        } catch( Exception e ) {
            // values are not comparable
            return FEELFnResult.ofError(new InvalidParametersEvent(Severity.ERROR, "range1", "cannot be compared to range2"));
        }
    }

    public  MeetsFunction();

}