1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
|
/*******************************************************************************
* Copyright (c) 2003, 2010 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.adaptor;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Dictionary;
import java.util.Enumeration;
import org.osgi.framework.*;
/**
* The <code>BundleData</code> represents a single bundle that is persistently
* stored by a <code>FrameworkAdaptor</code>. A <code>BundleData</code> creates
* the ClassLoader for a bundle, finds native libraries installed in the
* FrameworkAdaptor for the bundle, creates data files for the bundle,
* used to access bundle entries, manifest information, and getting and saving
* metadata.
* <p>
* Clients may implement this interface.
* </p>
* @since 3.1
*/
public interface BundleData extends BundleReference {
/** The BundleData is for a fragment bundle */
public static final int TYPE_FRAGMENT = 0x00000001;
/** The BundleData is for a framework extension bundle */
public static final int TYPE_FRAMEWORK_EXTENSION = 0x00000002;
/** The BundleData is for a bootclasspath extension bundle */
public static final int TYPE_BOOTCLASSPATH_EXTENSION = 0x00000004;
/** The BundleData is for a singleton bundle */
public static final int TYPE_SINGLETON = 0x00000008;
/** The BundleData is for an extension classpath bundle */
public static final int TYPE_EXTCLASSPATH_EXTENSION = 0x00000010;
/** The BundleData is for a composite bundle */
public static final int TYPE_COMPOSITEBUNDLE = 0x00000020;
/** The BundleData is for a composite bundle surrogate */
public static final int TYPE_SURROGATEBUNDLE = 0x00000040;
/**
* Creates the ClassLoader for the BundleData. The ClassLoader created
* must use the <code>ClassLoaderDelegate</code> to delegate class, resource
* and library loading. The delegate is responsible for finding any resource
* or classes imported by the bundle through an imported package or a required
* bundle. <p>
* The <code>ProtectionDomain</code> domain must be used by the Classloader when
* defining a class.
* @param delegate The <code>ClassLoaderDelegate</code> to delegate to.
* @param domain The <code>BundleProtectionDomain</code> to use when defining a class.
* @param bundleclasspath An array of bundle classpaths to use to create this
* classloader. This is specified by the Bundle-ClassPath manifest entry.
* @return The new ClassLoader for the BundleData.
*/
public BundleClassLoader createClassLoader(ClassLoaderDelegate delegate, BundleProtectionDomain domain, String[] bundleclasspath);
/**
* Gets a <code>URL</code> to the bundle entry specified by path.
* This method must not use the BundleClassLoader to find the
* bundle entry since the ClassLoader will delegate to find the resource.
* @see org.osgi.framework.Bundle#getEntry(String)
* @param path The bundle entry path.
* @return A URL used to access the entry or null if the entry
* does not exist.
*/
public URL getEntry(String path);
/**
* Gets all of the bundle entries that exist under the specified path.
* For example: <p>
* <code>getEntryPaths("/META-INF")</code> <p>
* This will return all entries from the /META-INF directory of the bundle.
* @see org.osgi.framework.Bundle#getEntryPaths(String path)
* @param path The path to a directory in the bundle.
* @return An Enumeration of the entry paths or null if the specified path
* does not exist.
*/
public Enumeration<String> getEntryPaths(String path);
/**
* Returns the absolute path name of a native library. The BundleData
* ClassLoader invokes this method to locate the native libraries that
* belong to classes loaded from this BundleData. Returns
* null if the library does not exist in this BundleData.
* @param libname The name of the library to find the absolute path to.
* @return The absolute path name of the native library or null if
* the library does not exist.
*/
public String findLibrary(String libname);
/**
* Installs the native code paths for this BundleData. Each
* element of nativepaths must be installed for lookup when findLibrary
* is called.
* @param nativepaths The array of native code paths to install for
* the bundle.
* @throws BundleException If any error occurs during install.
*/
public void installNativeCode(String[] nativepaths) throws BundleException;
/**
* Return the bundle data directory.
* Attempt to create the directory if it does not exist.
*
* @see org.osgi.framework.BundleContext#getDataFile(String)
* @return Bundle data directory or null if not supported.
*/
public File getDataFile(String path);
/**
* Return the Dictionary of manifest headers for the BundleData.
* @return Dictionary that contains the Manifest headers for the BundleData.
* @throws BundleException if an error occurred while reading the
* bundle manifest data.
*/
public Dictionary<String, String> getManifest() throws BundleException;
/**
* Get the BundleData bundle ID. This will be used as the bundle
* ID by the framework.
* @return The BundleData ID.
*/
public long getBundleID();
/**
* Get the BundleData Location. This will be used as the bundle
* location by the framework.
* @return the BundleData location.
*/
public String getLocation();
/**
* Get the last time this BundleData was modified.
* @return the last time this BundleData was modified
*/
public long getLastModified();
/**
* Close all resources for this BundleData
* @throws IOException If an error occurs closing.
*/
public void close() throws IOException;
/**
* Open the BundleData. This method will reopen the BundleData if it has been
* previously closed.
* @throws IOException If an error occurs opening.
*/
public void open() throws IOException;
/**
* Sets the Bundle object for this BundleData.
* @param bundle The Bundle Object for this BundleData.
*/
public void setBundle(Bundle bundle);
/**
* Returns the start level metadata for this BundleData.
* @return the start level metadata for this BundleData.
*/
public int getStartLevel();
/**
* Returns the status metadata for this BundleData. A value of 1
* indicates that this bundle is started persistently. A value of 0
* indicates that this bundle is not started persistently.
* @return the status metadata for this BundleData.
*/
public int getStatus();
/**
* Sets the start level metatdata for this BundleData. Metadata must be
* stored persistently when BundleData.save() is called.
* @param value the start level metadata
*/
public void setStartLevel(int value);
/**
* Sets the status metadata for this BundleData. Metadata must be
* stored persistently when BundleData.save() is called.
* @param value the status metadata.
*/
public void setStatus(int value);
/**
* Persistently stores all the metadata for this BundleData
* @throws IOException
*/
public void save() throws IOException;
/**
* Returns the Bundle-SymbolicName for this BundleData as specified in the bundle
* manifest file.
* @return the Bundle-SymbolicName for this BundleData.
*/
public String getSymbolicName();
/**
* Returns the Bundle-Version for this BundleData as specified in the bundle
* manifest file.
* @return the Bundle-Version for this BundleData.
*/
public Version getVersion();
/**
* Returns the type of bundle this BundleData is for.
* @return returns the type of bundle this BundleData is for
*/
public int getType();
/**
* Returns the Bundle-ClassPath for this BundleData as specified in
* the bundle manifest file.
* @return the classpath for this BundleData.
*/
public String[] getClassPath() throws BundleException;
/**
* Returns the Bundle-Activator for this BundleData as specified in
* the bundle manifest file.
* @return the Bundle-Activator for this BundleData.
*/
public String getActivator();
/**
* Returns the Bundle-RequiredExecutionEnvironment for this BundleData as
* specified in the bundle manifest file.
* @return the Bundle-RequiredExecutionEnvironment for this BundleData.
*/
public String getExecutionEnvironment();
/**
* Returns the DynamicImport-Package for this BundleData as
* specified in the bundle manifest file.
* @return the DynamicImport-Packaget for this BundleData.
*/
public String getDynamicImports();
/**
* Finds local resources by searching the class path of this bundle data.
* @param path the requested resource name.
* @return the requested enumeration of resource URLs or null if the resource does not exist
*/
public Enumeration<URL> findLocalResources(String path);
}
|