/*******************************************************************************
* Copyright (c) 2006, 2009 Wind River Systems 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.tests.dsf.events;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Sequence;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.cdt.dsf.service.IDsfService;
import org.eclipse.cdt.tests.dsf.DsfTestPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
class ShutdownSequence extends Sequence {
DsfSession fSession;
DsfServicesTracker fTracker;
ShutdownSequence(DsfSession session) {
super(session.getExecutor());
fSession = session;
}
@Override
public Step[] getSteps() { return fSteps; }
final Step[] fSteps = new Step[] {
new Step() {
@Override public void execute(RequestMonitor requestMonitor) {
fTracker = new DsfServicesTracker(DsfTestPlugin.getBundleContext(), fSession.getId());
requestMonitor.done();
}
@Override public void rollBack(RequestMonitor requestMonitor) {
fTracker.dispose();
fTracker = null;
requestMonitor.done();
}
},
new Step() { @Override public void execute(RequestMonitor requestMonitor) {
shutdownService(Service3.class, requestMonitor);
}},
new Step() { @Override public void execute(RequestMonitor requestMonitor) {
shutdownService(Service2.class, requestMonitor);
}},
new Step() { @Override public void execute(RequestMonitor requestMonitor) {
shutdownService(Service1.class, requestMonitor);
}},
new Step() { @Override public void execute(RequestMonitor requestMonitor) {
fTracker.dispose();
fTracker = null;
requestMonitor.done();
}}
};
private void shutdownService(Class<? extends IDsfService> clazz, RequestMonitor requestMonitor) {
IDsfService service = fTracker.getService(clazz);
if (service != null) {
service.shutdown(requestMonitor);
}
else {
requestMonitor.setStatus(new Status(IStatus.ERROR, DsfTestPlugin.PLUGIN_ID, -1, "Service '" + clazz.getName() + "' not found.", null)); //$NON-NLS-1$//$NON-NLS-2$
requestMonitor.done();
}
}
}