blob: 885d693def6bf9919926487b5f852e0df2864b32 [file] [log] [blame]
package org.eclipse.scout.rt.testing.server;
import javax.security.auth.Subject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.commons.security.SimplePrincipal;
import org.eclipse.scout.rt.server.IServerSession;
import org.eclipse.scout.rt.server.ServerJob;
import org.eclipse.scout.rt.server.ThreadContext;
import org.eclipse.scout.rt.shared.ui.UserAgent;
import org.osgi.framework.Bundle;
/**
* Default implementation of {@link ITestServerSessionProvider}.
*/
public class DefaultTestServerSessionProvider implements ITestServerSessionProvider {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(DefaultTestServerSessionProvider.class);
@Override
@SuppressWarnings("unchecked")
public <T extends IServerSession> T createServerSession(Class<T> clazz, final Subject subject) throws ProcessingException {
IServerSession serverSession;
try {
serverSession = clazz.newInstance();
}
catch (Throwable t) {
throw new ProcessingException("create instance of " + clazz, t);
}
serverSession.setUserAgent(UserAgent.createDefault());
ServerJob initJob = new ServerJob("new " + clazz.getSimpleName(), serverSession, subject) {
@Override
protected IStatus runTransaction(IProgressMonitor monitor) throws Exception {
// load session
IServerSession serverSessionInside = ThreadContext.getServerSession();
String symbolicName = serverSessionInside.getClass().getPackage().getName();
Bundle bundle = Platform.getBundle(symbolicName);
beforeStartSession(serverSessionInside, subject);
serverSessionInside.loadSession(bundle);
afterStartSession(serverSessionInside, subject);
return Status.OK_STATUS;
}
};
initJob.runNow(new NullProgressMonitor());
initJob.throwOnError();
return (T) serverSession;
}
@Override
public Subject login(String runAs) {
Subject subject = new Subject();
subject.getPrincipals().add(new SimplePrincipal(runAs));
return subject;
}
/**
* Performs custom operations before the server session is started.
*
* @param serverSession
* @param subject
*/
protected void beforeStartSession(IServerSession serverSession, Subject subject) {
}
/**
* Performs custom operations after the server session has been started.
*
* @param serverSession
* @param subject
*/
protected void afterStartSession(IServerSession serverSession, Subject subject) {
}
}