/* * Copyright (c) 2009-present the original author or authors. * * 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 com.planet57.gshell.internal; import com.planet57.gshell.variables.Variables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Named; import javax.inject.Provider; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; // HACK: need to adjust how variables and session work; resolver, file-system-access and completers all depend on Variables // CommandResolverImpl // DirectionNameCompleter // FileNameCompleter // FileSystemAccessImpl // VariableNameCompleter /** * ??? * * @since 3.0 */ @Named public class VariablesProvider implements Provider<Variables> { private static final Logger log = LoggerFactory.getLogger(VariablesProvider.class); private static final ThreadLocal<Variables> holder = new InheritableThreadLocal<>(); public static void set(final Variables variables) { checkNotNull(variables); log.debug("Variables installed: {}", variables); holder.set(variables); } @Override public Variables get() { // TODO: this doesn't work with completers, which do not yet have a current job // Job job = Job.Utils.current(); // checkState(job != null); // // CommandSessionImpl session = (CommandSessionImpl) job.session(); // return new VariablesSupport(session.getVariables()); Variables variables = holder.get(); checkState(variables != null); return variables; } }