| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library googleapis_generator; | 5 library googleapis_generator; |
| 6 | 6 |
| 7 import "dart:io"; | 7 import "dart:io"; |
| 8 import "dart:async"; | 8 import "dart:async"; |
| 9 import "dart:convert"; | 9 import "dart:convert"; |
| 10 | 10 |
| 11 import 'package:discoveryapis_generator/discoveryapis_generator.dart'; | 11 import 'package:discoveryapis_generator/discoveryapis_generator.dart'; |
| 12 import 'package:http/http.dart' as http; | 12 import 'package:http/http.dart' as http; |
| 13 | 13 |
| 14 import 'src/package_configuration.dart'; | 14 import 'src/package_configuration.dart'; |
| 15 | 15 |
| 16 Future<List<DirectoryListItems>> _listAllApis() { | 16 Future<List<DirectoryListItems>> _listAllApis() { |
| 17 var client = new http.Client(); | 17 var client = new http.Client(); |
| 18 return _discoveryClient(client).apis.list().then((DirectoryList list) { | 18 return _discoveryClient(client).apis.list().then((DirectoryList list) { |
| 19 return list.items; | 19 return list.items; |
| 20 }).whenComplete(() => client.close()); | 20 }).whenComplete(() => client.close()); |
| 21 } | 21 } |
| 22 | 22 |
| 23 Future<List<GenerateResult>> downloadDiscoveryDocuments( | 23 Future<List<RestDescription>> downloadDiscoveryDocuments( |
| 24 String outputDir, {List<String> ids}) { | 24 String outputDir, {List<String> ids}) { |
| 25 var apiDescriptions = <RestDescription>[]; | 25 return fetchDiscoveryDocuments(ids: ids).then((List<RestDescription> apis) { |
| 26 | |
| 27 var client = new http.Client(); | |
| 28 var discovery = _discoveryClient(client); | |
| 29 return discovery.apis.list().then((DirectoryList list) { | |
| 30 var futures = <Future>[]; | |
| 31 for (var item in list.items) { | |
| 32 if (ids == null || ids.contains(item.id)) { | |
| 33 futures.add(discovery.apis.getRest(item.name, item.version).then((doc) { | |
| 34 apiDescriptions.add(doc); | |
| 35 })); | |
| 36 } | |
| 37 } | |
| 38 return Future.wait(futures).whenComplete(() => client.close()); | |
| 39 }).then((_) { | |
| 40 var directory = new Directory(outputDir); | 26 var directory = new Directory(outputDir); |
| 41 if (directory.existsSync()) { | 27 if (directory.existsSync()) { |
| 42 print('Deleting directory $outputDir.'); | 28 print('Deleting directory $outputDir.'); |
| 43 directory.deleteSync(recursive: true); | 29 directory.deleteSync(recursive: true); |
| 44 } | 30 } |
| 45 directory.createSync(recursive: true); | 31 directory.createSync(recursive: true); |
| 46 | 32 |
| 47 for (var description in apiDescriptions) { | 33 for (var description in apis) { |
| 48 var name = '$outputDir/${description.name}__${description.version}.json'; | 34 var name = '$outputDir/${description.name}__${description.version}.json'; |
| 49 var file = new File(name); | 35 var file = new File(name); |
| 50 var encoder = new JsonEncoder.withIndent(' '); | 36 var encoder = new JsonEncoder.withIndent(' '); |
| 51 file.writeAsStringSync(encoder.convert(description.toJson())); | 37 file.writeAsStringSync(encoder.convert(description.toJson())); |
| 52 print('Written: $name'); | 38 print('Written: $name'); |
| 53 } | 39 } |
| 40 return apis; |
| 54 }); | 41 }); |
| 55 } | 42 } |
| 56 | 43 |
| 57 Future generateFromConfiguration(String configFile) { | 44 Future<List<RestDescription>> fetchDiscoveryDocuments({List<String> ids}) { |
| 45 var apiDescriptions = <RestDescription>[]; |
| 46 |
| 47 var client = new http.Client(); |
| 48 var discovery = _discoveryClient(client); |
| 49 return discovery.apis.list().then((DirectoryList list) { |
| 50 var futures = <Future>[]; |
| 51 for (var item in list.items) { |
| 52 if (ids == null || ids.contains(item.id)) { |
| 53 futures.add(discovery.apis.getRest(item.name, item.version).then((doc) { |
| 54 apiDescriptions.add(doc); |
| 55 })); |
| 56 } |
| 57 } |
| 58 return Future.wait(futures) |
| 59 .whenComplete(() => client.close()) |
| 60 .then((_) => apiDescriptions); |
| 61 }); |
| 62 } |
| 63 |
| 64 List<RestDescription> loadDiscoveryDocuments(String directory) { |
| 65 var apiDescriptions = new Directory(directory).listSync() |
| 66 .where((fse) => fse is File && fse.path.endsWith('.json')) |
| 67 .map((File file) { |
| 68 return new RestDescription.fromJson(JSON.decode(file.readAsStringSync())); |
| 69 }).toList(); |
| 70 return apiDescriptions; |
| 71 } |
| 72 |
| 73 Future downloadFromConfiguration(String configFile) { |
| 58 return _listAllApis().then((List<DirectoryListItems> items) { | 74 return _listAllApis().then((List<DirectoryListItems> items) { |
| 59 var configuration = new DiscoveryPackagesConfiguration(configFile, items); | 75 var configuration = new DiscoveryPackagesConfiguration(configFile); |
| 60 | |
| 61 // Print warnings for APIs not mentioned. | |
| 62 if (configuration.missingApis.isNotEmpty) { | |
| 63 print('WARNING: No configuration for the following APIs:'); | |
| 64 configuration.missingApis.forEach((id) => print('- $id')); | |
| 65 } | |
| 66 if (configuration.excessApis.isNotEmpty) { | |
| 67 print('WARNING: The following APIs do not exist:'); | |
| 68 configuration.excessApis.forEach((id) => print('- $id')); | |
| 69 } | |
| 70 | 76 |
| 71 // Generate the packages. | 77 // Generate the packages. |
| 72 var configFileUri = new Uri.file(configFile); | 78 var configFileUri = new Uri.file(configFile); |
| 73 return configuration.generate(configFileUri.resolve('discovery').path, | 79 return configuration.download( |
| 74 configFileUri.resolve('generated').path); | 80 configFileUri.resolve('discovery').path, items).then((_) { |
| 81 // Print warnings for APIs not mentioned. |
| 82 if (configuration.missingApis.isNotEmpty) { |
| 83 print('WARNING: No configuration for the following APIs:'); |
| 84 configuration.missingApis.forEach((id) => print('- $id')); |
| 85 } |
| 86 if (configuration.excessApis.isNotEmpty) { |
| 87 print('WARNING: The following APIs do not exist:'); |
| 88 configuration.excessApis.forEach((id) => print('- $id')); |
| 89 } |
| 90 }); |
| 75 }); | 91 }); |
| 76 } | 92 } |
| 77 | 93 |
| 94 void generateFromConfiguration(String configFile) { |
| 95 var configuration = |
| 96 new DiscoveryPackagesConfiguration(configFile); |
| 97 |
| 98 // Generate the packages. |
| 99 var configFileUri = new Uri.file(configFile); |
| 100 return configuration.generate(configFileUri.resolve('discovery').path, |
| 101 configFileUri.resolve('generated').path); |
| 102 } |
| 103 |
| 78 DiscoveryApi _discoveryClient(http.Client client) => new DiscoveryApi(client); | 104 DiscoveryApi _discoveryClient(http.Client client) => new DiscoveryApi(client); |
| OLD | NEW |