| /** |
| * 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. |
| */ |
| |
| /** |
| * <h2>Types:</h2> |
| * <img src="doc-files/dataTypes.png" /> |
| * <ul> |
| * <li> <b>IDataType:</b> Represents a <i>DataType</i> in the TypeSystem. All Instances and |
| * Attributes are associated |
| * with a DataType. They represent the <b>Set</b> of values that Instances/Attributes of this |
| * type can have. |
| * Currently the namespace of DataTypes is flat. DataTypes can be asked to <i>convert</i> |
| * arbitrary java Objects |
| * to instances of this type, and they can be asked for a String representation of an |
| * instance.</li> |
| * <li><b>Type Categories:</b></li> DataTypes are grouped into Categories. A Category implies |
| * certain semantics about |
| * the Types belonging to the Category. We have PRIMITIVE, ENUM, ARRAY, MAP, STRUCT, TRAIT, |
| * and CLASS categories. |
| * <li><b>Primitive Types:</b> There are corresponding DataTypes for the java primitives: |
| * Boolean, Byte, Short, |
| * Int, Long, Float, Double. We also support BigInteger, BigDecimal, String, and Date</li> |
| * <li><b>Collection Types:</b>ArrayType and MapType are parameterized DataTypes taking one |
| * and two parameters |
| * respectively.</li> |
| * <li><b>Enum Types:</b> Used to define DataTypes with all valid values listed in the Type |
| * definition. For e.g. |
| * <pre> |
| * {@code |
| * ts.defineEnumType("HiveObjectType", |
| new EnumValue("GLOBAL", 1), |
| new EnumValue("DATABASE", 2), |
| new EnumValue("TABLE", 3), |
| new EnumValue("PARTITION", 4), |
| new EnumValue("COLUMN", 5)) |
| * } |
| * </pre> Each <i>EnumValue</i> has name and an ordinal. Either one can be used as a value for an |
| * Attribute of this Type. |
| * </li> |
| * <li><b>Constructable Types:</b> Are complex Types that are composed of Attributes. We |
| * support Structs, Classes |
| * and Traits constructable types. A ConstructableType is parameterized by the Type of its |
| * <i>Instance</i> java |
| * class(these are implementations of the ITypedInstance interface). A value of the |
| * IConstructableType will |
| * implement this parameterized Type. IConstructableTypes can be asked to create an 'empty' |
| * instance of their Type. |
| * IConstructableTypes are associated with FieldMappings that encapsulate the mapping from/to |
| * the ITypedInstance |
| * java object. |
| * </li> |
| * <li><b>Attribute Info:</b>Represents an Attribute of a complex datatype. Attributes are |
| * defined by a name, a |
| * dataType, its Multiplicity and whether it is a composite relation. <i>Multiplicity</i> is |
| * a constraint on the |
| * number of instances that an instance can have. For non collection types and Maps: |
| * Multiplicity is OPTIONAL or |
| * REQUIRED. |
| * For Arrays the Multiplicity is specified by a lower-bound, upper-bound and a uniqueness |
| * constraint. |
| * </li> |
| * <li><b>Struct Types:</b>Are IConstructableTypes whose instances are IStructs. Conceptually |
| * these are like 'C' |
| * structs: they represent a collection of Attributes. For e.g. |
| * <pre> |
| * {@code |
| * ts.defineStructType(STRUCT_TYPE_1, |
| true, |
| createRequiredAttrDef("a", DataTypes.INT_TYPE), |
| createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE), |
| createOptionalAttrDef("c", DataTypes.BYTE_TYPE), |
| createOptionalAttrDef("d", DataTypes.SHORT_TYPE), |
| createOptionalAttrDef("e", DataTypes.INT_TYPE), |
| createOptionalAttrDef("f", DataTypes.INT_TYPE), |
| createOptionalAttrDef("g", DataTypes.LONG_TYPE), |
| createOptionalAttrDef("h", DataTypes.FLOAT_TYPE), |
| createOptionalAttrDef("i", DataTypes.DOUBLE_TYPE), |
| createOptionalAttrDef("j", DataTypes.BIGINTEGER_TYPE), |
| createOptionalAttrDef("k", DataTypes.BIGDECIMAL_TYPE), |
| createOptionalAttrDef("l", DataTypes.DATE_TYPE), |
| createOptionalAttrDef("m", ts.defineArrayType(DataTypes.INT_TYPE)), |
| createOptionalAttrDef("n", ts.defineArrayType(DataTypes.BIGDECIMAL_TYPE)), |
| createOptionalAttrDef("o", ts.defineMapType(DataTypes.STRING_TYPE, DataTypes.DOUBLE_TYPE)) |
| * } |
| * </pre> |
| * </li> |
| * <li><b>Hierarchical Types:</b>Are DataTypes that can have a SuperType. Classes and Traits |
| * are the supported |
| * Hierarchical Types. </li> |
| * <li><b>Class Types:</b></li> |
| * <li><b>Trait Types:</b></li> |
| * </ul> |
| * |
| * |
| * <h2>Instances:</h2> |
| * <img src="doc-files/instance.png" /> |
| * <ul> |
| * <li> <b>IStruct:</b></li> |
| * <li><b>IReferenceableInstance:</b></li> |
| * <li><b>ITypedStruct:</b></li> |
| * <li><b>ITypedReferenceableInstance:</b></li> |
| * </ul> |
| * |
| * <h3>Serialization of Types:</h3> |
| * |
| * <h3>Serialization of Instances:</h3> |
| * |
| * <h3>Searching on Classes and Traits:</h3> |
| */ |
| package org.apache.atlas.typesystem.types; |