From 1b9c1e4dd2b9ce28dffa37cf027415640d27494e Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Wed, 22 Jul 2009 09:42:20 -0700 Subject: [PATCH] Refactored AndroidXPathFactory into sdklib. --- .../src/com/android/ant/SetupTask.java | 34 +++---------------- .../editors/manifest/ManifestEditor.java | 2 +- .../adt/internal/editors/menu/MenuEditor.java | 2 +- .../editors/resources/ResourcesEditor.java | 2 +- .../extractstring/XmlStringFileHelper.java | 2 +- .../sdklib/xml}/AndroidXPathFactory.java | 33 ++++++++++++------ 6 files changed, 31 insertions(+), 44 deletions(-) rename tools/{eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project => sdkmanager/libs/sdklib/src/com/android/sdklib/xml}/AndroidXPathFactory.java (74%) diff --git a/tools/anttasks/src/com/android/ant/SetupTask.java b/tools/anttasks/src/com/android/ant/SetupTask.java index 64bf37ec6..f79f3812f 100644 --- a/tools/anttasks/src/com/android/ant/SetupTask.java +++ b/tools/anttasks/src/com/android/ant/SetupTask.java @@ -18,10 +18,10 @@ package com.android.ant; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.ISdkLog; -import com.android.sdklib.SdkConstants; import com.android.sdklib.SdkManager; import com.android.sdklib.IAndroidTarget.IOptionalLibrary; import com.android.sdklib.internal.project.ProjectProperties; +import com.android.sdklib.xml.AndroidXPathFactory; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; @@ -35,13 +35,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; -import javax.xml.XMLConstants; -import javax.xml.namespace.NamespaceContext; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; /** * Setup/Import Ant task. This task accomplishes: @@ -227,32 +223,10 @@ public final class SetupTask extends ImportTask { try { File manifest = new File(antProject.getBaseDir(), "AndroidManifest.xml"); - XPath xPath = XPathFactory.newInstance().newXPath(); - xPath.setNamespaceContext(new NamespaceContext() { - public String getNamespaceURI(String prefix) { - if (prefix != null) { - if (prefix.equals("android")) { - return SdkConstants.NS_RESOURCES; - } - } + XPath xPath = AndroidXPathFactory.newXPath(); - return XMLConstants.NULL_NS_URI; - } - - public String getPrefix(String namespaceURI) { - // This isn't necessary for our use. - assert false; - return null; - } - - public Iterator getPrefixes(String namespaceURI) { - // This isn't necessary for our use. - assert false; - return null; - } - }); - - String value = xPath.evaluate("/manifest/uses-sdk/@android:minSdkVersion", + String value = xPath.evaluate("/manifest/uses-sdk/@" + + AndroidXPathFactory.DEFAULT_NS_PREFIX + ":minSdkVersion", new InputSource(new FileInputStream(manifest))); if (codename.equals(value) == false) { diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestEditor.java index 2a26a923b..f6c768775 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestEditor.java @@ -27,10 +27,10 @@ import com.android.ide.eclipse.adt.internal.editors.manifest.pages.OverviewPage; import com.android.ide.eclipse.adt.internal.editors.manifest.pages.PermissionPage; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiAttributeNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; -import com.android.ide.eclipse.adt.internal.project.AndroidXPathFactory; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceMonitor; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceMonitor.IFileListener; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; +import com.android.sdklib.xml.AndroidXPathFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditor.java index 11cd1c65b..33a5d3dc4 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditor.java @@ -21,8 +21,8 @@ import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.editors.AndroidEditor; import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; -import com.android.ide.eclipse.adt.internal.project.AndroidXPathFactory; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; +import com.android.sdklib.xml.AndroidXPathFactory; import org.eclipse.core.resources.IFile; import org.eclipse.ui.IEditorInput; diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/ResourcesEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/ResourcesEditor.java index 221fdff1b..a48b71291 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/ResourcesEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/ResourcesEditor.java @@ -22,7 +22,7 @@ import com.android.ide.eclipse.adt.internal.editors.AndroidEditor; import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor; import com.android.ide.eclipse.adt.internal.editors.resources.descriptors.ResourcesDescriptors; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; -import com.android.ide.eclipse.adt.internal.project.AndroidXPathFactory; +import com.android.sdklib.xml.AndroidXPathFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IStatus; diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/XmlStringFileHelper.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/XmlStringFileHelper.java index 2dadf27f7..4caecd35c 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/XmlStringFileHelper.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/XmlStringFileHelper.java @@ -16,7 +16,7 @@ package com.android.ide.eclipse.adt.internal.refactorings.extractstring; -import com.android.ide.eclipse.adt.internal.project.AndroidXPathFactory; +import com.android.sdklib.xml.AndroidXPathFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidXPathFactory.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidXPathFactory.java similarity index 74% rename from tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidXPathFactory.java rename to tools/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidXPathFactory.java index 9326cb79f..fc34aeb52 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidXPathFactory.java +++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidXPathFactory.java @@ -1,11 +1,11 @@ /* - * Copyright (C) 2007 The Android Open Source Project + * Copyright (C) 2009 The Android Open Source Project * - * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * 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.eclipse.org/org/documents/epl-v10.php + * 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, @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.ide.eclipse.adt.internal.project; +package com.android.sdklib.xml; import com.android.sdklib.SdkConstants; @@ -26,17 +26,28 @@ import javax.xml.xpath.XPath; import javax.xml.xpath.XPathFactory; /** - * XPath factory with automatic support for the android namespace. + * XPath factory with automatic support for the android name space. */ public class AndroidXPathFactory { + /** Default prefix for android name space: 'android' */ public final static String DEFAULT_NS_PREFIX = "android"; //$NON-NLS-1$ private final static XPathFactory sFactory = XPathFactory.newInstance(); - - /** Namespace context for Android resource XML files. */ + + /** Name space context for Android resource XML files. */ private static class AndroidNamespaceContext implements NamespaceContext { + private final static AndroidNamespaceContext sThis = new AndroidNamespaceContext( + DEFAULT_NS_PREFIX); + private String mAndroidPrefix; + /** + * Returns the default {@link AndroidNamespaceContext}. + */ + private static AndroidNamespaceContext getDefault() { + return sThis; + } + /** * Construct the context with the prefix associated with the android namespace. * @param androidPrefix the Prefix @@ -51,7 +62,7 @@ public class AndroidXPathFactory { return SdkConstants.NS_RESOURCES; } } - + return XMLConstants.NULL_NS_URI; } @@ -67,7 +78,7 @@ public class AndroidXPathFactory { return null; } } - + /** * Creates a new XPath object, specifying which prefix in the query is used for the * android namespace. @@ -84,6 +95,8 @@ public class AndroidXPathFactory { * @see #DEFAULT_NS_PREFIX */ public static XPath newXPath() { - return newXPath(DEFAULT_NS_PREFIX); + XPath xpath = sFactory.newXPath(); + xpath.setNamespaceContext(AndroidNamespaceContext.getDefault()); + return xpath; } }