/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ package org.apache.drill.exec.server.options; import org.apache.drill.common.exceptions.UserException; import org.apache.drill.exec.server.options.OptionValue.Kind; /** * Validates the values provided to Drill options. */ public abstract class OptionValidator { // Stored here as well as in the option static class to allow insertion of option optionName into // the error messages produced by the validator private final String optionName; private final boolean isAdminOption; /** By default, if admin option value is not specified, it would be set to false.*/ public OptionValidator(String optionName) { this(optionName, false); } public OptionValidator(String optionName, boolean isAdminOption) { this.optionName = optionName; this.isAdminOption = isAdminOption; } /** * Gets the name of the option for this validator. * * @return the option name */ public String getOptionName() { return optionName; } /** * This function returns true if and only if this validator is meant for a short-lived option. * * NOTE: By default, options are not short-lived. So, if a derived class is meant for a short-lived option, * that class must do two things: * (1) override this method to return true, and * (2) return the number of queries for which the option is valid through {@link #getTtl}. * E.g. {@link org.apache.drill.exec.testing.ExecutionControls.ControlsOptionValidator} * * @return if this validator is for a short-lived option */ public boolean isShortLived() { return false; } /** * If an option is short-lived, this method returns the number of queries for which the option is valid. * Please read the note at {@link #isShortLived} * * @return number of queries for which the option should be valid */ public int getTtl() { if (!isShortLived()) { throw new UnsupportedOperationException("This option is not short-lived."); } return 0; } /** * @return true is option is system-level property that can be only specified by admin (not user). */ public boolean isAdminOption() { return isAdminOption; } /** * Gets the default option value for this validator. * * @return default option value */ public abstract OptionValue getDefault(); /** * Validates the option value. * * @param value the value to validate * @param manager the manager for accessing validation dependencies (options) * @throws UserException message to describe error with value, including range or list of expected values */ public abstract void validate(OptionValue value, OptionSet manager); /** * Gets the kind of this option value for this validator. * * @return kind of this option value */ public abstract Kind getKind(); }