OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of gcloud.db; | 5 part of gcloud.db; |
6 | 6 |
7 /// An implementation of [ModelDB] based on model class annotations. | 7 /// An implementation of [ModelDB] based on model class annotations. |
8 /// | 8 /// |
9 /// The two constructors will scan loaded dart libraries for classes with a | 9 /// The two constructors will scan loaded dart libraries for classes with a |
10 /// [Kind] annotation. | 10 /// [Kind] annotation. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 ModelDBImpl.fromLibrary(Symbol librarySymbol) { | 54 ModelDBImpl.fromLibrary(Symbol librarySymbol) { |
55 _initialize([mirrors.currentMirrorSystem().findLibrary(librarySymbol)]); | 55 _initialize([mirrors.currentMirrorSystem().findLibrary(librarySymbol)]); |
56 } | 56 } |
57 | 57 |
58 /// Converts a [datastore.Key] to a [Key]. | 58 /// Converts a [datastore.Key] to a [Key]. |
59 Key fromDatastoreKey(datastore.Key datastoreKey) { | 59 Key fromDatastoreKey(datastore.Key datastoreKey) { |
60 var namespace = new Partition(datastoreKey.partition.namespace); | 60 var namespace = new Partition(datastoreKey.partition.namespace); |
61 Key key = namespace.emptyKey; | 61 Key key = namespace.emptyKey; |
62 for (var element in datastoreKey.elements) { | 62 for (var element in datastoreKey.elements) { |
63 var type = _type2ModelDesc[_kind2ModelDesc[element.kind]]; | 63 var type = _type2ModelDesc[_kind2ModelDesc[element.kind]]; |
64 assert (type != null); | 64 if (type == null) { |
| 65 throw new StateError( |
| 66 'Could not find a model associated with kind "${element.kind}". ' |
| 67 'Please ensure a model class was annotated with ' |
| 68 '`@Kind(name: "${element.kind}")`.'); |
| 69 } |
65 key = key.append(type, id: element.id); | 70 key = key.append(type, id: element.id); |
66 } | 71 } |
67 return key; | 72 return key; |
68 } | 73 } |
69 | 74 |
70 /// Converts a [Key] to a [datastore.Key]. | 75 /// Converts a [Key] to a [datastore.Key]. |
71 datastore.Key toDatastoreKey(Key dbKey) { | 76 datastore.Key toDatastoreKey(Key dbKey) { |
72 List<datastore.KeyElement> elements = []; | 77 List<datastore.KeyElement> elements = []; |
73 var currentKey = dbKey; | 78 var currentKey = dbKey; |
74 while (!currentKey.isEmpty) { | 79 while (!currentKey.isEmpty) { |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 enforceFieldExists: false); | 543 enforceFieldExists: false); |
539 // If superclass can't encode field, we return value here (and assume | 544 // If superclass can't encode field, we return value here (and assume |
540 // it's primitive) | 545 // it's primitive) |
541 // NOTE: Implicit assumption: | 546 // NOTE: Implicit assumption: |
542 // If value != null then superclass will return != null. | 547 // If value != null then superclass will return != null. |
543 // TODO: Ensure [value] is primitive in this case. | 548 // TODO: Ensure [value] is primitive in this case. |
544 if (primitiveValue == null) primitiveValue = value; | 549 if (primitiveValue == null) primitiveValue = value; |
545 return primitiveValue; | 550 return primitiveValue; |
546 } | 551 } |
547 } | 552 } |
OLD | NEW |