001/** 002 * Copyright 2013 John Ericksen 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.androidtransfuse.processor; 017 018import com.sun.codemodel.JDefinedClass; 019import org.androidtransfuse.adapter.ASTType; 020import org.androidtransfuse.analysis.repository.InjectionNodeBuilderRepository; 021import org.androidtransfuse.analysis.repository.InjectionNodeBuilderRepositoryFactory; 022import org.androidtransfuse.gen.FactoriesGenerator; 023import org.androidtransfuse.gen.variableBuilder.VariableInjectionBuilderFactory; 024import org.androidtransfuse.transaction.AbstractCompletionTransactionWorker; 025 026import javax.inject.Inject; 027import javax.inject.Provider; 028import java.util.Map; 029 030/** 031 * @author John Ericksen 032 */ 033public class FactoriesTransactionWorker extends AbstractCompletionTransactionWorker<Map<Provider<ASTType>, JDefinedClass>, Void> { 034 035 private final FactoriesGenerator factoriesGenerator; 036 private final InjectionNodeBuilderRepositoryFactory injectionNodeBuilders; 037 private final VariableInjectionBuilderFactory variableInjectionBuilderFactory; 038 private final Provider<InjectionNodeBuilderRepository> injectionNodeBuilderRepositoryProvider; 039 040 @Inject 041 public FactoriesTransactionWorker(FactoriesGenerator factoriesGenerator, 042 InjectionNodeBuilderRepositoryFactory injectionNodeBuilders, 043 VariableInjectionBuilderFactory variableInjectionBuilderFactory, 044 Provider<InjectionNodeBuilderRepository> injectionNodeBuilderRepositoryProvider) { 045 this.factoriesGenerator = factoriesGenerator; 046 this.injectionNodeBuilders = injectionNodeBuilders; 047 this.variableInjectionBuilderFactory = variableInjectionBuilderFactory; 048 this.injectionNodeBuilderRepositoryProvider = injectionNodeBuilderRepositoryProvider; 049 } 050 051 @Override 052 public Void innerRun(Map<Provider<ASTType>, JDefinedClass> aggregate) { 053 054 //register factory configuration 055 InjectionNodeBuilderRepository repository = injectionNodeBuilderRepositoryProvider.get(); 056 for (Provider<ASTType> typeProvider : aggregate.keySet()) { 057 ASTType type = typeProvider.get(); 058 059 repository.putType(type, variableInjectionBuilderFactory.buildFactoryNodeBuilder(type)); 060 } 061 062 injectionNodeBuilders.addModuleRepository(repository); 063 064 065 //setup Factories class 066 factoriesGenerator.generate(aggregate); 067 068 return null; 069 } 070}