/* * 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.nifi.repository.schema; import java.util.Map; public enum FieldType { STRING(2, true, String.class), // 2 bytes for length of string LONG_STRING(4, true, String.class), // 4 bytes for length of string BOOLEAN(1, false, Boolean.class), LONG(8, false, Long.class), INT(4, false, Integer.class), BYTE_ARRAY(4, true, byte[].class), // 4 bytes for number of bytes COMPLEX(2, true, Record.class), // 2 bytes for number of sub-elements MAP(2, true, Map.class), UNION(4, false, NamedValue.class); private final int numBytes; private final boolean lengthEncoded; private final Class<?> javaClass; private FieldType(final int numBytes, final boolean lengthEncoded, final Class<?> javaClass) { this.numBytes = numBytes; this.lengthEncoded = lengthEncoded; this.javaClass = javaClass; } /** * Indicates the number of bytes that must be read for this field. If this field is length-encoded * (see {@link #isLengthEncoded()}, then this method tells us how many bytes to read in order to determine * the full length of the field. Otherwise, these bytes tell us the full length of the field themselves. * * @return the number of bytes to read for this field */ public int getNumberOfBytes() { return numBytes; } /** * This method returns <code>true</code>, then the value of {@link #getNumberOfBytes()} tells us how many bytes to read in * order to determine the full length of the field (if the field is not complex) or the number of sub-fields to * read in order to determine the full field (if this field is complex). If <code>false</code>, the value of * {@link #getNumberOfBytes()} simply tells us how many bytes must be read in order to read the entire field. * * @return whether or not the field is length-encoded. */ public boolean isLengthEncoded() { return lengthEncoded; } /** * @return the Java type that corresponds to this FieldType */ public Class<?> getJavaClass() { return javaClass; } }