/*
* Copyright 2013 eXo Platform SAS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package juzu.impl.request;
import juzu.Scope;
import juzu.impl.bridge.spi.ScopedContext;
import juzu.impl.common.Tools;
import juzu.request.Phase;
/** @author Julien Viet */
public class ContextLifeCycle {
private Request request;
public ContextLifeCycle(Request request) {
this.request = request;
}
/**
* Resume the current context life cycle.
*/
public void resume() {
//
ContextLifeCycle lifeCycle = Request.current.get();
if (lifeCycle != null) {
throw new IllegalStateException("A context is already active for this thread");
}
//
Request.current.set(this);
}
Request getRequest() {
return request;
}
/**
* End the current contextual, this method should not throw anything
*/
void endContextual() {
// Remove
request.contextLifeCycles.remove(this);
// Deassociate
request.getScopeController().end();
// We are done -> cleanup
if (request.contextLifeCycles.isEmpty()) {
// Dispose controller first
if (request.controllerLifeCycle != null) {
request.controllerLifeCycle.close();
}
// End scopes
if (request.getPhase() == Phase.VIEW) {
ScopedContext flashScope = request.bridge.getScopedContext(Scope.FLASH, false);
if (flashScope != null) {
Tools.safeClose(flashScope);
}
}
ScopedContext requestScope = request.bridge.getScopedContext(Scope.REQUEST, false);
if (requestScope != null) {
Tools.safeClose(requestScope);
}
}
}
}