/* * Copyright 2005-2010 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 org.wamblee.system.adapters; import org.wamblee.system.core.DefaultProvidedInterface; import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; import org.wamblee.system.core.Scope; import java.util.ArrayList; import java.util.List; /** * The class configuration encapsulates the knowledge of how to wrap a class as * a component. * * @author Erik Brakkee */ public class ClassConfiguration { private Class clazz; private ConstructorConfiguration constructorConfig; private ObjectConfiguration objectConfig; /** * Constructs the configuration. By default no constructor is selected and * one of {@link #select(Class...)} or {@link #greedy()} must be called. * * @param aClass * Class to construct. */ public ClassConfiguration(Class aClass) { clazz = aClass; constructorConfig = new ConstructorConfiguration(aClass); objectConfig = new ObjectConfiguration(aClass); } public ConstructorConfiguration getConstructorConfig() { return constructorConfig; } public ObjectConfiguration getObjectConfig() { return objectConfig; } /** * Creates the object in the given scope. * * @param aScope * Scope containing required interfaces for this object. * * @return object. */ public Object create(Scope aScope) { return constructorConfig.create(aScope); } /** * Injects required interfaces through the setters * * @param aScope * Scope in which injection takes place. * @param aObject * Object to inject into. */ public void inject(Scope aScope, Object aObject) { objectConfig.inject(aScope, aObject); } public List getProvidedInterfaces() { List result = new ArrayList(); result.add(new DefaultProvidedInterface("provided", clazz)); return result; } public List getRequiredInterfaces() { List result = new ArrayList(); result.addAll(constructorConfig.getRequiredInterfaces()); result.addAll(objectConfig.getRequiredInterfaces()); return result; } }