AbstractMagicdroidEnvironment.java :  » Log » magicdroid » org » magicdroid » model » Android Open Source

Android Open Source » Log » magicdroid 
magicdroid » org » magicdroid » model » AbstractMagicdroidEnvironment.java
package org.magicdroid.model;

import org.magicdroid.commons.Injector;
import org.magicdroid.features.DetachFeature;
import org.magicdroid.features.IdentifyFeature;
import org.magicdroid.features.JsonFeature;
import org.magicdroid.features.MetaFeature;
import org.magicdroid.features.MetaIterableFeature;
import org.magicdroid.features.PropertyValueProvider;
import org.magicdroid.features.WorkingCopyFeature;
import org.magicdroid.model.impl.AccountServiceImpl;
import org.magicdroid.model.impl.CategoryServiceImpl;
import org.magicdroid.model.impl.ExpenseServiceImpl;
import org.magicdroid.model.impl.MagicdroidMetaModel;
import org.magicdroid.model.impl.PersonServiceImpl;
import org.magicdroid.model.impl.StandardStateFeature;
import org.magicdroid.serializer.MagicdroidJSONSerializer;
import org.magicdroid.serializer.MagicdroidSerializer;
import org.magicdroid.services.AccountService;
import org.magicdroid.services.CategoryService;
import org.magicdroid.services.ExpenseService;
import org.magicdroid.services.PersonService;
import org.magicdroid.services.UnitOfWork;

public abstract class AbstractMagicdroidEnvironment {

  private AccountService accountService;
  private ExpenseService expenseService;
  private CategoryService categoryService;
  private PersonService personService;
  private UnitOfWork unitOfWorkService;
  protected final Injector injector;
  
  public AbstractMagicdroidEnvironment() {
    injector = createInjector();
    this.preSetup(injector);
    this.setup(injector);
    this.accountService = injector.create(AccountService.class);
    this.expenseService = injector.create(ExpenseService.class);
    this.categoryService = injector.create(CategoryService.class);
    this.personService = injector.create(PersonService.class);
    this.unitOfWorkService = injector.create(UnitOfWork.class);
  }

  protected Injector createInjector() {
    return new Injector();
  }
  
  private void preSetup(Injector injector) {
    injector
      .bind(MetaModel.class, MagicdroidMetaModel.class)
    
      .bind(Account.class, this.getStandardDomainObjectSpec())
      .bind(Category.class, this.getStandardDomainObjectSpec())
      .bind(Expense.class, this.getStandardDomainObjectSpec())
      .bind(Person.class, this.getStandardDomainObjectSpec())
      
      .bind(Account.AccountWC.class, this.getStandardWorkingCopySpec())
      .bind(Category.CategoryWC.class, this.getStandardWorkingCopySpec())
      .bind(Expense.ExpenseWC.class, this.getStandardWorkingCopySpec())
      .bind(Person.PersonWC.class, this.getStandardWorkingCopySpec())
      
      .bind(AccountService.class, AccountServiceImpl.class)
      .bind(ExpenseService.class, ExpenseServiceImpl.class)
      .bind(CategoryService.class, CategoryServiceImpl.class)
      .bind(PersonService.class, PersonServiceImpl.class)
      
      .bind(MagicdroidSerializer.class, MagicdroidJSONSerializer.class)
    ;
  }

  protected abstract void setup(Injector injector);
  
  protected Class[] getStandardDomainObjectSpec() {
    return new Class[] { 
      IdentifyFeature.IdConcern.class, 
      StandardStateFeature.StateConcern.class, 
//      DetachFeature.Mixin.class, 
      MetaFeature.MetaFeatureMixin.class, 
      MetaIterableFeature.Mixin.class, 
      PropertyValueProvider.Mixin.class, 
      JsonFeature.Mixin.class, 
//      Object.class 
    };
  }
  protected Class[] getStandardWorkingCopySpec() {
    return new Class[] { 
        WorkingCopyFeature.WorkingCopyConcern.class, 
        IdentifyFeature.IdConcern.class, 
        StandardStateFeature.StateConcern.class, 
        WorkingCopyFeature.Mixin.class,
        MetaFeature.MetaFeatureMixin.class, 
        PropertyValueProvider.Mixin.class, 
        JsonFeature.Mixin.class, 
//        Object.class 
    };
  }
  protected Class[] getNOPImplementation() {
    return new Class[] {
        
    };
  }
  
  public AccountService getAccountService() {
    return accountService;
  }
  
  public CategoryService getCategoryService() {
    return categoryService;
  }
  
  public PersonService getPersonService() {
    return personService;
  }
  
  public ExpenseService getExpenseService() {
    return expenseService;
  }
  
  public UnitOfWork getUnitOfWork() {
    return unitOfWorkService;
  }
  
  public Injector getInjector() {
    return injector;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.