package io.milton.mini;
import io.milton.cloud.common.CurrentDateService;
import io.milton.http.Request;
import io.milton.vfs.data.DataSession;
import io.milton.vfs.db.Branch;
import io.milton.vfs.db.Profile;
import io.milton.vfs.db.Repository;
import io.milton.vfs.db.utils.SessionManager;
import javax.inject.Inject;
import org.hashsplit4j.api.BlobStore;
import org.hashsplit4j.api.HashStore;
import org.hibernate.Session;
/**
*
* @author brad
*/
public class DataSessionManager {
@Inject
private HashStore hashStore;
@Inject
private BlobStore blobStore;
@Inject
private CurrentDateService currentDateService;
public DataSession get(Request request, Repository repo) {
return get(request, repo, false, null);
}
/**
* Get an existing data session in this request, or start a new one, for
* the live branch of the given repository
*
* @param request
* @param repo
* @param autoCreateBranch
* @param currentUser
* @return
*/
public DataSession get(Request request, Repository repo, boolean autoCreateBranch, Profile currentUser) {
String sessKey = "dataSession-" + repo.getId();
DataSession dataSession = (DataSession) request.getAttributes().get(sessKey);
if (dataSession == null) {
Session session = SessionManager.session();
Branch trunk = repo.liveBranch();
if( trunk == null ) {
if( autoCreateBranch ) {
trunk = repo.createBranch(Branch.TRUNK, currentUser, session);
}
}
if (trunk != null) {
dataSession = new DataSession(trunk, session, hashStore, blobStore, currentDateService);
request.getAttributes().put(sessKey, dataSession);
}
}
return dataSession;
}
}