You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/11/12 18:14:16 UTC
[07/42] atlas git commit: ATLAS-2251: Remove TypeSystem and related
implementation, to avoid unncessary duplicate of type details in cache
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
----------------------------------------------------------------------
diff --git a/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala b/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
deleted file mode 100755
index 4478a44..0000000
--- a/typesystem/src/main/scala/org/apache/atlas/typesystem/json/TypesSerialization.scala
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * 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.atlas.typesystem.json
-
-import java.text.SimpleDateFormat
-import com.google.common.collect.ImmutableList
-import org.apache.atlas.AtlasException
-import org.apache.atlas.AtlasConstants
-import org.apache.atlas.typesystem.TypesDef
-import org.apache.atlas.typesystem.types.DataTypes.{ArrayType, MapType, TypeCategory}
-import org.apache.atlas.typesystem.types._
-import org.json4s.JsonAST.JString
-import org.json4s._
-import org.json4s.native.Serialization._
-import com.google.common.collect.ImmutableSet
-
-
-/**
- * Module for serializing to/from Json.
- *
- * @example {{{
- * val j = TypesSerialization.toJson(typeSystem, "Employee", "Person", "Department", "SecurityClearance")
- *
- * val typesDef = TypesSerialization.fromJson(jsonStr)
- * typesDef.enumTypes.foreach( typeSystem.defineEnumType(_))
-
- typeSystem.defineTypes(ImmutableList.copyOf(typesDef.structTypes.toArray),
- ImmutableList.copyOf(typesDef.traitTypes.toArray),
- ImmutableList.copyOf(typesDef.classTypes.toArray)
- )
- * }}}
- *
- * @todo doesn't traverse includes directives. Includes are parsed into
- * [[org.apache.atlas.tools.thrift.IncludeDef IncludeDef]] structures
- * but are not traversed.
- * @todo mixing in [[scala.util.parsing.combinator.PackratParsers PackratParsers]] is a placeholder. Need to
- * change specific grammar rules to `lazy val` and `Parser[Elem]` to `PackratParser[Elem]`. Will do based on
- * performance analysis.
- * @todo Error reporting
- */
-object TypesSerialization {
-
- def toJsonValue(typ: IDataType[_])(implicit formats: Formats): JValue = {
- typ.getTypeCategory match {
- case TypeCategory.CLASS => {
- Extraction.decompose(convertClassTypeToHierarchicalTypeDefinition(typ.asInstanceOf[ClassType]))
- }
- case TypeCategory.STRUCT => {
- Extraction.decompose(convertStructTypeToStructDef(typ.asInstanceOf[StructType]))
- }
- case TypeCategory.TRAIT => {
- Extraction.decompose(convertTraitTypeToHierarchicalTypeDefinition(typ.asInstanceOf[TraitType]))
- }
- case TypeCategory.ENUM => {
- Extraction.decompose(convertEnumTypeToEnumTypeDef(typ.asInstanceOf[EnumType]))
- }
- case _ => JString(s"${typ.getName}")
- }
- }
-
- def toJson(ts: TypeSystem, typName: String): String = {
- toJson(ts, List(typName): _*)
- }
-
- def toJson(ts: TypeSystem, typNames: String*): String = {
- toJson(ts, (typ: IDataType[_]) => typNames.contains(typ.getName))
- }
-
- import scala.collection.JavaConversions._
-
- def toJson(ts: TypeSystem, typNames: java.util.List[String]): String = {
- toJson(ts, typNames.toIndexedSeq: _*)
- }
-
- val _formats = new DefaultFormats {
- override val dateFormatter = TypeSystem.getInstance().getDateFormat.asInstanceOf[SimpleDateFormat]
- override val typeHints = NoTypeHints
- }
-
- def toJson(ts: TypeSystem, export: IDataType[_] => Boolean): String = {
- implicit val formats = _formats + new MultiplicitySerializer
-
- val typsDef = convertToTypesDef(ts, export)
-
- writePretty(typsDef)
- }
-
- def fromJson(jsonStr: String): TypesDef = {
- implicit val formats = _formats + new MultiplicitySerializer
-
- read[TypesDef](jsonStr)
- }
-
- def toJson(typesDef : TypesDef) : String = {
- implicit val formats = _formats + new MultiplicitySerializer
- writePretty(typesDef)
-
- }
-
- def toJson(enumTypeDefinition: EnumTypeDefinition) : String = {
- toJson(new TypesDef(enumTypeDefinition))
- }
-
- def toJson(structTypeDefinition: StructTypeDefinition) : String = {
- toJson(new TypesDef(structTypeDefinition))
- }
-
- def toJson(typDef: HierarchicalTypeDefinition[_], isTrait : Boolean) : String = {
- toJson(new TypesDef(typDef, isTrait))
- }
-
- private def convertAttributeInfoToAttributeDef(aInfo: AttributeInfo) = {
- new AttributeDefinition(aInfo.name, aInfo.dataType().getName, aInfo.multiplicity,
- aInfo.isComposite, aInfo.isUnique, aInfo.isIndexable, aInfo.reverseAttributeName)
- }
-
- private def convertEnumTypeToEnumTypeDef(et: EnumType) = {
- val eVals: Seq[EnumValue] = et.valueMap.values().toSeq
- new EnumTypeDefinition(et.name, et.description, et.version, eVals: _*)
- }
-
- private def convertStructTypeToStructDef(st: StructType): StructTypeDefinition = {
-
- val aDefs: Iterable[AttributeDefinition] =
- st.fieldMapping.fields.values().map(convertAttributeInfoToAttributeDef(_))
- new StructTypeDefinition(st.name, st.description, st.version, aDefs.toArray)
- }
-
- private def convertTraitTypeToHierarchicalTypeDefinition(tt: TraitType): HierarchicalTypeDefinition[TraitType] = {
-
- val aDefs: Iterable[AttributeDefinition] =
- tt.immediateAttrs.map(convertAttributeInfoToAttributeDef(_))
- new HierarchicalTypeDefinition[TraitType](classOf[TraitType], tt.name, tt.description, tt.version, tt.superTypes, aDefs.toArray)
- }
-
- private def convertClassTypeToHierarchicalTypeDefinition(tt: ClassType): HierarchicalTypeDefinition[ClassType] = {
-
- val aDefs: Iterable[AttributeDefinition] =
- tt.immediateAttrs.map(convertAttributeInfoToAttributeDef(_))
- new HierarchicalTypeDefinition[ClassType](classOf[ClassType], tt.name, tt.description, tt.version, tt.superTypes, aDefs.toArray)
- }
-
- def convertToTypesDef(ts: TypeSystem, export: IDataType[_] => Boolean): TypesDef = {
-
- var enumTypes: Seq[EnumTypeDefinition] = Nil
- var structTypes: Seq[StructTypeDefinition] = Nil
- var traitTypes: Seq[HierarchicalTypeDefinition[TraitType]] = Nil
- var classTypes: Seq[HierarchicalTypeDefinition[ClassType]] = Nil
-
- def toTyp(nm: String) = ts.getDataType(classOf[IDataType[_]], nm)
-
- val typs: Iterable[IDataType[_]] = ts.getTypeNames.map(toTyp(_)).filter { (typ: IDataType[_]) =>
- !(ts.getCoreTypes.contains(typ.getName)) && export(typ)
- }
-
- typs.foreach {
- case typ: ArrayType => ()
- case typ: MapType => ()
- case typ: EnumType => enumTypes = enumTypes :+ convertEnumTypeToEnumTypeDef(typ)
- case typ: StructType => structTypes = structTypes :+ convertStructTypeToStructDef(typ)
- case typ: TraitType => traitTypes = traitTypes :+ convertTraitTypeToHierarchicalTypeDefinition(typ)
- case typ: ClassType => classTypes = classTypes :+ convertClassTypeToHierarchicalTypeDefinition(typ)
- }
-
- TypesDef(enumTypes, structTypes, traitTypes, classTypes)
- }
-
-}
-
-class MultiplicitySerializer extends CustomSerializer[Multiplicity](format => ( {
- case JString(m) => m match {
- case "optional" => Multiplicity.OPTIONAL
- case "required" => Multiplicity.REQUIRED
- case "collection" => Multiplicity.COLLECTION
- case "set" => Multiplicity.SET
- }
-}, {
- case m: Multiplicity => JString(m match {
- case Multiplicity.OPTIONAL => "optional"
- case Multiplicity.REQUIRED => "required"
- case Multiplicity.COLLECTION => "collection"
- case Multiplicity.SET => "set"
- }
-
- )
-}
- ))
-
-trait TypeHelpers {
- def requiredAttr(name: String, dataType: IDataType[_]) =
- new AttributeDefinition(name, dataType.getName, Multiplicity.REQUIRED, false, null)
-
- def optionalAttr(name: String, dataTypeName: String) =
- new AttributeDefinition(name, dataTypeName, Multiplicity.OPTIONAL, false, null)
-
-
- def optionalAttr(name: String, dataType: IDataType[_]) =
- new AttributeDefinition(name, dataType.getName, Multiplicity.OPTIONAL, false, null)
-
- def structDef(name: String, attrs: AttributeDefinition*):
- StructTypeDefinition = {
- structDef(name, None, attrs:_*)
- }
-
- def structDef(name: String, description: Option[String], attrs: AttributeDefinition*) = {
- new StructTypeDefinition(name, description.getOrElse(null), attrs.toArray)
- }
-
- def defineTraits(ts: TypeSystem, tDefs: HierarchicalTypeDefinition[TraitType]*) = {
- ts.defineTraitTypes(tDefs: _*)
- }
-
- def createTraitTypeDef(name: String, superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[TraitType] = {
- createTraitTypeDef(name, None, superTypes, attrDefs:_*)
- }
-
- def createTraitTypeDef(name: String, description: Option[String], superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[TraitType] = {
- createTraitTypeDef(name, None, AtlasConstants.DEFAULT_TYPE_VERSION, superTypes, attrDefs:_*)
- }
-
- def createTraitTypeDef(name: String, description: Option[String], version: String,superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[TraitType] = {
- val sts = ImmutableSet.copyOf(superTypes.toArray)
- return new HierarchicalTypeDefinition[TraitType](classOf[TraitType], name, description.getOrElse(null),
- sts, attrDefs.toArray)
- }
-
- def createClassTypeDef(name: String, superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[ClassType] = {
- createClassTypeDef( name, None, superTypes, attrDefs:_*)
- }
-
- def createClassTypeDef(name: String, description: Option[String], superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[ClassType] = {
- createClassTypeDef( name, None, None, superTypes, attrDefs:_*)
- }
-
- def createClassTypeDef(name: String, description: Option[String], version: Option[String], superTypes: Seq[String], attrDefs: AttributeDefinition*):
- HierarchicalTypeDefinition[ClassType] = {
- val sts = ImmutableSet.copyOf(superTypes.toArray)
- return new HierarchicalTypeDefinition[ClassType](classOf[ClassType], name, description.getOrElse(null), AtlasConstants.DEFAULT_TYPE_VERSION, sts, attrDefs.toArray)
- }
-
-
- @throws(classOf[AtlasException])
- def defineClassType(ts: TypeSystem, classDef: HierarchicalTypeDefinition[ClassType]): ClassType = {
- ts.defineTypes(ImmutableList.of[EnumTypeDefinition], ImmutableList.of[StructTypeDefinition],
- ImmutableList.of[HierarchicalTypeDefinition[TraitType]],
- ImmutableList.of[HierarchicalTypeDefinition[ClassType]](classDef))
- return ts.getDataType(classOf[ClassType], classDef.typeName)
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java b/typesystem/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
deleted file mode 100644
index 25a19cf..0000000
--- a/typesystem/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.atlas;
-
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.apache.commons.configuration.Configuration;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.assertEquals;
-
-public class ApplicationPropertiesTest {
-
- @Test
- public void testVariables() throws Exception {
- Configuration properties = ApplicationProperties.get(ApplicationProperties.APPLICATION_PROPERTIES);
-
- //plain property without variables
- assertEquals(properties.getString("atlas.service"), "atlas");
-
- //property containing system property
- String data = System.getProperty("user.dir") + "/target/data";
- assertEquals(properties.getString("atlas.data"), data);
-
- //property referencing other property
- assertEquals(properties.getString("atlas.graph.data"), data + "/graph");
-
- //invalid system property - not substituted
- assertEquals(properties.getString("atlas.db"), "${atlasdb}");
- }
-
- @Test
- //variable substitutions should work with subset configuration as well
- public void testSubset() throws Exception {
- Configuration configuration = ApplicationProperties.get(ApplicationProperties.APPLICATION_PROPERTIES);
- Configuration subConfiguration = configuration.subset("atlas");
-
- assertEquals(subConfiguration.getString("service"), "atlas");
- String data = System.getProperty("user.dir") + "/target/data";
- assertEquals(subConfiguration.getString("data"), data);
- assertEquals(subConfiguration.getString("graph.data"), data + "/graph");
- }
-
- @Test
- public void testGetClass() throws Exception {
- Configuration configuration = ApplicationProperties.get();
-
- //read from atlas-application.properties
- Class cls = ApplicationProperties.getClass(configuration, "atlas.TypeSystem.impl",
- ApplicationProperties.class.getName(), TypeSystem.class);
- assertEquals(cls.getName(), TypeSystem.class.getName());
-
- //default value
- cls = ApplicationProperties.getClass(configuration, "atlas.TypeSystem2.impl",
- TypeSystem.class.getName(), TypeSystem.class);
- assertEquals(cls.getName(), TypeSystem.class.getName());
-
- //incompatible assignTo class, should throw AtlasException
- try {
- cls = ApplicationProperties.getClass(configuration, "atlas.TypeSystem.impl",
- ApplicationProperties.class.getName(), ApplicationProperties.class);
- Assert.fail(AtlasException.class.getSimpleName() + " was expected but none thrown.");
- }
- catch (AtlasException e) {
- // good
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/json/SerializationJavaTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/json/SerializationJavaTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/json/SerializationJavaTest.java
deleted file mode 100755
index 5ee019c..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/json/SerializationJavaTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * 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.atlas.typesystem.json;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.ITypedInstance;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.Referenceable;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.types.AttributeDefinition;
-import org.apache.atlas.typesystem.types.BaseTest;
-import org.apache.atlas.typesystem.types.ClassType;
-import org.apache.atlas.typesystem.types.DataTypes;
-import org.apache.atlas.typesystem.types.EnumTypeDefinition;
-import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
-import org.apache.atlas.typesystem.types.Multiplicity;
-import org.apache.atlas.typesystem.types.StructTypeDefinition;
-import org.apache.atlas.typesystem.types.TraitType;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createRequiredAttrDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createTraitTypeDef;
-
-public class SerializationJavaTest extends BaseTest {
-
-
- @BeforeMethod
- public void setup() throws Exception {
- super.setup();
- }
-
- /*
- * Class Hierarchy is:
- * Department(name : String, employees : Array[Person])
- * Person(name : String, department : Department, manager : Manager)
- * Manager(subordinates : Array[Person]) extends Person
- *
- * Persons can have SecurityClearance(level : Int) clearance.
- */
- @Test
- public void test1() throws AtlasException {
-
- TypeSystem ts = getTypeSystem();
-
- HierarchicalTypeDefinition<ClassType> deptTypeDef = createClassTypeDef("Department", ImmutableSet.<String>of(),
- createRequiredAttrDef("name", DataTypes.STRING_TYPE),
- new AttributeDefinition("employees", String.format("array<%s>", "Person"), Multiplicity.COLLECTION,
- true, "department"));
- HierarchicalTypeDefinition<ClassType> personTypeDef = createClassTypeDef("Person", ImmutableSet.<String>of(),
- createRequiredAttrDef("name", DataTypes.STRING_TYPE),
- new AttributeDefinition("department", "Department", Multiplicity.REQUIRED, false, "employees"),
- new AttributeDefinition("manager", "Manager", Multiplicity.OPTIONAL, false, "subordinates"));
- HierarchicalTypeDefinition<ClassType> managerTypeDef =
- createClassTypeDef("Manager", ImmutableSet.of("Person"),
- new AttributeDefinition("subordinates", String.format("array<%s>", "Person"),
- Multiplicity.COLLECTION, false, "manager"));
-
- HierarchicalTypeDefinition<TraitType> securityClearanceTypeDef =
- createTraitTypeDef("SecurityClearance", ImmutableSet.<String>of(),
- createRequiredAttrDef("level", DataTypes.INT_TYPE));
-
- ts.defineTypes(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.of(securityClearanceTypeDef),
- ImmutableList.of(deptTypeDef, personTypeDef, managerTypeDef));
-
- Referenceable hrDept = new Referenceable("Department");
- Referenceable john = new Referenceable("Person");
- Referenceable jane = new Referenceable("Manager", "SecurityClearance");
-
- hrDept.set("name", "hr");
- john.set("name", "John");
- john.set("department", hrDept);
- jane.set("name", "Jane");
- jane.set("department", hrDept);
-
- john.set("manager", jane);
-
- hrDept.set("employees", ImmutableList.of(john, jane));
-
- jane.set("subordinates", ImmutableList.of(john));
-
- jane.getTrait("SecurityClearance").set("level", 1);
-
- ClassType deptType = ts.getDataType(ClassType.class, "Department");
- ITypedReferenceableInstance hrDept2 = deptType.convert(hrDept, Multiplicity.REQUIRED);
-
- String hrDeptStr = hrDept2.toString();
-
- Assert.assertEquals(hrDeptStr, "{\n" +
- "\tid : (type: Department, id: <unassigned>)\n" +
- "\tname : \thr\n" +
- "\temployees : \t[{\n" +
- "\tid : (type: Person, id: <unassigned>)\n" +
- "\tname : \tJohn\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : (type: Manager, id: <unassigned>)\n" +
- "}, {\n" +
- "\tid : (type: Manager, id: <unassigned>)\n" +
- "\tsubordinates : \t[{\n" +
- "\tid : (type: Person, id: <unassigned>)\n" +
- "\tname : \tJohn\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : (type: Manager, id: <unassigned>)\n" +
- "}]\n" +
- "\tname : \tJane\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : <null>\n" +
- "\n" +
- "\tSecurityClearance : \t{\n" +
- "\t\tlevel : \t\t1\n" +
- "\t}}]\n" +
- "}");
-
- String jsonStr = Serialization$.MODULE$.toJson(hrDept2);
- //System.out.println(jsonStr);
-
- hrDept2 = Serialization$.MODULE$.fromJson(jsonStr);
- Assert.assertEquals(hrDept2.toString(), hrDeptStr);
-
- }
-
- @Test
- public void testTrait() throws AtlasException {
-
- TypeSystem ts = getTypeSystem();
- HierarchicalTypeDefinition<TraitType> securityClearanceTypeDef =
- createTraitTypeDef("SecurityClearance2", ImmutableSet.<String>of(),
- createRequiredAttrDef("level", DataTypes.INT_TYPE));
-
- ts.defineTypes(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.of(securityClearanceTypeDef),
- ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
-
-
- Struct s = new Struct("SecurityClearance2");
- s.set("level", 1);
- TraitType tType = ts.getDataType(TraitType.class, "SecurityClearance2");
- ITypedInstance t = tType.convert(s, Multiplicity.REQUIRED);
- String jsonStr = Serialization$.MODULE$.toJson(t);
- ITypedInstance t2 = Serialization$.MODULE$.traitFromJson(jsonStr);
- Assert.assertEquals(t.toString(), t2.toString());
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/BaseTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/BaseTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/BaseTest.java
deleted file mode 100755
index 95c99e4..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/BaseTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.Referenceable;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.apache.commons.lang.RandomStringUtils;
-import org.testng.annotations.BeforeMethod;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Date;
-import java.util.Map;
-
-public abstract class BaseTest {
-
- public static final String STRUCT_TYPE_1 = "t1";
- public static final String STRUCT_TYPE_2 = "t2";
- public static final String STRUCT_TYPE_3 = "t3";
- public static final String TEST_DATE = "2014-12-11T02:35:58.440Z";
-
- public static Struct createStruct() throws AtlasException {
- StructType structType = TypeSystem.getInstance().getDataType(StructType.class, STRUCT_TYPE_1);
- Struct s = new Struct(structType.getName());
- s.set("a", 1);
- s.set("b", true);
- s.set("c", (byte) 1);
- s.set("d", (short) 2);
- s.set("e", 1);
- s.set("f", 1);
- s.set("g", 1L);
- s.set("h", 1.0f);
- s.set("i", 1.0);
- s.set("j", BigInteger.valueOf(1L));
- s.set("k", new BigDecimal(1));
- s.set("l", new Date(1418265358440L));
- s.set("m", Lists.asList(1, new Integer[]{1}));
- s.set("n", Lists.asList(BigDecimal.valueOf(1.1), new BigDecimal[]{BigDecimal.valueOf(1.1)}));
- Map<String, Double> hm = Maps.newHashMap();
- hm.put("a", 1.0);
- hm.put("b", 2.0);
- s.set("o", hm);
- s.set("p", "");
- s.setNull("q");
- Map<String, String> hm2 = Maps.newHashMap();
- hm2.put("a", "");
- s.set("r", hm2);
- return s;
- }
-
- protected final TypeSystem getTypeSystem() {
- return TypeSystem.getInstance();
- }
-
- @BeforeMethod
- public void setup() throws Exception {
- TypeSystem ts = TypeSystem.getInstance();
- ts.reset();
-
- StructType structType =
- ts.defineStructType(STRUCT_TYPE_1, true, TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE),
- TypesUtil.createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE),
- TypesUtil.createOptionalAttrDef("c", DataTypes.BYTE_TYPE),
- TypesUtil.createOptionalAttrDef("d", DataTypes.SHORT_TYPE),
- TypesUtil.createOptionalAttrDef("e", DataTypes.INT_TYPE),
- TypesUtil.createOptionalAttrDef("f", DataTypes.INT_TYPE),
- TypesUtil.createOptionalAttrDef("g", DataTypes.LONG_TYPE),
- TypesUtil.createOptionalAttrDef("h", DataTypes.FLOAT_TYPE),
- TypesUtil.createOptionalAttrDef("i", DataTypes.DOUBLE_TYPE),
- TypesUtil.createOptionalAttrDef("j", DataTypes.BIGINTEGER_TYPE),
- TypesUtil.createOptionalAttrDef("k", DataTypes.BIGDECIMAL_TYPE),
- TypesUtil.createOptionalAttrDef("l", DataTypes.DATE_TYPE),
- TypesUtil.createOptionalAttrDef("m", ts.defineArrayType(DataTypes.INT_TYPE)),
- TypesUtil.createOptionalAttrDef("n", ts.defineArrayType(DataTypes.BIGDECIMAL_TYPE)),
- TypesUtil.createOptionalAttrDef("o", ts.defineMapType(DataTypes.STRING_TYPE, DataTypes.DOUBLE_TYPE)),
- TypesUtil.createOptionalAttrDef("p", DataTypes.STRING_TYPE),
- TypesUtil.createOptionalAttrDef("q", DataTypes.STRING_TYPE),
- TypesUtil.createOptionalAttrDef("r", ts.defineMapType(DataTypes.STRING_TYPE, DataTypes.STRING_TYPE)));
- System.out.println("defined structType = " + structType);
-
- StructType recursiveStructType =
- ts.defineStructType(STRUCT_TYPE_2, true, TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE),
- TypesUtil.createOptionalAttrDef("s", STRUCT_TYPE_2));
- System.out.println("defined recursiveStructType = " + recursiveStructType);
-
- StructType invalidStructType =
- ts.defineStructType(STRUCT_TYPE_3, true, TypesUtil.createRequiredAttrDef("a",DataTypes.STRING_TYPE));
- System.out.println("defined structType = " + invalidStructType);
- }
-
- protected Map<String, IDataType> defineTraits(HierarchicalTypeDefinition<TraitType>... tDefs)
- throws AtlasException {
- return getTypeSystem().defineTraitTypes(tDefs);
- }
-
- protected Map<String, IDataType> defineClasses(HierarchicalTypeDefinition<ClassType>... classDefs)
- throws AtlasException {
- return getTypeSystem().defineClassTypes(classDefs);
- }
-
- /*
- * Class Hierarchy is:
- * Department(name : String, employees : Array[Person])
- * Person(name : String, department : Department, manager : Manager)
- * Manager(subordinates : Array[Person]) extends Person
- *
- * Persons can have SecurityClearance(level : Int) clearance.
- */
- protected void defineDeptEmployeeTypes(TypeSystem ts) throws AtlasException {
-
- HierarchicalTypeDefinition<ClassType> deptTypeDef = TypesUtil
- .createClassTypeDef("Department", ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE),
- new AttributeDefinition("employees", String.format("array<%s>", "Person"),
- Multiplicity.COLLECTION, true, "department"));
- HierarchicalTypeDefinition<ClassType> personTypeDef = TypesUtil
- .createClassTypeDef("Person", ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE),
- new AttributeDefinition("department", "Department", Multiplicity.REQUIRED, false, "employees"),
- new AttributeDefinition("manager", "Manager", Multiplicity.OPTIONAL, false, "subordinates"));
- HierarchicalTypeDefinition<ClassType> managerTypeDef = TypesUtil
- .createClassTypeDef("Manager", ImmutableSet.of("Person"),
- new AttributeDefinition("subordinates", String.format("array<%s>", "Person"),
- Multiplicity.COLLECTION, false, "manager"));
-
- HierarchicalTypeDefinition<TraitType> securityClearanceTypeDef = TypesUtil
- .createTraitTypeDef("SecurityClearance", ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("level", DataTypes.INT_TYPE));
-
- ts.defineTypes(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.of(securityClearanceTypeDef),
- ImmutableList.of(deptTypeDef, personTypeDef, managerTypeDef));
-
- ImmutableList.of(ts.getDataType(HierarchicalType.class, "SecurityClearance"),
- ts.getDataType(ClassType.class, "Department"), ts.getDataType(ClassType.class, "Person"),
- ts.getDataType(ClassType.class, "Manager"));
- }
-
- protected Referenceable createDeptEg1(TypeSystem ts) throws AtlasException {
- Referenceable hrDept = new Referenceable("Department");
- Referenceable john = new Referenceable("Person");
- Referenceable jane = new Referenceable("Manager", "SecurityClearance");
-
- hrDept.set("name", "hr");
- john.set("name", "John");
- john.set("department", hrDept);
- jane.set("name", "Jane");
- jane.set("department", hrDept);
-
- john.set("manager", jane);
-
- hrDept.set("employees", ImmutableList.of(john, jane));
-
- jane.set("subordinates", ImmutableList.of(john));
-
- jane.getTrait("SecurityClearance").set("level", 1);
-
- ClassType deptType = ts.getDataType(ClassType.class, "Department");
- deptType.convert(hrDept, Multiplicity.REQUIRED);
-
- return hrDept;
- }
-
- protected String newName() {
- return RandomStringUtils.randomAlphanumeric(10);
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
deleted file mode 100755
index daecdd7..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/ClassTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.Referenceable;
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.json.TypesSerialization;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-public class ClassTest extends HierarchicalTypeTest<ClassType> {
-
- @BeforeMethod
- public void setup() throws Exception {
- super.setup();
- }
-
- @Test
- public void test1() throws AtlasException {
-
- TypeSystem ts = getTypeSystem();
-
- defineDeptEmployeeTypes(ts);
- Referenceable hrDept = createDeptEg1(ts);
- ClassType deptType = ts.getDataType(ClassType.class, "Department");
- ITypedReferenceableInstance hrDept2 = deptType.convert(hrDept, Multiplicity.REQUIRED);
-
-
- Assert.assertEquals(hrDept2.toString(), "{\n" +
- "\tid : (type: Department, id: <unassigned>)\n" +
- "\tname : \thr\n" +
- "\temployees : \t[{\n" +
- "\tid : (type: Person, id: <unassigned>)\n" +
- "\tname : \tJohn\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : (type: Manager, id: <unassigned>)\n" +
- "}, {\n" +
- "\tid : (type: Manager, id: <unassigned>)\n" +
- "\tsubordinates : \t[{\n" +
- "\tid : (type: Person, id: <unassigned>)\n" +
- "\tname : \tJohn\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : (type: Manager, id: <unassigned>)\n" +
- "}]\n" +
- "\tname : \tJane\n" +
- "\tdepartment : (type: Department, id: <unassigned>)\n" +
- "\tmanager : <null>\n" +
- "\n" +
- "\tSecurityClearance : \t{\n" +
- "\t\tlevel : \t\t1\n" +
- "\t}}]\n" +
- "}");
- }
-
-
- @Test
- public void testSerDeWithoutDescription() throws Exception {
- HierarchicalTypeDefinition<ClassType> clsType = TypesUtil
- .createClassTypeDef("Random", ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE));
-
- TypesDef typesDef = getTypesDef(clsType);
- String json = TypesSerialization.toJson(typesDef);
- System.out.println("json " + json);
- TypesSerialization.fromJson(json);
- }
-
- @Test
- public void testSerDeWithDescription() throws Exception {
- HierarchicalTypeDefinition<ClassType> clsType = TypesUtil
- .createClassTypeDef("Random", "Random-description", ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE));
- TypesDef typesDef = getTypesDef(clsType);
- String json = TypesSerialization.toJson(typesDef);
- System.out.println("json " + json);
- TypesSerialization.fromJson(json);
- }
- @Override
- protected HierarchicalTypeDefinition<ClassType> getTypeDefinition(String name, AttributeDefinition... attributes) {
- return new HierarchicalTypeDefinition(ClassType.class, name, null, null, attributes);
- }
-
- @Override
- protected HierarchicalTypeDefinition<ClassType> getTypeDefinition(String name, ImmutableSet<String> superTypes,
- AttributeDefinition... attributes) {
- return new HierarchicalTypeDefinition(ClassType.class, name, null, superTypes, attributes);
- }
-
- @Override
- protected TypesDef getTypesDef(StructTypeDefinition typeDefinition) {
- return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
- ImmutableList.of((HierarchicalTypeDefinition<ClassType>) typeDefinition));
- }
-
- @Override
- protected TypesDef getTypesDef(HierarchicalTypeDefinition<ClassType>... typeDefinitions) {
- return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(), ImmutableList.copyOf(typeDefinitions));
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/EnumTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/EnumTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/EnumTest.java
deleted file mode 100755
index 2307192..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/EnumTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.IReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.Referenceable;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Date;
-import java.util.Map;
-
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createOptionalAttrDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createRequiredAttrDef;
-
-public class EnumTest extends BaseTest {
-
- @BeforeMethod
- public void setup() throws Exception {
- super.setup();
- }
-
- void defineEnums(TypeSystem ts) throws AtlasException {
- ts.defineEnumType("HiveObjectType", new EnumValue("GLOBAL", 1), new EnumValue("DATABASE", 2),
- new EnumValue("TABLE", 3), new EnumValue("PARTITION", 4), new EnumValue("COLUMN", 5));
-
- ts.defineEnumType("PrincipalType", new EnumValue("USER", 1), new EnumValue("ROLE", 2),
- new EnumValue("GROUP", 3));
-
- ts.defineEnumType("TxnState", new EnumValue("COMMITTED", 1), new EnumValue("ABORTED", 2),
- new EnumValue("OPEN", 3));
-
- ts.defineEnumType("LockLevel", new EnumValue("DB", 1), new EnumValue("TABLE", 2),
- new EnumValue("PARTITION", 3));
- }
-
- @Test
- public void testTypeUpdate() throws Exception {
- TypeSystem ts = getTypeSystem();
- EnumTypeDefinition etd = new EnumTypeDefinition(newName(), new EnumValue("A", 1));
- TypesDef typesDef = getTypesDef(etd);
- ts.defineTypes(typesDef);
-
- //Allow adding new enum
- etd = new EnumTypeDefinition(etd.name, new EnumValue("A", 1), new EnumValue("B", 2));
- typesDef = getTypesDef(etd);
- ts.updateTypes(typesDef);
-
- //Don't allow deleting enum
- etd = new EnumTypeDefinition(etd.name, new EnumValue("A", 1));
- typesDef = getTypesDef(etd);
- try {
- ts.updateTypes(typesDef);
- Assert.fail("Expected TypeUpdateException");
- } catch (TypeUpdateException e) {
- //assert that type is not updated when validation fails
- EnumType enumType = ts.getDataType(EnumType.class, etd.name);
- Assert.assertEquals(enumType.values().size(), 2);
- }
-
- //Don't allow changing ordinal of existing enum value
- etd = new EnumTypeDefinition(etd.name, new EnumValue("A", 2));
- typesDef = getTypesDef(etd);
- try {
- ts.updateTypes(typesDef);
- Assert.fail("Expected TypeUpdateException");
- } catch (TypeUpdateException e) {
- //expected
- }
- }
-
- private TypesDef getTypesDef(EnumTypeDefinition enumTypeDefinition) {
- return TypesUtil.getTypesDef(ImmutableList.of(enumTypeDefinition), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
- ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
- }
-
- protected void fillStruct(Struct s) throws AtlasException {
- s.set("a", 1);
- s.set("b", true);
- s.set("c", (byte) 1);
- s.set("d", (short) 2);
- s.set("e", 1);
- s.set("f", 1);
- s.set("g", 1L);
- s.set("h", 1.0f);
- s.set("i", 1.0);
- s.set("j", BigInteger.valueOf(1L));
- s.set("k", new BigDecimal(1));
- s.set("l", new Date(1418265358440L));
- s.set("m", Lists.asList(1, new Integer[]{1}));
- s.set("n", Lists.asList(BigDecimal.valueOf(1.1), new BigDecimal[]{BigDecimal.valueOf(1.1)}));
- Map<String, Double> hm = Maps.newHashMap();
- hm.put("a", 1.0);
- hm.put("b", 2.0);
- s.set("o", hm);
- s.set("enum1", "GLOBAL");
- s.set("enum2", 1);
- s.set("enum3", "COMMITTED");
- s.set("enum4", 3);
- }
-
- protected Struct createStructWithEnum(String typeName) throws AtlasException {
- Struct s = new Struct(typeName);
- fillStruct(s);
- return s;
- }
-
- protected Referenceable createInstanceWithEnum(String typeName) throws AtlasException {
- Referenceable r = new Referenceable(typeName);
- fillStruct(r);
- return r;
- }
-
- protected ClassType defineClassTypeWithEnum(TypeSystem ts) throws AtlasException {
- return ts.defineClassType(
- createClassTypeDef("t4", ImmutableSet.<String>of(), createRequiredAttrDef("a", DataTypes.INT_TYPE),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE),
- createOptionalAttrDef("c", DataTypes.BYTE_TYPE),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE),
- createOptionalAttrDef("enum1", ts.getDataType(EnumType.class, "HiveObjectType")),
- createOptionalAttrDef("e", DataTypes.INT_TYPE), createOptionalAttrDef("f", DataTypes.INT_TYPE),
- createOptionalAttrDef("g", DataTypes.LONG_TYPE),
- createOptionalAttrDef("enum2", ts.getDataType(EnumType.class, "PrincipalType")),
- createOptionalAttrDef("h", DataTypes.FLOAT_TYPE),
- createOptionalAttrDef("i", DataTypes.DOUBLE_TYPE),
- createOptionalAttrDef("j", DataTypes.BIGINTEGER_TYPE),
- createOptionalAttrDef("k", DataTypes.BIGDECIMAL_TYPE),
- createOptionalAttrDef("enum3", ts.getDataType(EnumType.class, "TxnState")),
- 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)),
- createOptionalAttrDef("enum4", ts.getDataType(EnumType.class, "LockLevel"))));
- }
-
- @Test
- public void testStruct() throws AtlasException {
- TypeSystem ts = getTypeSystem();
- defineEnums(ts);
- StructType structType = ts.defineStructType("ts", true, createRequiredAttrDef("a", DataTypes.INT_TYPE),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE), createOptionalAttrDef("c", DataTypes.BYTE_TYPE),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE),
- createOptionalAttrDef("enum1", ts.getDataType(EnumType.class, "HiveObjectType")),
- createOptionalAttrDef("e", DataTypes.INT_TYPE), createOptionalAttrDef("f", DataTypes.INT_TYPE),
- createOptionalAttrDef("g", DataTypes.LONG_TYPE),
- createOptionalAttrDef("enum2", ts.getDataType(EnumType.class, "PrincipalType")),
- createOptionalAttrDef("h", DataTypes.FLOAT_TYPE), createOptionalAttrDef("i", DataTypes.DOUBLE_TYPE),
- createOptionalAttrDef("j", DataTypes.BIGINTEGER_TYPE),
- createOptionalAttrDef("k", DataTypes.BIGDECIMAL_TYPE),
- createOptionalAttrDef("enum3", ts.getDataType(EnumType.class, "TxnState")),
- 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)),
- createOptionalAttrDef("enum4", ts.getDataType(EnumType.class, "LockLevel")));
-
- Struct s = createStructWithEnum("ts");
- ITypedStruct typedS = structType.convert(s, Multiplicity.REQUIRED);
- Assert.assertEquals(typedS.toString(), "{\n" +
- "\ta : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\td : \t2\n" +
- "\tenum1 : \tGLOBAL\n" +
- "\te : \t1\n" +
- "\tf : \t1\n" +
- "\tg : \t1\n" +
- "\tenum2 : \tUSER\n" +
- "\th : \t1.0\n" +
- "\ti : \t1.0\n" +
- "\tj : \t1\n" +
- "\tk : \t1\n" +
- "\tenum3 : \tCOMMITTED\n" +
- "\tl : \t" + TEST_DATE + "\n" +
- "\tm : \t[1, 1]\n" +
- "\tn : \t[1.1, 1.1]\n" +
- "\to : \t{a=1.0, b=2.0}\n" +
- "\tenum4 : \tPARTITION\n" +
- "}");
- }
-
- @Test
- public void testClass() throws AtlasException {
- TypeSystem ts = getTypeSystem();
- defineEnums(ts);
- ClassType clsType = defineClassTypeWithEnum(ts);
-
- IReferenceableInstance r = createInstanceWithEnum("t4");
- ITypedReferenceableInstance typedR = clsType.convert(r, Multiplicity.REQUIRED);
- Assert.assertEquals(typedR.toString(), "{\n" +
- "\tid : (type: t4, id: <unassigned>)\n" +
- "\ta : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\td : \t2\n" +
- "\tenum1 : \tGLOBAL\n" +
- "\te : \t1\n" +
- "\tf : \t1\n" +
- "\tg : \t1\n" +
- "\tenum2 : \tUSER\n" +
- "\th : \t1.0\n" +
- "\ti : \t1.0\n" +
- "\tj : \t1\n" +
- "\tk : \t1\n" +
- "\tenum3 : \tCOMMITTED\n" +
- "\tl : \t" + TEST_DATE + "\n" +
- "\tm : \t[1, 1]\n" +
- "\tn : \t[1.1, 1.1]\n" +
- "\to : \t{a=1.0, b=2.0}\n" +
- "\tenum4 : \tPARTITION\n" +
- "}");
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/FieldMappingTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/FieldMappingTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/FieldMappingTest.java
deleted file mode 100644
index 0259ade..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/FieldMappingTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import java.util.HashSet;
-
-import org.apache.atlas.typesystem.IReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.types.AttributeDefinition;
-import org.apache.atlas.typesystem.types.ClassType;
-import org.apache.atlas.typesystem.types.EnumTypeDefinition;
-import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
-import org.apache.atlas.typesystem.types.Multiplicity;
-import org.apache.atlas.typesystem.types.StructTypeDefinition;
-import org.apache.atlas.typesystem.types.TraitType;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-
-/**
- * Unit test for {@link FieldMapping}
- *
- */
-public class FieldMappingTest {
-
- @BeforeTest
- public void beforeTest() throws Exception {
- TypeSystem typeSystem = TypeSystem.getInstance();
- typeSystem.reset();
- }
-
- @Test
- public void testOutputReferenceableInstance() throws Exception {
- // ATLAS-645: verify that FieldMapping.output(IReferenceableInstance)
- // does not infinitely recurse when ITypedReferenceableInstance's reference each other.
- HierarchicalTypeDefinition<ClassType> valueDef = TypesUtil.createClassTypeDef("Value",
- ImmutableSet.<String>of(),
- new AttributeDefinition("owner", "Owner", Multiplicity.OPTIONAL, false, null));
-
- // Define class type with reference, where the value is a class reference to Value.
- HierarchicalTypeDefinition<ClassType> ownerDef = TypesUtil.createClassTypeDef("Owner",
- ImmutableSet.<String>of(),
- new AttributeDefinition("value", "Value", Multiplicity.OPTIONAL, false, null));
- TypesDef typesDef = TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(),
- ImmutableList.<StructTypeDefinition>of(), ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
- ImmutableList.of(ownerDef, valueDef));
-
- TypeSystem typeSystem = TypeSystem.getInstance();
- typeSystem.defineTypes(typesDef);
- ClassType ownerType = typeSystem.getDataType(ClassType.class, "Owner");
-
- // Prior to fix for ATLAS-645, this call would throw a StackOverflowError
- try {
- ownerType.toString();
- }
- catch (StackOverflowError e) {
- Assert.fail("Infinite recursion in ClassType.toString() caused StackOverflowError");
- }
-
- ClassType valueType = typeSystem.getDataType(ClassType.class, "Value");
-
- // Create instances of Owner and Value that reference each other.
- ITypedReferenceableInstance ownerInstance = ownerType.createInstance();
- ITypedReferenceableInstance valueInstance = valueType.createInstance();
- // Set Owner.value reference to Value instance.
- ownerInstance.set("value", valueInstance);
- // Set Value.owner reference on Owner instance.
- valueInstance.set("owner", ownerInstance);
-
- // Prior to fix for ATLAS-645, this call would throw a StackOverflowError
- try {
- ownerInstance.fieldMapping().output(ownerInstance, new StringBuilder(), "", new HashSet<IReferenceableInstance>());
- }
- catch (StackOverflowError e) {
- Assert.fail("Infinite recursion in FieldMapping.output() caused StackOverflowError");
- }
- }
-
- @Test
- public void testOutputStruct() throws Exception {
- // ATLAS-645: verify that FieldMapping.output(IStruct) does not infinitely recurse
- // when an IStruct and ITypedReferenceableInstance reference each other.
- HierarchicalTypeDefinition<ClassType> valueDef = TypesUtil.createClassTypeDef("Value",
- ImmutableSet.<String>of(),
- new AttributeDefinition("owner", "Owner", Multiplicity.OPTIONAL, false, null));
-
-
- // Define struct type with reference, where the value is a class reference to Value.
- StructTypeDefinition ownerDef = TypesUtil.createStructTypeDef("Owner",
- new AttributeDefinition("value", "Value", Multiplicity.OPTIONAL, false, null));
-
- TypesDef typesDef = TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(),
- ImmutableList.of(ownerDef), ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
- ImmutableList.of(valueDef));
-
- TypeSystem typeSystem = TypeSystem.getInstance();
- typeSystem.reset();
- typeSystem.defineTypes(typesDef);
- StructType ownerType = typeSystem.getDataType(StructType.class, "Owner");
- ClassType valueType = typeSystem.getDataType(ClassType.class, "Value");
-
- // Prior to fix for ATLAS-645, this call would throw a StackOverflowError
- try {
- ownerType.toString();
- }
- catch (StackOverflowError e) {
- Assert.fail("Infinite recursion in StructType.toString() caused StackOverflowError");
- }
-
-
- // Create instances of Owner and Value that reference each other.
- ITypedStruct ownerInstance = ownerType.createInstance();
- ITypedReferenceableInstance valueInstance = valueType.createInstance();
- // Set Owner.value reference to Value instance.
- ownerInstance.set("value", valueInstance);
- // Set Value.owner reference on Owner instance.
- valueInstance.set("owner", ownerInstance);
-
- // Prior to fix for ATLAS-645, this call would throw a StackOverflowError
- try {
- ownerInstance.fieldMapping().output(ownerInstance, new StringBuilder(), "", null);
- }
- catch (StackOverflowError e) {
- Assert.fail("Infinite recursion in FieldMapping.output() caused StackOverflowError");
- }
-
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeDependencySorterTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeDependencySorterTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeDependencySorterTest.java
deleted file mode 100644
index 19bdccf..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeDependencySorterTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.atlas.AtlasException;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableSet;
-
-
-public class HierarchicalTypeDependencySorterTest {
-
- @BeforeMethod
- public void setup() throws Exception {
- TypeSystem ts = TypeSystem.getInstance();
- ts.reset();
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testSimpleModel() throws AtlasException {
- TypeSystem ts = TypeSystem.getInstance();
- HierarchicalType a = new ClassType(ts, "a", null, ImmutableSet.<String>of(), 0);
- HierarchicalType b = new ClassType(ts, "B", null, ImmutableSet.of("a"), 0);
- HierarchicalType c = new ClassType(ts, "C", null, ImmutableSet.of("B"), 0);
-
- List<HierarchicalType> unsortedTypes = Arrays.asList(c, a, b);
- List<HierarchicalType> sortedTypes = HierarchicalTypeDependencySorter.sortTypes(unsortedTypes);
- Assert.assertEquals(sortedTypes.size(), 3);
- Assert.assertEquals(sortedTypes.indexOf(a), 0);
- Assert.assertEquals(sortedTypes.indexOf(b), 1);
- Assert.assertEquals(sortedTypes.indexOf(c), 2);
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testLargerModel() throws Exception {
- TypeSystem ts = TypeSystem.getInstance();
- HierarchicalType testObjectType = new ClassType(ts, "TestObject", null, ImmutableSet.<String>of(), 0);
- HierarchicalType testDataSetType = new ClassType(ts, "TestDataSet", null, ImmutableSet.of("TestObject"), 0);
- HierarchicalType testColumnType = new ClassType(ts, "TestColumn", null, ImmutableSet.of("TestObject"), 0);
- HierarchicalType testRelationalDataSetType = new ClassType(ts, "TestRelationalDataSet", null, ImmutableSet.of("TestDataSet"), 0);
- HierarchicalType testTableType = new ClassType(ts, "Table", null, ImmutableSet.of("TestDataSet"), 0);
- HierarchicalType testDataFileType = new ClassType(ts, "TestDataFile", null, ImmutableSet.of("TestRelationalDataSet"), 0);
- HierarchicalType testDocumentType = new ClassType(ts, "TestDocument", null, ImmutableSet.of("TestDataSet"), 0);
- HierarchicalType testAnnotationType = new ClassType(ts, "TestAnnotation", null, ImmutableSet.<String>of(), 0);
- HierarchicalType myNewAnnotationType = new ClassType(ts, "MyNewAnnotation", null, ImmutableSet.of("TestAnnotation"), 0);
-
- List<HierarchicalType> unsortedTypes = Arrays.asList(testTableType, testColumnType, myNewAnnotationType, testDataSetType,
- testDataFileType, testAnnotationType, testRelationalDataSetType, testObjectType, testDocumentType);
- List<HierarchicalType> sortedTypes = HierarchicalTypeDependencySorter.sortTypes(unsortedTypes);
- // Verify that super types were sorted before their subtypes.
- Assert.assertTrue(sortedTypes.indexOf(testObjectType) < sortedTypes.indexOf(testDataSetType));
- Assert.assertTrue(sortedTypes.indexOf(testObjectType) < sortedTypes.indexOf(testColumnType));
- Assert.assertTrue(sortedTypes.indexOf(testDataSetType) < sortedTypes.indexOf(testRelationalDataSetType));
- Assert.assertTrue(sortedTypes.indexOf(testDataSetType) < sortedTypes.indexOf(testDocumentType));
- Assert.assertTrue(sortedTypes.indexOf(testDataSetType) < sortedTypes.indexOf(testTableType));
- Assert.assertTrue(sortedTypes.indexOf(testRelationalDataSetType) < sortedTypes.indexOf(testDataFileType));
- Assert.assertTrue(sortedTypes.indexOf(testAnnotationType) < sortedTypes.indexOf(myNewAnnotationType));
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeTest.java
deleted file mode 100644
index 9f63f52..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/HierarchicalTypeTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.atlas.typesystem.types;
-
-import com.google.common.collect.ImmutableSet;
-
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public abstract class HierarchicalTypeTest<T extends HierarchicalType> extends TypeUpdateBaseTest {
- @Test
- public void testTypeUpdate() throws Exception {
- testTypeUpdateForAttributes();
-
- //Test super types
- HierarchicalTypeDefinition baseSuperType =
- getTypeDefinition(newName(), TypesUtil.createOptionalAttrDef("s", DataTypes.INT_TYPE));
-
- HierarchicalTypeDefinition classType = getTypeDefinition(newName(), ImmutableSet.of(baseSuperType.typeName),
- TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE));
- TypeSystem ts = getTypeSystem();
- ts.defineTypes(getTypesDef(baseSuperType, classType));
-
- //Add super type with optional attribute
- HierarchicalTypeDefinition superType =
- getTypeDefinition(newName(), TypesUtil.createOptionalAttrDef("s", DataTypes.INT_TYPE));
- classType = getTypeDefinition(classType.typeName, ImmutableSet.of(superType.typeName, baseSuperType.typeName),
- TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE));
- try {
- ts.updateTypes(getTypesDef(superType, classType));
- Assert.fail("Expected TypeUpdateException");
- } catch (TypeUpdateException e) {
- //expected
- }
-
- //Add super type with required attribute should fail
- HierarchicalTypeDefinition superTypeRequired =
- getTypeDefinition(newName(), TypesUtil.createRequiredAttrDef("s", DataTypes.INT_TYPE));
- classType = getTypeDefinition(classType.typeName,
- ImmutableSet.of(superTypeRequired.typeName, baseSuperType.typeName),
- TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE));
- try {
- ts.updateTypes(getTypesDef(superTypeRequired, classType));
- Assert.fail("Expected TypeUpdateException");
- } catch (TypeUpdateException e) {
- //expected
- }
-
- //Deleting super type should fail
- classType = getTypeDefinition(classType.typeName, TypesUtil.createRequiredAttrDef("a", DataTypes.INT_TYPE));
- try {
- ts.updateTypes(getTypesDef(classType));
- Assert.fail("Expected TypeUpdateException");
- } catch (TypeUpdateException e) {
- //expected
- }
- }
-
- @Override
- protected abstract HierarchicalTypeDefinition<T> getTypeDefinition(String name, AttributeDefinition... attributes);
-
- protected abstract HierarchicalTypeDefinition<T> getTypeDefinition(String name, ImmutableSet<String> superTypes,
- AttributeDefinition... attributes);
-
- @Override
- protected abstract TypesDef getTypesDef(StructTypeDefinition typeDefinition);
-
- protected abstract TypesDef getTypesDef(HierarchicalTypeDefinition<T>... typeDefinitions);
-
- @Override
- protected int getNumberOfFields(TypeSystem ts, String typeName) throws Exception {
- return ts.getDataType(HierarchicalType.class, typeName).numFields;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/StructTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/StructTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/StructTest.java
deleted file mode 100755
index 3a1675e..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/StructTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.assertTrue;
-
-public class StructTest extends TypeUpdateBaseTest {
-
- StructType structType;
- StructType recursiveStructType;
- StructType invalidStructType;
-
- @BeforeMethod
- public void setup() throws Exception {
- super.setup();
- structType = getTypeSystem().getDataType(StructType.class, STRUCT_TYPE_1);
- recursiveStructType = getTypeSystem().getDataType(StructType.class, STRUCT_TYPE_2);
- invalidStructType = getTypeSystem().getDataType(StructType.class, STRUCT_TYPE_3);
- }
-
- @Test
- public void test1() throws AtlasException {
- Struct s = createStruct();
- ITypedStruct ts = structType.convert(s, Multiplicity.REQUIRED);
- Assert.assertEquals(ts.toString(), "{\n" +
- "\ta : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\td : \t2\n" +
- "\te : \t1\n" +
- "\tf : \t1\n" +
- "\tg : \t1\n" +
- "\th : \t1.0\n" +
- "\ti : \t1.0\n" +
- "\tj : \t1\n" +
- "\tk : \t1\n" +
- "\tl : \t" + TEST_DATE + "\n" +
- "\tm : \t[1, 1]\n" +
- "\tn : \t[1.1, 1.1]\n" +
- "\to : \t{a=1.0, b=2.0}\n" +
- "\tp : \t\n" +
- "\tq : \t<null>\n"+
- "\tr : \t{a=}\n" +
- "}");
- }
-
- @Test
- public void testStructWithEmptyString() throws AtlasException{
- try {
- assertTrue(getTypeSystem().getTypeNames().contains("t3"));
- Struct s = new Struct(invalidStructType.getName());
- s.set("a", "");
- ITypedStruct ts = invalidStructType.convert(s, Multiplicity.REQUIRED);
- }
- catch (AtlasException e){
- String err = "org.apache.atlas.typesystem.types.ValueConversionException: Cannot convert value 'org.apache.atlas.typesystem.Struct@1ba02' to datatype t3";
- Assert.assertEquals(e.toString(), err);
- }
- }
-
- @Test
- public void testRecursive() throws AtlasException {
- Struct s1 = new Struct(recursiveStructType.getName());
- s1.set("a", 1);
- Struct s2 = new Struct(recursiveStructType.getName());
- s2.set("a", 1);
- s2.set("s", s1);
- ITypedStruct ts = recursiveStructType.convert(s2, Multiplicity.REQUIRED);
- Assert.assertEquals(ts.toString(), "{\n" +
- "\ta : \t1\n" +
- "\ts : \t{\n" +
- "\t\ta : \t\t1\n" +
- "\t\ts : <null>\n" +
- "\n" +
- "\t}\n" +
- "}");
- }
-
- @Test
- public void testTypeUpdate() throws Exception {
- testTypeUpdateForAttributes();
- }
-
- @Override
- protected int getNumberOfFields(TypeSystem ts, String typeName) throws Exception {
- return ts.getDataType(StructType.class, typeName).numFields;
- }
-
- @Override
- protected StructTypeDefinition getTypeDefinition(String name, AttributeDefinition... attributes) {
- return new StructTypeDefinition(name, attributes);
- }
-
- @Override
- protected TypesDef getTypesDef(StructTypeDefinition typeDefinition) {
- return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.of(typeDefinition),
- ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
- ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
----------------------------------------------------------------------
diff --git a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java b/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
deleted file mode 100755
index 7c39213..0000000
--- a/typesystem/src/test/java/org/apache/atlas/typesystem/types/TraitTest.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/**
- * 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.atlas.typesystem.types;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.TypesDef;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createOptionalAttrDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createRequiredAttrDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createTraitTypeDef;
-
-public class TraitTest extends HierarchicalTypeTest<TraitType> {
-
-
- @BeforeMethod
- public void setup() throws Exception {
- super.setup();
- }
-
- /*
- * Type Hierarchy is:
- * A(a,b,c,d)
- * B(b) extends A
- * C(c) extends A
- * D(d) extends B,C
- *
- * - There are a total of 11 fields in an instance of D
- * - an attribute that is hidden by a SubType can referenced by prefixing it with the
- * complete Path.
- * For e.g. the 'b' attribute in A (that is a superType for B) is hidden the 'b' attribute
- * in B.
- * So it is available by the name 'A.B.D.b'
- *
- * - Another way to set attributes is to cast. Casting a 'D' instance of 'B' makes the 'A.B.D
- * .b' attribute
- * available as 'A.B.b'. Casting one more time to an 'A' makes the 'A.B.b' attribute
- * available as 'b'.
- */
- @Test
- public void test1() throws AtlasException {
- HierarchicalTypeDefinition A = createTraitTypeDef("A", null, createRequiredAttrDef("a", DataTypes.INT_TYPE),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE), createOptionalAttrDef("c", DataTypes.BYTE_TYPE),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE));
- HierarchicalTypeDefinition B = createTraitTypeDef("B", ImmutableSet.of("A"),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE));
- HierarchicalTypeDefinition C =
- createTraitTypeDef("C", ImmutableSet.of("A"), createOptionalAttrDef("c", DataTypes.BYTE_TYPE));
- HierarchicalTypeDefinition D = createTraitTypeDef("D", ImmutableSet.of("B", "C"),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE));
-
- defineTraits(A, B, C, D);
-
- TraitType DType = getTypeSystem().getDataType(TraitType.class, "D");
-
- // for(String aName : DType.fieldMapping().fields.keySet()) {
- // System.out.println(String.format("nameToQualifiedName.put(\"%s\", \"%s\");", aName, DType
- // .getQualifiedName(aName)));
- // }
-
- Map<String, String> nameToQualifiedName = new HashMap();
- {
- nameToQualifiedName.put("d", "D.d");
- nameToQualifiedName.put("b", "B.b");
- nameToQualifiedName.put("c", "C.c");
- nameToQualifiedName.put("a", "A.a");
- nameToQualifiedName.put("A.B.D.b", "A.B.D.b");
- nameToQualifiedName.put("A.B.D.c", "A.B.D.c");
- nameToQualifiedName.put("A.B.D.d", "A.B.D.d");
- nameToQualifiedName.put("A.C.D.a", "A.C.D.a");
- nameToQualifiedName.put("A.C.D.b", "A.C.D.b");
- nameToQualifiedName.put("A.C.D.c", "A.C.D.c");
- nameToQualifiedName.put("A.C.D.d", "A.C.D.d");
- }
-
- Struct s1 = new Struct("D");
- s1.set("d", 1);
- s1.set("c", 1);
- s1.set("b", true);
- s1.set("a", 1);
- s1.set("A.B.D.b", true);
- s1.set("A.B.D.c", 2);
- s1.set("A.B.D.d", 2);
-
- s1.set("A.C.D.a", 3);
- s1.set("A.C.D.b", false);
- s1.set("A.C.D.c", 3);
- s1.set("A.C.D.d", 3);
-
-
- ITypedStruct ts = DType.convert(s1, Multiplicity.REQUIRED);
- Assert.assertEquals(ts.toString(), "{\n" +
- "\td : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\ta : \t1\n" +
- "\tA.B.D.b : \ttrue\n" +
- "\tA.B.D.c : \t2\n" +
- "\tA.B.D.d : \t2\n" +
- "\tA.C.D.a : \t3\n" +
- "\tA.C.D.b : \tfalse\n" +
- "\tA.C.D.c : \t3\n" +
- "\tA.C.D.d : \t3\n" +
- "}");
-
- /*
- * cast to B and set the 'b' attribute on A.
- */
- TraitType BType = getTypeSystem().getDataType(TraitType.class, "B");
- IStruct s2 = DType.castAs(ts, "B");
- s2.set("A.B.b", false);
-
- Assert.assertEquals(ts.toString(), "{\n" +
- "\td : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\ta : \t1\n" +
- "\tA.B.D.b : \tfalse\n" +
- "\tA.B.D.c : \t2\n" +
- "\tA.B.D.d : \t2\n" +
- "\tA.C.D.a : \t3\n" +
- "\tA.C.D.b : \tfalse\n" +
- "\tA.C.D.c : \t3\n" +
- "\tA.C.D.d : \t3\n" +
- "}");
-
- /*
- * cast again to A and set the 'b' attribute on A.
- */
- TraitType AType = getTypeSystem().getDataType(TraitType.class, "A");
- IStruct s3 = BType.castAs(s2, "A");
- s3.set("b", true);
- Assert.assertEquals(ts.toString(), "{\n" +
- "\td : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\ta : \t1\n" +
- "\tA.B.D.b : \ttrue\n" +
- "\tA.B.D.c : \t2\n" +
- "\tA.B.D.d : \t2\n" +
- "\tA.C.D.a : \t3\n" +
- "\tA.C.D.b : \tfalse\n" +
- "\tA.C.D.c : \t3\n" +
- "\tA.C.D.d : \t3\n" +
- "}");
- }
-
- @Test
- public void testRandomOrder() throws AtlasException {
- HierarchicalTypeDefinition A = createTraitTypeDef("A", null, createRequiredAttrDef("a", DataTypes.INT_TYPE),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE), createOptionalAttrDef("c", DataTypes.BYTE_TYPE),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE));
- HierarchicalTypeDefinition B = createTraitTypeDef("B", ImmutableSet.of("A"),
- createOptionalAttrDef("b", DataTypes.BOOLEAN_TYPE));
- HierarchicalTypeDefinition C = createTraitTypeDef("C", ImmutableSet.of("A"),
- createOptionalAttrDef("c", DataTypes.BYTE_TYPE));
- HierarchicalTypeDefinition D = createTraitTypeDef("D", ImmutableSet.of("B", "C"),
- createOptionalAttrDef("d", DataTypes.SHORT_TYPE));
-
- defineTraits(B, D, A, C);
-
- TraitType DType = getTypeSystem().getDataType(TraitType.class, "D");
-
- Struct s1 = new Struct("D");
- s1.set("d", 1);
- s1.set("c", 1);
- s1.set("b", true);
- s1.set("a", 1);
- s1.set("A.B.D.b", true);
- s1.set("A.B.D.c", 2);
- s1.set("A.B.D.d", 2);
-
- s1.set("A.C.D.a", 3);
- s1.set("A.C.D.b", false);
- s1.set("A.C.D.c", 3);
- s1.set("A.C.D.d", 3);
-
-
- ITypedStruct ts = DType.convert(s1, Multiplicity.REQUIRED);
- Assert.assertEquals(ts.toString(), "{\n" +
- "\td : \t1\n" +
- "\tb : \ttrue\n" +
- "\tc : \t1\n" +
- "\ta : \t1\n" +
- "\tA.B.D.b : \ttrue\n" +
- "\tA.B.D.c : \t2\n" +
- "\tA.B.D.d : \t2\n" +
- "\tA.C.D.a : \t3\n" +
- "\tA.C.D.b : \tfalse\n" +
- "\tA.C.D.c : \t3\n" +
- "\tA.C.D.d : \t3\n" +
- "}");
- }
-
- @Override
- protected HierarchicalTypeDefinition<TraitType> getTypeDefinition(String name, AttributeDefinition... attributes) {
- return new HierarchicalTypeDefinition(TraitType.class, name, null, null, attributes);
- }
-
- @Override
- protected HierarchicalTypeDefinition<TraitType> getTypeDefinition(String name, ImmutableSet<String> superTypes,
- AttributeDefinition... attributes) {
- return new HierarchicalTypeDefinition(TraitType.class, name, null, superTypes, attributes);
- }
-
- @Override
- protected TypesDef getTypesDef(StructTypeDefinition typeDefinition) {
- return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.of((HierarchicalTypeDefinition<TraitType>) typeDefinition),
- ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
- }
-
- @Override
- protected TypesDef getTypesDef(HierarchicalTypeDefinition<TraitType>... typeDefinitions) {
- return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), ImmutableList.<StructTypeDefinition>of(),
- ImmutableList.copyOf(typeDefinitions), ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
- }
-}
-