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

com.github.nill14.utils.init.integration.LazyPojoFactory Maven / Gradle / Ivy

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


import javax.inject.Provider;

import com.github.nill14.utils.init.api.IBeanDescriptor;
import com.github.nill14.utils.init.api.IPojoFactory;
import com.github.nill14.utils.init.api.IPropertyResolver;
import com.github.nill14.utils.init.impl.ProviderTypePojoFactory;
import com.github.nill14.utils.init.impl.BeanTypePojoFactory;
import com.github.nill14.utils.init.impl.CallerContext;
import com.google.common.reflect.TypeToken;

public /*non-final on purpose*/ class LazyPojoFactory implements IPojoFactory {


	public static  LazyPojoFactory forClass(Class beanClass) {
		return new LazyPojoFactory<>(TypeToken.of(beanClass));
	}

	public static > LazyPojoFactory forFactory(Class factoryType) {
		return new LazyPojoFactory<>(TypeToken.of(factoryType), factoryType);
	}

	
	private static final long serialVersionUID = 1L;
	
	
	private final boolean doubleFactory;
	private final IPojoFactory delegate;
	private final TypeToken factoryToken;


	protected LazyPojoFactory(TypeToken beanType) {
		delegate = new BeanTypePojoFactory<>(beanType);
		factoryToken = beanType;
		this.doubleFactory = false;
	}

	//class type F is here G - factory
	@SuppressWarnings("unchecked")
	protected > LazyPojoFactory(TypeToken factoryType, Class factoryClass) {
		ProviderTypePojoFactory factoryAdapter = new ProviderTypePojoFactory(factoryType);
		this.factoryToken = (TypeToken) factoryType;
		this.delegate = (IPojoFactory) factoryAdapter;
		this.doubleFactory = true;
	}
	
	public boolean isDoubleFactory() {
		return doubleFactory;
	}

	@Override
	public F newInstance(IPropertyResolver resolver, CallerContext context) {
		F instance = delegate.newInstance(resolver, context);
		resolver.initializeBean(getDescriptor(), instance, context);
		return instance;
	}

	@Override
	public TypeToken getType() {
		return factoryToken;
	}

	@Override
	public IBeanDescriptor getDescriptor() {
		return delegate.getDescriptor();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy