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

com.github.nill14.utils.init.binding.impl.Binding Maven / Gradle / Ivy

The newest version!
package com.github.nill14.utils.init.binding.impl;

import java.lang.annotation.Annotation;

import com.github.nill14.utils.init.api.BindingKey;
import com.github.nill14.utils.init.binding.target.LinkedBindingTarget;
import com.github.nill14.utils.init.scope.IScopeStrategy;
import com.google.common.base.Preconditions;

public final class Binding {
	
	private final BindingKey bindingKey;
	private final BindingTarget target;
	private final Object source;
	private final IScopeStrategy scope;

	public Binding(BindingKey key, BindingTarget target, IScopeStrategy scope, Object source) {
		this.bindingKey = Preconditions.checkNotNull(key);
		this.target = Preconditions.checkNotNull(target);
		this.scope = Preconditions.checkNotNull(scope);
		this.source = Preconditions.checkNotNull(source);
	}
	

	public BindingTarget getBindingTarget() {
		return target;
	}
	
	public BindingKey getBindingKey() {
		return bindingKey;
	}
  
//	public TypeToken getValueToken() {
//		return factory.getType();
//	}
	
	public Object getSource() {
		return source;
	}
	
	public IScopeStrategy getScopeStrategy() {
		return scope;
	}
	

	@Override
	public String toString() {
		return String.format("Binding(%s -> %s, %s)", bindingKey, target, scope);
	}
	
	
	
	public Binding keyWithQualifier(Annotation qualifier) {
		return new Binding<>(bindingKey.withQualifier(qualifier), target, scope, source);
	}
	
	public Binding withLinkedTarget(BindingKey targetType) {
		return new Binding<>(bindingKey, LinkedBindingTarget.create(targetType), scope, source);
	}
	
	public Binding withScopeStrategy(IScopeStrategy scope) {
		return new Binding<>(bindingKey, target, scope, source);
	}	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy