oc-front/lib/models/resources/storage.dart
2025-02-04 17:02:49 +01:00

166 lines
5.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:oc_front/core/services/enum_service.dart';
import 'package:oc_front/models/abstract.dart';
import 'package:oc_front/models/resources/resources.dart';
class StorageItem extends AbstractItem<StoragePricing, StoragePartnership, StorageInstance, StorageItem> {
StorageItem({
this.acronym,
this.typeEnum,
}): super();
@override String get topic => "storage";
// special attributes
String? acronym;
int? typeEnum;
@override deserialize(dynamic data) {
try { data = data as Map<String, dynamic>;
} catch (e) { return StorageItem(); }
var w = StorageItem(
acronym: data.containsKey("acronym") && data["acronym"] != null ? data["acronym"] : null,
typeEnum: data.containsKey("storage_type") && data["storage_type"] != null ? EnumService.get("storage/type", data["storage_type"]) : null,
);
w.mapFromJSON(data, StorageInstance());
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<String, dynamic> infos() {
return {
"acronym": acronym,
"storage_type": EnumService.enums["storage/type"] != null
&& EnumService.enums["storage/type"]!["$typeEnum"] != null ?
EnumService.enums["storage/type"]!["$typeEnum"] : typeEnum,
};
}
@override Map<String, dynamic> serialize() {
var obj = infos();
obj.addAll(toJSON());
return obj;
}
}
class StorageInstance extends AbstractInstance<StoragePricing, StoragePartnership> {
String? source;
bool local = false;
String? securityLevel;
int? storageSizeEnum;
int? size;
bool encryption = false;
String? redundancy;
String? throughput;
StorageInstance({
this.source,
this.local = false,
this.securityLevel,
this.storageSizeEnum,
this.size,
this.encryption = false,
this.redundancy,
this.throughput,
}): super();
@override
StorageInstance deserialize(json) {
try { json = json as Map<String, dynamic>;
} catch (e) { return StorageInstance(); }
var w = StorageInstance(
source: json.containsKey("source") && json["source"] != null ? json["source"] : null,
local: json.containsKey("local") && json["local"] != null ? json["local"] : false,
securityLevel: json.containsKey("security_level") && json["security_level"] != null ? json["security_level"] : null,
storageSizeEnum: json.containsKey("size_type") ? EnumService.get("storage/size", json["size_type"]) : null,
size: json.containsKey("size") && json["size"] != null ? json["size"] : null,
encryption: json.containsKey("encryption") && json["encryption"] != null ? json["encryption"] : false,
redundancy: json.containsKey("redundancy") && json["redundancy"] != null ? json["redundancy"] : null,
throughput: json.containsKey("throughput") && json["throughput"] != null ? json["throughput"] : null,
);
w.mapFromJSON(json, StoragePartnership());
return w;
}
@override
Map<String, dynamic> infos() {
return {
"local": local,
"security_level": securityLevel,
"size_type": EnumService.enums["storage/size"] != null
&& EnumService.enums["storage/size"]!["$storageSizeEnum"] != null ?
EnumService.enums["storage/size"]!["$storageSizeEnum"] : storageSizeEnum,
"size": size,
"encryption": encryption,
"redundancy": redundancy,
"throughput": throughput,
"inputs": toListJson(inputs),
"outputs": toListJson(outputs),
};
}
@override
Map<String, dynamic> serialize() {
var obj = infos();
obj["source"] = source;
obj["size_type"] = storageSizeEnum;
obj.addAll(toJSON());
return obj;
}
}
class StoragePartnership extends AbstractPartnerShip<StoragePricing> {
double? maxSizeGBAllowed;
bool onlyEncryptedAllowed = false;
StoragePartnership({
this.maxSizeGBAllowed,
this.onlyEncryptedAllowed = false,
}): super();
@override
StoragePartnership deserialize(json) {
try { json = json as Map<String, dynamic>;
} catch (e) { return StoragePartnership(); }
var w = StoragePartnership(
maxSizeGBAllowed: json.containsKey("allowed_gb") && json["allowed_gb"] != null ? json["allowed_gb"] : null,
onlyEncryptedAllowed: json.containsKey("personal_data_allowed") && json["personal_data_allowed"] != null ? json["personal_data_allowed"] : false,
);
w.mapFromJSON(json, StoragePricing());
return w;
}
@override
Map<String, dynamic> serialize() {
Map<String, dynamic> obj = {
"allowed_gb": maxSizeGBAllowed,
"personal_data_allowed": onlyEncryptedAllowed,
};
obj.addAll(toJSON());
return obj;
}
}
class StoragePricing extends AbstractPricing {
@override StoragePricing deserialize(json) {
var w = StoragePricing();
w.mapFromJSON(json);
return w;
}
@override
Map<String, dynamic> serialize() {
return toJSON();
}
}