From c8caeaa2cf5f6621f755dd7878a911e77147ea88 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 18 Jan 2017 08:49:31 -0600 Subject: Bug 510641 - Remove old Headers implementation. Change-Id: Ibc09bc478f68516c692c95181081a08781024ed5 Signed-off-by: Thomas Watson --- .../META-INF/MANIFEST.MF | 4 +- .../org.eclipse.osgi.compatibility.plugins/pom.xml | 2 +- .../compatibility/plugins/PluginConverterHook.java | 10 +- .../META-INF/MANIFEST.MF | 2 +- .../eclipse/osgi/internal/resolver/StateImpl.java | 6 +- bundles/org.eclipse.osgi.tests/pom.xml | 2 +- .../org/eclipse/osgi/framework/util/Headers.java | 338 --------------------- 7 files changed, 14 insertions(+), 350 deletions(-) delete mode 100644 bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java diff --git a/bundles/org.eclipse.osgi.compatibility.plugins/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.compatibility.plugins/META-INF/MANIFEST.MF index ef73881b1..5c15dfc42 100644 --- a/bundles/org.eclipse.osgi.compatibility.plugins/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi.compatibility.plugins/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.osgi.compatibility.plugins -Bundle-Version: 1.0.0.qualifier -Fragment-Host: org.eclipse.osgi;bundle-version="3.10.0" +Bundle-Version: 1.0.100.qualifier +Fragment-Host: org.eclipse.osgi;bundle-version="3.12.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-Vendor: %Bundle-Vendor diff --git a/bundles/org.eclipse.osgi.compatibility.plugins/pom.xml b/bundles/org.eclipse.osgi.compatibility.plugins/pom.xml index 936871998..be886cbe4 100644 --- a/bundles/org.eclipse.osgi.compatibility.plugins/pom.xml +++ b/bundles/org.eclipse.osgi.compatibility.plugins/pom.xml @@ -19,6 +19,6 @@ org.eclipse.osgi org.eclipse.osgi.compatibility.plugins - 1.0.0-SNAPSHOT + 1.0.100-SNAPSHOT eclipse-plugin diff --git a/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterHook.java b/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterHook.java index 88dca675d..3ff76b4b8 100644 --- a/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterHook.java +++ b/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterHook.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013 IBM Corporation and others. + * Copyright (c) 2013, 2017 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 @@ -12,8 +12,9 @@ package org.eclipse.osgi.compatibility.plugins; import java.io.File; import java.io.IOException; +import java.util.Map; -import org.eclipse.osgi.framework.util.Headers; +import org.eclipse.osgi.framework.util.CaseInsensitiveDictionaryMap; import org.eclipse.osgi.internal.hookregistry.ActivatorHookFactory; import org.eclipse.osgi.internal.hookregistry.BundleFileWrapperFactoryHook; import org.eclipse.osgi.internal.hookregistry.HookConfigurator; @@ -25,6 +26,7 @@ import org.eclipse.osgi.storage.bundlefile.BundleEntry; import org.eclipse.osgi.storage.bundlefile.BundleFile; import org.eclipse.osgi.storage.bundlefile.BundleFileWrapper; import org.eclipse.osgi.storage.bundlefile.FileBundleEntry; +import org.eclipse.osgi.util.ManifestElement; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; @@ -55,10 +57,10 @@ public class PluginConverterHook implements HookConfigurator { if (!PluginConverterImpl.OSGI_BUNDLE_MANIFEST.equals(path)) { return entry; } - Headers headers = null; + Map headers = null; if (entry != null) { try { - headers = Headers.parseManifest(entry.getInputStream()); + headers = ManifestElement.parseBundleManifest(entry.getInputStream(), new CaseInsensitiveDictionaryMap()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/bundles/org.eclipse.osgi.compatibility.state/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.compatibility.state/META-INF/MANIFEST.MF index 26d6cbb8f..c57b48010 100644 --- a/bundles/org.eclipse.osgi.compatibility.state/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi.compatibility.state/META-INF/MANIFEST.MF @@ -4,6 +4,6 @@ Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.osgi.compatibility.state Bundle-Version: 1.0.300.qualifier ExtensionBundle-Activator: org.eclipse.osgi.compatibility.state.Activator -Fragment-Host: org.eclipse.osgi;bundle-version="3.10.0" +Fragment-Host: org.eclipse.osgi;bundle-version="3.12.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-Vendor: %Bundle-Vendor diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java index 163c88a4d..a6989478a 100644 --- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java +++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2016 IBM Corporation and others. + * Copyright (c) 2003, 2017 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 @@ -525,9 +525,9 @@ public abstract class StateImpl implements State { } // use the Headers class to handle ignoring case while matching keys (bug 180817) @SuppressWarnings("unchecked") - Headers[] tmpPlatformProperties = new Headers[platformProperties.length]; + CaseInsensitiveDictionaryMap[] tmpPlatformProperties = new CaseInsensitiveDictionaryMap[platformProperties.length]; for (int i = 0; i < platformProperties.length; i++) { - tmpPlatformProperties[i] = new Headers<>(platformProperties[i].size()); + tmpPlatformProperties[i] = new CaseInsensitiveDictionaryMap<>(platformProperties[i].size()); for (Enumeration keys = platformProperties[i].keys(); keys.hasMoreElements();) { Object key = keys.nextElement(); tmpPlatformProperties[i].put(key, platformProperties[i].get(key)); diff --git a/bundles/org.eclipse.osgi.tests/pom.xml b/bundles/org.eclipse.osgi.tests/pom.xml index 20e06d614..5fa05e019 100644 --- a/bundles/org.eclipse.osgi.tests/pom.xml +++ b/bundles/org.eclipse.osgi.tests/pom.xml @@ -36,7 +36,7 @@ tycho-surefire-plugin ${tycho.version} - -Xmx128m -Dosgi.framework.extensions=reference:file:${basedir}/../org.eclipse.osgi.compatibility.plugins/target/org.eclipse.osgi.compatibility.plugins-1.0.0-SNAPSHOT.jar + -Xmx128m -Dosgi.framework.extensions=reference:file:${basedir}/../org.eclipse.osgi.compatibility.plugins/target/org.eclipse.osgi.compatibility.plugins-1.0.100-SNAPSHOT.jar p2-installable-unit diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java deleted file mode 100644 index 0a03d8d29..000000000 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java +++ /dev/null @@ -1,338 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2017 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 - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.osgi.framework.util; - -import java.io.IOException; -import java.io.InputStream; -import java.util.*; -import org.eclipse.osgi.internal.messages.Msg; -import org.eclipse.osgi.util.ManifestElement; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.BundleException; - -/** - * Headers classes. This class implements a Dictionary that has - * the following behavior: - *
    - *
  • put and remove clear throw UnsupportedOperationException. - * The Dictionary is thus read-only to others. - *
  • The String keys in the Dictionary are case-preserved, - * but the get operation is case-insensitive. - *
- * @since 3.1 - * @deprecated As of 3.13. Replaced by {@link CaseInsensitiveDictionaryMap}. - */ -@Deprecated -public class Headers extends Dictionary implements Map { - private boolean readOnly = false; - private K[] headers; - private V[] values; - private int size = 0; - - /** - * Create an empty Headers dictionary. - * - * @param initialCapacity The initial capacity of this Headers object. - */ - public Headers(int initialCapacity) { - super(); - @SuppressWarnings("unchecked") - K[] k = (K[]) new Object[initialCapacity]; - headers = k; - @SuppressWarnings("unchecked") - V[] v = (V[]) new Object[initialCapacity]; - values = v; - } - - /** - * Create a Headers dictionary from a Dictionary. - * - * @param values The initial dictionary for this Headers object. - * @exception IllegalArgumentException If a case-variant of the key is - * in the dictionary parameter. - */ - public Headers(Dictionary values) { - this(values.size()); - /* initialize the headers and values */ - Enumeration keys = values.keys(); - while (keys.hasMoreElements()) { - K key = keys.nextElement(); - set(key, values.get(key)); - } - } - - /** - * Case-preserved keys. - */ - public synchronized Enumeration keys() { - return new ArrayEnumeration<>(headers, size); - } - - /** - * Values. - */ - public synchronized Enumeration elements() { - return new ArrayEnumeration<>(values, size); - } - - private int getIndex(Object key) { - boolean stringKey = key instanceof String; - for (int i = 0; i < size; i++) { - if (stringKey && (headers[i] instanceof String)) { - if (((String) headers[i]).equalsIgnoreCase((String) key)) - return i; - } else { - if (headers[i].equals(key)) - return i; - } - } - return -1; - } - - private V remove(int remove) { - V removed = values[remove]; - for (int i = remove; i < size; i++) { - if (i == headers.length - 1) { - headers[i] = null; - values[i] = null; - } else { - headers[i] = headers[i + 1]; - values[i] = values[i + 1]; - } - } - if (remove < size) - size--; - return removed; - } - - private void add(K header, V value) { - if (size == headers.length) { - // grow the arrays - @SuppressWarnings("unchecked") - K[] nh = (K[]) new Object[headers.length + 10]; - K[] newHeaders = nh; - @SuppressWarnings("unchecked") - V[] nv = (V[]) new Object[values.length + 10]; - V[] newValues = nv; - System.arraycopy(headers, 0, newHeaders, 0, headers.length); - System.arraycopy(values, 0, newValues, 0, values.length); - headers = newHeaders; - values = newValues; - } - headers[size] = header; - values[size] = value; - size++; - } - - /** - * Support case-insensitivity for keys. - * - * @param key name. - */ - public synchronized V get(Object key) { - int i = -1; - if ((i = getIndex(key)) != -1) - return values[i]; - return null; - } - - /** - * Set a header value or optionally replace it if it already exists. - * - * @param key Key name. - * @param value Value of the key or null to remove key. - * @param replace A value of true will allow a previous - * value of the key to be replaced. A value of false - * will cause an IllegalArgumentException to be thrown - * if a previous value of the key exists. - * @return the previous value to which the key was mapped, - * or null if the key did not have a previous mapping. - * - * @exception IllegalArgumentException If a case-variant of the key is - * already present. - * @since 3.2 - */ - public synchronized V set(K key, V value, boolean replace) { - if (readOnly) - throw new UnsupportedOperationException(); - if (key instanceof String) { - @SuppressWarnings("unchecked") - K k = (K) ((String) key).intern(); - key = k; - } - int i = getIndex(key); - if (value == null) { /* remove */ - if (i != -1) - return remove(i); - } else { /* put */ - if (i != -1) { /* duplicate key */ - if (!replace) - throw new IllegalArgumentException(NLS.bind(Msg.HEADER_DUPLICATE_KEY_EXCEPTION, key)); - V oldVal = values[i]; - values[i] = value; - return oldVal; - } - add(key, value); - } - return null; - } - - /** - * Set a header value. - * - * @param key Key name. - * @param value Value of the key or null to remove key. - * @return the previous value to which the key was mapped, - * or null if the key did not have a previous mapping. - * - * @exception IllegalArgumentException If a case-variant of the key is - * already present. - */ - public synchronized V set(K key, V value) { - return set(key, value, false); - } - - public synchronized void setReadOnly() { - readOnly = true; - } - - /** - * Returns the number of entries (distinct keys) in this dictionary. - * - * @return the number of keys in this dictionary. - */ - public synchronized int size() { - return size; - } - - /** - * Tests if this dictionary maps no keys to value. The general contract - * for the isEmpty method is that the result is true if and only - * if this dictionary contains no entries. - * - * @return true if this dictionary maps no keys to values; - * false otherwise. - */ - public synchronized boolean isEmpty() { - return size == 0; - } - - /** - * Always throws UnsupportedOperationException. - * - * @param key header name. - * @param value header value. - * @throws UnsupportedOperationException - */ - public synchronized V put(K key, V value) { - if (readOnly) - throw new UnsupportedOperationException(); - return set(key, value, true); - } - - /** - * Always throws UnsupportedOperationException. - * - * @param key header name. - * @throws UnsupportedOperationException - */ - public V remove(Object key) { - throw new UnsupportedOperationException(); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append('{'); - - for (int i = 0; i < size; i++) { - if (i != 0) { - sb.append(", "); //$NON-NLS-1$ - } - K header = headers[i]; - if (header == this) { - sb.append("(this Dictionary)"); //$NON-NLS-1$ - } else { - sb.append(header); - } - sb.append('='); - V value = values[i]; - if (value == this) { - sb.append("(this Dictionary)"); //$NON-NLS-1$ - } else { - sb.append(value); - } - } - - sb.append('}'); - return sb.toString(); - } - - public static Headers parseManifest(InputStream in) throws BundleException { - Headers headers = new Headers<>(10); - try { - ManifestElement.parseBundleManifest(in, headers); - } catch (IOException e) { - throw new BundleException(Msg.MANIFEST_IOEXCEPTION, BundleException.MANIFEST_ERROR, e); - } - headers.setReadOnly(); - return headers; - } - - private static class ArrayEnumeration implements Enumeration { - private E[] array; - int cur = 0; - - public ArrayEnumeration(E[] array, int size) { - @SuppressWarnings("unchecked") - E[] a = (E[]) new Object[size]; - this.array = a; - System.arraycopy(array, 0, this.array, 0, this.array.length); - } - - public boolean hasMoreElements() { - return cur < array.length; - } - - public E nextElement() { - return array[cur++]; - } - } - - public synchronized void clear() { - if (readOnly) - throw new UnsupportedOperationException(); - } - - public synchronized boolean containsKey(Object key) { - return getIndex(key) >= 0; - } - - public boolean containsValue(Object value) { - throw new UnsupportedOperationException(); - } - - public Set> entrySet() { - throw new UnsupportedOperationException(); - } - - public Set keySet() { - throw new UnsupportedOperationException(); - } - - public void putAll(Map c) { - throw new UnsupportedOperationException(); - } - - public Collection values() { - throw new UnsupportedOperationException(); - } -} -- cgit v1.2.3