private static AtlasEdge getEdgeIfExists(AtlasMapType mapType, Map<String, Object> currentMap, String keyStr) { AtlasEdge ret = null; if (isReference(mapType.getValueType())) { Object val = currentMap.get(keyStr); if (val != null) { ret = (AtlasEdge) val; } } return ret; }
@Override public AtlasType getTypeForAttribute() { AtlasType keyAttributeType = keyType.getTypeForAttribute(); AtlasType valueAttributeType = valueType.getTypeForAttribute(); if (keyAttributeType == keyType && valueAttributeType == valueType) { return this; } else { AtlasType attributeType = new AtlasMapType(keyAttributeType, valueAttributeType); if (LOG.isDebugEnabled()) { LOG.debug("getTypeForAttribute(): {} ==> {}", getTypeName(), attributeType.getTypeName()); } return attributeType; } }
@Test public void testMapTypeDefaultValue() { Map<Object, Object> defValue = intIntMapType.createDefaultValue(); assertEquals(defValue.size(), 1); }
@Override public Map fromV1ToV2(Object v1Obj, AtlasType type, ConverterContext ctx) throws AtlasBaseException { Map ret = null; if (v1Obj != null) { if (v1Obj instanceof Map) { AtlasMapType mapType = (AtlasMapType)type; AtlasType keyType = mapType.getKeyType(); AtlasType valueType = mapType.getValueType(); AtlasFormatConverter keyConverter = converterRegistry.getConverter(keyType.getTypeCategory()); AtlasFormatConverter valueConverter = converterRegistry.getConverter(valueType.getTypeCategory()); Map v1Map = (Map)v1Obj; ret = new HashMap<>(); for (Object key : v1Map.keySet()) { Object value = v1Map.get(key); Object v2Key = keyConverter.fromV1ToV2(key, keyType, ctx); Object v2Value = valueConverter.fromV1ToV2(value, valueType, ctx); ret.put(v2Key, v2Value); } } else { throw new AtlasBaseException(AtlasErrorCode.UNEXPECTED_TYPE, "Map", v1Obj.getClass().getCanonicalName()); } } return ret; }
ret = isEmptyMapValue(val2); } else if (val2 == null) { ret = isEmptyMapValue(val1); } else { Map map1 = getMapFromValue(val1); Map map2 = getMapFromValue(val2);
private Map<String, Object> mapVertexToMap(AtlasVertex entityVertex, AtlasEntityExtInfo entityExtInfo, boolean isOwnedAttribute, AtlasAttribute attribute, final boolean isMinExtInfo) throws AtlasBaseException { Map<String, Object> ret = null; AtlasMapType mapType = (AtlasMapType) attribute.getAttributeType(); AtlasType mapValueType = mapType.getValueType(); if (LOG.isDebugEnabled()) { LOG.debug("Mapping map attribute {} for vertex {}", mapType.getTypeName(), entityVertex); } if (isReference(mapValueType)) { Map<String, Object> currentMap = getReferenceMap(entityVertex, attribute); if (MapUtils.isNotEmpty(currentMap)) { ret = new HashMap<>(); for (Map.Entry<String, Object> entry : currentMap.entrySet()) { String mapKey = entry.getKey(); Object keyValue = entry.getValue(); Object mapValue = mapVertexToCollectionEntry(entityVertex, mapValueType, keyValue, attribute.getRelationshipEdgeLabel(), entityExtInfo, isOwnedAttribute, attribute.getRelationshipEdgeDirection(), isMinExtInfo); if (mapValue != null) { ret.put(mapKey, mapValue); } } } } else { ret = getPrimitiveMap(entityVertex, attribute.getVertexPropertyName()); } if (MapUtils.isEmpty(ret)) { ret = null; } return ret; }
@Override public boolean validateValueForUpdate(Object obj, String objName, List<String> messages) { boolean ret = true; if (obj != null) { if (obj instanceof Map) { Map<Object, Objects> map = (Map<Object, Objects>) obj; for (Map.Entry e : map.entrySet()) { Object key = e.getKey(); if (!keyType.isValidValueForUpdate(key)) { ret = false; messages.add(objName + "." + key + ": invalid key for type " + getTypeName()); } else { Object value = e.getValue(); ret = valueType.validateValueForUpdate(value, objName + "." + key, messages) && ret; } } } else { ret = false; messages.add(objName + "=" + obj + ": invalid value for type " + getTypeName()); } } return ret; }
@Test public void testMapTypeGetNormalizedValue() { assertNull(intIntMapType.getNormalizedValue(null), "value=" + null); for (Object value : validValues) { if (value == null) { continue; } Map<Object, Object> normalizedValue = intIntMapType.getNormalizedValue(value); assertNotNull(normalizedValue, "value=" + value); } for (Object value : invalidValues) { assertNull(intIntMapType.getNormalizedValue(value), "value=" + value); } }
public AtlasType getType(String typeName) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> AtlasTypeRegistry.getType({})", typeName); } AtlasType ret = registryData.allTypes.getTypeByName(typeName); if (ret == null) { if (typeName.startsWith(ATLAS_TYPE_ARRAY_PREFIX) && typeName.endsWith(ATLAS_TYPE_ARRAY_SUFFIX)) { int startIdx = ATLAS_TYPE_ARRAY_PREFIX.length(); int endIdx = typeName.length() - ATLAS_TYPE_ARRAY_SUFFIX.length(); String elementTypeName = typeName.substring(startIdx, endIdx); ret = new AtlasArrayType(elementTypeName, this); } else if (typeName.startsWith(ATLAS_TYPE_MAP_PREFIX) && typeName.endsWith(ATLAS_TYPE_MAP_SUFFIX)) { int startIdx = ATLAS_TYPE_MAP_PREFIX.length(); int endIdx = typeName.length() - ATLAS_TYPE_MAP_SUFFIX.length(); String[] keyValueTypes = typeName.substring(startIdx, endIdx).split(ATLAS_TYPE_MAP_KEY_VAL_SEP, 2); String keyTypeName = keyValueTypes.length > 0 ? keyValueTypes[0] : null; String valueTypeName = keyValueTypes.length > 1 ? keyValueTypes[1] : null; ret = new AtlasMapType(keyTypeName, valueTypeName, this); } else { throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, typeName); } } if (LOG.isDebugEnabled()) { LOG.debug("<== AtlasTypeRegistry.getType({}): {}", typeName, ret); } return ret; }
@Override public Map fromV1ToV2(Object v1Obj, AtlasType type, ConverterContext ctx) throws AtlasBaseException { Map ret = null; if (v1Obj != null) { if (v1Obj instanceof Map) { AtlasMapType mapType = (AtlasMapType)type; AtlasType keyType = mapType.getKeyType(); AtlasType valueType = mapType.getValueType(); AtlasFormatConverter keyConverter = converterRegistry.getConverter(keyType.getTypeCategory()); AtlasFormatConverter valueConverter = converterRegistry.getConverter(valueType.getTypeCategory()); Map v1Map = (Map)v1Obj; ret = new HashMap<>(); for (Object key : v1Map.keySet()) { Object value = v1Map.get(key); Object v2Key = keyConverter.fromV1ToV2(key, keyType, ctx); Object v2Value = valueConverter.fromV1ToV2(value, valueType, ctx); ret.put(v2Key, v2Value); } } else { throw new AtlasBaseException(AtlasErrorCode.UNEXPECTED_TYPE, "Map", v1Obj.getClass().getCanonicalName()); } } return ret; }
private Map<String, Object> mapVertexToMap(AtlasVertex entityVertex, AtlasEntityExtInfo entityExtInfo, boolean isOwnedAttribute, AtlasAttribute attribute, final boolean isMinExtInfo) throws AtlasBaseException { Map<String, Object> ret = null; AtlasMapType mapType = (AtlasMapType) attribute.getAttributeType(); AtlasType mapValueType = mapType.getValueType(); if (LOG.isDebugEnabled()) { LOG.debug("Mapping map attribute {} for vertex {}", mapType.getTypeName(), entityVertex); } if (isReference(mapValueType)) { Map<String, Object> currentMap = getReferenceMap(entityVertex, attribute); if (MapUtils.isNotEmpty(currentMap)) { ret = new HashMap<>(); for (Map.Entry<String, Object> entry : currentMap.entrySet()) { String mapKey = entry.getKey(); Object keyValue = entry.getValue(); Object mapValue = mapVertexToCollectionEntry(entityVertex, mapValueType, keyValue, attribute.getRelationshipEdgeLabel(), entityExtInfo, isOwnedAttribute, attribute.getRelationshipEdgeDirection(), isMinExtInfo); if (mapValue != null) { ret.put(mapKey, mapValue); } } } } else { ret = getPrimitiveMap(entityVertex, attribute.getVertexPropertyName()); } if (MapUtils.isEmpty(ret)) { ret = null; } return ret; }
@Override public boolean validateValue(Object obj, String objName, List<String> messages) { boolean ret = true; if (obj != null) { if (obj instanceof Map) { Map<Object, Objects> map = (Map<Object, Objects>) obj; for (Map.Entry e : map.entrySet()) { Object key = e.getKey(); if (!keyType.isValidValue(key)) { ret = false; messages.add(objName + "." + key + ": invalid key for type " + getTypeName()); } else { Object value = e.getValue(); ret = valueType.validateValue(value, objName + "." + key, messages) && ret; } } } else { ret = false; messages.add(objName + "=" + obj + ": invalid value for type " + getTypeName()); } } return ret; }
@Test public void testMapTypeGetNormalizedValue() { assertNull(intIntMapType.getNormalizedValue(null), "value=" + null); for (Object value : validValues) { if (value == null) { continue; } Map<Object, Object> normalizedValue = intIntMapType.getNormalizedValue(value); assertNotNull(normalizedValue, "value=" + value); } for (Object value : invalidValues) { assertNull(intIntMapType.getNormalizedValue(value), "value=" + value); } }
public AtlasType getType(String typeName) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> AtlasTypeRegistry.getType({})", typeName); } AtlasType ret = registryData.allTypes.getTypeByName(typeName); if (ret == null) { if (typeName.startsWith(ATLAS_TYPE_ARRAY_PREFIX) && typeName.endsWith(ATLAS_TYPE_ARRAY_SUFFIX)) { int startIdx = ATLAS_TYPE_ARRAY_PREFIX.length(); int endIdx = typeName.length() - ATLAS_TYPE_ARRAY_SUFFIX.length(); String elementTypeName = typeName.substring(startIdx, endIdx); ret = new AtlasArrayType(elementTypeName, this); } else if (typeName.startsWith(ATLAS_TYPE_MAP_PREFIX) && typeName.endsWith(ATLAS_TYPE_MAP_SUFFIX)) { int startIdx = ATLAS_TYPE_MAP_PREFIX.length(); int endIdx = typeName.length() - ATLAS_TYPE_MAP_SUFFIX.length(); String[] keyValueTypes = typeName.substring(startIdx, endIdx).split(ATLAS_TYPE_MAP_KEY_VAL_SEP, 2); String keyTypeName = keyValueTypes.length > 0 ? keyValueTypes[0] : null; String valueTypeName = keyValueTypes.length > 1 ? keyValueTypes[1] : null; ret = new AtlasMapType(keyTypeName, valueTypeName, this); } else { throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, typeName); } } if (LOG.isDebugEnabled()) { LOG.debug("<== AtlasTypeRegistry.getType({}): {}", typeName, ret); } return ret; }
private static AtlasEdge getEdgeIfExists(AtlasMapType mapType, Map<String, Object> currentMap, String keyStr) { AtlasEdge ret = null; if (isReference(mapType.getValueType())) { Object val = currentMap.get(keyStr); if (val != null) { ret = (AtlasEdge) val; } } return ret; }
if (v2Obj instanceof Map) { AtlasMapType mapType = (AtlasMapType)type; AtlasType keyType = mapType.getKeyType(); AtlasType valueType = mapType.getValueType(); AtlasFormatConverter keyConverter = converterRegistry.getConverter(keyType.getTypeCategory()); AtlasFormatConverter valueConverter = converterRegistry.getConverter(valueType.getTypeCategory());
@Override public AtlasType getTypeForAttribute() { AtlasType keyAttributeType = keyType.getTypeForAttribute(); AtlasType valueAttributeType = valueType.getTypeForAttribute(); if (keyAttributeType == keyType && valueAttributeType == valueType) { return this; } else { AtlasType attributeType = new AtlasMapType(keyAttributeType, valueAttributeType); if (LOG.isDebugEnabled()) { LOG.debug("getTypeForAttribute(): {} ==> {}", getTypeName(), attributeType.getTypeName()); } return attributeType; } } }
@Override public boolean validateValue(Object obj, String objName, List<String> messages) { boolean ret = true; if (obj != null) { if (obj instanceof Map) { Map<Object, Objects> map = (Map<Object, Objects>) obj; for (Map.Entry e : map.entrySet()) { Object key = e.getKey(); if (!keyType.isValidValue(key)) { ret = false; messages.add(objName + "." + key + ": invalid key for type " + getTypeName()); } else { Object value = e.getValue(); ret = valueType.validateValue(value, objName + "." + key, messages) && ret; } } } else { ret = false; messages.add(objName + "=" + obj + ": invalid value for type " + getTypeName()); } } return ret; }
@Test public void testMapTypeDefaultValue() { Map<Object, Object> defValue = intIntMapType.createDefaultValue(); assertEquals(defValue.size(), 1); }
AtlasEntityType getReferencedEntityType(AtlasType type) { if (type instanceof AtlasArrayType) { type = ((AtlasArrayType)type).getElementType(); } if (type instanceof AtlasMapType) { type = ((AtlasMapType)type).getValueType(); } return type instanceof AtlasEntityType ? (AtlasEntityType)type : null; }