import 'package:flutter/material.dart'; import 'package:oc_front/models/abstract.dart'; import 'package:oc_front/models/resources/resources.dart'; class DataItem extends AbstractItem { // special attributes String? type; String? source; String? quality; bool openData = false; bool static = false; bool personalData = false; bool anonymizedPersonalData = false; double? size; String? example; DateTime? updatePeriod; DataItem({ this.type, this.source, this.quality, this.openData = false, this.static = false, this.personalData = false, this.anonymizedPersonalData = false, this.size, this.example, this.updatePeriod, }): super(); @override String get topic => "data"; @override deserialize(dynamic data) { try { data = data as Map; } catch (e) { return DataItem(); } var w = DataItem( type: data.containsKey("type") && data["type"] != null ? data["type"] : null, source: data.containsKey("source") && data["source"] != null ? data["source"] : null, quality: data.containsKey("quality") && data["quality"] != null ? data["quality"] : null, openData: data.containsKey("open_data") && data["open_data"] != null ? data["open_data"] : false, static: data.containsKey("static") && data["static"] != null ? data["static"] : false, personalData: data.containsKey("personal_data") && data["l"] != null ? data["personal_data"] : false, anonymizedPersonalData: data.containsKey("anonymized_personal_data") && data["anonymized_personal_data"] != null ? data["anonymized_personal_data"] : false, size: data.containsKey("size") && data["size"] != null ? data["size"] : null, example: data.containsKey("example") && data["example"] != null ? data["example"] : null, updatePeriod: data.containsKey("update_period") && data["update_period"] != null ? DateTime.parse(data["update_period"]) : null, ); w.mapFromJSON(data, DataInstance()); if (w.logo != null) { // get image dimensions var image = Image.network(w.logo!); image.image .resolve(const ImageConfiguration()) .addListener( ImageStreamListener( (ImageInfo info, bool _) { w.width = info.image.width.toDouble(); w.height = info.image.height.toDouble(); })); } return w; } @override Map infos() { return { "type": type, "quality": quality, "open_data": openData, "static": static, "personal_data": personalData, "anonymized_personal_data": anonymizedPersonalData, "size": size, "example": example, "update_period": updatePeriod?.toIso8601String(), }; } @override Map serialize() { var obj = infos(); obj.addAll(toJSON()); return obj; } } class DataInstance extends AbstractInstance { String? source; DataInstance( {this.source} ): super(); @override Map infos() { return { "inputs": toListJson(inputs), "outputs": toListJson(outputs), }; } @override DataInstance deserialize(json) { try { json = json as Map; } catch (e) { return DataInstance(); } var w = DataInstance( source: json.containsKey("source") && json["source"] != null ? json["source"] : null, ); w.mapFromJSON(json, DataPartnership()); return w; } @override Map serialize() { var obj = toJSON(); obj["source"] = source; obj.addAll(infos()); return obj; } } class DataPartnership extends AbstractPartnerShip { double? maxDownloadableGBAllowed; bool personalDataAllowed = false; bool anonymizedPersonalDataAllowed = false; DataPartnership({ this.maxDownloadableGBAllowed, this.personalDataAllowed = false, this.anonymizedPersonalDataAllowed = false, }): super(); @override DataPartnership deserialize(json) { try { json = json as Map; } catch (e) { return DataPartnership(); } var w = DataPartnership( maxDownloadableGBAllowed: json.containsKey("max_downloadable_gb_allowed") && json["max_downloadable_gb_allowed"] != null ? json["max_downloadable_gb_allowed"] : null, personalDataAllowed: json.containsKey("personal_data_allowed") && json["personal_data_allowed"] != null ? json["personal_data_allowed"] : false, anonymizedPersonalDataAllowed: json.containsKey("anonymized_personal_data_allowed") && json["anonymized_personal_data_allowed"] != null ? json["anonymized_personal_data_allowed"] : false, ); w.mapFromJSON(json, DataPricing()); return w; } @override Map serialize() { Map obj = { "max_downloadable_gb_allowed": maxDownloadableGBAllowed, "personal_data_allowed": personalDataAllowed, "anonymized_personal_data_allowed": anonymizedPersonalDataAllowed, }; obj.addAll(toJSON()); return obj; } } class DataPricing extends AbstractPricing { @override DataPricing deserialize(json) { var w = DataPricing(); w.mapFromJSON(json); return w; } @override Map serialize() { return toJSON(); } }