package com.mobilesorcery.sdk.internal.launch; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import com.mobilesorcery.sdk.core.CoreMoSyncPlugin; import com.mobilesorcery.sdk.core.IBuildVariant; import com.mobilesorcery.sdk.core.IPackager; import com.mobilesorcery.sdk.core.launch.IEmulatorLauncher; public class EmulatorLauncherProxy implements IEmulatorLauncher { private IConfigurationElement element; private IEmulatorLauncher delegate; private final String id; public EmulatorLauncherProxy(IConfigurationElement element) { this.element = element; this.id = element.getAttribute("id"); } @Override public final String getId() { return id; } @Override public void launch(ILaunchConfiguration launchConfig, String mode, ILaunch launch, int emulatorId, IProgressMonitor monitor) throws CoreException { initDelegate(); delegate.launch(launchConfig, mode, launch, emulatorId, monitor); } private void initDelegate() { try { if (element != null) { delegate = (IEmulatorLauncher) element.createExecutableExtension("implementation"); } } catch (Exception e) { CoreMoSyncPlugin.getDefault().log(e); } finally { element = null; } } @Override public String getName() { initDelegate(); return delegate.getName(); } @Override public int isLaunchable(ILaunchConfiguration launchConfig, String mode) { initDelegate(); return delegate.isLaunchable(launchConfig, mode); } @Override public IBuildVariant getVariant(ILaunchConfiguration launchConfig, String mode) throws CoreException { initDelegate(); return delegate.getVariant(launchConfig, mode); } @Override public void setDefaultAttributes(ILaunchConfigurationWorkingCopy wc) { initDelegate(); delegate.setDefaultAttributes(wc); } @Override public IEmulatorLauncher configure(ILaunchConfiguration config, String mode) { initDelegate(); return delegate.configure(config, mode); } @Override public int getLaunchType(IPackager packager) { initDelegate(); return delegate.getLaunchType(packager); } @Override public boolean supportsLaunchMode(String mode) { initDelegate(); return delegate.supportsLaunchMode(mode); } }