OLD | NEW |
(Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library barback.transformer.wrapping_aggregate_transformer; |
| 6 |
| 7 import 'dart:async'; |
| 8 |
| 9 import '../asset/asset_id.dart'; |
| 10 import '../utils.dart'; |
| 11 import 'aggregate_transform.dart'; |
| 12 import 'aggregate_transformer.dart'; |
| 13 import 'declaring_aggregate_transform.dart'; |
| 14 import 'declaring_aggregate_transformer.dart'; |
| 15 import 'declaring_transform.dart'; |
| 16 import 'declaring_transformer.dart'; |
| 17 import 'lazy_aggregate_transformer.dart'; |
| 18 import 'lazy_transformer.dart'; |
| 19 import 'transform.dart'; |
| 20 import 'transformer.dart'; |
| 21 |
| 22 /// An [AggregateTransformer] that wraps a non-aggregate [Transformer]. |
| 23 /// |
| 24 /// Although barback internally works in terms of [AggregateTransformer]s, most |
| 25 /// transformers only work on individual primary inputs in isolation. We want to |
| 26 /// allow those transformers to implement the more user-friendly [Transformer] |
| 27 /// interface. This class makes that possible. |
| 28 class WrappingAggregateTransformer implements AggregateTransformer { |
| 29 /// The wrapped transformer. |
| 30 final Transformer transformer; |
| 31 |
| 32 factory WrappingAggregateTransformer(Transformer transformer) { |
| 33 if (transformer is LazyTransformer) { |
| 34 return new _LazyWrappingAggregateTransformer( |
| 35 transformer as LazyTransformer); |
| 36 } else if (transformer is DeclaringTransformer) { |
| 37 return new _DeclaringWrappingAggregateTransformer( |
| 38 transformer as DeclaringTransformer); |
| 39 } else { |
| 40 return new WrappingAggregateTransformer._(transformer); |
| 41 } |
| 42 } |
| 43 |
| 44 WrappingAggregateTransformer._(this.transformer); |
| 45 |
| 46 Future<String> classifyPrimary(AssetId id) { |
| 47 return syncFuture(() => transformer.isPrimary(id)) |
| 48 .then((isPrimary) => isPrimary ? id.path : null); |
| 49 } |
| 50 |
| 51 Future apply(AggregateTransform aggregateTransform) { |
| 52 return newTransform(aggregateTransform) |
| 53 .then((transform) => transformer.apply(transform)); |
| 54 } |
| 55 |
| 56 String toString() => transformer.toString(); |
| 57 } |
| 58 |
| 59 /// A wrapper for [DeclaringTransformer]s that implements |
| 60 /// [DeclaringAggregateTransformer]. |
| 61 class _DeclaringWrappingAggregateTransformer |
| 62 extends WrappingAggregateTransformer |
| 63 implements DeclaringAggregateTransformer { |
| 64 final DeclaringTransformer _declaring; |
| 65 |
| 66 _DeclaringWrappingAggregateTransformer(DeclaringTransformer transformer) |
| 67 : _declaring = transformer, |
| 68 super._(transformer as Transformer); |
| 69 |
| 70 Future declareOutputs(DeclaringAggregateTransform aggregateTransform) { |
| 71 return newDeclaringTransform(aggregateTransform).then((transform) { |
| 72 return (transformer as DeclaringTransformer).declareOutputs(transform); |
| 73 }); |
| 74 } |
| 75 } |
| 76 |
| 77 /// A wrapper for [LazyTransformer]s that implements |
| 78 /// [LazyAggregateTransformer]. |
| 79 class _LazyWrappingAggregateTransformer |
| 80 extends _DeclaringWrappingAggregateTransformer |
| 81 implements LazyAggregateTransformer { |
| 82 _LazyWrappingAggregateTransformer(LazyTransformer transformer) |
| 83 : super(transformer); |
| 84 } |
OLD | NEW |