BasePersistentObject class
class BasePersistentObject { final Map _map = objectory.dataMapDecorator(new LinkedHashMap()); Map get map => _map; set map(Map newValue) { _setMap(newValue); } Set<String> _dirtyFields; Map<String,dynamic> _compoundProperties; bool saveOnUpdate = false; BasePersistentObject() { _setMap(map); } void _setMap(Map newValue) { if (newValue == null || newValue.isEmpty) { _initMap(); } else { _map.clear(); newValue.forEach((k, v) => _map[k] = v); } _compoundProperties = new Map<String,dynamic>(); init(); _dirtyFields = new Set<String>(); } Set<String> get dirtyFields => _dirtyFields; EmbeddedPersistentObject getEmbeddedObject(Type classType, String property) { EmbeddedPersistentObject result = _compoundProperties[property]; if (result == null) { result = objectory.newInstance(classType); result._setMap(map[property]); map[property] = result.map; result._parent = this; result._pathToMe = property; } return result; } PersistentList getPersistentList(Type classType, String property) { PersistentList result = _compoundProperties[property]; if (result == null) { result = new PersistentList(this,classType,property); _compoundProperties[property] = result; } return result; } PersistentObject getLinkedObject(String property) { DbRef dbRef = map[property]; if (dbRef == null) { return null; } Type classType = objectory.getClassTypeByCollection(dbRef.collection); return objectory.findInCacheOrGetProxy(dbRef.id,classType); } setLinkedObject(String property, PersistentObject value) { if (value == null) { map[property] = null; } else { if (value.id == null) { throw new Exception('Attemt to set link to unsaved object: $value'); } onValueChanging(property, value.dbRef); map[property] = value.dbRef; } } void _initMap() { } void setDirty(String fieldName) { if (_dirtyFields == null){ return; } _dirtyFields.add(fieldName); } void clearDirtyStatus() { _dirtyFields.clear(); } void onValueChanging(String fieldName, newValue) { setDirty(fieldName); } isDirty() { return !_dirtyFields.isEmpty; } void setProperty(String property, value){ onValueChanging(property, value); this.map[property] = value; } dynamic getProperty(String property){ return this.map[property]; } String toString()=>"$collectionName($map)"; void init(){} /// Name of MongoDB collection where instance of this class would be persistet in DB. /// By default equals to class name, but may be overwritten String get collectionName => runtimeType.toString(); Future<PersistentObject> fetchLinks(){ var dbRefs = new List<DbRef>(); getDbRefsFromMap(map, dbRefs); var objects = dbRefs.map((each) => objectory.dbRef2Object(each)); return Future.forEach(objects,(each) => each.fetch()).then((_)=>new Future.value(this)); } getDbRefsFromMap(Map map, List result){ for(var each in map.values){ if (each is DbRef) { result.add(each); } if (each is Map) { getDbRefsFromMap(each, result); } if (each is List) { getDbRefsFromList(each, result); } } } getDbRefsFromList(List list, List result){ for (var each in list) { if (each is DbRef) { result.add(each); } if (each is Map) { getDbRefsFromMap(each, result); } if (each is List) { getDbRefsFromList(each, result); } } } }
Subclasses
EmbeddedPersistentObject, PersistentObject
Constructors
Properties
Methods
void clearDirtyStatus() #
void clearDirtyStatus() { _dirtyFields.clear(); }
Future<PersistentObject> fetchLinks() #
Future<PersistentObject> fetchLinks(){ var dbRefs = new List<DbRef>(); getDbRefsFromMap(map, dbRefs); var objects = dbRefs.map((each) => objectory.dbRef2Object(each)); return Future.forEach(objects,(each) => each.fetch()).then((_)=>new Future.value(this)); }
dynamic getDbRefsFromList(List list, List result) #
getDbRefsFromList(List list, List result){ for (var each in list) { if (each is DbRef) { result.add(each); } if (each is Map) { getDbRefsFromMap(each, result); } if (each is List) { getDbRefsFromList(each, result); } } }
dynamic getDbRefsFromMap(Map map, List result) #
getDbRefsFromMap(Map map, List result){ for(var each in map.values){ if (each is DbRef) { result.add(each); } if (each is Map) { getDbRefsFromMap(each, result); } if (each is List) { getDbRefsFromList(each, result); } } }
EmbeddedPersistentObject getEmbeddedObject(Type classType, String property) #
EmbeddedPersistentObject getEmbeddedObject(Type classType, String property) { EmbeddedPersistentObject result = _compoundProperties[property]; if (result == null) { result = objectory.newInstance(classType); result._setMap(map[property]); map[property] = result.map; result._parent = this; result._pathToMe = property; } return result; }
PersistentObject getLinkedObject(String property) #
PersistentObject getLinkedObject(String property) { DbRef dbRef = map[property]; if (dbRef == null) { return null; } Type classType = objectory.getClassTypeByCollection(dbRef.collection); return objectory.findInCacheOrGetProxy(dbRef.id,classType); }
PersistentList getPersistentList(Type classType, String property) #
PersistentList getPersistentList(Type classType, String property) { PersistentList result = _compoundProperties[property]; if (result == null) { result = new PersistentList(this,classType,property); _compoundProperties[property] = result; } return result; }
dynamic getProperty(String property) #
dynamic getProperty(String property){ return this.map[property]; }
void init() #
void init(){}
dynamic isDirty() #
isDirty() { return !_dirtyFields.isEmpty; }
void onValueChanging(String fieldName, newValue) #
void onValueChanging(String fieldName, newValue) { setDirty(fieldName); }
void setDirty(String fieldName) #
void setDirty(String fieldName) { if (_dirtyFields == null){ return; } _dirtyFields.add(fieldName); }
dynamic setLinkedObject(String property, PersistentObject value) #
setLinkedObject(String property, PersistentObject value) { if (value == null) { map[property] = null; } else { if (value.id == null) { throw new Exception('Attemt to set link to unsaved object: $value'); } onValueChanging(property, value.dbRef); map[property] = value.dbRef; } }