1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.tradefed.build; 18 19 import com.android.tradefed.log.LogUtil.CLog; 20 import com.android.tradefed.util.NullUtil; 21 22 import java.io.File; 23 import java.util.List; 24 25 /** 26 * A {@link IDeviceBuildInfo} that also contains a {@link IAppBuildInfo}. 27 */ 28 public class AppDeviceBuildInfo extends BuildInfo implements IDeviceBuildInfo, IAppBuildInfo { 29 30 private static final long serialVersionUID = BuildSerializedVersion.VERSION; 31 private IDeviceBuildInfo mDeviceBuild; 32 private IAppBuildInfo mAppBuildInfo; 33 34 /** 35 * @see DeviceBuildInfo#DeviceBuildInfo(String, String, String) 36 */ 37 /*public AppDeviceBuildInfo(String buildId, String testTarget, String buildName) { 38 super(buildId, testTarget, buildName); 39 }*/ 40 41 /** 42 * @see DeviceBuildInfo#DeviceBuildInfo(String, String) 43 */ 44 public AppDeviceBuildInfo(String buildId, String buildName) { 45 super(buildId, buildName); 46 } 47 48 /** 49 * @return the {@link IDeviceBuildInfo} for the device. 50 */ 51 public IDeviceBuildInfo getDeviceBuildInfo() { 52 return mDeviceBuild; 53 } 54 55 /** 56 * @return the {@link IAppBuildInfo} for the application. 57 */ 58 public IAppBuildInfo getAppBuildInfo() { 59 return mAppBuildInfo; 60 } 61 62 /** 63 * {@inheritDoc} 64 */ 65 @Override 66 public String getDeviceBuildId() { 67 return mDeviceBuild.getDeviceBuildId(); 68 } 69 70 /** 71 * {@inheritDoc} 72 */ 73 @Override 74 public String getDeviceBuildFlavor() { 75 return mDeviceBuild.getDeviceBuildFlavor(); 76 } 77 /** 78 * {@inheritDoc} 79 */ 80 @Override 81 public File getDeviceImageFile() { 82 return mDeviceBuild.getDeviceImageFile(); 83 } 84 85 /** 86 * {@inheritDoc} 87 */ 88 @Override 89 public String getDeviceImageVersion() { 90 return mDeviceBuild.getDeviceImageVersion(); 91 } 92 93 /** 94 * {@inheritDoc} 95 */ 96 @Override 97 public void setDeviceImageFile(File deviceImageFile, String version) { 98 mDeviceBuild.setDeviceImageFile(deviceImageFile, version); 99 } 100 101 /** 102 * {@inheritDoc} 103 */ 104 @Override 105 public File getUserDataImageFile() { 106 return mDeviceBuild.getUserDataImageFile(); 107 } 108 109 /** 110 * {@inheritDoc} 111 */ 112 @Override 113 public String getUserDataImageVersion() { 114 return mDeviceBuild.getUserDataImageVersion(); 115 } 116 117 /** 118 * {@inheritDoc} 119 */ 120 @Override 121 public void setUserDataImageFile(File userDataFile, String version) { 122 mDeviceBuild.setUserDataImageFile(userDataFile, version); 123 } 124 125 /** 126 * {@inheritDoc} 127 */ 128 @Override 129 public File getTestsDir() { 130 return mDeviceBuild.getTestsDir(); 131 } 132 133 /** 134 * {@inheritDoc} 135 */ 136 @Override 137 public String getTestsDirVersion() { 138 return mDeviceBuild.getTestsDirVersion(); 139 } 140 141 /** 142 * {@inheritDoc} 143 */ 144 @Override 145 public void setTestsDir(File testsDir, String version) { 146 mDeviceBuild.setTestsDir(testsDir, version); 147 } 148 149 /** 150 * {@inheritDoc} 151 */ 152 @Override 153 public File getBasebandImageFile() { 154 return mDeviceBuild.getBasebandImageFile(); 155 } 156 157 /** 158 * {@inheritDoc} 159 */ 160 @Override 161 public String getBasebandVersion() { 162 return mDeviceBuild.getBasebandVersion(); 163 } 164 165 /** 166 * {@inheritDoc} 167 */ 168 @Override 169 public void setBasebandImage(File basebandFile, String version) { 170 mDeviceBuild.setBasebandImage(basebandFile, version); 171 } 172 173 /** 174 * {@inheritDoc} 175 */ 176 @Override 177 public File getBootloaderImageFile() { 178 return mDeviceBuild.getBootloaderImageFile(); 179 } 180 181 /** 182 * {@inheritDoc} 183 */ 184 @Override 185 public String getBootloaderVersion() { 186 return mDeviceBuild.getBootloaderVersion(); 187 } 188 189 /** 190 * {@inheritDoc} 191 */ 192 @Override 193 public void setBootloaderImageFile(File bootloaderImgFile, String version) { 194 mDeviceBuild.setBootloaderImageFile(bootloaderImgFile, version); 195 } 196 197 /** 198 * {@inheritDoc} 199 */ 200 @Override 201 public File getOtaPackageFile() { 202 return mDeviceBuild.getOtaPackageFile(); 203 } 204 205 /** 206 * {@inheritDoc} 207 */ 208 @Override 209 public String getOtaPackageVersion() { 210 return mDeviceBuild.getOtaPackageVersion(); 211 } 212 213 /** 214 * {@inheritDoc} 215 */ 216 @Override 217 public void setOtaPackageFile(File otaFile, String version) { 218 mDeviceBuild.setOtaPackageFile(otaFile, version); 219 } 220 221 /** 222 * {@inheritDoc} 223 */ 224 @Override 225 public File getMkbootimgFile() { 226 return mDeviceBuild.getMkbootimgFile(); 227 } 228 229 /** 230 * {@inheritDoc} 231 */ 232 @Override 233 public String getMkbootimgVersion() { 234 return mDeviceBuild.getMkbootimgVersion(); 235 } 236 237 /** 238 * {@inheritDoc} 239 */ 240 @Override 241 public void setMkbootimgFile(File mkbootimg, String version) { 242 mDeviceBuild.setMkbootimgFile(mkbootimg, version); 243 } 244 245 /** 246 * {@inheritDoc} 247 */ 248 @Override 249 public File getRamdiskFile() { 250 return mDeviceBuild.getRamdiskFile(); 251 } 252 253 /** 254 * {@inheritDoc} 255 */ 256 @Override 257 public String getRamdiskVersion() { 258 return mDeviceBuild.getRamdiskVersion(); 259 } 260 261 /** 262 * {@inheritDoc} 263 */ 264 @Override 265 public void setRamdiskFile(File ramdisk, String version) { 266 mDeviceBuild.setRamdiskFile(ramdisk, version); 267 } 268 269 /** 270 * @param deviceBuild 271 */ 272 public void setDeviceBuild(IDeviceBuildInfo deviceBuild) { 273 mDeviceBuild = deviceBuild; 274 } 275 276 /** 277 * {@inheritDoc} 278 */ 279 @Override 280 public void addAppPackageFile(File appPackageFile, String version) { 281 mAppBuildInfo.addAppPackageFile(appPackageFile, version); 282 } 283 284 /** 285 * {@inheritDoc} 286 */ 287 @Override 288 public List<VersionedFile> getAppPackageFiles() { 289 return mAppBuildInfo.getAppPackageFiles(); 290 } 291 292 /** 293 * @param appBuild 294 */ 295 public void setAppBuild(IAppBuildInfo appBuild) { 296 mAppBuildInfo = appBuild; 297 } 298 299 /** 300 * {@inheritDoc} 301 */ 302 @Override 303 public void cleanUp() { 304 if (mDeviceBuild != null) { 305 mDeviceBuild.cleanUp(); 306 } 307 if (mAppBuildInfo != null) { 308 mAppBuildInfo.cleanUp(); 309 } 310 } 311 312 /** 313 * {@inheritDoc} 314 */ 315 @Override 316 public File getFile(String name) { 317 File localRecord = super.getFile(name); 318 File deviceFileRecord = mDeviceBuild.getFile(name); 319 File appFileRecord = mAppBuildInfo.getFile(name); 320 321 if (NullUtil.countNonNulls(localRecord, deviceFileRecord, appFileRecord) > 1) { 322 CLog.e("Found duplicate records while fetching file with name \"%s\"", name); 323 return null; 324 } else if (localRecord != null) { 325 return localRecord; 326 } else if (deviceFileRecord != null) { 327 return deviceFileRecord; 328 } else { 329 return appFileRecord; 330 } 331 } 332 333 /** 334 * {@inheritDoc} 335 */ 336 @Override 337 public String getVersion(String name) { 338 String localFileVersion = super.getVersion(name); 339 String deviceFileVersion = mDeviceBuild.getVersion(name); 340 String appFileVersion = mAppBuildInfo.getVersion(name); 341 342 if (NullUtil.countNonNulls(localFileVersion, deviceFileVersion, appFileVersion) > 1) { 343 CLog.e("Found duplicate records while fetching file version for \"%s\"", name); 344 return null; 345 } else if (localFileVersion != null) { 346 return localFileVersion; 347 } else if (deviceFileVersion != null) { 348 return deviceFileVersion; 349 } else { 350 return appFileVersion; 351 } 352 } 353 354 /** 355 * {@inheritDoc} 356 */ 357 @Override 358 public IBuildInfo clone() { 359 AppDeviceBuildInfo copy = new AppDeviceBuildInfo(getBuildId(), getBuildTargetName()); 360 copy.addAllBuildAttributes(this); 361 IDeviceBuildInfo deviceBuildClone = (IDeviceBuildInfo) mDeviceBuild.clone(); 362 copy.setDeviceBuild(deviceBuildClone); 363 IAppBuildInfo appBuildClone = (IAppBuildInfo) mAppBuildInfo.clone(); 364 copy.setAppBuild(appBuildClone); 365 return copy; 366 } 367 } 368