Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2005, 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 Rob Harrop - SpringSource Inc. (bug 253942) /
 
 
 package org.eclipse.osgi.internal.baseadaptor;
 
 import java.io.*;
 import java.net.URL;
 import java.util.*;
 
 public class BaseStorageHook implements StorageHookAdaptorHook {
 	public static final String KEY = BaseStorageHook.class.getName();
 	public static final int HASHCODE = .hashCode();
 	public static final int DEL_BUNDLE_STORE = 0x01;
 	public static final int DEL_GENERATION = 0x02;
 	private static final int STORAGE_VERSION = 1;
 	public static final String EXTERNAL_LIB_PREFIX = "external:"//$NON-NLS-1$
 	public static final String VARIABLE_DELIM_STRING = "$"//$NON-NLS-1$
 	public static final char VARIABLE_DELIM_CHAR = '$';
 	public static String COMPOSITE_HEADER = "Equinox-CompositeBundle"//$NON-NLS-1$
 	public static String COMPOSITE_BUNDLE = "composite"//$NON-NLS-1$
 	public static String SURROGATE_BUNDLE = "surrogate"//$NON-NLS-1$
 
bundle's file name
 
 	private String fileName;
native code paths for this BundleData
 
 	private String[] nativePaths;
bundle generation
 
 	private int generation = 1;
Is bundle a reference
 
 	private boolean reference;
 
 	private BaseData bundleData;
 	private BaseStorage storage;
 	private File bundleStore;
 	private File dataStore;
 
 	public BaseStorageHook(BaseStorage storage) {
 		this. = storage;
 	}
 
 	public int getStorageVersion() {
 		return ;
 	}
 
 	public StorageHook create(BaseData bundledatathrows BundleException {
 		BaseStorageHook storageHook = new BaseStorageHook();
 		storageHook.bundleData = bundledata;
 		return storageHook;
 	}
 
 	public void initialize(Dictionary manifestthrows BundleException {
 		BaseStorageHook.loadManifest(manifest);
 	}
 
 	static void loadManifest(BaseData targetDictionary manifestthrows BundleException {
 		try {
 			target.setVersion(Version.parseVersion((Stringmanifest.get(.)));
 		} catch (IllegalArgumentException e) {
 		}
 		int bundleType = 0;
 		if (bsnHeader != null) {
 			target.setSymbolicName(bsnHeader[0].getValue());
 			String singleton = bsnHeader[0].getDirective(.);
 			if (singleton == null)
 				singleton = bsnHeader[0].getAttribute(.);
 			if ("true".equals(singleton)) //$NON-NLS-1$
 				bundleType |= .;
 		}
 		// check that the classpath is valid
 		String classpath = (Stringmanifest.get(.);
		ManifestElement.parseHeader(.classpath);
		target.setClassPathString(classpath);
		String host = (Stringmanifest.get(.);
		if (host != null) {
			bundleType |= .;
			ManifestElement[] hostElement = ManifestElement.parseHeader(.host);
			if (Constants.getInternalSymbolicName().equals(hostElement[0].getValue()) || ..equals(hostElement[0].getValue())) {
				String extensionType = hostElement[0].getDirective("extension"); //$NON-NLS-1$
				if (extensionType == null || extensionType.equals("framework")) //$NON-NLS-1$
				else if (extensionType.equals("bootclasspath")) //$NON-NLS-1$
				else if (extensionType.equals("extclasspath")) //$NON-NLS-1$
			}
else {
			String composite = (Stringmanifest.get();
			if (composite != null) {
				if (.equals(composite))
				else
			}
		}
		target.setType(bundleType);
	}
	public StorageHook load(BaseData targetDataInputStream inthrows IOException {
		target.setLocation(AdaptorUtil.readString(infalse));
		target.setSymbolicName(AdaptorUtil.readString(infalse));
		target.setVersion(AdaptorUtil.loadVersion(in));
		target.setActivator(AdaptorUtil.readString(infalse));
		target.setClassPathString(AdaptorUtil.readString(infalse));
		target.setExecutionEnvironment(AdaptorUtil.readString(infalse));
		target.setDynamicImports(AdaptorUtil.readString(infalse));
		target.setStartLevel(in.readInt());
		target.setStatus(in.readInt());
		target.setType(in.readInt());
		target.setDirty(false); // make sure to reset the dirty bit;
		BaseStorageHook storageHook = new BaseStorageHook();
		storageHook.bundleData = target;
		storageHook.generation = in.readInt();
		storageHook.reference = in.readBoolean();
		storageHook.setFileName(getAbsolute(storageHook.reference, AdaptorUtil.readString(infalse)));
		int nativePathCount = in.readInt();
		storageHook.nativePaths = nativePathCount > 0 ? new String[nativePathCount] : null;
		for (int i = 0; i < nativePathCounti++)
			storageHook.nativePaths[i] = in.readUTF();
		return storageHook;
	}
	private String getAbsolute(boolean isReferenceString path) {
		if (!isReference)
			return path;
		// fileName for bundles installed with reference URLs is stored relative to the install location
		File storedPath = new File(path);
		if (!storedPath.isAbsolute())
			// make sure it has the absolute location instead
			return new FilePath(.getInstallPath() + path).toString();
		return path;
	}
	public void save(DataOutputStream outthrows IOException {
		if ( == null)
			throw new IllegalStateException();
		boolean forgetStartLevel = false;
		for (int i = 0; i < hooks.length && !forgetStartLeveli++)
			forgetStartLevel = hooks[i].forgetStartLevelChange(.getStartLevel());
		out.writeInt(!forgetStartLevel ? .getStartLevel() : 1);
		boolean forgetStatus = false;
		// see if we should forget the persistently started flag
		for (int i = 0; i < hooks.length && !forgetStatusi++)
			forgetStatus = hooks[i].forgetStatusChange(.getStatus());
		AdaptorUtil.writeStringOrNull(outstoredFileName);
		if ( == null)
			out.writeInt(0);
		else {
			for (int i = 0; i < .i++)
		}
	}
	public int getKeyHashCode() {
		return ;
	}
	public boolean compare(KeyedElement other) {
		return other.getKey() == ;
	}
	public Object getKey() {
		return ;
	}
	public String getFileName() {
		return ;
	}
	public int getGeneration() {
		return ;
	}
	public String[] getNativePaths() {
		return ;
	}
	public void installNativePaths(String[] installPathsthrows BundleException {
		validateNativePaths(installPaths);
		this. = installPaths;
	}
	public void validateNativePaths(String[] nativePathsthrows BundleException {
		for (int i = 0; i < nativePaths.lengthi++) {
			if (nativePaths[i].startsWith()) {
				File nativeFile = new File(path);
				if (!nativeFile.exists())
				continue// continue to next path
			}
			// ensure the file exists in the bundle; it will get extracted later on demand
			BundleEntry nativeEntry = .getBundleFile().getEntry(nativePaths[i]);
			if (nativeEntry == null)
		}
	}
	public boolean isReference() {
		return ;
	}
	public File getBundleStore() {
		if ( == null)
		return ;
	}
	public File getDataFile(String path) {
		// lazily initialize dirData to prevent early access to configuration location
		if ( == null)
		if (path != null && !.exists() && (.isReadOnly() || !.mkdirs()))
				Debug.println("Unable to create bundle data directory: " + .getPath()); //$NON-NLS-1$
		return path == null ?  : new File(path);
	}
	void delete(boolean postponeint typethrows IOException {
		File delete = null;
		switch (type) {
				delete = getGenerationDir();
				break;
				delete = getBundleStore();
				break;
		}
		if (delete != null && delete.exists() && (postpone || !AdaptorUtil.rm(delete))) {
			/* create .delete */
			out.close();
		}
	}
		return new File(getBundleStore(), String.valueOf(getGeneration()));
	}
		Location parentConfiguration = null;
		Location currentConfiguration = LocationManager.getConfigurationLocation();
		if (currentConfiguration != null && (parentConfiguration = currentConfiguration.getParentLocation()) != null)
			return new File(parentConfiguration.getURL().getFile(), . + '/' + . + '/' + .getBundleID() + '/' + getGeneration());
		return null;
	}
		File generationDir = getGenerationDir();
		if (!generationDir.exists() && (.isReadOnly() || !generationDir.mkdirs()))
				Debug.println("Unable to create bundle generation directory: " + generationDir.getPath()); //$NON-NLS-1$
		return generationDir;
	}
	public void setReference(boolean reference) {
		this. = reference;
	}
	public void setFileName(String fileName) {
		this. = fileName;
		// This is only done for PDE source lookup (bug 126517)
		this..setFileName(fileName);
	}
	public void copy(StorageHook storageHook) {
		if (!(storageHook instanceof BaseStorageHook))
		BaseStorageHook hook = (BaseStorageHookstorageHook;
		 = hook.bundleStore;
		 = hook.dataStore;
		 = hook.generation + 1;
		// fileName and reference will be set by update
	}
	public void validate() throws IllegalArgumentException {
		// do nothing
	}
	public Dictionary getManifest(boolean firstLoadthrows BundleException {
		// do nothing
		return null;
	}
	public boolean forgetStatusChange(int status) {
		// do nothing
		return false;
	}
	public boolean forgetStartLevelChange(int startlevel) {
		// do nothing
		return false;
	}
	public void initialize(BaseAdaptor adaptor) {
		// do nothing
	}
	public void frameworkStart(BundleContext contextthrows BundleException {
		// do nothing
	}
	public void frameworkStop(BundleContext contextthrows BundleException {
		// do nothing
	}
	public void frameworkStopping(BundleContext context) {
		// do nothing
	}
	public void addProperties(Properties properties) {
		// do nothing
	}
		// take into account that initial@ is special (bug 268563)
		if (location.startsWith("initial@")) { //$NON-NLS-1$
			location = location.substring(8);
			return new URL(location).openConnection();
		}
		// see if this is an existing location
		AbstractBundle bundle = null;
		for (int i = 0; i < bundles.length && bundle == nulli++)
			if (location.equals(bundles[i].getLocation()))
				bundle = (AbstractBundlebundles[i];
		if (bundle == null)
			return null;
		BaseData data = (BaseDatabundle.getBundleData();
		return hook.isReference() ? new URL("reference:file:" + hook.getFileName()).openConnection() : null//$NON-NLS-1$
	}
	public void handleRuntimeError(Throwable error) {
		// do nothing
	}
		// do nothing
		return null;
	}
	public BaseStorage getStorage() {
		return ;
	}
	public static String substituteVars(String path) {
		StringBuffer buf = new StringBuffer(path.length());
		boolean varStarted = false// indicates we are processing a var subtitute
		String var = null// the current var key
		while (st.hasMoreElements()) {
			String tok = st.nextToken();
				if (!varStarted) {
					varStarted = true// we found the start of a var
					var = ""//$NON-NLS-1$
else {
					// we have found the end of a var
					String prop = null;
					// get the value of the var from system properties
					if (var != null && var.length() > 0)
						prop = FrameworkProperties.getProperty(var);
					if (prop == null) {
						try {
							// try using the System.getenv method if it exists (bug 126921)
							Method getenv = System.class.getMethod("getenv"new Class[] {String.class}); //$NON-NLS-1$
							prop = (Stringgetenv.invoke(nullnew Object[] {var});
catch (Throwable t) {
							// do nothing; 
							// on 1.4 VMs this throws an error
							// on J2ME this method does not exist
						}
					}
					if (prop != null)
						// found a value; use it
						buf.append(prop);
					else
						// could not find a value append the var name w/o delims 
						buf.append(var == null ? "" : var); //$NON-NLS-1$
					varStarted = false;
					var = null;
				}
else {
				if (!varStarted)
					buf.append(tok); // the token is not part of a var
				else
					var = tok// the token is the var key; save the key to process when we find the end token
			}
		}
		if (var != null)
			// found a case of $var at the end of the path with no trailing $; just append it as is.
		return buf.toString();
	}
New to GrepCode? Check out our FAQ X