/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.common.impl.internal.pipeline;
import java.util.ArrayList;
import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContext;
import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContextAccessor;
/**
* @author ichernyshev
*/
public final class MessageContextAccessorImpl extends MessageContextAccessor {
private final ThreadLocal<ArrayList<MessageContext>> m_context = new ThreadLocal<ArrayList<MessageContext>>();
private MessageContextAccessorImpl() {
// no instances
}
private static MessageContextAccessorImpl getImpl() {
return (MessageContextAccessorImpl)getInstance();
}
public static void blockPreviousContext() {
setContextInt(null);
}
public static void setContext(MessageContext ctx) {
if (ctx == null) {
throw new NullPointerException();
}
setContextInt(ctx);
}
private static void setContextInt(MessageContext ctx) {
ArrayList<MessageContext> stack = getImpl().m_context.get();
if (stack == null) {
stack = new ArrayList<MessageContext>();
getImpl().m_context.set(stack);
}
stack.add(ctx);
}
public static void resetContext() {
ArrayList<MessageContext> stack = getImpl().m_context.get();
if (stack == null || stack.isEmpty()) {
return;
}
stack.remove(stack.size() - 1);
}
@Override
protected MessageContext getContextInternal() {
ArrayList<MessageContext> stack = getImpl().m_context.get();
if (stack == null || stack.isEmpty()) {
return null;
}
return stack.get(stack.size() - 1);
}
static {
MessageContextAccessor.setInstance(new MessageContextAccessorImpl());
}
}