content: /*
   * 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.carbondata.core.metadata.encoder;
  
  import java.util.List;
  
  /**
   * Encoding type supported in carbon
   */
  public enum Encoding {
    DICTIONARY,
    DELTA,
    RLE,
    INVERTED_INDEX,
    BIT_PACKED,
    DIRECT_DICTIONARY,  // currently, only DATE data type use this encoding
    IMPLICIT,
    DIRECT_COMPRESS,
    ADAPTIVE_INTEGRAL,
    ADAPTIVE_DELTA_INTEGRAL,
    RLE_INTEGRAL,
    DIRECT_STRING,
    ADAPTIVE_FLOATING,
    BOOL_BYTE,
    ADAPTIVE_DELTA_FLOATING,
    DIRECT_COMPRESS_VARCHAR,
    INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY;
  
    public static Encoding valueOf(int ordinal) {
      if (ordinal == DICTIONARY.ordinal()) {
        return DICTIONARY;
      } else if (ordinal == DELTA.ordinal()) {
        return DELTA;
      } else if (ordinal == RLE.ordinal()) {
        return RLE;
      } else if (ordinal == INVERTED_INDEX.ordinal()) {
        return INVERTED_INDEX;
      } else if (ordinal == BIT_PACKED.ordinal()) {
        return BIT_PACKED;
      } else if (ordinal == DIRECT_DICTIONARY.ordinal()) {
        return DIRECT_DICTIONARY;
      } else if (ordinal == IMPLICIT.ordinal()) {
        return IMPLICIT;
      } else if (ordinal == DIRECT_COMPRESS.ordinal()) {
        return DIRECT_COMPRESS;
      } else if (ordinal == ADAPTIVE_INTEGRAL.ordinal()) {
        return ADAPTIVE_INTEGRAL;
      } else if (ordinal == ADAPTIVE_DELTA_INTEGRAL.ordinal()) {
        return ADAPTIVE_DELTA_INTEGRAL;
      } else if (ordinal == RLE_INTEGRAL.ordinal()) {
        return RLE_INTEGRAL;
      } else if (ordinal == DIRECT_STRING.ordinal()) {
        return DIRECT_STRING;
      } else if (ordinal == ADAPTIVE_FLOATING.ordinal()) {
        return ADAPTIVE_FLOATING;
      } else if (ordinal == BOOL_BYTE.ordinal()) {
        return BOOL_BYTE;
      } else if (ordinal == ADAPTIVE_DELTA_FLOATING.ordinal()) {
        return ADAPTIVE_DELTA_FLOATING;
      } else if (ordinal == DIRECT_COMPRESS_VARCHAR.ordinal()) {
        return DIRECT_COMPRESS_VARCHAR;
      } else if (ordinal == INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY.ordinal()) {
        return INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY;
      } else {
        throw new RuntimeException("create Encoding with invalid ordinal: " + ordinal);
      }
    }
  
    /**
     * Method to validate for supported encoding types that can be read using the current version
     *
     * @param encodings
     */
    public static void validateEncodingTypes(List<org.apache.carbondata.format.Encoding> encodings) {
      if (null != encodings && !encodings.isEmpty()) {
        for (org.apache.carbondata.format.Encoding encoder : encodings) {
          // if case is handle unsupported encoding type. An encoding not supported for read will
          // be added as null by thrift during deserialization
          // if given encoding name is not supported exception will be thrown
          if (null == encoder) {
            throw new UnsupportedOperationException(
                "There is mismatch between the encodings in data file and the encodings supported"
                    + " for read in the current version");
          } else {
            try {
              Encoding.valueOf(encoder.name());
            } catch (IllegalArgumentException ex) {
              throw new UnsupportedOperationException(
                  "There is mismatch between the encodings in data file and the encodings supported"
                      + " for read in the current version. Encoding: " + encoder.name());
            }
          }
        }
      }
    }
  }
  