Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 127956 Details for
Bug 250432
[common] [url handler] Support $nl$ in platform:/ URL => ONLY works via FileLocator#find(URL)!
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Updated patch with javadoc
patch.txt (text/plain), 9.41 KB, created by
John Arthorne
on 2009-03-08 13:45:54 EDT
(
hide
)
Description:
Updated patch with javadoc
Filename:
MIME Type:
Creator:
John Arthorne
Created:
2009-03-08 13:45:54 EDT
Size:
9.41 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.equinox.common >Index: src/org/eclipse/core/internal/runtime/FindSupport.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/components/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/FindSupport.java,v >retrieving revision 1.6 >diff -u -r1.6 FindSupport.java >--- src/org/eclipse/core/internal/runtime/FindSupport.java 29 Jun 2006 17:54:42 -0000 1.6 >+++ src/org/eclipse/core/internal/runtime/FindSupport.java 8 Mar 2009 17:44:08 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2003, 2006 IBM Corporation and others. >+ * Copyright (c) 2003, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -273,4 +273,24 @@ > return url.openStream(); > throw new IOException("Cannot find " + file.toString()); //$NON-NLS-1$ > } >+ >+ /** >+ * See doc on {@link FileLocator#find(URL)} >+ */ >+ public static URL find(URL url) throws IOException { >+ // if !platform/plugin | fragment URL return >+ if (!"platform".equalsIgnoreCase(url.getProtocol())) //$NON-NLS-1$ >+ return null; >+ >+ // call a helper method to get the bundle object and rest of the path >+ String spec = url.getFile().trim(); >+ Object[] obj = PlatformURLPluginConnection.parse(spec, url); >+ Bundle bundle = (Bundle) obj[0]; >+ String path = (String) obj[1]; >+ >+ // use FileLocator.find(bundle, path, null) to look for the file >+ if ("/".equals(path)) //$NON-NLS-1$ >+ return bundle.getEntry(path); >+ return find(bundle, new Path(path), null); >+ } > } >Index: src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/components/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java,v >retrieving revision 1.2 >diff -u -r1.2 PlatformURLPluginConnection.java >--- src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java 6 Mar 2006 22:36:57 -0000 1.2 >+++ src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java 8 Mar 2009 17:44:08 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2006 IBM Corporation and others. >+ * Copyright (c) 2000, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -41,32 +41,45 @@ > return true; > } > >- /* (non-Javadoc) >- * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve() >+ /* >+ * spec - /plugin/com.example/META-INF/MANIFEST.MF >+ * originalURL - used only for exception messages >+ * result[0] - Bundle (e.g. com.example) >+ * result[1] - String (path) (e.g. META-INF/MANIFEST.MF) > */ >- protected URL resolve() throws IOException { >- String spec = url.getFile().trim(); >+ public static Object[] parse(String spec, URL originalURL) throws IOException { >+ Object[] result = new Object[2]; > if (spec.startsWith("/")) //$NON-NLS-1$ > spec = spec.substring(1); > if (!spec.startsWith(PLUGIN)) >- throw new IOException(NLS.bind(CommonMessages.url_badVariant, url)); >+ throw new IOException(NLS.bind(CommonMessages.url_badVariant, originalURL)); > int ix = spec.indexOf("/", PLUGIN.length() + 1); //$NON-NLS-1$ > String ref = ix == -1 ? spec.substring(PLUGIN.length() + 1) : spec.substring(PLUGIN.length() + 1, ix); > String id = getId(ref); > Activator activator = Activator.getDefault(); > if (activator == null) > throw new IOException(CommonMessages.activator_not_available); >- target = activator.getBundle(id); >- if (target == null) >- throw new IOException(NLS.bind(CommonMessages.url_resolvePlugin, url)); >- if (ix == -1 || (ix + 1) >= spec.length()) >- return target.getEntry("/"); //$NON-NLS-1$ >- URL result = target.getEntry(spec.substring(ix + 1)); >- if (result != null) >+ Bundle bundle = activator.getBundle(id); >+ if (bundle == null) >+ throw new IOException(NLS.bind(CommonMessages.url_resolvePlugin, originalURL)); >+ result[0] = bundle; >+ result[1] = (ix == -1 || (ix + 1) >= spec.length()) ? "/" : spec.substring(ix + 1); //$NON-NLS-1$ >+ return result; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve() >+ */ >+ protected URL resolve() throws IOException { >+ String spec = url.getFile().trim(); >+ Object[] obj = parse(spec, url); >+ Bundle b = (Bundle) obj[0]; >+ String path = (String) obj[1]; >+ URL result = b.getEntry(path); >+ if (result != null || "/".equals(path)) //$NON-NLS-1$ > return result; > // if the result is null then force the creation of a URL that will throw FileNotFoundExceptions >- return new URL(target.getEntry("/"), spec.substring(ix + 1)); //$NON-NLS-1$ >- >+ return new URL(b.getEntry("/"), path); //$NON-NLS-1$ > } > > public static void startup() { >Index: src/org/eclipse/core/internal/boot/PlatformURLConnection.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/components/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLConnection.java,v >retrieving revision 1.3 >diff -u -r1.3 PlatformURLConnection.java >--- src/org/eclipse/core/internal/boot/PlatformURLConnection.java 10 Apr 2007 18:19:09 -0000 1.3 >+++ src/org/eclipse/core/internal/boot/PlatformURLConnection.java 8 Mar 2009 17:44:08 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2006 IBM Corporation and others. >+ * Copyright (c) 2000, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -321,17 +321,17 @@ > throw new IOException(); > } > >- protected String getId(String spec) { >+ protected static String getId(String spec) { > String id = (String) parse(spec)[0]; > return id == null ? spec : id; > } > >- protected String getVersion(String spec) { >+ protected static String getVersion(String spec) { > Version version = (Version) parse(spec)[1]; > return version == null ? "" : version.toString(); //$NON-NLS-1$ > } > >- private Object[] parse(String spec) { >+ private static Object[] parse(String spec) { > String bsn = null; > Version version = null; > int underScore = spec.indexOf('_'); >Index: src/org/eclipse/core/runtime/FileLocator.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/components/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java,v >retrieving revision 1.10 >diff -u -r1.10 FileLocator.java >--- src/org/eclipse/core/runtime/FileLocator.java 12 Feb 2009 16:55:45 -0000 1.10 >+++ src/org/eclipse/core/runtime/FileLocator.java 8 Mar 2009 17:44:08 -0000 >@@ -107,6 +107,51 @@ > } > > /** >+ * Returns the URL of a resource inside a bundle corresponding to the given URL. >+ * Returns <code>null</code> if the URL could not be computed or created. >+ * <p> >+ * This method looks for a bundle resource described by the given input URL, >+ * and returns the URL of the first resource found in the bundle or any attached >+ * fragments. <code>null</code> is returned if no such entry is found. Note that >+ * there is no specific order to the fragments. >+ * </p><p> >+ * The following variables may also be used as segments in the path of the provided URL: >+ * <ul> >+ * <li>$nl$ - for language specific information</li> >+ * <li>$os$ - for operating system specific information</li> >+ * <li>$ws$ - for windowing system specific information</li> >+ * </ul> >+ * </p><p> >+ * A URL path of "$nl$/about.properties" in an environment with a default >+ * locale of en_CA will return a URL corresponding to the first location >+ * about.properties is found according to the following order: >+ * <pre> >+ * plugin root/nl/en/CA/about.properties >+ * fragment1 root/nl/en/CA/about.properties >+ * fragment2 root/nl/en/CA/about.properties >+ * ... >+ * plugin root/nl/en/about.properties >+ * fragment1 root/nl/en/about.properties >+ * fragment2 root/nl/en/about.properties >+ * ... >+ * plugin root/about.properties >+ * fragment1 root/about.properties >+ * fragment2 root/about.properties >+ * ... >+ * </pre> >+ * </p> >+ * >+ * @param url The location of a bundle entry that potentially includes the above >+ * environment variables >+ * @return The URL of the bundle entry matching the input URL, or <code>null</code> >+ * if no matching entry could be found. The actual form of the returned URL is not specified. >+ * @since org.eclipse.equinox.common 3.5 >+ */ >+ public static URL find(URL url) throws IOException { >+ return FindSupport.find(url); >+ } >+ >+ /** > * This is a convenience method, fully equivalent to {@link #findEntries(Bundle, IPath, Map)}, > * with a value of <code>null</code> for the map argument. > *
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 250432
:
125432
|
127905
|
127956
|
127959