Thing.fromJson constructor
Creates a Thing from a decoded json entry.
Could throw InvalidJsonSchemaException or a specific JsonMissingKeyException and if something went wrong during the parsing to the directory objects.
Implementation
factory Thing.fromJson(Map<String, dynamic> map) {
try {
final String tId = map.containsKey(DittoKeys.thingId)
? map[DittoKeys.thingId] as String
: throw JsonMissingKeyException(DittoKeys.thingId, map.toString());
final Thing internalThing = Thing(tId);
if (map.containsKey(DittoKeys.attributes)) {
final Map<String, dynamic> attributesMap =
map[DittoKeys.attributes] as Map<String, dynamic>;
internalThing.name = attributesMap[DirectoryKeys.name] as String?;
try {
internalThing.thingType =
attributesMap.containsKey(DirectoryKeys.thingType)
? _createThingType(
attributesMap[DirectoryKeys.thingType] as String)
: null;
} on FallThroughError {
throw InvalidJsonSchemaException(
'unknown thing type', map.toString());
} on TypeError {
throw InvalidJsonSchemaException(
'thing type is no string', map.toString());
}
internalThing
..dataModel = attributesMap[DirectoryKeys.dataModel] as String?
..publicKey = attributesMap[DirectoryKeys.publicKey] as String?
..allEndpoints = attributesMap.containsKey(DirectoryKeys.allEndpoints)
? _createEndpointList(
attributesMap[DirectoryKeys.allEndpoints] as List<dynamic>)
: null
..defaultEndpoint = attributesMap
.containsKey(DirectoryKeys.defaultEndpoint)
? Endpoint(attributesMap[DirectoryKeys.defaultEndpoint] as String)
: null
..defaultHMI = attributesMap[DirectoryKeys.defaultHMI] as String?
..location = attributesMap.containsKey(DirectoryKeys.location)
? Location.fromJson(
attributesMap[DirectoryKeys.location] as Map<String, dynamic>)
: null
..ownedBy = attributesMap[DirectoryKeys.ownedBy] as String?
..administratedBy =
attributesMap[DirectoryKeys.administratedBy] as String?
..usedBy = attributesMap[DirectoryKeys.usedBy] as String?
..represents = attributesMap[DirectoryKeys.represents] as String?
..thingStructure = attributesMap
.containsKey(DirectoryKeys.thingStructure)
? DirObject.fromJson(attributesMap[DirectoryKeys.thingStructure]
as Map<String, dynamic>)
: null;
}
return internalThing;
} on TypeError catch (e) {
throw InvalidJsonSchemaException(e.stackTrace.toString(), map.toString());
}
}