FactoryProxy.java revision 163c48aafee02f9e918a6e7385f5b3312e8edfb6
13d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit/** 23d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Copyright (C) 2008 Google Inc. 33d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 43d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 53d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * you may not use this file except in compliance with the License. 63d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * You may obtain a copy of the License at 73d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 83d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * http://www.apache.org/licenses/LICENSE-2.0 93d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 103d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Unless required by applicable law or agreed to in writing, software 113d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 123d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * See the License for the specific language governing permissions and 143d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * limitations under the License. 153d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit */ 163d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 173d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 183d58d6b7c1235722366a641759a02bd9c6625c21limpbizkitpackage com.google.inject; 193d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 209dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkitimport com.google.inject.internal.Errors; 21163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkitimport com.google.inject.internal.ErrorsException; 223d58d6b7c1235722366a641759a02bd9c6625c21limpbizkitimport com.google.inject.internal.ToStringBuilder; 23163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkitimport com.google.inject.spi.InjectionPoint; 243d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 253d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit/** 263d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * A placeholder which enables us to swap in the real factory once the 273d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * container is created. 283d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit */ 299dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkitclass FactoryProxy<T> implements InternalFactory<T>, BindCommandProcessor.CreationListener { 303d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 313d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Key<T> key; 323d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Key<? extends T> targetKey; 333d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Object source; 343d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 35e4647a6dd1f38eb3f042ca22716d7a182cabcbe2limpbizkit private InternalFactory<? extends T> targetFactory; 363d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 373d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit FactoryProxy(Key<T> key, Key<? extends T> targetKey, Object source) { 383d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.key = key; 393d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.targetKey = targetKey; 403d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.source = source; 413d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 423d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 439dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit public void notify(final InjectorImpl injector, final Errors errors) { 44163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit errors.pushSource(source); 459dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit try { 46163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit targetFactory = injector.getInternalFactory(targetKey, errors); 47163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit } catch (ErrorsException e) { 489dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit errors.merge(e.getErrors()); 49163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit } finally { 50163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit errors.popSource(source); 519dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit } 523d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 533d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 549dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit public T get(Errors errors, InternalContext context, InjectionPoint<?> injectionPoint) 55163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit throws ErrorsException { 569dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit return targetFactory.get(errors, context, injectionPoint); 573d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 583d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 593d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit public String toString() { 603d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit return new ToStringBuilder(FactoryProxy.class) 613d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .add("key", key) 623d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .add("provider", targetFactory) 633d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .toString(); 643d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 653d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit} 66