package org.openntf.domino.xsp.session;
import javax.servlet.http.HttpServletRequest;
import lotus.domino.NotesException;
import org.openntf.domino.Session;
import org.openntf.domino.utils.DominoUtils;
import org.openntf.domino.utils.Factory;
import com.ibm.designer.runtime.domino.bootstrap.util.StringUtil;
import com.ibm.domino.napi.c.xsp.XSPNative;
import com.ibm.domino.osgi.core.context.ContextInfo;
/**
* The XPageCurrentSessionFactory returns (as the name says) the current XPage Session if available.
*
*
* If the ´Factory is passed across threads, it tries to create an XPage-Session with the same username that was available at construction
* time. (This implies, that there is a valid XPage session available at construction time)
*
* @author Roland Praml, FOCONIS AG
*
*/
public class DasCurrentSessionFactory extends AbstractXPageSessionFactory {
private static final long serialVersionUID = 1L;
private HttpServletRequest request_;
public DasCurrentSessionFactory(final HttpServletRequest request) {
super();
request_ = request;
}
/**
* returns the current Das-Session
*
* @throws
*/
@Override
public Session createSession() {
if (request_ == null) {
lotus.domino.Session rawSession = ContextInfo.getUserSession();
try {
lotus.domino.Database rawDb = rawSession.getCurrentDatabase();
if (rawDb != null) {
if (StringUtil.isEmpty(rawDb.getServer())) {
currentApiPath_ = rawDb.getFilePath();
} else {
currentApiPath_ = rawDb.getServer() + "!!" + rawDb.getFilePath();
}
}
} catch (NotesException e) {
DominoUtils.handleException(e);
}
return wrapSession(ContextInfo.getUserSession(), false);
} else {
String name = request_.getUserPrincipal().getName();
// System.out.println("TEMP DEBUG getting session for " + name);
Session session = createSession(name);
Factory.setCurrentToSession(session);
return session;
}
}
public Session createSession(final String userName) {
try {
final long userHandle = createUserNameList(userName);
lotus.domino.Session rawSession = XSPNative.createXPageSessionExt(userName, userHandle, false, true, false);
lotus.domino.Database rawDb = rawSession.getCurrentDatabase();
if (rawDb != null) {
if (StringUtil.isEmpty(rawDb.getServer())) {
currentApiPath_ = rawDb.getFilePath();
} else {
currentApiPath_ = rawDb.getServer() + "!!" + rawDb.getFilePath();
}
}
return wrapSession(rawSession, true);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}