/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.sdklib.internal.repository.packages; import com.android.sdklib.SdkManager; import com.android.sdklib.internal.repository.archives.Archive; import com.android.sdklib.internal.repository.sources.SdkSource; import com.android.sdklib.repository.FullRevision; import com.android.sdklib.repository.descriptors.IPkgDesc; import com.android.sdklib.repository.descriptors.PkgDesc; import java.io.File; import java.util.Properties; /** * A mock empty package, of no particular subpackage type. * {@link #sameItemAs(Package)} will return true if these packages have the same handle. */ public class MockEmptyPackage extends MajorRevisionPackage { private final String mTestHandle; /** * Creates a new {@link MockEmptyPackage} with a local archive. * * @param testHandle The comparison handle for {@link #sameItemAs(Package)}. */ public MockEmptyPackage(String testHandle) { super( null /*source*/, null /*props*/, 0 /*revision*/, null /*license*/, null /*description*/, null /*descUrl*/, "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } /** * Creates a new {@link MockEmptyPackage} with a local archive. * * @param testHandle The comparison handle for {@link #sameItemAs(Package)}. * @param props The package properties. */ public MockEmptyPackage(String testHandle, Properties props) { super( null /*source*/, props, 0 /*revision*/, null /*license*/, null /*description*/, null /*descUrl*/, "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } /** * Creates a new {@link MockEmptyPackage} with a local archive. * * @param testHandle The comparison handle for {@link #sameItemAs(Package)}. * @param revision The revision of the package, printed in the short description. */ public MockEmptyPackage(String testHandle, int revision) { super( null /*source*/, null /*props*/, revision, null /*license*/, null /*description*/, null /*descUrl*/, "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } /** * Creates a new {@link MockEmptyPackage} with a local archive. * * @param source The source associate with this package. * @param testHandle The comparison handle for {@link #sameItemAs(Package)}. * @param revision The revision of the package, printed in the short description. */ public MockEmptyPackage(SdkSource source, String testHandle, int revision) { super( source, null /*props*/, revision, null /*license*/, null /*description*/, null /*descUrl*/, "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } @Override protected Archive[] initializeArchives( Properties props, String archiveOsPath) { return new Archive[] { new Archive(this, props, archiveOsPath) { @Override public String toString() { return mTestHandle; } } }; } @Override public IPkgDesc getPkgDesc() { return PkgDesc.Builder.newTool( new FullRevision(1, 2, 3, 4), FullRevision.NOT_SPECIFIED).create(); } public Archive getLocalArchive() { return getArchives()[0]; } @Override public File getInstallFolder(String osSdkRoot, SdkManager sdkManager) { return new File(new File(osSdkRoot, "mock"), mTestHandle); } @Override public String installId() { return "mock-empty-" + mTestHandle; //$NON-NLS-1$ } @Override public String getListDescription() { String ld = super.getListDisplay(); return ld.isEmpty() ? this.getClass().getSimpleName() : ld; } @Override public String getShortDescription() { StringBuilder sb = new StringBuilder(this.getClass().getSimpleName()); sb.append(" '").append(mTestHandle).append('\''); if (getRevision().getMajor() > 0) { sb.append(" rev=").append(getRevision()); } return sb.toString(); } /** Returns true if these packages have the same handle. */ @Override public boolean sameItemAs(Package pkg) { return (pkg instanceof MockEmptyPackage) && mTestHandle.equals(((MockEmptyPackage) pkg).mTestHandle); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((mTestHandle == null) ? 0 : mTestHandle.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof MockEmptyPackage)) { return false; } MockEmptyPackage other = (MockEmptyPackage) obj; if (mTestHandle == null) { if (other.mTestHandle != null) { return false; } } else if (!mTestHandle.equals(other.mTestHandle)) { return false; } return true; } }