OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 library source_registry; | |
6 | |
7 import 'source.dart'; | |
8 | |
9 /// A class that keeps track of [Source]s used for installing packages. | |
10 class SourceRegistry { | |
11 final Map<String, Source> _map; | |
12 Source _default; | |
13 | |
14 /// Creates a new registry with no packages registered. | |
15 SourceRegistry() : _map = <String, Source>{}; | |
16 | |
17 /// Returns the default source, which is used when no source is specified. | |
18 Source get defaultSource => _default; | |
19 | |
20 /// Sets the default source. This takes a string, which must be the name of a | |
21 /// registered source. | |
22 void setDefault(String name) { | |
23 if (!_map.containsKey(name)) { | |
24 throw new StateError('Default source $name is not in the registry'); | |
25 } | |
26 | |
27 _default = _map[name]; | |
28 } | |
29 | |
30 /// Registers a new source. This source may not have the same name as a source | |
31 /// that's already been registered. | |
32 void register(Source source) { | |
33 if (_map.containsKey(source.name)) { | |
34 throw new StateError('Source registry already has a source named ' | |
35 '${source.name}'); | |
36 } | |
37 | |
38 _map[source.name] = source; | |
39 } | |
40 | |
41 /// Returns `true` if there is a source named [name]. | |
42 bool contains(String name) => _map.containsKey(name); | |
43 | |
44 /// Returns the source named [name]. Throws an error if no such source has | |
45 /// been registered. If [name] is null, returns the default source. | |
46 Source operator[](String name) { | |
47 if (name == null) { | |
48 if (defaultSource != null) return defaultSource; | |
49 throw new StateError('No default source has been registered'); | |
50 } | |
51 if (_map.containsKey(name)) return _map[name]; | |
52 throw new ArgumentError('No source named $name is registered'); | |
53 } | |
54 } | |
OLD | NEW |