All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unix4j.variable.DefaultVariableContext Maven / Gradle / Ivy

package org.unix4j.variable;

import java.util.Deque;
import java.util.LinkedList;

import org.unix4j.convert.ValueConverter;

/**
 * Default implementation of {@link VariableContext}.
 */
public class DefaultVariableContext implements VariableContext {
	
	private final Deque resolvers = new LinkedList();

	@Override
	public void addVariableResolver(VariableResolver resolver) {
		resolvers.addFirst(resolver);
	}
	@Override
	public void removeVariableResolver(VariableResolver resolver) {
		resolvers.removeFirstOccurrence(resolver);
	}
	@Override
	public Object getValue(String name) {
		for (final VariableResolver resolver : resolvers) {
			final Object value = resolver.getValue(name);
			if (value != null) {
				return value;
			}
		}
		return null;
	}

	@Override
	public  V getValue(String name, ValueConverter converter) throws IllegalArgumentException {
		final Object value = getValue(name);
		if (value == null) {
			return null;
		}
		final V converted = converter.convert(value);
		if (converted == null) {
			//conversion failed, throw exception
			throw new IllegalArgumentException("value conversion not supported for variable " + name + "=" + value + " using converter=" + converter);
		}
		return converted;
	}
	
	@Override
	public String toString() {
		return getClass().getSimpleName() + resolvers;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy