package org.archstudio.myx.osgi;
import org.archstudio.myx.fw.IMyxBrick;
import org.archstudio.myx.fw.IMyxBrickDescription;
import org.archstudio.myx.fw.IMyxBrickFactory;
import org.archstudio.myx.fw.IMyxBrickInitializationData;
import org.archstudio.myx.fw.IMyxName;
import org.archstudio.myx.fw.MyxBrickCreationException;
import org.archstudio.myx.java.MyxJavaClassBrickFactory;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
public class MyxOSGiBrickFactory extends MyxJavaClassBrickFactory implements IMyxBrickFactory {
@Override
public IMyxBrick create(IMyxName name, IMyxBrickDescription brickDescription,
IMyxBrickInitializationData initializationData) throws MyxBrickCreationException {
MyxOSGiBrickDescription desc = (MyxOSGiBrickDescription) brickDescription;
return create(name, brickDescription, initializationData, desc.getOsgiBundleName(),
desc.getMainBrickClassName());
}
protected IMyxBrick create(IMyxName name, IMyxBrickDescription brickDescription,
IMyxBrickInitializationData initializationData, String bundleName, String mainBrickClassName)
throws MyxBrickCreationException {
Bundle bundle = Platform.getBundle(bundleName);
if (bundle == null) {
throw new MyxBrickCreationException("Can't find brick bundle: " + bundleName);
}
Class<?> mainBrickClass;
try {
mainBrickClass = bundle.loadClass(mainBrickClassName);
}
catch (Throwable e) {
throw new MyxBrickCreationException("Can't find brick class " + mainBrickClassName + " in bundle "
+ bundleName, e);
}
return create(name, brickDescription, initializationData, mainBrickClass);
}
}