this.environment = environment;
}
@Override
public ISession apply(IMachine machine) {
ISession session = manager.getSessionObject();
try {
final IProgress progress = machine
.launchVMProcess(session, type.stringValue(), environment);
progress.waitForCompletion(-1);
} catch (VBoxException e) {
ErrorCode errorCode = ErrorCode.valueOf(e);
switch (errorCode) {
case VBOX_E_INVALID_OBJECT_STATE:
logger.warn(e, "Could not start machine. Got error code %s from launchMachine(). "
+ "The machine might already be running.", errorCode);
break;
default:
propagate(e);
}
} finally {
if (session.getState() == SessionState.Locked) {
// Remove session lock taken by launchVmProcess()
session.unlockMachine();
// TODO this unlock is not IMMEDIATELY visible outside (vbox doc)
}
}
return session;
}