diff options
author | Raphael <raphael@google.com> | 2010-01-22 16:28:23 -0800 |
---|---|---|
committer | Raphael <raphael@google.com> | 2010-01-22 17:20:50 -0800 |
commit | a713fb965670b8bdb2f05914af89f1ad41fae7b5 (patch) | |
tree | 97125ae9a74c0b2cb19cbec8b5740cb3c3ddf9e3 /sdkmanager/libs | |
parent | 14bf157d4c45ed254730ad8e26a0b1bad5604c34 (diff) | |
download | sdk-a713fb965670b8bdb2f05914af89f1ad41fae7b5.zip sdk-a713fb965670b8bdb2f05914af89f1ad41fae7b5.tar.gz sdk-a713fb965670b8bdb2f05914af89f1ad41fae7b5.tar.bz2 |
SDK Updater: support <obsolete> packages.
Bug: 2390937
Change-Id: Ie571d308475a32bc81510785152b230031037094
Diffstat (limited to 'sdkmanager/libs')
12 files changed, 134 insertions, 32 deletions
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java index af83e9c..de51015 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java @@ -195,11 +195,12 @@ public class AddonPackage extends Package /** Returns a short description for an {@link IDescription}. */
@Override
public String getShortDescription() {
- return String.format("%1$s by %2$s, Android API %3$s, revision %4$s",
+ return String.format("%1$s by %2$s, Android API %3$s, revision %4$s%5$s",
getName(),
getVendor(),
mVersion.getApiString(),
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
/**
@@ -216,7 +217,9 @@ public class AddonPackage extends Package }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
s += String.format("\nRequires SDK Platform Android API %1$s",
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java index b91d7bd..6980bac 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java @@ -107,13 +107,15 @@ public class DocPackage extends Package implements IPackageVersion { @Override
public String getShortDescription() {
if (mVersion.isPreview()) {
- return String.format("Documentation for Android '%1$s' Preview SDK, revision %2$s",
+ return String.format("Documentation for Android '%1$s' Preview SDK, revision %2$s%3$s",
mVersion.getCodename(),
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
} else {
- return String.format("Documentation for Android SDK, API %1$d, revision %2$s",
+ return String.format("Documentation for Android SDK, API %1$d, revision %2$s%3$s",
mVersion.getApiLevel(),
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
}
@@ -131,7 +133,9 @@ public class DocPackage extends Package implements IPackageVersion { }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
return s;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java index e62586a..4b79508 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java @@ -170,9 +170,10 @@ public class ExtraPackage extends MinToolsPackage }
}
- String s = String.format("%1$s package, revision %2$d",
+ String s = String.format("%1$s package, revision %2$d%3$s",
name,
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
return s;
}
@@ -191,7 +192,9 @@ public class ExtraPackage extends MinToolsPackage }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
if (getMinToolsRevision() != MIN_TOOLS_REV_NOT_SPECIFIED) {
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java index e30e8a2..bbc59ff 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java @@ -50,8 +50,10 @@ public abstract class Package implements IDescription, Comparable<Package> { public static final String PROP_RELEASE_URL = "Pkg.RelNoteUrl"; //$NON-NLS-1$
public static final String PROP_SOURCE_URL = "Pkg.SourceUrl"; //$NON-NLS-1$
public static final String PROP_USER_SOURCE = "Pkg.UserSrc"; //$NON-NLS-1$
+ public static final String PROP_OBSOLETE = "Pkg.Obsolete"; //$NON-NLS-1$
private final int mRevision;
+ private final String mObsolete;
private final String mLicense;
private final String mDescription;
private final String mDescUrl;
@@ -87,6 +89,8 @@ public abstract class Package implements IDescription, Comparable<Package> { mDescUrl = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_DESC_URL);
mReleaseNote = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_RELEASE_NOTE);
mReleaseUrl = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_RELEASE_URL);
+ mObsolete = XmlParserUtils.getOptionalXmlString(
+ packageNode, SdkRepository.NODE_OBSOLETE);
mLicense = parseLicense(packageNode, licenses);
mArchives = parseArchives(XmlParserUtils.getFirstChild(
@@ -126,6 +130,7 @@ public abstract class Package implements IDescription, Comparable<Package> { mDescUrl = getProperty(props, PROP_DESC_URL, descUrl);
mReleaseNote = getProperty(props, PROP_RELEASE_NOTE, "");
mReleaseUrl = getProperty(props, PROP_RELEASE_URL, "");
+ mObsolete = getProperty(props, PROP_OBSOLETE, null);
// If source is null and we can find a source URL in the properties, generate
// a dummy source just to store the URL. This allows us to easily remember where
@@ -180,6 +185,9 @@ public abstract class Package implements IDescription, Comparable<Package> { if (mReleaseUrl != null && mReleaseUrl.length() > 0) {
props.setProperty(PROP_RELEASE_URL, mReleaseUrl);
}
+ if (mObsolete != null) {
+ props.setProperty(PROP_OBSOLETE, mObsolete);
+ }
if (mSource != null) {
props.setProperty(PROP_SOURCE_URL, mSource.getUrl());
@@ -254,6 +262,14 @@ public abstract class Package implements IDescription, Comparable<Package> { }
/**
+ * Returns true if the package is deemed obsolete, that is it contains an
+ * actual <code><obsolete></code> element.
+ */
+ public boolean isObsolete() {
+ return mObsolete != null;
+ }
+
+ /**
* Returns the revision, an int > 0, for all packages (platform, add-on, tool, doc).
* Can be 0 if this is a local package of unknown revision.
*/
@@ -344,7 +360,9 @@ public abstract class Package implements IDescription, Comparable<Package> { sb.append("\n");
}
- sb.append(String.format("Revision %1$d", getRevision()));
+ sb.append(String.format("Revision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : ""));
s = getDescUrl();
if (s != null && s.length() > 0) {
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java index 07218af..311499e 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java @@ -115,14 +115,16 @@ public class PlatformPackage extends MinToolsPackage implements IPackageVersion String s;
if (mVersion.isPreview()) {
- s = String.format("SDK Platform Android %1$s Preview, revision %2$s",
+ s = String.format("SDK Platform Android %1$s Preview, revision %2$s%3$s",
getVersionName(),
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
} else {
- s = String.format("SDK Platform Android %1$s, API %2$d, revision %3$s",
+ s = String.format("SDK Platform Android %1$s, API %2$d, revision %3$s%4$s",
getVersionName(),
mVersion.getApiLevel(),
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
return s;
@@ -142,7 +144,9 @@ public class PlatformPackage extends MinToolsPackage implements IPackageVersion }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
return s;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java index 33ffde1..5a0f8fc 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java @@ -159,10 +159,11 @@ public class SamplePackage extends MinToolsPackage /** Returns a short description for an {@link IDescription}. */
@Override
public String getShortDescription() {
- String s = String.format("Samples for SDK API %1$s%2$s, revision %3$d",
+ String s = String.format("Samples for SDK API %1$s%2$s, revision %3$d%4$s",
mVersion.getApiString(),
mVersion.isPreview() ? " Preview" : "",
- getRevision());
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
return s;
}
@@ -180,7 +181,9 @@ public class SamplePackage extends MinToolsPackage }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
return s;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java index bf70f91..8b77db8 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java @@ -72,7 +72,9 @@ public class ToolPackage extends Package { /** Returns a short description for an {@link IDescription}. */
@Override
public String getShortDescription() {
- return String.format("Android SDK Tools, revision %1$d", getRevision());
+ return String.format("Android SDK Tools, revision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
/** Returns a long description for an {@link IDescription}. */
@@ -84,7 +86,9 @@ public class ToolPackage extends Package { }
if (s.indexOf("revision") == -1) {
- s += String.format("\nRevision %1$d", getRevision());
+ s += String.format("\nRevision %1$d%2$s",
+ getRevision(),
+ isObsolete() ? " (Obsolete)" : "");
}
return s;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/XmlParserUtils.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/XmlParserUtils.java index 7d3cd7e..61b5b24 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/XmlParserUtils.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/XmlParserUtils.java @@ -44,7 +44,16 @@ class XmlParserUtils { /**
* Retrieves the value of that XML element as a string.
- * Returns an empty string when the element is missing.
+ * Returns an empty string whether the element is missing or empty,
+ * so you can't tell the difference.
+ * <p/>
+ * Note: use {@link #getOptionalXmlString(Node, String)} if you need to know when the
+ * element is missing versus empty.
+ *
+ * @param node The XML <em>parent</em> node to parse.
+ * @param xmlLocalName The XML local name to find in the parent node.
+ * @return The text content of the element. Returns an empty string whether the element
+ * is missing or empty, so you can't tell the difference.
*/
public static String getXmlString(Node node, String xmlLocalName) {
Node child = getFirstChild(node, xmlLocalName);
@@ -53,6 +62,25 @@ class XmlParserUtils { }
/**
+ * Retrieves the value of that XML element as a string.
+ * Returns null when the element is missing, so you can tell between a missing element
+ * and an empty one.
+ * <p/>
+ * Note: use {@link #getXmlString(Node, String)} if you don't need to know when the
+ * element is missing versus empty.
+ *
+ * @param node The XML <em>parent</em> node to parse.
+ * @param xmlLocalName The XML local name to find in the parent node.
+ * @return The text content of the element. Returns null when the element is missing.
+ * Returns an empty string whether the element is present but empty.
+ */
+ public static String getOptionalXmlString(Node node, String xmlLocalName) {
+ Node child = getFirstChild(node, xmlLocalName);
+
+ return child == null ? null : child.getTextContent(); //$NON-NLS-1$
+ }
+
+ /**
* Retrieves the value of that XML element as an integer.
* Returns the default value when the element is missing or is not an integer.
*/
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java index fd5cf9e..d59fc9e 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java @@ -63,18 +63,21 @@ public class SdkRepository { /** The license definition. */
public static final String NODE_LICENSE = "license"; //$NON-NLS-1$
- /** The optional uses-license for all packages (platform, add-on, tool, doc) or for a lib. */
+ /** The optional uses-license for all packages or for a lib. */
public static final String NODE_USES_LICENSE = "uses-license"; //$NON-NLS-1$
- /** The revision, an int > 0, for all packages (platform, add-on, tool, doc). */
+ /** The revision, an int > 0, for all packages. */
public static final String NODE_REVISION = "revision"; //$NON-NLS-1$
- /** The optional description for all packages (platform, add-on, tool, doc) or for a lib. */
+ /** The optional description for all packages or for a lib. */
public static final String NODE_DESCRIPTION = "description"; //$NON-NLS-1$
- /** The optional description URL for all packages (platform, add-on, tool, doc). */
+ /** The optional description URL for all packages. */
public static final String NODE_DESC_URL = "desc-url"; //$NON-NLS-1$
- /** The optional release note for all packages (platform, add-on, tool, doc). */
+ /** The optional release note for all packages. */
public static final String NODE_RELEASE_NOTE = "release-note"; //$NON-NLS-1$
- /** The optional release note URL for all packages (platform, add-on, tool, doc). */
+ /** The optional release note URL for all packages. */
public static final String NODE_RELEASE_URL = "release-url"; //$NON-NLS-1$
+ /** The optional obsolete qualifier for all packages. */
+ public static final String NODE_OBSOLETE = "obsolete"; //$NON-NLS-1$
+
/** The optional minimal tools revision required by platform & extra packages. */
public static final String NODE_MIN_TOOLS_REV = "min-tools-rev"; //$NON-NLS-1$
/** The optional minimal API level required by extra packages. */
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-2.xsd b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-2.xsd index 9bcc1bc..a0ba966 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-2.xsd +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-2.xsd @@ -86,6 +86,10 @@ <!-- The minimal revision of tools required by this package. Optional. If present, must be an int > 0. --> <xsd:element name="min-tools-rev" type="xsd:positiveInteger" minOccurs="0" /> + + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> @@ -123,6 +127,10 @@ <!-- A list of file archives for this package. --> <xsd:element name="archives" type="sr2:archivesType" /> + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> + <!-- An add-on can declare 0 or more libraries. --> <xsd:element name="libs"> @@ -168,6 +176,10 @@ <xsd:element name="release-url" type="xsd:token" minOccurs="0" /> <!-- A list of file archives for this package. --> <xsd:element name="archives" type="sr2:archivesType" /> + + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> @@ -200,6 +212,10 @@ <xsd:element name="release-url" type="xsd:token" minOccurs="0" /> <!-- A list of file archives for this package. --> <xsd:element name="archives" type="sr2:archivesType" /> + + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> @@ -235,6 +251,10 @@ <!-- The minimal revision of tools required by this package. Optional. If present, must be an int > 0. --> <xsd:element name="min-tools-rev" type="xsd:positiveInteger" minOccurs="0" /> + + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> @@ -289,6 +309,10 @@ <!-- The minimal API level required by this package. Optional. If present, must be an int > 0. --> <xsd:element name="min-api-level" type="xsd:positiveInteger" minOccurs="0" /> + + <!-- An optional element indicating the package is obsolete. + The string content is however currently not defined and ignored. --> + <xsd:element name="obsolete" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> @@ -410,5 +434,4 @@ </xsd:simpleContent> </xsd:complexType> - </xsd:schema> diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample_2.xml b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample_2.xml index bf571d2..9ec63c9 100755 --- a/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample_2.xml +++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample_2.xml @@ -270,6 +270,7 @@ <sdk:description>An Extra package for the USB driver, it will install in $SDK/usb_driver</sdk:description>
<sdk:desc-url>http://www.example.com/extra.html</sdk:desc-url>
<sdk:min-tools-rev>3</sdk:min-tools-rev>
+ <sdk:obsolete/>
</sdk:extra>
<sdk:extra>
@@ -287,6 +288,7 @@ <sdk:desc-url>http://www.example.com/extra.html</sdk:desc-url>
<sdk:min-tools-rev>3</sdk:min-tools-rev>
<sdk:min-api-level>42</sdk:min-api-level>
+ <sdk:obsolete></sdk:obsolete>
</sdk:extra>
<sdk:sample>
@@ -302,6 +304,7 @@ <sdk:description>Some sample package</sdk:description>
<sdk:desc-url>http://www.example.com/sample.html</sdk:desc-url>
<sdk:min-tools-rev>5</sdk:min-tools-rev>
+ <sdk:obsolete>This is obsolete</sdk:obsolete>
</sdk:sample>
</sdk:sdk-repository>
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java index 7a2b2cd..199d75d 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java @@ -235,6 +235,7 @@ public class RepoSourcesAdapter { Archive[] archives = pkg.getArchives();
if (mUpdaterData.getSettingsController().getShowUpdateOnly()) {
for (Archive archive : archives) {
+
// if we only want the compatible archives, then we just take the first
// one. it's unlikely there are 2 compatible archives for the same
// package
@@ -294,8 +295,13 @@ public class RepoSourcesAdapter { for (Package remotePkg : remotePackages) {
boolean newPkg = true;
- // For all potential packages, we also make sure that there's an archive for the current
- // platform, or we simply skip them.
+ // We're not going to offer obsolete packages as updates.
+ if (remotePkg.isObsolete()) {
+ continue;
+ }
+
+ // For all potential packages, we also make sure that there's an archive for
+ // the current platform, or we simply skip them.
if (remotePkg.hasCompatibleArchive()) {
for (Package installedPkg : installedPackages) {
UpdateInfo info = installedPkg.canBeUpdatedBy(remotePkg);
|