Dashboard > GreenPepper Open Documentation Refactoring > ... > 8. Developer examples > Guice Example
  GreenPepper Open Documentation Refactoring Log In View a printable version of the current page.  
  Guice Example
Added by Laurent Cobos, last edited by Laurent Cobos on Aug 13, 2009  (view change)
Labels: 
(None)

The Guice container system under development

Google Guice is an Inversion Of Control (IOC) container get more information about it on Google Guice website

GuiceSystemUnderDevelopment code can be found in greenpepper-extension-guice: GuiceSystemUnderDevelopment.java

Guice system under development sample
package com.greenpepper.extensions.guice;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.greenpepper.reflect.DefaultFixture;
import com.greenpepper.reflect.Fixture;
import com.greenpepper.systemunderdevelopment.DefaultSystemUnderDevelopment;

public class GuiceSystemUnderDevelopment extends DefaultSystemUnderDevelopment
{

	private Injector injector;
	private List<String> moduleNames = new ArrayList<String>();

	public GuiceSystemUnderDevelopment()
	{
	}

	public GuiceSystemUnderDevelopment(String... moduleNames)
	{
		Collections.addAll(this.moduleNames, moduleNames);
	}

	@Override
	public Fixture getFixture(String name, String... params)
			throws Throwable
	{
		lazilyInstantiateModulesAndInjector();

		Fixture fixture;

		if (params.length != 0)
		{
			// When params are used, we use the PlainOldSystemUnderDevelopment to instantiate the fixture
			// these params are passed to the constructor
			// Then we use Guice to inject members
			fixture = super.getFixture(name, params);
			injector.injectMembers(fixture.getTarget());
		}
		else
		{
			// Use Guice to instantiate
			Class<?> klass = loadType(name).getUnderlyingClass();
			Object target = injector.getInstance(klass);
			fixture = new DefaultFixture(target);
		}

		return fixture;
	}

	private void lazilyInstantiateModulesAndInjector()
			throws Exception
	{
		if (injector == null)
		{
			List<Module> modules = convertModuleNamesToModules();
			injector = Guice.createInjector(modules);
		}
	}

	private List<Module> convertModuleNamesToModules()
			throws Exception
	{
		List<Module> modules = new ArrayList<Module>(moduleNames.size());
		for (String moduleName : moduleNames)
		{
			Class<?> klass = loadType(moduleName).getUnderlyingClass();
			modules.add((Module)klass.newInstance());
		}
		return modules;
	}

	public void addModules(String... moduleNames)
	{
		if (injector == null)
		{
			Collections.addAll(this.moduleNames, moduleNames);
		}
		else
		{
			throw new IllegalStateException("Cannot add module after a fixture has been instantiated");
		}
	}
}

DEMONSTRATION LICENSE - This Confluence site is for demonstration purposes only. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.4.3 Build:#705 Mar 21, 2007) - Bug/feature request - Contact Administrators