org.eclipse.osgi.storage.bundlefile.BundleFileWrapperChain Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aspectjtools Show documentation
Show all versions of aspectjtools Show documentation
Tools from the AspectJ project
/*******************************************************************************
* Copyright (c) 2008, 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.storage.bundlefile;
import org.eclipse.osgi.internal.hookregistry.BundleFileWrapperFactoryHook;
/**
* Used to chain the BundleFile objects returned from {@link BundleFileWrapperFactoryHook}.
* This class is useful for traversing the chain of wrapped bundle files.
*/
public class BundleFileWrapperChain extends BundleFileWrapper {
private final BundleFile wrapped;
private final BundleFileWrapperChain next;
public BundleFileWrapperChain(BundleFile wrapped, BundleFileWrapperChain next) {
super(wrapped);
this.wrapped = wrapped;
this.next = next;
}
@Override
public String toString() {
return wrapped.toString();
}
/**
* The BundleFile that is wrapped
* @return the BunldeFile that is wrapped
*/
public BundleFile getWrapped() {
return wrapped;
}
/**
* The next WrapperBundleFile in the chain. A null
value
* is returned if this is the end of the chain.
* @return the next WrapperBundleFile
*/
public BundleFileWrapperChain getNext() {
return next;
}
/**
* Returns the first bundle file wrapped in this chain which
* also is an instance of the specified type.
* @param The type being searched for
* @param type the class of the type being searched for
* @return the found bundle file that is an instance of the specified type
*/
@SuppressWarnings("unchecked")
public T getWrappedType(Class type) {
BundleFileWrapperChain current = this;
do {
if (type.isInstance(current.getWrapped())) {
return (T) current.getWrapped();
}
current = current.getNext();
} while (current != null);
return null;
}
}