You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sh...@apache.org on 2016/03/08 08:19:09 UTC
incubator-atlas git commit: ATLAS-476 Update type attribute with
Reserved characters updated the original type as unknown (yhemanth via
shwethags)
Repository: incubator-atlas
Updated Branches:
refs/heads/master 7ebb20136 -> 5b748aa47
ATLAS-476 Update type attribute with Reserved characters updated the original type as unknown (yhemanth via shwethags)
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/5b748aa4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/5b748aa4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/5b748aa4
Branch: refs/heads/master
Commit: 5b748aa47b970298a3c6b0c03495b3299079cd3e
Parents: 7ebb201
Author: Shwetha GS <ss...@hortonworks.com>
Authored: Tue Mar 8 12:49:00 2016 +0530
Committer: Shwetha GS <ss...@hortonworks.com>
Committed: Tue Mar 8 12:49:00 2016 +0530
----------------------------------------------------------------------
release-log.txt | 1 +
.../typestore/GraphBackedTypeStore.java | 15 +--
.../atlas/repository/typestore/ITypeStore.java | 15 +--
.../atlas/services/DefaultMetadataService.java | 43 +++-----
.../typestore/GraphBackedTypeStoreTest.java | 11 +-
.../service/DefaultMetadataServiceTest.java | 34 +++++-
.../atlas/typesystem/types/TypeSystem.java | 109 +++++++++++--------
7 files changed, 128 insertions(+), 100 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 94e0780..45fb329 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -10,6 +10,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset
ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
ALL CHANGES:
+ATLAS-476 Update type attribute with Reserved characters updated the original type as unknown (yhemanth via shwethags)
ATLAS-463 Disconnect inverse references ( dkantor via sumasai)
ATLAS-479 Add description for different types during create time (guptaneeru via shwethags)
ATLAS-508 Apache nightly build failure - UnsupportedOperationException: Not a single key: __traitNames (shwethags)
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java b/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
index bf10c8d..c175dd4 100755
--- a/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
+++ b/repository/src/main/java/org/apache/atlas/repository/typestore/GraphBackedTypeStore.java
@@ -70,11 +70,6 @@ public class GraphBackedTypeStore implements ITypeStore {
}
@Override
- public void store(TypeSystem typeSystem) throws AtlasException {
- store(typeSystem, ImmutableList.copyOf(typeSystem.getTypeNames()));
- }
-
- @Override
@GraphTransaction
public void store(TypeSystem typeSystem, ImmutableList<String> typeNames) throws AtlasException {
for (String typeName : typeNames) {
@@ -133,12 +128,9 @@ public class GraphBackedTypeStore implements ITypeStore {
}
private void storeInGraph(TypeSystem typeSystem, DataTypes.TypeCategory category, String typeName,
- ImmutableList<AttributeInfo> attributes, ImmutableList<String> superTypes) throws AtlasException {
- storeInGraph(typeSystem, category, typeName, null, attributes, superTypes);
- }
-
- private void storeInGraph(TypeSystem typeSystem, DataTypes.TypeCategory category, String typeName, String typeDescription,
- ImmutableList<AttributeInfo> attributes, ImmutableList<String> superTypes) throws AtlasException {
+ String typeDescription, ImmutableList<AttributeInfo> attributes,
+ ImmutableList<String> superTypes)
+ throws AtlasException {
Vertex vertex = createVertex(category, typeName, typeDescription);
List<String> attrNames = new ArrayList<>();
if (attributes != null) {
@@ -165,7 +157,6 @@ public class GraphBackedTypeStore implements ITypeStore {
}
}
- //Add edges for complex attributes
private void addReferencesForAttribute(TypeSystem typeSystem, Vertex vertex, AttributeInfo attribute)
throws AtlasException {
ImmutableList<String> coreTypes = typeSystem.getCoreTypes();
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/repository/src/main/java/org/apache/atlas/repository/typestore/ITypeStore.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/typestore/ITypeStore.java b/repository/src/main/java/org/apache/atlas/repository/typestore/ITypeStore.java
index 3a88856..790c4b3 100755
--- a/repository/src/main/java/org/apache/atlas/repository/typestore/ITypeStore.java
+++ b/repository/src/main/java/org/apache/atlas/repository/typestore/ITypeStore.java
@@ -24,18 +24,13 @@ import org.apache.atlas.typesystem.TypesDef;
import org.apache.atlas.typesystem.types.TypeSystem;
public interface ITypeStore {
- /**
- * Persist the entire type system - insert or update
- * @param typeSystem type system to persist
- * @throws StorageException
- */
- void store(TypeSystem typeSystem) throws AtlasException;
/**
- * Persist the given type in the type system - insert or update
- * @param typeSystem type system
- * @param types types to persist
- * @throws StorageException
+ * Add types to the underlying type storage layer
+ * @param typeSystem {@link TypeSystem} object which contains existing types. To lookup newly added types,
+ * an instance of {@link TypeSystem.TransientTypeSystem} can be passed.
+ * @param types names of newly added types.
+ * @throws AtlasException
*/
void store(TypeSystem typeSystem, ImmutableList<String> types) throws AtlasException;
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
index 889e200..67e4826 100755
--- a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
+++ b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
@@ -169,20 +169,28 @@ public class DefaultMetadataService implements MetadataService {
*/
@Override
public JSONObject createType(String typeDefinition) throws AtlasException {
+ return createOrUpdateTypes(typeDefinition, false);
+ }
+
+ private JSONObject createOrUpdateTypes(String typeDefinition, boolean isUpdate) throws AtlasException {
ParamChecker.notEmpty(typeDefinition, "type definition cannot be empty");
TypesDef typesDef = validateTypeDefinition(typeDefinition);
try {
- final Map<String, IDataType> typesAdded = typeSystem.defineTypes(typesDef);
-
+ final TypeSystem.TransientTypeSystem transientTypeSystem = typeSystem.createTransientTypeSystem(typesDef, isUpdate);
+ final Map<String, IDataType> typesAdded = transientTypeSystem.getTypesAdded();
try {
/* Create indexes first so that if index creation fails then we rollback
the typesystem and also do not persist the graph
*/
- onTypesAdded(typesAdded);
- typeStore.store(typeSystem, ImmutableList.copyOf(typesAdded.keySet()));
+ if (isUpdate) {
+ onTypesUpdated(typesAdded);
+ } else {
+ onTypesAdded(typesAdded);
+ }
+ typeStore.store(transientTypeSystem, ImmutableList.copyOf(typesAdded.keySet()));
+ typeSystem.commitTypes(typesAdded);
} catch (Throwable t) {
- typeSystem.removeTypes(typesAdded.keySet());
throw new AtlasException("Unable to persist types ", t);
}
@@ -197,30 +205,7 @@ public class DefaultMetadataService implements MetadataService {
@Override
public JSONObject updateType(String typeDefinition) throws AtlasException {
- ParamChecker.notEmpty(typeDefinition, "type definition cannot be empty");
- TypesDef typesDef = validateTypeDefinition(typeDefinition);
-
- try {
- final Map<String, IDataType> typesAdded = typeSystem.updateTypes(typesDef);
-
- try {
- /* Create indexes first so that if index creation fails then we rollback
- the typesystem and also do not persist the graph
- */
- onTypesUpdated(typesAdded);
- typeStore.store(typeSystem, ImmutableList.copyOf(typesAdded.keySet()));
- } catch (Throwable t) {
- typeSystem.removeTypes(typesAdded.keySet());
- throw new AtlasException("Unable to persist types ", t);
- }
-
- return new JSONObject() {{
- put(AtlasClient.TYPES, typesAdded.keySet());
- }};
- } catch (JSONException e) {
- LOG.error("Unable to create response for types={}", typeDefinition, e);
- throw new AtlasException("Unable to create response ", e);
- }
+ return createOrUpdateTypes(typeDefinition, true);
}
private TypesDef validateTypeDefinition(String typeDefinition) {
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java b/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
index 42183fd..10f8ee3 100755
--- a/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
+++ b/repository/src/test/java/org/apache/atlas/repository/typestore/GraphBackedTypeStoreTest.java
@@ -38,6 +38,7 @@ import org.apache.atlas.typesystem.types.EnumType;
import org.apache.atlas.typesystem.types.EnumTypeDefinition;
import org.apache.atlas.typesystem.types.EnumValue;
import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
+import org.apache.atlas.typesystem.types.IDataType;
import org.apache.atlas.typesystem.types.Multiplicity;
import org.apache.atlas.typesystem.types.StructType;
import org.apache.atlas.typesystem.types.StructTypeDefinition;
@@ -51,8 +52,8 @@ import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import javax.inject.Inject;
-
import java.util.List;
+import java.util.Map;
import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
import static org.apache.atlas.typesystem.types.utils.TypesUtil.createOptionalAttrDef;
@@ -89,7 +90,8 @@ public class GraphBackedTypeStoreTest {
@Test
public void testStore() throws AtlasException {
- typeStore.store(ts);
+ ImmutableList<String> typeNames = ts.getTypeNames();
+ typeStore.store(ts, typeNames);
dumpGraph();
}
@@ -177,9 +179,8 @@ public class GraphBackedTypeStoreTest {
ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
ImmutableList.of(deptTypeDef, superTypeDef));
- ts.updateTypes(typesDef);
- typeStore.store(ts, ImmutableList.of(orgLevelEnum.name, addressDetails.typeName, superTypeDef.typeName,
- deptTypeDef.typeName));
+ Map<String, IDataType> typesAdded = ts.updateTypes(typesDef);
+ typeStore.store(ts, ImmutableList.copyOf(typesAdded.keySet()));
//Validate the updated types
TypesDef types = typeStore.restore();
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java b/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
index 4eacfb2..0218ee5 100644
--- a/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
+++ b/repository/src/test/java/org/apache/atlas/service/DefaultMetadataServiceTest.java
@@ -26,6 +26,10 @@ import com.thinkaurelius.titan.core.util.TitanCleanup;
import org.apache.atlas.AtlasClient;
import org.apache.atlas.typesystem.exception.TypeNotFoundException;
import org.apache.atlas.typesystem.exception.EntityNotFoundException;
+import org.apache.atlas.typesystem.types.ClassType;
+import org.apache.atlas.typesystem.types.DataTypes;
+import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
+import org.apache.atlas.typesystem.types.utils.TypesUtil;
import org.apache.atlas.utils.ParamChecker;
import org.apache.atlas.AtlasException;
import org.apache.atlas.RepositoryMetadataModule;
@@ -47,6 +51,8 @@ import org.apache.atlas.typesystem.types.TypeSystem;
import org.apache.atlas.typesystem.types.ValueConversionException;
import org.apache.commons.lang.RandomStringUtils;
import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
@@ -791,7 +797,33 @@ public class DefaultMetadataServiceTest {
Assert.assertEquals(deletedGuidsFromListener.size(), deletedGuids.size());
Assert.assertTrue(deletedGuidsFromListener.containsAll(deletedGuids));
}
-
+
+ @Test
+ public void testTypeUpdateWithReservedAttributes() throws AtlasException, JSONException {
+ String typeName = "test_type_"+ RandomStringUtils.randomAlphanumeric(10);
+ HierarchicalTypeDefinition<ClassType> typeDef = TypesUtil.createClassTypeDef(
+ typeName, ImmutableList.<String>of(),
+ TypesUtil.createUniqueRequiredAttrDef("test_type_attribute", DataTypes.STRING_TYPE));
+ TypesDef typesDef = new TypesDef(typeDef, false);
+ JSONObject type = metadataService.createType(TypesSerialization.toJson(typesDef));
+ Assert.assertNotNull(type.get(AtlasClient.TYPES));
+
+ HierarchicalTypeDefinition<ClassType> updatedTypeDef = TypesUtil.createClassTypeDef(
+ typeName, ImmutableList.<String>of(),
+ TypesUtil.createUniqueRequiredAttrDef("test_type_attribute", DataTypes.STRING_TYPE),
+ TypesUtil.createOptionalAttrDef("test_type_invalid_attribute$", DataTypes.STRING_TYPE));
+ TypesDef updatedTypesDef = new TypesDef(updatedTypeDef, false);
+
+ try {
+ metadataService.updateType(TypesSerialization.toJson(updatedTypesDef));
+ Assert.fail("Should not be able to update type with reserved character");
+ } catch (AtlasException ae) {
+ // pass.. expected
+ }
+ String typeDefinition = metadataService.getTypeDefinition(typeName);
+ Assert.assertNotNull(typeDefinition);
+ }
+
private static class DeleteEntitiesChangeListener implements EntityChangeListener {
private Collection<ITypedReferenceableInstance> deletedEntities_;
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5b748aa4/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
----------------------------------------------------------------------
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
index bd81d7f..3c479df 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
@@ -31,7 +31,6 @@ import javax.inject.Singleton;
import java.lang.reflect.Constructor;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -218,7 +217,7 @@ public class TypeSystem {
new TransientTypeSystem(ImmutableList.<EnumTypeDefinition>of(),
ImmutableList.<StructTypeDefinition>of(), ImmutableList.copyOf(traitDefs),
ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
- return transientTypes.defineTypes();
+ return transientTypes.defineTypes(false);
}
public Map<String, IDataType> defineClassTypes(HierarchicalTypeDefinition<ClassType>... classDefs)
@@ -226,7 +225,7 @@ public class TypeSystem {
TransientTypeSystem transientTypes = new TransientTypeSystem(ImmutableList.<EnumTypeDefinition>of(),
ImmutableList.<StructTypeDefinition>of(), ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(),
ImmutableList.copyOf(classDefs));
- return transientTypes.defineTypes();
+ return transientTypes.defineTypes(false);
}
public Map<String, IDataType> updateTypes(TypesDef typesDef) throws AtlasException {
@@ -257,7 +256,7 @@ public class TypeSystem {
ImmutableList<HierarchicalTypeDefinition<TraitType>> traitDefs,
ImmutableList<HierarchicalTypeDefinition<ClassType>> classDefs) throws AtlasException {
TransientTypeSystem transientTypes = new TransientTypeSystem(enumDefs, structDefs, traitDefs, classDefs);
- return transientTypes.defineTypes();
+ return transientTypes.defineTypes(false);
}
public DataTypes.ArrayType defineArrayType(IDataType elemType) throws AtlasException {
@@ -301,16 +300,44 @@ public class TypeSystem {
return false;
}
- public void removeTypes(Collection<String> typeNames) {
- for (String typeName : typeNames) {
- IDataType dataType = types.get(typeName);
- final DataTypes.TypeCategory typeCategory = dataType.getTypeCategory();
- typeCategoriesToTypeNamesMap.get(typeCategory).remove(typeName);
- types.remove(typeName);
+ /**
+ * Create an instance of {@link TransientTypeSystem} with the types defined in the {@link TypesDef}.
+ *
+ * As part of this, a set of verifications are run on the types defined.
+ * @param typesDef The new list of types to be created or updated.
+ * @param isUpdate True, if types are updated, false otherwise.
+ * @return {@link TransientTypeSystem} that holds the newly added types.
+ * @throws AtlasException
+ */
+ public TransientTypeSystem createTransientTypeSystem(TypesDef typesDef, boolean isUpdate) throws AtlasException {
+ ImmutableList<EnumTypeDefinition> enumDefs = ImmutableList.copyOf(typesDef.enumTypesAsJavaList());
+ ImmutableList<StructTypeDefinition> structDefs = ImmutableList.copyOf(typesDef.structTypesAsJavaList());
+ ImmutableList<HierarchicalTypeDefinition<TraitType>> traitDefs =
+ ImmutableList.copyOf(typesDef.traitTypesAsJavaList());
+ ImmutableList<HierarchicalTypeDefinition<ClassType>> classDefs =
+ ImmutableList.copyOf(typesDef.classTypesAsJavaList());
+ TransientTypeSystem transientTypeSystem = new TransientTypeSystem(enumDefs, structDefs, traitDefs, classDefs);
+ transientTypeSystem.verifyTypes(isUpdate);
+ return transientTypeSystem;
+ }
+
+ /**
+ * Commit the given types to this {@link TypeSystem} instance.
+ *
+ * This step should be called only after the types have been committed to the backend stores successfully.
+ * @param typesAdded newly added types.
+ */
+ public void commitTypes(Map<String, IDataType> typesAdded) {
+ for (Map.Entry<String, IDataType> typeEntry : typesAdded.entrySet()) {
+ String typeName = typeEntry.getKey();
+ IDataType type = typeEntry.getValue();
+ //Add/replace the new type in the typesystem
+ types.put(typeName, type);
+ typeCategoriesToTypeNamesMap.put(type.getTypeCategory(), typeName);
}
}
- class TransientTypeSystem extends TypeSystem {
+ public class TransientTypeSystem extends TypeSystem {
final ImmutableList<StructTypeDefinition> structDefs;
final ImmutableList<HierarchicalTypeDefinition<TraitType>> traitDefs;
@@ -350,7 +377,7 @@ public class TypeSystem {
* - validate cannot redefine types
* - setup shallow Type instances to facilitate recursive type graphs
*/
- private void step1(boolean update) throws AtlasException {
+ private void validateAndSetupShallowTypes(boolean update) throws AtlasException {
for (EnumTypeDefinition eDef : enumDefs) {
assert eDef.name != null;
if (!update && (transientTypes.containsKey(eDef.name) || types.containsKey(eDef.name))) {
@@ -430,7 +457,7 @@ public class TypeSystem {
* - for Hierarchical Types, validate SuperTypes.
* - for each Hierarchical Type setup their SuperTypes Graph
*/
- private void step2() throws AtlasException {
+ private void validateAndSetupSuperTypes() throws AtlasException {
for (HierarchicalTypeDefinition<TraitType> traitDef : traitDefs) {
validateSuperTypes(TraitType.class, traitDef);
TraitType traitType = getDataType(TraitType.class, traitDef.typeName);
@@ -509,7 +536,7 @@ public class TypeSystem {
* - Order Hierarchical Types in order of SuperType before SubType.
* - Construct all the Types
*/
- private void step3() throws AtlasException {
+ private void orderAndConstructTypes() throws AtlasException {
List<TraitType> traitTypes = new ArrayList<>();
for (String traitTypeName : traitNameToDefMap.keySet()) {
@@ -540,7 +567,7 @@ public class TypeSystem {
* Step 4:
* - fix up references in recursive AttrInfo and recursive Collection Types.
*/
- private void step4() throws AtlasException {
+ private void setupRecursiveTypes() throws AtlasException {
for (AttributeInfo info : recursiveRefs) {
info.setDataType(dataType(info.dataType().getName()));
}
@@ -557,7 +584,7 @@ public class TypeSystem {
* Step 5:
* - Validate that the update can be done
*/
- private void step5() throws TypeUpdateException {
+ private void validateUpdateIsPossible() throws TypeUpdateException {
//If the type is modified, validate that update can be done
for (IDataType newType : transientTypes.values()) {
if (TypeSystem.this.types.containsKey(newType.getName())) {
@@ -567,34 +594,11 @@ public class TypeSystem {
}
}
- Map<String, IDataType> defineTypes() throws AtlasException {
- return defineTypes(false);
- }
-
Map<String, IDataType> defineTypes(boolean update) throws AtlasException {
- step1(update);
- step2();
-
- step3();
- step4();
-
- if (update) {
- step5();
- }
-
- Map<String, IDataType> newTypes = new HashMap<>();
-
- for (Map.Entry<String, IDataType> typeEntry : transientTypes.entrySet()) {
- String typeName = typeEntry.getKey();
- IDataType type = typeEntry.getValue();
-
- //Add/replace the new type in the typesystem
- TypeSystem.this.types.put(typeName, type);
- typeCategoriesToTypeNamesMap.put(type.getTypeCategory(), typeName);
-
- newTypes.put(typeName, type);
- }
- return newTypes;
+ verifyTypes(update);
+ Map<String, IDataType> typesAdded = getTypesAdded();
+ commitTypes(typesAdded);
+ return typesAdded;
}
@Override
@@ -672,6 +676,25 @@ public class TypeSystem {
public DataTypes.MapType defineMapType(IDataType keyType, IDataType valueType) throws AtlasException {
return super.defineMapType(keyType, valueType);
}
+
+ void verifyTypes(boolean isUpdate) throws AtlasException {
+ validateAndSetupShallowTypes(isUpdate);
+ validateAndSetupSuperTypes();
+ orderAndConstructTypes();
+ setupRecursiveTypes();
+ if (isUpdate) {
+ validateUpdateIsPossible();
+ }
+ }
+
+ @Override
+ public void commitTypes(Map<String, IDataType> typesAdded) {
+ TypeSystem.this.commitTypes(typesAdded);
+ }
+
+ public Map<String, IDataType> getTypesAdded() {
+ return new HashMap<>(transientTypes);
+ }
}
public class IdType {