You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by da...@apache.org on 2018/02/16 09:52:20 UTC

[04/30] atlas git commit: ATLAS-2246: OMRS Connector API plus REST and IGC Connector skeleton - 15th February 2018

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EntityDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EntityDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EntityDef.java
new file mode 100644
index 0000000..72e216a
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EntityDef.java
@@ -0,0 +1,93 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+/**
+ * EntityDef describes a type of entity in the metadata collection.  It is the simplest TypeDef that adds
+ * no other properties beyond TypeDef.
+ */
+public class EntityDef extends TypeDef
+{
+    /**
+     * Minimal constructor - initializes the superclass as an Entity
+     */
+    public EntityDef()
+    {
+        super(TypeDefCategory.ENTITY_DEF);
+    }
+
+
+    /**
+     * Typical constructor is passed the properties of the typedef's super class being constructed.
+     *
+     * @param category    - category of this TypeDef
+     * @param guid        - unique id for the TypeDef
+     * @param name        - unique name for the TypeDef
+     * @param version     - active version number for the TypeDef
+     * @param versionName - unique name for the TypeDef
+     */
+    public EntityDef(TypeDefCategory category,
+                     String          guid,
+                     String          name,
+                     long            version,
+                     String          versionName)
+    {
+        super(category, guid, name, version, versionName);
+    }
+
+
+    /**
+     * Copy/clone constructor - copies the values from the supplied template.
+     *
+     * @param template EntityDef
+     */
+    public EntityDef(EntityDef   template)
+    {
+        super(template);
+    }
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "EntityDef{" +
+                "superType=" + superType +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                ", origin='" + origin + '\'' +
+                ", createdBy='" + createdBy + '\'' +
+                ", updatedBy='" + updatedBy + '\'' +
+                ", createTime=" + createTime +
+                ", updateTime=" + updateTime +
+                ", options=" + options +
+                ", externalStandardMappings=" + externalStandardMappings +
+                ", validInstanceStatusList=" + validInstanceStatusList +
+                ", initialStatus=" + initialStatus +
+                ", propertiesDefinition=" + propertiesDefinition +
+                ", version=" + version +
+                ", versionName='" + versionName + '\'' +
+                ", category=" + category +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumDef.java
new file mode 100644
index 0000000..5f7b881
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumDef.java
@@ -0,0 +1,119 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+import java.util.ArrayList;
+
+/**
+ * The EnumDef describes an open metadata enumeration.  This enumeration consists of a list of valid values
+ * (stored in EnumElementDef objects) and a default value.
+ */
+public class EnumDef extends AttributeTypeDef
+{
+    private ArrayList<EnumElementDef> elementDefs    = null;
+    private EnumElementDef            defaultValue   = null;
+
+
+    /**
+     * Default constructor sets up an empty EnumDef.
+     */
+    public EnumDef()
+    {
+        super(AttributeTypeDefCategory.ENUM_DEF);
+    }
+
+
+    /**
+     * Copy/clone constructor sets the EnumDef based on the values from the supplied template.
+     *
+     * @param template EnumDef
+     */
+    public EnumDef(EnumDef   template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            elementDefs = template.getElementDefs();
+            defaultValue = template.getDefaultValue();
+        }
+    }
+
+
+    /**
+     * Return the list of defined Enum values for this EnumDef.
+     *
+     * @return EnumElementDefs list
+     */
+    public ArrayList<EnumElementDef> getElementDefs()
+    {
+        if (elementDefs == null)
+        {
+            return elementDefs;
+        }
+        else
+        {
+            return new ArrayList<>(elementDefs);
+        }
+    }
+
+
+    /**
+     * Set up the list of defined Enum values for this EnumDef.
+     *
+     * @param elementDefs - EnumElementDefs list
+     */
+    public void setElementDefs(ArrayList<EnumElementDef> elementDefs) { this.elementDefs = elementDefs; }
+
+
+    /**
+     * Return the default value for the EnumDef.
+     *
+     * @return EnumElementDef representing the default value
+     */
+    public EnumElementDef getDefaultValue() { return defaultValue; }
+
+
+    /**
+     * Set up the default value for the EnumDef.
+     *
+     * @param defaultValue - EnumElementDef representing the default value
+     */
+    public void setDefaultValue(EnumElementDef defaultValue) { this.defaultValue = defaultValue; }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "EnumDef{" +
+                "elementDefs=" + elementDefs +
+                ", defaultValue=" + defaultValue +
+                ", category=" + category +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumElementDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumElementDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumElementDef.java
new file mode 100644
index 0000000..810bc85
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/EnumElementDef.java
@@ -0,0 +1,144 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+/**
+ * EnumElementDef describes a single valid value defined for an enum.
+ */
+public class EnumElementDef extends TypeDefElementHeader
+{
+    private int    ordinal         = 99;
+    private String value           = null;
+    private String description     = null;
+    private String descriptionGUID = null;
+
+
+    /**
+     * Default constructor - sets up an empty EnumElementDef
+     */
+    public EnumElementDef()
+    {
+        super();
+    }
+
+
+    /**
+     * Copy/clone constructor - sets up an EnumElementDef based on the values supplied in the template.
+     *
+     * @param template EnumElementDef
+     */
+    public EnumElementDef(EnumElementDef  template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            ordinal = template.getOrdinal();
+            value = template.getValue();
+            description = template.getDescription();
+            descriptionGUID = template.getDescriptionGUID();
+        }
+    }
+
+
+    /**
+     * Return the numeric value used for the enum value.
+     *
+     * @return int ordinal
+     */
+    public int getOrdinal() { return ordinal; }
+
+
+    /**
+     * Set up the numeric value for the enum value.
+     *
+     * @param ordinal int
+     */
+    public void setOrdinal(int ordinal) { this.ordinal = ordinal; }
+
+
+    /**
+     * Return the symbolic name for the enum value.
+     *
+     * @return String name
+     */
+    public String getValue() { return value; }
+
+
+    /**
+     * Set up the symbolic name for the enum value.
+     *
+     * @param value String name
+     */
+    public void setValue(String value) { this.value = value; }
+
+
+    /**
+     * Return the description for the enum value.
+     *
+     * @return String description
+     */
+    public String getDescription() { return description; }
+
+
+    /**
+     * Set up the description for the enum value.
+     *
+     * @param description String
+     */
+    public void setDescription(String description) { this.description = description; }
+
+
+    /**
+     * Return the unique identifier (guid) of the glossary term that describes this EnumElementDef.
+     *
+     * @return String guid
+     */
+    public String getDescriptionGUID()
+    {
+        return descriptionGUID;
+    }
+
+
+    /**
+     * Set up the unique identifier (guid) of the glossary term that describes this EnumElementDef.
+     *
+     * @param descriptionGUID - String guid
+     */
+    public void setDescriptionGUID(String descriptionGUID)
+    {
+        this.descriptionGUID = descriptionGUID;
+    }
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "EnumElementDef{" +
+                "ordinal=" + ordinal +
+                ", value='" + value + '\'' +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/ExternalStandardMapping.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/ExternalStandardMapping.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/ExternalStandardMapping.java
new file mode 100644
index 0000000..e9cca34
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/ExternalStandardMapping.java
@@ -0,0 +1,141 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+/**
+ * ExternalStandardMapping defines a mapping of TypeDefs and TypeDefAttributes to an external standard.  It includes the name
+ * of the standard, the organization that owns the standard and the equivalent type in the external standard.
+ * This mapping is done on a property type by property type basis.  The aim is to create clarity on the meaning
+ * of the open metadata types and support importers and exporters between open metadata types and external standards.
+ */
+public class ExternalStandardMapping extends TypeDefElementHeader
+{
+    private   String standardName = null;
+    private   String standardOrganization = null;
+    private   String standardTypeName = null;
+
+
+    /**
+     * Default Constructor - initializes to null.
+     */
+    public ExternalStandardMapping()
+    {
+        /*
+         * Initialize superclass.
+         */
+        super();
+    }
+
+
+    /**
+     * Copy/clone constructor - copies values from supplied template.
+     *
+     * @param templateElement - template to copy.
+     */
+    public ExternalStandardMapping(ExternalStandardMapping  templateElement)
+    {
+        /*
+         * Initialize superclass.
+         */
+        super(templateElement);
+
+        /*
+         * Copy the template values over.
+         */
+        this.standardName = templateElement.getStandardName();
+        this.standardOrganization = templateElement.getStandardOrganization();
+        this.standardTypeName = templateElement.getStandardTypeName();
+    }
+
+
+    /**
+     * Return the name of the standard that this mapping relates to.
+     *
+     * @return String standard name
+     */
+    public String getStandardName() {
+        return standardName;
+    }
+
+
+    /**
+     * Set up the name of the standard that this mapping relates to.
+     *
+     * @param standardName - String standard name
+     */
+    public void setStandardName(String standardName) {
+        this.standardName = standardName;
+    }
+
+
+    /**
+     * Return the name of organization that owns the standard that this mapping refers to.
+     *
+     * @return String organization name
+     */
+    public String getStandardOrganization() {
+        return standardOrganization;
+    }
+
+
+    /**
+     * Set up the name of the organization that owns the standard that this mapping refers to.
+     *
+     * @param standardOrganization - String organization name
+     */
+    public void setStandardOrganization(String standardOrganization)
+    {
+        this.standardOrganization = standardOrganization;
+    }
+
+
+    /**
+     * Return the name of the type from the standard that is equivalent to the linked open metadata type.
+     *
+     * @return String type name from standard
+     */
+    public String getStandardTypeName() {
+        return standardTypeName;
+    }
+
+
+    /**
+     * Set up the name of the type from the standard that is equivalent to the linked open metadata type.
+     *
+     * @param standardTypeName - String type name from standard
+     */
+    public void setStandardTypeName(String standardTypeName) {
+        this.standardTypeName = standardTypeName;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "ExternalStandardMapping{" +
+                "standardName='" + standardName + '\'' +
+                ", standardOrganization='" + standardOrganization + '\'' +
+                ", standardTypeName='" + standardTypeName + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDef.java
new file mode 100644
index 0000000..94ab27b
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDef.java
@@ -0,0 +1,83 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+/**
+ * PrimitiveDef supports the definition of a primitive type.  This information is managed in the
+ * PrimitiveDefCategory.
+ */
+public class PrimitiveDef extends AttributeTypeDef
+{
+    private  PrimitiveDefCategory   primitiveDefCategory = null;
+
+
+    /**
+     * Default constructor initializes the PrimitiveDef based on the supplied category.
+     *
+     * @param primitiveDefCategory - PrimitiveDefCategory Enum
+     */
+    public PrimitiveDef(PrimitiveDefCategory  primitiveDefCategory)
+    {
+        super(AttributeTypeDefCategory.PRIMITIVE);
+
+        this.primitiveDefCategory = primitiveDefCategory;
+    }
+
+
+    /**
+     * Copy/clone constructor creates a copy of the supplied template.
+     *
+     * @param template PrimitiveDef to copy
+     */
+    public PrimitiveDef(PrimitiveDef template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            this.primitiveDefCategory = template.getPrimitiveDefCategory();
+        }
+    }
+
+
+    /**
+     * Return the type category for this primitive type.
+     *
+     * @return PrimitiveDefCategory Enum
+     */
+    public PrimitiveDefCategory getPrimitiveDefCategory() { return primitiveDefCategory; }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "PrimitiveDef{" +
+                "primitiveDefCategory=" + primitiveDefCategory +
+                ", category=" + category +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDefCategory.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDefCategory.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDefCategory.java
new file mode 100644
index 0000000..2c5f65a
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/PrimitiveDefCategory.java
@@ -0,0 +1,103 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * This enumeration defines the list of open metadata primitive types.  This includes a code value, a string
+ * name for the type (used in self describing structures such as JSON or XML) and the name of the Java Class
+ * that supports this type.
+ */
+public enum PrimitiveDefCategory implements Serializable
+{
+    OM_PRIMITIVE_TYPE_UNKNOWN   (0,  "<>",         null,                    null),
+    OM_PRIMITIVE_TYPE_BOOLEAN   (1,  "boolean",    "java.lang.Boolean",     "3863f010-611c-41fe-aaae-5d4d427f863b"),
+    OM_PRIMITIVE_TYPE_BYTE      (2,  "byte",       "java.lang.Byte",        "6b7d410a-2e8a-4d12-981a-a806449f9bdb"),
+    OM_PRIMITIVE_TYPE_CHAR      (3,  "char",       "java.Lang.Char",        "b0abebe5-cf85-4065-86ad-f3c6360ed9c7"),
+    OM_PRIMITIVE_TYPE_SHORT     (4,  "short",      "java.lang.Short",       "8e95b966-ab60-46d4-a03f-40c5a1ba6c2a"),
+    OM_PRIMITIVE_TYPE_INT       (5,  "int",        "java.lang.Integer",     "7fc49104-fd3a-46c8-b6bf-f16b6074cd35"),
+    OM_PRIMITIVE_TYPE_LONG      (6,  "long",       "java.lang.Long",        "33a91510-92ee-4825-9f49-facd7a6f9db6"),
+    OM_PRIMITIVE_TYPE_FLOAT     (7,  "float",      "java.lang.Float",       "52aeb769-37b7-4b30-b949-ddc7dcebcfa2"),
+    OM_PRIMITIVE_TYPE_DOUBLE    (8,  "double",     "java.lang.Double",      "e13572e8-25c3-4994-acb6-2ea66c95812e"),
+    OM_PRIMITIVE_TYPE_BIGINTEGER(9,  "biginteger", "java.math.BigInteger",  "8aa56e52-1076-4e0d-9b66-3873a1ed7392"),
+    OM_PRIMITIVE_TYPE_BIGDECIMAL(10, "bigdecimal", "java.math.BigDecimal",  "d5c8ad9f-8fee-4a64-80b3-63ce1e47f6bb"),
+    OM_PRIMITIVE_TYPE_STRING    (11, "string",     "java.lang.String",      "b34a64b9-554a-42b1-8f8a-7d5c2339f9c4"),
+    OM_PRIMITIVE_TYPE_DATE      (12, "date",       "java.util.Date",        "1bef35ca-d4f9-48db-87c2-afce4649362d");
+
+    private static final long serialVersionUID = 1L;
+
+    private  int         code;
+    private  String      name;
+    private  String      javaClassName;
+    private  String      guid;
+
+
+    /**
+     * Constructor to set up a single instances of the enum.
+     *
+     * @param code - int code for enum
+     * @param name - String name of the primitive type
+     * @param javaClassName - String name of the class that stores the primitive attribute.
+     */
+    PrimitiveDefCategory(int   code, String name, String javaClassName, String guid)
+    {
+        this.code = code;
+        this.name = name;
+        this.javaClassName = javaClassName;
+        this.guid = guid;
+    }
+
+    /**
+     * Return the numeric code for the primitive type which can be used in optimized data flows.
+     *
+     * @return int type code
+     */
+    public int getCode() {
+        return code;
+    }
+
+
+    /**
+     * Return the name of type - which can be used for text-based interchange formats such as JSON or XML.
+     *
+     * @return String type name
+     */
+    public String getName() {
+        return name;
+    }
+
+
+    /**
+     * Return the name of the java class that can be used to store properties of this type.
+     *
+     * @return String java class name.
+     */
+    public String getJavaClassName() {
+        return javaClassName;
+    }
+
+
+    /**
+     * Return the guid for this primitive type.
+     *
+     * @return String guid
+     */
+    public String getGUID() { return guid; }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipCategory.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipCategory.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipCategory.java
new file mode 100644
index 0000000..da21faa
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipCategory.java
@@ -0,0 +1,94 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *     The RelationshipCategory determines the style of relationship around containment and lifecycle.
+ *     UML terminology is used for the values.  All relationships are navigable in both directions.
+ * </p>
+ * <p>
+ *     Association is a simple relationship with no containment.
+ *     Composition and Aggregation are containment relationships which means there is a notion of
+ *     control or collective management of the contained entities by the containing entity.
+ * </p>
+ * <p>
+ *     Entities in an aggregation relationship can be
+ *     aggregated by many other entities and their lifecycle is not controlled by the containing entity.
+ *     For example, contained entities are not deleted when the containing entity is deleted.
+ * </p>
+ * <p>
+ *     Composition relationship is a "part of" relationship where the contained entities can only exist in the
+ *     scope/context of the containing entity.  Often the fully qualified name of a contained entity
+ *     in a composition relationship includes the name of its containing entity.
+ * </p>
+ */
+public enum RelationshipCategory implements Serializable
+{
+    UNKNOWN    (0, "<Unknown>",   "Uninitialized Relationship."),
+    ASSOCIATION(1, "Association", "Simple relationship."),
+    AGGREGATION(2, "Aggregation", "A grouping of entities that are managed together."),
+    COMPOSITION(3, "Composition", "A grouping of entities that are part of a bigger concept.");
+
+    private static final long serialVersionUID = 1L;
+
+    private int            ordinal;
+    private String         name;
+    private String         description;
+
+
+    /**
+     * Constructor to set up a single instances of the enum.
+     *
+     * @param ordinal - code value
+     * @param name - name
+     * @param description - default description
+     */
+    RelationshipCategory(int   ordinal, String    name, String    description)
+    {
+        this.ordinal = ordinal;
+        this.name = name;
+        this.description = description;
+    }
+
+
+    /**
+     * Return the numeric representation of the relationship category.
+     *
+     * @return int ordinal
+     */
+    public int getOrdinal() { return ordinal; }
+
+
+    /**
+     * Return the default name of the relationship category.
+     *
+     * @return String name
+     */
+    public String getName() { return name; }
+
+
+    /**
+     * Return the default description of the relationship category.
+     *
+     * @return String description
+     */
+    public String getDescription() { return description; }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipContainerEnd.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipContainerEnd.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipContainerEnd.java
new file mode 100644
index 0000000..4c533c1
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipContainerEnd.java
@@ -0,0 +1,75 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+import java.io.Serializable;
+
+/**
+ * The RelationshipContainerEnd enum defines which end of the relationship is the container (where the diamond is
+ * in UML-speak).  NOT_APPLICABLE is used on an association.  END1 or END2 is used on an aggregation or composition.
+ */
+public enum RelationshipContainerEnd implements Serializable
+{
+    NOT_APPLICABLE  (0, "Not Applicable",  "This relationship does not support containment."),
+    END1            (1, "End 1",           "The containment is at end 1."),
+    END2            (2, "End 2",           "The containment is at end 2.");
+
+    private static final long serialVersionUID = 1L;
+
+    private int     ordinal;
+    private String  name;
+    private String  description;
+
+    /**
+     * Constructor to set up a single instances of the enum.
+     *
+     * @param ordinal - numerical representation of the container end
+     * @param name - default string name of the container end
+     * @param description - default string description of the container
+     */
+    RelationshipContainerEnd(int  ordinal, String name, String description)
+    {
+        this.ordinal = ordinal;
+        this.name = name;
+        this.description = description;
+    }
+
+    /**
+     * Return the numeric representation of the container end indicator.
+     *
+     * @return int ordinal
+     */
+    public int getOrdinal() { return ordinal; }
+
+
+    /**
+     * Return the default name of the container end indicator.
+     *
+     * @return String name
+     */
+    public String getName() { return name; }
+
+
+    /**
+     * Return the default description of the container end indicator.
+     *
+     * @return String description
+     */
+    public String getDescription() { return description; }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipDef.java
new file mode 100644
index 0000000..44f7adb
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipDef.java
@@ -0,0 +1,217 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+/**
+ * RelationshipDef describes the type of a relationship.  A relationships links two entities together.
+ * The RelationshipDef defines the types of those entities in the RelationshipEndDefs.  It
+ * defines if this relationship allows classifications to propagate through it and also it defines the type of
+ * relationship - such as association, composition and aggregation.
+ */
+public class RelationshipDef extends TypeDef
+{
+    private RelationshipCategory          relationshipCategory     = RelationshipCategory.UNKNOWN;
+    private RelationshipContainerEnd      relationshipContainerEnd = RelationshipContainerEnd.NOT_APPLICABLE;
+    private ClassificationPropagationRule propagationRule          = ClassificationPropagationRule.NONE;
+    private RelationshipEndDef            endDef1                  = null;
+    private RelationshipEndDef            endDef2                  = null;
+
+
+    /**
+     * Minimal constructor builds an empty RelationshipDef
+     */
+    public RelationshipDef()
+    {
+        super(TypeDefCategory.RELATIONSHIP_DEF);
+    }
+
+
+    /**
+     * Typical constructor is passed the properties of the typedef's super class being constructed.
+     *
+     * @param category    - category of this TypeDef
+     * @param guid        - unique id for the TypeDef
+     * @param name        - unique name for the TypeDef
+     * @param version     - active version number for the TypeDef
+     * @param versionName - unique name for the TypeDef
+     */
+    public RelationshipDef(TypeDefCategory category,
+                           String          guid,
+                           String          name,
+                           long            version,
+                           String          versionName)
+    {
+        super(category, guid, name, version, versionName);
+    }
+
+
+    /**
+     * Copy/clone constructor creates a copy of the supplied template.
+     *
+     * @param templateTypeDef - template to copy
+     */
+    public RelationshipDef(RelationshipDef templateTypeDef)
+    {
+        super(templateTypeDef);
+
+        if (templateTypeDef != null)
+        {
+            this.relationshipCategory = templateTypeDef.getRelationshipCategory();
+            this.propagationRule = templateTypeDef.getPropagationRule();
+            this.endDef1 = templateTypeDef.getEndDef1();
+            this.endDef2 = templateTypeDef.getEndDef2();
+        }
+    }
+
+
+    /**
+     * Return the specific category for this relationship.
+     *
+     * @return RelationshipCategory Enum
+     */
+    public RelationshipCategory getRelationshipCategory() { return relationshipCategory; }
+
+
+    /**
+     * Set up the specific category for this relationship.
+     *
+     * @param relationshipCategory - RelationshipCategory enum
+     */
+    public void setRelationshipCategory(RelationshipCategory relationshipCategory)
+    {
+        this.relationshipCategory = relationshipCategory;
+    }
+
+
+    /**
+     * Return the enum that defines which end of the relationship is the container (the diamond end in UML-speak).
+     * This is used in conjunction with relationship categories AGGREGATION and COMPOSITION.
+     *
+     * @return RelationshipContainerEnd enum value
+     */
+    public RelationshipContainerEnd getRelationshipContainerEnd()
+    {
+        return relationshipContainerEnd;
+    }
+
+
+    /**
+     * Set up the enum that defines which end of the relationship is the container (the diamond end in UML-speak).
+     * This is used in conjunction with relationship categories AGGREGATION and COMPOSITION.
+     *
+     * @param relationshipContainerEnd - RelationshipContainerEnd enum value
+     */
+    public void setRelationshipContainerEnd(RelationshipContainerEnd relationshipContainerEnd)
+    {
+        this.relationshipContainerEnd = relationshipContainerEnd;
+    }
+
+
+    /**
+     * Return the rule that determines if classifications are propagated across this relationship.
+     *
+     * @return ClassificationPropagationRule Enum
+     */
+    public ClassificationPropagationRule getPropagationRule() { return propagationRule; }
+
+
+    /**
+     * Set up the rule that determines if classifications are propagated across this relationship.
+     *
+     * @param propagationRule - ClassificationPropagationRule Enum
+     */
+    public void setPropagationRule(ClassificationPropagationRule propagationRule)
+    {
+        this.propagationRule = propagationRule;
+    }
+
+
+    /**
+     * Return the details associated with the first end of the relationship.
+     *
+     * @return endDef1 RelationshipEndDef
+     */
+    public RelationshipEndDef getEndDef1()
+    {
+        return endDef1;
+    }
+
+
+    /**
+     * Set up the details associated with the first end of the relationship.
+     *
+     * @param endDef1 RelationshipEndDef
+     */
+    public void setEndDef1(RelationshipEndDef endDef1) { this.endDef1 = endDef1; }
+
+
+    /**
+     * Return the details associated with the second end of the relationship.
+     *
+     * @return endDef2 RelationshipEndDef
+     */
+    public RelationshipEndDef getEndDef2()
+    {
+        return endDef2;
+    }
+
+
+    /**
+     * Set up the details associated with the second end of the relationship.
+     *
+     * @param endDef2 RelationshipEndDef
+     */
+    public void setEndDef2(RelationshipEndDef endDef2) { this.endDef2 = endDef2; }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "RelationshipDef{" +
+                "relationshipCategory=" + relationshipCategory +
+                ", relationshipContainerEnd=" + relationshipContainerEnd +
+                ", propagationRule=" + propagationRule +
+                ", endDef1=" + endDef1 +
+                ", endDef2=" + endDef2 +
+                ", superType=" + superType +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                ", origin='" + origin + '\'' +
+                ", createdBy='" + createdBy + '\'' +
+                ", updatedBy='" + updatedBy + '\'' +
+                ", createTime=" + createTime +
+                ", updateTime=" + updateTime +
+                ", options=" + options +
+                ", externalStandardMappings=" + externalStandardMappings +
+                ", validInstanceStatusList=" + validInstanceStatusList +
+                ", initialStatus=" + initialStatus +
+                ", propertiesDefinition=" + propertiesDefinition +
+                ", version=" + version +
+                ", versionName='" + versionName + '\'' +
+                ", category=" + category +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipEndDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipEndDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipEndDef.java
new file mode 100644
index 0000000..3ff3837
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/RelationshipEndDef.java
@@ -0,0 +1,193 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+/**
+ * RelationshipEndDef describes the type of the entity and the attribute information for one end of a RelationshipDef.
+ */
+public class RelationshipEndDef extends TypeDefElementHeader
+{
+    private TypeDefLink          entityType               = null;
+    private String               attributeName            = null;
+    private String               attributeDescription     = null;
+    private String               attributeDescriptionGUID = null;
+    private AttributeCardinality attributeCardinality     = AttributeCardinality.UNKNOWN;
+
+
+    /**
+     * Default constructor - create an empty end
+     */
+    public RelationshipEndDef()
+    {
+        super();
+    }
+
+
+    /**
+     * Copy/clone constructor - copy the supplied template into the new end.
+     *
+     * @param template - RelationshipEndDef
+     */
+    public RelationshipEndDef(RelationshipEndDef template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            entityType = template.getEntityType();
+            attributeName = template.getAttributeName();
+            attributeCardinality = template.getAttributeCardinality();
+            attributeDescription = template.getAttributeDescription();
+        }
+    }
+
+
+    /**
+     * Return the identifiers of the EntityDef describing the type of entity on this end of the relationship.
+     *
+     * @return TypeDefLink unique identifiers
+     */
+    public TypeDefLink getEntityType()
+    {
+        if (entityType == null)
+        {
+            return entityType;
+        }
+        else
+        {
+            return new TypeDefLink(entityType);
+        }
+    }
+
+
+    /**
+     * Set up the guid of the EntityDef describing the type of entity on this end of the relationship.
+     *
+     * @param entityType - TypeDefLink unique identifiers for the entity's type
+     */
+    public void setEntityType(TypeDefLink entityType)
+    {
+        this.entityType = entityType;
+    }
+
+
+    /**
+     * Return the attribute name used to describe this end of the relationship
+     *
+     * @return String name for the attribute
+     */
+    public String getAttributeName()
+    {
+        return attributeName;
+    }
+
+
+    /**
+     * Set up the attribute name used to describe this end of the relationship.
+     *
+     * @param attributeName - String name for the attribute
+     */
+    public void setAttributeName(String attributeName)
+    {
+        this.attributeName = attributeName;
+    }
+
+
+    /**
+     * Return the cardinality for this end of the relationship.
+     *
+     * @return AttributeCardinality Enum
+     */
+    public AttributeCardinality getAttributeCardinality()
+    {
+        return attributeCardinality;
+    }
+
+
+    /**
+     * Set up the cardinality for this end of the relationship.
+     *
+     * @param attributeCardinality - AttributeCardinality Enum
+     */
+    public void setAttributeCardinality(AttributeCardinality attributeCardinality)
+    {
+        this.attributeCardinality = attributeCardinality;
+    }
+
+
+    /**
+     * Return the attributeDescription of this end of the relationship.
+     *
+     * @return String attributeDescription
+     */
+    public String getAttributeDescription()
+    {
+        return attributeDescription;
+    }
+
+
+    /**
+     * Set up the attributeDescription for this end of the relationship.
+     *
+     * @param attributeDescription - String
+     */
+    public void setAttributeDescription(String attributeDescription)
+    {
+        this.attributeDescription = attributeDescription;
+    }
+
+
+    /**
+     * Return the unique identifier (guid) of the glossary term that describes this RelationshipEndDef.
+     *
+     * @return String guid
+     */
+    public String getAttributeDescriptionGUID()
+    {
+        return attributeDescriptionGUID;
+    }
+
+
+    /**
+     * Set up the unique identifier (guid) of the glossary term that describes this RelationshipEndDef.
+     *
+     * @param attributeDescriptionGUID - String guid
+     */
+    public void setAttributeDescriptionGUID(String attributeDescriptionGUID)
+    {
+        this.attributeDescriptionGUID = attributeDescriptionGUID;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style attributeDescription of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "RelationshipEndDef{" +
+                "entityType='" + entityType + '\'' +
+                ", attributeName='" + attributeName + '\'' +
+                ", attributeDescription='" + attributeDescription + '\'' +
+                ", attributeCardinality=" + attributeCardinality +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDef.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDef.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDef.java
new file mode 100644
index 0000000..710f78d
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDef.java
@@ -0,0 +1,437 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceStatus;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * The TypeDef is the base class for objects that store the properties of an open metadata type
+ * definition (call ed a TypeDef).
+ * <p>
+ * The different categories of Typedefs are listed in TypeDefCategory.
+ */
+public abstract class TypeDef extends TypeDefSummary
+{
+    protected TypeDefLink                        superType                = null;
+    protected String                             description              = null;
+    protected String                             descriptionGUID          = null;
+    protected String                             origin                   = null;
+    protected String                             createdBy                = null;
+    protected String                             updatedBy                = null;
+    protected Date                               createTime               = null;
+    protected Date                               updateTime               = null;
+    protected Map<String, String>                options                  = null;
+    protected ArrayList<ExternalStandardMapping> externalStandardMappings = null;
+    protected ArrayList<InstanceStatus>          validInstanceStatusList  = null;
+    protected InstanceStatus                     initialStatus            = null;
+    protected ArrayList<TypeDefAttribute>        propertiesDefinition     = null;
+
+
+    /**
+     * Minimal constructor is passed the category of the typedef being constructed.
+     * The rest of the properties are null.
+     *
+     * @param category - TypeDefCategory enum
+     */
+    public TypeDef(TypeDefCategory category)
+    {
+        super();
+        this.category = category;
+    }
+
+
+    /**
+     * Typical constructor is passed the properties of the typedef's super class being constructed.
+     *
+     * @param category    - category of this TypeDef
+     * @param guid        - unique id for the TypeDef
+     * @param name        - unique name for the TypeDef
+     * @param version     - active version number for the TypeDef
+     * @param versionName - unique name for the TypeDef
+     */
+    public TypeDef(TypeDefCategory category,
+                   String          guid,
+                   String          name,
+                   long            version,
+                   String          versionName)
+    {
+        super(category, guid, name, version, versionName);
+    }
+
+
+    /**
+     * Copy/clone constructor copies the values from the supplied template.
+     *
+     * @param template TypeDef
+     */
+    public TypeDef(TypeDef template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            this.superType = template.getSuperType();
+            this.description = template.getDescription();
+            this.descriptionGUID = template.getDescriptionGUID();
+            this.origin = template.getOrigin();
+            this.createdBy = template.getCreatedBy();
+            this.updatedBy = template.getUpdatedBy();
+            this.createTime = template.getCreateTime();
+            this.updateTime = template.getUpdateTime();
+            this.options = template.getOptions();
+            this.externalStandardMappings = template.getExternalStandardMappings();
+            this.validInstanceStatusList = template.getValidInstanceStatusList();
+            this.propertiesDefinition = template.getPropertiesDefinition();
+        }
+    }
+
+
+    /**
+     * Return the super type for the TypeDef (or null if top-level)
+     *
+     * @return TypeDefLink for the super type
+     */
+    public TypeDefLink getSuperType()
+    {
+        return superType;
+    }
+
+
+    /**
+     * Set up supertype for the TypeDef.  Only single inheritance is supported.  Use null if this type
+     * is top-level.
+     *
+     * @param superType TypeDefLink for the super type
+     */
+    public void setSuperType(TypeDefLink superType) { this.superType = superType; }
+
+
+    /**
+     * Return the description of this TypeDef.
+     *
+     * @return String description
+     */
+    public String getDescription()
+    {
+        return description;
+    }
+
+
+    /**
+     * Set up the description of this TypeDef.
+     *
+     * @param description String
+     */
+    public void setDescription(String description)
+    {
+        this.description = description;
+    }
+
+
+    /**
+     * Return the unique identifier (guid) of the glossary term that describes this TypeDef.
+     *
+     * @return String guid
+     */
+    public String getDescriptionGUID()
+    {
+        return descriptionGUID;
+    }
+
+
+    /**
+     * Set up the unique identifier (guid) of the glossary term that describes this TypeDef.
+     *
+     * @param descriptionGUID - String guid
+     */
+    public void setDescriptionGUID(String descriptionGUID)
+    {
+        this.descriptionGUID = descriptionGUID;
+    }
+
+
+    /**
+     * Return the unique identifier for metadata collection Id where this TypeDef came from.
+     *
+     * @return String guid
+     */
+    public String getOrigin()
+    {
+        return origin;
+    }
+
+
+    /**
+     * Set up the unique identifier for metadata collection Id where this TypeDef came from.
+     *
+     * @param origin - String guid
+     */
+    public void setOrigin(String origin)
+    {
+        this.origin = origin;
+    }
+
+
+    /**
+     * Return the user name of the person that created this TypeDef.
+     *
+     * @return String name
+     */
+    public String getCreatedBy()
+    {
+        return createdBy;
+    }
+
+
+    /**
+     * Set up the user name of the person that created this TypeDef.
+     *
+     * @param createdBy String name
+     */
+    public void setCreatedBy(String createdBy)
+    {
+        this.createdBy = createdBy;
+    }
+
+
+    /**
+     * Return the user name of the person that last updated this TypeDef.
+     *
+     * @return String name
+     */
+    public String getUpdatedBy()
+    {
+        return updatedBy;
+    }
+
+
+    /**
+     * Set up the user name of the person that last updated this TypeDef.
+     *
+     * @param updatedBy String name
+     */
+    public void setUpdatedBy(String updatedBy)
+    {
+        this.updatedBy = updatedBy;
+    }
+
+
+    /**
+     * Return the date/time that this TypeDef was created.
+     *
+     * @return Date
+     */
+    public Date getCreateTime()
+    {
+        return createTime;
+    }
+
+
+    /**
+     * Set up the date/time that this TypeDef was created.
+     *
+     * @param createTime Date
+     */
+    public void setCreateTime(Date createTime)
+    {
+        this.createTime = createTime;
+    }
+
+
+    /**
+     * Return the date/time that this TypeDef was last updated.
+     *
+     * @return Date
+     */
+    public Date getUpdateTime()
+    {
+        return updateTime;
+    }
+
+
+    /**
+     * Set up the date/time that this TypeDef was last updated.
+     *
+     * @param updateTime Date
+     */
+    public void setUpdateTime(Date updateTime)
+    {
+        this.updateTime = updateTime;
+    }
+
+
+    /**
+     * Return the options for this TypeDef. These are private properties used by the processors of this TypeDef
+     * and ignored by the OMRS.
+     *
+     * @return Map from String to String
+     */
+    public Map<String, String> getOptions()
+    {
+        return options;
+    }
+
+
+    /**
+     * Set up the options for this TypeDef.  These are private properties used by the processors of this TypeDef
+     * and ignored by the OMRS.
+     *
+     * @param options - Map from String to String
+     */
+    public void setOptions(Map<String, String> options)
+    {
+        this.options = options;
+    }
+
+
+    /**
+     * Return the list of mappings to external standards.
+     *
+     * @return ExternalStandardMappings list
+     */
+    public ArrayList<ExternalStandardMapping> getExternalStandardMappings()
+    {
+        if (externalStandardMappings == null)
+        {
+            return externalStandardMappings;
+        }
+        else
+        {
+            return new ArrayList<>(externalStandardMappings);
+        }
+    }
+
+
+    /**
+     * Set up the list of mappings to external standards.
+     *
+     * @param externalStandardMappings - ExternalStandardMappings list
+     */
+    public void setExternalStandardMappings(ArrayList<ExternalStandardMapping> externalStandardMappings)
+    {
+        this.externalStandardMappings = externalStandardMappings;
+    }
+
+
+    /**
+     * Return the list of valid instance statuses supported by this TypeDef.
+     *
+     * @return InstanceStatus array of supported status values.
+     */
+    public ArrayList<InstanceStatus> getValidInstanceStatusList()
+    {
+        return validInstanceStatusList;
+    }
+
+
+    /**
+     * Set up the list of valid instance statuses supported by this TypeDef.
+     *
+     * @param validInstanceStatusList - InstanceStatus Array
+     */
+    public void setValidInstanceStatusList(ArrayList<InstanceStatus> validInstanceStatusList)
+    {
+        this.validInstanceStatusList = validInstanceStatusList;
+    }
+
+
+    /**
+     * Return the initial status setting for an instance of this type.
+     *
+     * @return InstanceStatus enum
+     */
+    public InstanceStatus getInitialStatus()
+    {
+        return initialStatus;
+    }
+
+
+    /**
+     * Set up the initial status setting for an instance of this type.
+     *
+     * @param initialStatus - InstanceStatus enum
+     */
+    public void setInitialStatus(InstanceStatus initialStatus)
+    {
+        this.initialStatus = initialStatus;
+    }
+
+
+    /**
+     * Return the list of AttributeDefs that define the valid properties for this type of classification.
+     *
+     * @return AttributeDefs list
+     */
+    public ArrayList<TypeDefAttribute> getPropertiesDefinition()
+    {
+        if(propertiesDefinition == null)
+        {
+            return propertiesDefinition;
+        }
+        else
+        {
+            return new ArrayList<>(propertiesDefinition);
+        }
+    }
+
+
+    /**
+     * Set up the list of AttributeDefs that define the valid properties for this type of classification.
+     *
+     * @param propertiesDefinition - AttributeDefs list
+     */
+    public void setPropertiesDefinition(ArrayList<TypeDefAttribute> propertiesDefinition)
+    {
+        this.propertiesDefinition = propertiesDefinition;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "TypeDef{" +
+                "superType=" + superType +
+                ", description='" + description + '\'' +
+                ", descriptionGUID='" + descriptionGUID + '\'' +
+                ", origin='" + origin + '\'' +
+                ", createdBy='" + createdBy + '\'' +
+                ", updatedBy='" + updatedBy + '\'' +
+                ", createTime=" + createTime +
+                ", updateTime=" + updateTime +
+                ", options=" + options +
+                ", externalStandardMappings=" + externalStandardMappings +
+                ", validInstanceStatusList=" + validInstanceStatusList +
+                ", initialStatus=" + initialStatus +
+                ", propertiesDefinition=" + propertiesDefinition +
+                ", version=" + version +
+                ", versionName='" + versionName + '\'' +
+                ", category=" + category +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefAttribute.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefAttribute.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefAttribute.java
new file mode 100644
index 0000000..36c4b24
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefAttribute.java
@@ -0,0 +1,310 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+import java.util.ArrayList;
+
+/**
+ * TypeDefAttribute stores the properties used to describe a attribute within a Classification,
+ * Entity or Relationship.  The attribute may itself be of types Enum, Collection or Primitive Types.
+ */
+public class TypeDefAttribute extends TypeDefElementHeader
+{
+    protected String                             attributeName            = null;
+    protected AttributeTypeDef                   attributeType            = null;
+    protected String                             attributeDescription     = null;
+    protected String                             attributeDescriptionGUID = null;
+    protected AttributeCardinality               cardinality              = AttributeCardinality.UNKNOWN;
+    protected int                                valuesMinCount           = 0;
+    protected int                                valuesMaxCount           = 1;
+    protected boolean                            isIndexable              = true;
+    protected boolean                            isUnique                 = false;
+    protected String                             defaultValue             = null;
+    protected ArrayList<ExternalStandardMapping> externalStandardMappings = null;
+
+
+    /**
+     * Default constructor creates an empty TypeDefAttribute.
+     */
+    public TypeDefAttribute()
+    {
+        super();
+    }
+
+
+    /**
+     * Copy/clone constructor initialized with the values from the supplied template.
+     *
+     * @param template - TypeDefAttribute to copy
+     */
+    public TypeDefAttribute(TypeDefAttribute template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            attributeName = template.getAttributeName();
+            attributeType = template.getAttributeType();
+            attributeDescription = template.getAttributeDescription();
+            attributeDescriptionGUID = template.getAttributeDescriptionGUID();
+            cardinality = template.getAttributeCardinality();
+            valuesMinCount = template.getValuesMinCount();
+            valuesMaxCount = template.getValuesMaxCount();
+            isUnique = template.isUnique();
+            isIndexable = template.isIndexable();
+            defaultValue = template.getDefaultValue();
+            externalStandardMappings = template.getExternalStandardMappings();
+        }
+    }
+
+
+    /**
+     * Return the name of this attribute.
+     *
+     * @return String name
+     */
+    public String getAttributeName()
+    {
+        return attributeName;
+    }
+
+
+    /**
+     * Set up the name of this attribute.
+     *
+     * @param attributeName - String name
+     */
+    public void setAttributeName(String attributeName)
+    {
+        this.attributeName = attributeName;
+    }
+
+
+    /**
+     * Return the name of the type for the value in this attribute.
+     *
+     * @return AttributeTypeDef - definition of attribute type
+     */
+    public AttributeTypeDef getAttributeType() { return attributeType; }
+
+
+    /**
+     * Set up the name of the type for the value in this attribute.
+     *
+     * @param attributeType AttributeTypeDef
+     */
+    public void setAttributeType(AttributeTypeDef attributeType) { this.attributeType = attributeType; }
+
+
+    /**
+     * Return the short description of the attribute.
+     *
+     * @return String description
+     */
+    public String getAttributeDescription()
+    {
+        return attributeDescription;
+    }
+
+
+    /**
+     * Set up the short description of the attribute.
+     *
+     * @param attributeDescription - String description
+     */
+    public void setAttributeDescription(String attributeDescription)
+    {
+        this.attributeDescription = attributeDescription;
+    }
+
+
+    /**
+     * Return the unique id of the glossary term that describes this attribute (or null if
+     * no attribute defined).
+     *
+     * @return String guid
+     */
+    public String getAttributeDescriptionGUID()
+    {
+        return attributeDescriptionGUID;
+    }
+
+
+    /**
+     * Set up the unique id of the glossary term that describes this attribute (or null if
+     * no attribute defined).
+     *
+     * @param attributeDescriptionGUID - String guid
+     */
+    public void setAttributeDescriptionGUID(String attributeDescriptionGUID)
+    {
+        this.attributeDescriptionGUID = attributeDescriptionGUID;
+    }
+
+
+    /**
+     * Return the cardinality of this attribute.
+     *
+     * @return AttributeCardinality Enum.
+     */
+    public AttributeCardinality getAttributeCardinality() { return cardinality; }
+
+
+    /**
+     * Set up the cardinality for this attribute.
+     *
+     * @param attributeCardinality enum value
+     */
+    public void setAttributeCardinality(AttributeCardinality attributeCardinality) { this.cardinality = attributeCardinality; }
+
+
+    /**
+     * Return the minimum number of values for this attribute (relevant for Arrays, Sets and Maps).
+     *
+     * @return int minimum count
+     */
+    public int getValuesMinCount() { return valuesMinCount; }
+
+
+    /**
+     * Set up the minimum number of values for this attribute (relevant for Arrays, Sets and Maps).
+     *
+     * @param valuesMinCount int minimum count
+     */
+    public void setValuesMinCount(int valuesMinCount) { this.valuesMinCount = valuesMinCount; }
+
+
+    /**
+     * Return the maximum number of values for this attribute (relevant for Arrays, Sets and Maps).
+     *
+     * @return int maximum count
+     */
+    public int getValuesMaxCount() { return valuesMaxCount; }
+
+
+    /**
+     * Set up the maximum number of values for this attribute (relevant for Arrays, Sets and Maps).
+     *
+     * @param valuesMaxCount int maximum count
+     */
+    public void setValuesMaxCount(int valuesMaxCount) { this.valuesMaxCount = valuesMaxCount; }
+
+
+    /**
+     * Return whether the value for this attribute is unique across the specific instances of Struct, Classification,
+     * Entity or Relationship types that this attribute included in.
+     *
+     * @return boolean isUnique flag
+     */
+    public boolean isUnique() { return isUnique; }
+
+
+    /**
+     * Set up the isUnique flag.  This indicates whether the value for this attribute is unique
+     * across the specific instances of Struct, Classification,
+     * Entity or Relationship types that this attribute included in.
+     *
+     * @param unique boolean isUnique flag
+     */
+    public void setUnique(boolean unique) { isUnique = unique; }
+
+
+    /**
+     * Return whether this attribute should be included in the metadata collection's search index.
+     *
+     * @return boolean isIndexable flag
+     */
+    public boolean isIndexable() { return isIndexable; }
+
+
+    /**
+     * Set up the isIndexable flag.  This indicates whether this attribute should be included in the
+     * metadata collection's search index.
+     *
+     * @param indexable boolean isIndexable flag
+     */
+    public void setIndexable(boolean indexable) { isIndexable = indexable; }
+
+
+    /**
+     * Return the default value for this attribute.
+     *
+     * @return String default value
+     */
+    public String getDefaultValue() { return defaultValue; }
+
+
+    /**
+     * Set up the default value for this attribute.
+     *
+     * @param defaultValue String
+     */
+    public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; }
+
+
+    /**
+     * Return the list of mappings to external standards.
+     *
+     * @return ExternalStandardMappings list
+     */
+    public ArrayList<ExternalStandardMapping> getExternalStandardMappings()
+    {
+        if (externalStandardMappings == null)
+        {
+            return externalStandardMappings;
+        }
+        else
+        {
+            return new ArrayList<>(externalStandardMappings);
+        }
+    }
+
+
+    /**
+     * Set up the list of mappings to external standards.
+     *
+     * @param externalStandardMappings - ExternalStandardMappings list
+     */
+    public void setExternalStandardMappings(ArrayList<ExternalStandardMapping> externalStandardMappings)
+    {
+        this.externalStandardMappings = externalStandardMappings;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "TypeDefAttribute{" +
+                "attributeName='" + attributeName + '\'' +
+                ", attributeType=" + attributeType +
+                ", cardinality=" + cardinality +
+                ", valuesMinCount=" + valuesMinCount +
+                ", valuesMaxCount=" + valuesMaxCount +
+                ", isIndexable=" + isIndexable +
+                ", isUnique=" + isUnique +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", externalStandardMappings=" + externalStandardMappings +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefCategory.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefCategory.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefCategory.java
new file mode 100644
index 0000000..1cd3b71
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefCategory.java
@@ -0,0 +1,84 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import java.io.Serializable;
+
+/**
+ * The TypeDefCategory defines the list of valid types of TypeDef for open metadata instances.
+ */
+public enum TypeDefCategory implements Serializable
+{
+    UNKNOWN_DEF        (0, "<Unknown>",         "Uninitialized TypeDef object."),
+    CLASSIFICATION_DEF (5, "ClassificationDef", "A description of a specific characteristic or grouping for entities."),
+    ENTITY_DEF         (6, "EntityDef",         "An object or concept of interest."),
+    RELATIONSHIP_DEF   (8, "RelationshipDef",   "A link between two entities.");
+
+    private static final long serialVersionUID = 1L;
+
+    private int            typeCode;
+    private String         typeName;
+    private String         typeDescription;
+
+
+    /**
+     * Constructor to set up a single instances of the enum.
+     */
+    TypeDefCategory(int     typeCode, String   typeName, String   typeDescription)
+    {
+        /*
+         * Save the values supplied
+         */
+        this.typeCode = typeCode;
+        this.typeName = typeName;
+        this.typeDescription = typeDescription;
+    }
+
+
+    /**
+     * Return the code for this enum instance
+     *
+     * @return int - type code
+     */
+    public int getTypeCode()
+    {
+        return typeCode;
+    }
+
+
+    /**
+     * Return the default name for this enum instance.
+     *
+     * @return String - default name
+     */
+    public String getTypeName()
+    {
+        return typeName;
+    }
+
+
+    /**
+     * Return the default description for the type for this enum instance.
+     *
+     * @return String - default description
+     */
+    public String getTypeDescription()
+    {
+        return typeDescription;
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefElementHeader.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefElementHeader.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefElementHeader.java
new file mode 100644
index 0000000..6323bbf
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefElementHeader.java
@@ -0,0 +1,51 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import java.io.Serializable;
+
+/**
+ * TypeDefElementHeader provides a common base for all typedef information.
+ */
+public class TypeDefElementHeader implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Default constructor sets TypeDef to nulls.
+     */
+    public TypeDefElementHeader()
+    {
+        /*
+         * Nothing to do
+         */
+    }
+
+
+    /**
+     * Copy/clone constructor set TypeDef to value in template.
+     *
+     * @param template - TypeDefElementHeader
+     */
+    public TypeDefElementHeader(TypeDefElementHeader  template)
+    {
+        /*
+         * Nothing to do
+         */
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefGallery.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefGallery.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefGallery.java
new file mode 100644
index 0000000..a29c57c
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefGallery.java
@@ -0,0 +1,121 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+import java.util.ArrayList;
+
+/**
+ * TypeDefGallery contains details of the AttributeTypeDefs and full TypeDefs supported by a rep
+ */
+public class TypeDefGallery
+{
+    private ArrayList<AttributeTypeDef> attributeTypeDefs = null;
+    private ArrayList<TypeDef>          typeDefs          = null;
+
+
+    /**
+     * Default constructor
+     */
+    public TypeDefGallery()
+    {
+    }
+
+
+    /**
+     * Copy/clone constructor
+     *
+     * @param template - template to copy
+     */
+    public TypeDefGallery(TypeDefGallery    template)
+    {
+        if (template != null)
+        {
+            ArrayList<AttributeTypeDef> templateAttributeTypeDefs = template.getAttributeTypeDefs();
+            ArrayList<TypeDef>          templateTypeDefs          = template.getTypeDefs();
+
+            if (templateAttributeTypeDefs != null)
+            {
+                attributeTypeDefs = new ArrayList<>(templateAttributeTypeDefs);
+            }
+
+            if (templateTypeDefs != null)
+            {
+                typeDefs = new ArrayList<>(templateTypeDefs);
+            }
+        }
+    }
+
+
+    /**
+     * Return the list of attribute type definitions from the gallery.
+     *
+     * @return list of attribute type definitions
+     */
+    public ArrayList<AttributeTypeDef> getAttributeTypeDefs()
+    {
+        if (attributeTypeDefs == null)
+        {
+            return attributeTypeDefs;
+        }
+        else
+        {
+            return new ArrayList<>(attributeTypeDefs);
+        }
+    }
+
+
+    /**
+     * Set up the list of attribute type definitions from the gallery.
+     *
+     * @param attributeTypeDefs - list of attribute type definitions
+     */
+    public void setAttributeTypeDefs(ArrayList<AttributeTypeDef> attributeTypeDefs)
+    {
+        this.attributeTypeDefs = attributeTypeDefs;
+    }
+
+
+    /**
+     * Return the list of type definitions from the gallery.
+     *
+     * @return list of type definitions
+     */
+    public ArrayList<TypeDef> getTypeDefs()
+    {
+        if (typeDefs == null)
+        {
+            return typeDefs;
+        }
+        else
+        {
+            return new ArrayList<>(typeDefs);
+        }
+    }
+
+
+    /**
+     * Set up the list of type definitions from the gallery.
+     *
+     * @param typeDefs - list of type definitions
+     */
+    public void setTypeDefs(ArrayList<TypeDef> typeDefs)
+    {
+        this.typeDefs = typeDefs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefLink.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefLink.java b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefLink.java
new file mode 100644
index 0000000..83b63ed
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/metadatacollection/properties/typedefs/TypeDefLink.java
@@ -0,0 +1,175 @@
+/*
+ * 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.omrs.metadatacollection.properties.typedefs;
+
+
+import java.util.Objects;
+
+/**
+ * The TypeDefHolds holds basic identifying information used to link one TypeDef to another.  It is used in
+ * the definition of types - ie in the TypeDefs themselves.  Examples include linking a classification to an
+ * entity, identifying super types and defining the entities at either end of a relationship.
+ * <p>
+ *     TypeDefs are identified using both the guid and the type name.  Both should be unique and most processing is
+ *     with the type name because that is easiest for people to work with.  The guid provides a means to check the
+ *     identity of the types since it is easy to introduce two types with the same name in the distributed model.
+ * </p>
+ */
+public class TypeDefLink extends TypeDefElementHeader
+{
+    protected  String                   guid = null;
+    protected  String                   name = null;
+
+
+    /**
+     * Default constructor
+     */
+    public TypeDefLink()
+    {
+        super();
+    }
+
+
+    /**
+     * Typical constructor is passed the unique identifier and name of the typedef being constructed.
+     *
+     * @param guid - unique id for the TypeDef
+     * @param name - unique name for the TypeDef
+     */
+    public TypeDefLink(String            guid,
+                       String            name)
+    {
+        super();
+
+        this.guid = guid;
+        this.name = name;
+    }
+
+
+    /**
+     * Copy/clone constructor copies the values from the supplied template.
+     *
+     * @param template TypeDefSummary
+     */
+    public TypeDefLink(TypeDefLink template)
+    {
+        super(template);
+
+        if (template != null)
+        {
+            this.guid = template.getGUID();
+            this.name = template.getName();
+        }
+    }
+
+
+    /**
+     * Return the unique identifier for this TypeDef.
+     *
+     * @return String guid
+     */
+    public String getGUID() {
+        return guid;
+    }
+
+
+    /**
+     * Set up the unique identifier for this TypeDef.
+     *
+     * @param guid - String guid
+     */
+    public void setGUID(String guid)
+    {
+        this.guid = guid;
+    }
+
+
+    /**
+     * Return the type name for this TypeDef.  In simple environments, the type name is unique but where metadata
+     * repositories from different vendors are in operation it is possible that 2 types may have a name clash.  The
+     * GUID is the reliable unique identifier.
+     *
+     * @return String name
+     */
+    public String getName() {
+        return name;
+    }
+
+
+    /**
+     * Set up the type name for this TypeDef.  In simple environments, the type name is unique but where metadata
+     * repositories from different vendors are in operation it is possible that 2 types may have a name clash.  The
+     * GUID is the reliable unique identifier.
+     *
+     * @param name - String name
+     */
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "TypeDefSummary{" +
+                ", guid='" + guid + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+
+
+    /**
+     * Validated that the GUID, name and version number of a TypeDef are equal.
+     *
+     *
+     * @param object to test
+     * @return boolean flag to say object is the same TypeDefSummary
+     */
+    @Override
+    public boolean equals(Object object)
+    {
+        if (this == object)
+        {
+            return true;
+        }
+        if (object == null || getClass() != object.getClass())
+        {
+            return false;
+        }
+        TypeDefLink that = (TypeDefLink) object;
+        return Objects.equals(guid, that.guid) &&
+                Objects.equals(name, that.name);
+    }
+
+    /**
+     * Using the GUID as a hashcode - it should be unique if all connected metadata repositories are behaving properly.
+     *
+     * @return int hash code
+     */
+    @Override
+    public int hashCode()
+    {
+        return guid != null ? guid.hashCode() : 0;
+    }
+}