001/* 002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nicolas Chapurlat <nchapurlat@nuxeo.com> 016 */ 017 018package org.nuxeo.ecm.core.io.registry.context; 019 020import java.util.List; 021import java.util.Locale; 022import java.util.Map; 023import java.util.Set; 024 025import org.nuxeo.ecm.core.api.CoreSession; 026import org.nuxeo.ecm.core.api.DocumentModel; 027import org.nuxeo.ecm.core.io.registry.reflect.Instantiations; 028 029/** 030 * A {@link ThreadLocal} delegate {@link RenderingContext} used for {@link Instantiations#SINGLETON} marshallers. 031 * 032 * @since 7.2 033 */ 034public final class ThreadSafeRenderingContext implements RenderingContext { 035 036 private final ThreadLocal<RenderingContext> ctx = new ThreadLocal<RenderingContext>(); 037 038 public ThreadSafeRenderingContext() { 039 } 040 041 /** 042 * Configure this {@link RenderingContext} to use the given {@link RenderingContext} in the current thread. 043 * 044 * @param delegates The underlying {@link RenderingContext}. 045 * @since 7.2 046 */ 047 public void configureThread(RenderingContext delegates) { 048 ctx.set(delegates); 049 } 050 051 /** 052 * Get the underlying {@link RenderingContext}. 053 * 054 * @return The underlying {@link RenderingContext}. 055 * @since 7.2 056 */ 057 public RenderingContext getDelegate() { 058 return ctx.get(); 059 } 060 061 @Override 062 public Locale getLocale() { 063 return ctx.get().getLocale(); 064 } 065 066 @Override 067 public String getBaseUrl() { 068 return ctx.get().getBaseUrl(); 069 } 070 071 @Override 072 public SessionWrapper getSession(DocumentModel document) { 073 return ctx.get().getSession(document); 074 } 075 076 @Override 077 public void setExistingSession(CoreSession session) { 078 ctx.get().setExistingSession(session); 079 } 080 081 @Override 082 public Set<String> getProperties() { 083 return ctx.get().getProperties(); 084 } 085 086 @Override 087 public Set<String> getFetched(String entity) { 088 return ctx.get().getFetched(entity); 089 } 090 091 @Override 092 public Set<String> getTranslated(String entity) { 093 return ctx.get().getTranslated(entity); 094 } 095 096 @Override 097 public Set<String> getEnrichers(String entity) { 098 return ctx.get().getEnrichers(entity); 099 } 100 101 @Override 102 public WrappedContext wrap() { 103 return ctx.get().wrap(); 104 } 105 106 @Override 107 public <T> T getParameter(String name) { 108 return ctx.get().getParameter(name); 109 } 110 111 @Override 112 public boolean getBooleanParameter(String name) { 113 return ctx.get().getBooleanParameter(name); 114 } 115 116 @Override 117 public <T> List<T> getParameters(String name) { 118 return ctx.get().getParameters(name); 119 } 120 121 @Override 122 public Map<String, List<Object>> getAllParameters() { 123 return ctx.get().getAllParameters(); 124 } 125 126 @Override 127 public void setParameterValues(String name, Object... values) { 128 ctx.get().setParameterValues(name, values); 129 } 130 131 @Override 132 public void setParameterListValues(String name, List<Object> values) { 133 ctx.get().setParameterListValues(name, values); 134 } 135 136 @Override 137 public void addParameterValues(String name, Object... values) { 138 ctx.get().addParameterValues(name, values); 139 } 140 141 @Override 142 public void addParameterListValues(String name, List<Object> values) { 143 ctx.get().addParameterListValues(name, values); 144 } 145 146}