# 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.

NAME_BYTE = 'java.lang.Byte'
NAME_SHORT = 'java.lang.Short'
NAME_INT = 'java.lang.Integer'
NAME_LONG = 'java.lang.Long'
NAME_FLOAT = 'java.lang.Float'
NAME_DOUBLE = 'java.land.Double'
NAME_CHAR = 'java.lang.Character'
NAME_BOOLEAN = 'java.lang.Boolean'
NAME_STRING = 'java.lang.String'
NAME_UUID = 'java.util.UUID'
NAME_DATE = 'java.util.Date'
NAME_BYTE_ARR = 'class [B'
NAME_SHORT_ARR = 'class [S'
NAME_INT_ARR = 'class [I'
NAME_LONG_ARR = 'class [J'
NAME_FLOAT_ARR = 'class [F'
NAME_DOUBLE_ARR = 'class [D'
NAME_CHAR_ARR = 'class [C'
NAME_BOOLEAN_ARR = 'class [Z'
NAME_STRING_ARR = 'class [Ljava.lang.String;'
NAME_UUID_ARR = 'class [Ljava.util.UUID;'
NAME_DATE_ARR = 'class [Ljava.util.Date;'
NAME_OBJ_ARR = 'class [Ljava.lang.Object;'
NAME_COL = 'java.util.Collection'
NAME_MAP = 'java.util.Map'
NAME_DECIMAL = 'java.math.BigDecimal'
NAME_DECIMAL_ARR = 'class [Ljava.math.BigDecimal;'
NAME_TIMESTAMP = 'java.sql.Timestamp'
NAME_TIMESTAMP_ARR = 'class [Ljava.sql.Timestamp;'
NAME_TIME = 'java.sql.Time'
NAME_TIME_ARR = 'class [Ljava.sql.Time;'
