2014-10-20 15:17:06 -04:00
|
|
|
import {KeyMetadataError} from './exceptions';
|
2015-02-05 13:08:05 -08:00
|
|
|
import {MapWrapper, Map} from 'angular2/src/facade/collection';
|
2015-03-11 16:45:36 +01:00
|
|
|
import {int, isPresent} from 'angular2/src/facade/lang';
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2014-09-25 14:04:46 -07:00
|
|
|
export class Key {
|
2014-11-21 21:19:23 -08:00
|
|
|
token;
|
|
|
|
id:int;
|
|
|
|
metadata:any;
|
2014-10-07 09:37:45 -04:00
|
|
|
constructor(token, id:int) {
|
2014-09-30 14:56:33 -04:00
|
|
|
this.token = token;
|
|
|
|
this.id = id;
|
2014-10-20 15:17:06 -04:00
|
|
|
this.metadata = null;
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
|
|
|
|
2014-10-20 15:17:06 -04:00
|
|
|
static setMetadata(key:Key, metadata):Key {
|
|
|
|
if (isPresent(key.metadata) && key.metadata !== metadata) {
|
|
|
|
throw new KeyMetadataError();
|
|
|
|
}
|
|
|
|
key.metadata = metadata;
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
|
2014-11-06 10:55:34 -08:00
|
|
|
static get(token):Key {
|
|
|
|
return _globalKeyRegistry.get(token);
|
2014-10-20 15:17:06 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
static get numberOfKeys():int {
|
2014-11-06 10:55:34 -08:00
|
|
|
return _globalKeyRegistry.numberOfKeys;
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
2014-10-09 12:09:50 -04:00
|
|
|
}
|
2014-11-06 10:55:34 -08:00
|
|
|
|
|
|
|
export class KeyRegistry {
|
2014-11-21 21:19:23 -08:00
|
|
|
_allKeys:Map;
|
2014-11-06 10:55:34 -08:00
|
|
|
constructor() {
|
|
|
|
this._allKeys = MapWrapper.create();
|
|
|
|
}
|
|
|
|
|
|
|
|
get(token):Key {
|
|
|
|
if (token instanceof Key) return token;
|
|
|
|
|
|
|
|
if (MapWrapper.contains(this._allKeys, token)) {
|
|
|
|
return MapWrapper.get(this._allKeys, token);
|
|
|
|
}
|
|
|
|
|
|
|
|
var newKey = new Key(token, Key.numberOfKeys);
|
|
|
|
MapWrapper.set(this._allKeys, token, newKey);
|
|
|
|
return newKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
get numberOfKeys():int {
|
|
|
|
return MapWrapper.size(this._allKeys);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _globalKeyRegistry = new KeyRegistry();
|