OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 cr.define('cloudprint', function() { |
| 6 'use strict'; |
| 7 |
| 8 function CloudDestinationParser() {}; |
| 9 |
| 10 /** |
| 11 * Enumeration of cloud destination field names. |
| 12 * @enum {string} |
| 13 * @private |
| 14 */ |
| 15 CloudDestinationParser.Field_ = { |
| 16 CAPABILITIES: 'capabilities', |
| 17 DISPLAY_NAME: 'displayName', |
| 18 FORMAT: 'capsFormat', |
| 19 ID: 'id', |
| 20 TAGS: 'tags' |
| 21 }; |
| 22 |
| 23 /** |
| 24 * Special tag that denotes whether the destination has been recently used. |
| 25 * @type {string} |
| 26 * @private |
| 27 */ |
| 28 CloudDestinationParser.RECENT_TAG_ = '^recent'; |
| 29 |
| 30 /** |
| 31 * Parses a destination from JSON from a Google Cloud Print search or printer |
| 32 * response. |
| 33 * @return {!print_preview.Destination} Parsed destination. |
| 34 */ |
| 35 CloudDestinationParser.parse = function(json) { |
| 36 // TODO Error handling. |
| 37 var isRecent = arrayContains( |
| 38 json[CloudDestinationParser.Field_.TAGS], |
| 39 CloudDestinationParser.RECENT_TAG_); |
| 40 var cloudDest = new print_preview.Destination( |
| 41 json[CloudDestinationParser.Field_.ID], |
| 42 json[CloudDestinationParser.Field_.DISPLAY_NAME], |
| 43 isRecent, |
| 44 false /*isLocal*/, |
| 45 json[CloudDestinationParser.Field_.TAGS]); |
| 46 if (json.hasOwnProperty(CloudDestinationParser.Field_.CAPABILITIES) && |
| 47 json.hasOwnProperty(CloudDestinationParser.Field_.FORMAT)) { |
| 48 cloudDest.capabilities = CloudCapabilitiesParser.parse( |
| 49 json[CloudDestinationParser.Field_.FORMAT], |
| 50 json[CloudDestinationParser.Field_.CAPABILITIES]); |
| 51 } |
| 52 return cloudDest; |
| 53 }; |
| 54 |
| 55 function CloudCapabilitiesParser() {}; |
| 56 |
| 57 CloudCapabilitiesParser.Field_ = { |
| 58 CAP_ID: 'name', |
| 59 DEFAULT: 'default', |
| 60 IS_DEFAULT: 'default', |
| 61 OPTIONS: 'options', |
| 62 OPTION_ID: 'name' |
| 63 }; |
| 64 |
| 65 CloudCapabilitiesParser.parse = function(capsFormat, json) { |
| 66 log('CloudCapabilitiesParser.parse'); |
| 67 var colorCapability = null; |
| 68 var duplexCapability = null; |
| 69 var copiesCapability = null; |
| 70 var collateCapability = null; |
| 71 for (var cap, i = 0; cap = json[i]; i++) { |
| 72 var capId = cap[CloudCapabilitiesParser.Field_.CAP_ID]; |
| 73 if (capId == print_preview.CollateCapability.Id[capsFormat]) { |
| 74 collateCapability = CloudCapabilitiesParser.parseCollate(capId, cap); |
| 75 } else if (capId == print_preview.ColorCapability.Id[capsFormat]) { |
| 76 colorCapability = CloudCapabilitiesParser.parseColor(capId, cap); |
| 77 } else if (capId == print_preview.CopiesCapability.Id[capsFormat]) { |
| 78 copiesCapability = new print_preview.CopiesCapability(capId); |
| 79 } else if (capId == print_preview.DuplexCapability.Id[capsFormat]) { |
| 80 duplexCapability = CloudCapabilitiesParser.parseDuplex(capId, cap); |
| 81 } |
| 82 } |
| 83 return new print_preview.CloudCapabilities( |
| 84 collateCapability, colorCapability, copiesCapability, duplexCapability); |
| 85 }; |
| 86 |
| 87 CloudCapabilitiesParser.parseCollate = function(capId, cap) { |
| 88 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS]; |
| 89 var collateOption = null; |
| 90 var noCollateOption = null; |
| 91 var isCollateDefault = false; |
| 92 for (var option, i = 0; option = options[i]; i++) { |
| 93 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID]; |
| 94 if (!collateOption && |
| 95 print_preview.CollateCapability.COLLATE_REGEX.test(optionId)) { |
| 96 collateOption = optionId; |
| 97 isCollateDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT]; |
| 98 } else if (!noCollateOption && |
| 99 print_preview.CollateCapability.NO_COLLATE_REGEX.test(optionId)) { |
| 100 noCollateOption = optionId; |
| 101 } |
| 102 } |
| 103 if (!collateOption || !noCollateOption) { |
| 104 return null; |
| 105 } |
| 106 return new print_preview.CollateCapability( |
| 107 capId, collateOption, noCollateOption, isCollateDefault); |
| 108 }; |
| 109 |
| 110 CloudCapabilitiesParser.parseColor = function(capId, cap) { |
| 111 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS]; |
| 112 var colorOption = null; |
| 113 var bwOption = null; |
| 114 var isColorDefault = false; |
| 115 for (var option, i = 0; option = options[i]; i++) { |
| 116 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID]; |
| 117 if (!colorOption && |
| 118 print_preview.ColorCapability.COLOR_REGEX.test(optionId)) { |
| 119 colorOption = optionId; |
| 120 isColorDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT]; |
| 121 } else if (!bwOption && |
| 122 print_preview.ColorCapability.BW_REGEX.test(optionId)) { |
| 123 bwOption = optionId; |
| 124 } |
| 125 } |
| 126 if (!colorOption || !bwOption) { |
| 127 return null; |
| 128 } |
| 129 return new print_preview.ColorCapability( |
| 130 capId, colorOption, bwOption, isColorDefault); |
| 131 }; |
| 132 |
| 133 CloudCapabilitiesParser.parseDuplex = function(capId, cap) { |
| 134 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS]; |
| 135 var simplexOption = null; |
| 136 var longEdgeOption = null; |
| 137 var isDuplexDefault = false; |
| 138 for (var option, i = 0; option = options[i]; i++) { |
| 139 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID]; |
| 140 if (!simplexOption && |
| 141 print_preview.DuplexCapability.SIMPLEX_REGEX.test(optionId)) { |
| 142 simplexOption = optionId; |
| 143 } else if (!longEdgeOption && |
| 144 print_preview.DuplexCapability.LONG_EDGE_REGEX.test(optionId)) { |
| 145 longEdgeOption = optionId; |
| 146 isDuplexDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT]; |
| 147 } |
| 148 } |
| 149 if (!simplexOption || !longEdgeOption) { |
| 150 return null; |
| 151 } |
| 152 return new print_preview.DuplexCapability( |
| 153 capId, simplexOption, longEdgeOption, isDuplexDefault); |
| 154 }; |
| 155 |
| 156 // Export |
| 157 return { |
| 158 CloudCapabilitiesParser: CloudCapabilitiesParser, |
| 159 CloudDestinationParser: CloudDestinationParser |
| 160 }; |
| 161 }); |
| 162 |
OLD | NEW |