package org.greenrobot.greendao.daotest;

import java.util.Map;

import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.AbstractDaoSession;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.identityscope.IdentityScopeType;
import org.greenrobot.greendao.internal.DaoConfig;

import org.greenrobot.greendao.daotest.SimpleEntity;
import org.greenrobot.greendao.daotest.SimpleEntityNotNull;
import org.greenrobot.greendao.daotest.TestEntity;
import org.greenrobot.greendao.daotest.RelationEntity;
import org.greenrobot.greendao.daotest.DateEntity;
import org.greenrobot.greendao.daotest.SpecialNamesEntity;
import org.greenrobot.greendao.daotest.AbcdefEntity;
import org.greenrobot.greendao.daotest.ToManyTargetEntity;
import org.greenrobot.greendao.daotest.ToManyEntity;
import org.greenrobot.greendao.daotest.JoinManyToDateEntity;
import org.greenrobot.greendao.daotest.TreeEntity;
import org.greenrobot.greendao.daotest.AnActiveEntity;
import org.greenrobot.greendao.daotest.ExtendsImplementsEntity;
import org.greenrobot.greendao.daotest.StringKeyValueEntity;
import org.greenrobot.greendao.daotest.AutoincrementEntity;
import org.greenrobot.greendao.daotest.SqliteMaster;
import org.greenrobot.greendao.daotest.CustomTypeEntity;
import org.greenrobot.greendao.daotest.IndexedStringEntity;

import org.greenrobot.greendao.daotest.SimpleEntityDao;
import org.greenrobot.greendao.daotest.SimpleEntityNotNullDao;
import org.greenrobot.greendao.daotest.TestEntityDao;
import org.greenrobot.greendao.daotest.RelationEntityDao;
import org.greenrobot.greendao.daotest.DateEntityDao;
import org.greenrobot.greendao.daotest.SpecialNamesEntityDao;
import org.greenrobot.greendao.daotest.AbcdefEntityDao;
import org.greenrobot.greendao.daotest.ToManyTargetEntityDao;
import org.greenrobot.greendao.daotest.ToManyEntityDao;
import org.greenrobot.greendao.daotest.JoinManyToDateEntityDao;
import org.greenrobot.greendao.daotest.TreeEntityDao;
import org.greenrobot.greendao.daotest.AnActiveEntityDao;
import org.greenrobot.greendao.daotest.ExtendsImplementsEntityDao;
import org.greenrobot.greendao.daotest.StringKeyValueEntityDao;
import org.greenrobot.greendao.daotest.AutoincrementEntityDao;
import org.greenrobot.greendao.daotest.SqliteMasterDao;
import org.greenrobot.greendao.daotest.CustomTypeEntityDao;
import org.greenrobot.greendao.daotest.IndexedStringEntityDao;

// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.

/**
 * {@inheritDoc}
 * 
 * @see org.greenrobot.greendao.AbstractDaoSession
 */
public class DaoSession extends AbstractDaoSession {

    private final DaoConfig simpleEntityDaoConfig;
    private final DaoConfig simpleEntityNotNullDaoConfig;
    private final DaoConfig testEntityDaoConfig;
    private final DaoConfig relationEntityDaoConfig;
    private final DaoConfig dateEntityDaoConfig;
    private final DaoConfig specialNamesEntityDaoConfig;
    private final DaoConfig abcdefEntityDaoConfig;
    private final DaoConfig toManyTargetEntityDaoConfig;
    private final DaoConfig toManyEntityDaoConfig;
    private final DaoConfig joinManyToDateEntityDaoConfig;
    private final DaoConfig treeEntityDaoConfig;
    private final DaoConfig anActiveEntityDaoConfig;
    private final DaoConfig extendsImplementsEntityDaoConfig;
    private final DaoConfig stringKeyValueEntityDaoConfig;
    private final DaoConfig autoincrementEntityDaoConfig;
    private final DaoConfig sqliteMasterDaoConfig;
    private final DaoConfig customTypeEntityDaoConfig;
    private final DaoConfig indexedStringEntityDaoConfig;

    private final SimpleEntityDao simpleEntityDao;
    private final SimpleEntityNotNullDao simpleEntityNotNullDao;
    private final TestEntityDao testEntityDao;
    private final RelationEntityDao relationEntityDao;
    private final DateEntityDao dateEntityDao;
    private final SpecialNamesEntityDao specialNamesEntityDao;
    private final AbcdefEntityDao abcdefEntityDao;
    private final ToManyTargetEntityDao toManyTargetEntityDao;
    private final ToManyEntityDao toManyEntityDao;
    private final JoinManyToDateEntityDao joinManyToDateEntityDao;
    private final TreeEntityDao treeEntityDao;
    private final AnActiveEntityDao anActiveEntityDao;
    private final ExtendsImplementsEntityDao extendsImplementsEntityDao;
    private final StringKeyValueEntityDao stringKeyValueEntityDao;
    private final AutoincrementEntityDao autoincrementEntityDao;
    private final SqliteMasterDao sqliteMasterDao;
    private final CustomTypeEntityDao customTypeEntityDao;
    private final IndexedStringEntityDao indexedStringEntityDao;

    public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>
            daoConfigMap) {
        super(db);

        simpleEntityDaoConfig = daoConfigMap.get(SimpleEntityDao.class).clone();
        simpleEntityDaoConfig.initIdentityScope(type);

        simpleEntityNotNullDaoConfig = daoConfigMap.get(SimpleEntityNotNullDao.class).clone();
        simpleEntityNotNullDaoConfig.initIdentityScope(type);

        testEntityDaoConfig = daoConfigMap.get(TestEntityDao.class).clone();
        testEntityDaoConfig.initIdentityScope(type);

        relationEntityDaoConfig = daoConfigMap.get(RelationEntityDao.class).clone();
        relationEntityDaoConfig.initIdentityScope(type);

        dateEntityDaoConfig = daoConfigMap.get(DateEntityDao.class).clone();
        dateEntityDaoConfig.initIdentityScope(type);

        specialNamesEntityDaoConfig = daoConfigMap.get(SpecialNamesEntityDao.class).clone();
        specialNamesEntityDaoConfig.initIdentityScope(type);

        abcdefEntityDaoConfig = daoConfigMap.get(AbcdefEntityDao.class).clone();
        abcdefEntityDaoConfig.initIdentityScope(type);

        toManyTargetEntityDaoConfig = daoConfigMap.get(ToManyTargetEntityDao.class).clone();
        toManyTargetEntityDaoConfig.initIdentityScope(type);

        toManyEntityDaoConfig = daoConfigMap.get(ToManyEntityDao.class).clone();
        toManyEntityDaoConfig.initIdentityScope(type);

        joinManyToDateEntityDaoConfig = daoConfigMap.get(JoinManyToDateEntityDao.class).clone();
        joinManyToDateEntityDaoConfig.initIdentityScope(type);

        treeEntityDaoConfig = daoConfigMap.get(TreeEntityDao.class).clone();
        treeEntityDaoConfig.initIdentityScope(type);

        anActiveEntityDaoConfig = daoConfigMap.get(AnActiveEntityDao.class).clone();
        anActiveEntityDaoConfig.initIdentityScope(type);

        extendsImplementsEntityDaoConfig = daoConfigMap.get(ExtendsImplementsEntityDao.class).clone();
        extendsImplementsEntityDaoConfig.initIdentityScope(type);

        stringKeyValueEntityDaoConfig = daoConfigMap.get(StringKeyValueEntityDao.class).clone();
        stringKeyValueEntityDaoConfig.initIdentityScope(type);

        autoincrementEntityDaoConfig = daoConfigMap.get(AutoincrementEntityDao.class).clone();
        autoincrementEntityDaoConfig.initIdentityScope(type);

        sqliteMasterDaoConfig = daoConfigMap.get(SqliteMasterDao.class).clone();
        sqliteMasterDaoConfig.initIdentityScope(type);

        customTypeEntityDaoConfig = daoConfigMap.get(CustomTypeEntityDao.class).clone();
        customTypeEntityDaoConfig.initIdentityScope(type);

        indexedStringEntityDaoConfig = daoConfigMap.get(IndexedStringEntityDao.class).clone();
        indexedStringEntityDaoConfig.initIdentityScope(type);

        simpleEntityDao = new SimpleEntityDao(simpleEntityDaoConfig, this);
        simpleEntityNotNullDao = new SimpleEntityNotNullDao(simpleEntityNotNullDaoConfig, this);
        testEntityDao = new TestEntityDao(testEntityDaoConfig, this);
        relationEntityDao = new RelationEntityDao(relationEntityDaoConfig, this);
        dateEntityDao = new DateEntityDao(dateEntityDaoConfig, this);
        specialNamesEntityDao = new SpecialNamesEntityDao(specialNamesEntityDaoConfig, this);
        abcdefEntityDao = new AbcdefEntityDao(abcdefEntityDaoConfig, this);
        toManyTargetEntityDao = new ToManyTargetEntityDao(toManyTargetEntityDaoConfig, this);
        toManyEntityDao = new ToManyEntityDao(toManyEntityDaoConfig, this);
        joinManyToDateEntityDao = new JoinManyToDateEntityDao(joinManyToDateEntityDaoConfig, this);
        treeEntityDao = new TreeEntityDao(treeEntityDaoConfig, this);
        anActiveEntityDao = new AnActiveEntityDao(anActiveEntityDaoConfig, this);
        extendsImplementsEntityDao = new ExtendsImplementsEntityDao(extendsImplementsEntityDaoConfig, this);
        stringKeyValueEntityDao = new StringKeyValueEntityDao(stringKeyValueEntityDaoConfig, this);
        autoincrementEntityDao = new AutoincrementEntityDao(autoincrementEntityDaoConfig, this);
        sqliteMasterDao = new SqliteMasterDao(sqliteMasterDaoConfig, this);
        customTypeEntityDao = new CustomTypeEntityDao(customTypeEntityDaoConfig, this);
        indexedStringEntityDao = new IndexedStringEntityDao(indexedStringEntityDaoConfig, this);

        registerDao(SimpleEntity.class, simpleEntityDao);
        registerDao(SimpleEntityNotNull.class, simpleEntityNotNullDao);
        registerDao(TestEntity.class, testEntityDao);
        registerDao(RelationEntity.class, relationEntityDao);
        registerDao(DateEntity.class, dateEntityDao);
        registerDao(SpecialNamesEntity.class, specialNamesEntityDao);
        registerDao(AbcdefEntity.class, abcdefEntityDao);
        registerDao(ToManyTargetEntity.class, toManyTargetEntityDao);
        registerDao(ToManyEntity.class, toManyEntityDao);
        registerDao(JoinManyToDateEntity.class, joinManyToDateEntityDao);
        registerDao(TreeEntity.class, treeEntityDao);
        registerDao(AnActiveEntity.class, anActiveEntityDao);
        registerDao(ExtendsImplementsEntity.class, extendsImplementsEntityDao);
        registerDao(StringKeyValueEntity.class, stringKeyValueEntityDao);
        registerDao(AutoincrementEntity.class, autoincrementEntityDao);
        registerDao(SqliteMaster.class, sqliteMasterDao);
        registerDao(CustomTypeEntity.class, customTypeEntityDao);
        registerDao(IndexedStringEntity.class, indexedStringEntityDao);
    }
    
    public void clear() {
        simpleEntityDaoConfig.clearIdentityScope();
        simpleEntityNotNullDaoConfig.clearIdentityScope();
        testEntityDaoConfig.clearIdentityScope();
        relationEntityDaoConfig.clearIdentityScope();
        dateEntityDaoConfig.clearIdentityScope();
        specialNamesEntityDaoConfig.clearIdentityScope();
        abcdefEntityDaoConfig.clearIdentityScope();
        toManyTargetEntityDaoConfig.clearIdentityScope();
        toManyEntityDaoConfig.clearIdentityScope();
        joinManyToDateEntityDaoConfig.clearIdentityScope();
        treeEntityDaoConfig.clearIdentityScope();
        anActiveEntityDaoConfig.clearIdentityScope();
        extendsImplementsEntityDaoConfig.clearIdentityScope();
        stringKeyValueEntityDaoConfig.clearIdentityScope();
        autoincrementEntityDaoConfig.clearIdentityScope();
        sqliteMasterDaoConfig.clearIdentityScope();
        customTypeEntityDaoConfig.clearIdentityScope();
        indexedStringEntityDaoConfig.clearIdentityScope();
    }

    public SimpleEntityDao getSimpleEntityDao() {
        return simpleEntityDao;
    }

    public SimpleEntityNotNullDao getSimpleEntityNotNullDao() {
        return simpleEntityNotNullDao;
    }

    public TestEntityDao getTestEntityDao() {
        return testEntityDao;
    }

    public RelationEntityDao getRelationEntityDao() {
        return relationEntityDao;
    }

    public DateEntityDao getDateEntityDao() {
        return dateEntityDao;
    }

    public SpecialNamesEntityDao getSpecialNamesEntityDao() {
        return specialNamesEntityDao;
    }

    public AbcdefEntityDao getAbcdefEntityDao() {
        return abcdefEntityDao;
    }

    public ToManyTargetEntityDao getToManyTargetEntityDao() {
        return toManyTargetEntityDao;
    }

    public ToManyEntityDao getToManyEntityDao() {
        return toManyEntityDao;
    }

    public JoinManyToDateEntityDao getJoinManyToDateEntityDao() {
        return joinManyToDateEntityDao;
    }

    public TreeEntityDao getTreeEntityDao() {
        return treeEntityDao;
    }

    public AnActiveEntityDao getAnActiveEntityDao() {
        return anActiveEntityDao;
    }

    public ExtendsImplementsEntityDao getExtendsImplementsEntityDao() {
        return extendsImplementsEntityDao;
    }

    public StringKeyValueEntityDao getStringKeyValueEntityDao() {
        return stringKeyValueEntityDao;
    }

    public AutoincrementEntityDao getAutoincrementEntityDao() {
        return autoincrementEntityDao;
    }

    public SqliteMasterDao getSqliteMasterDao() {
        return sqliteMasterDao;
    }

    public CustomTypeEntityDao getCustomTypeEntityDao() {
        return customTypeEntityDao;
    }

    public IndexedStringEntityDao getIndexedStringEntityDao() {
        return indexedStringEntityDao;
    }

}
