protected SQLiteDatabaseSchema createDataSource(Element databaseSchema) {
		if (databaseSchema.getKind() != ElementKind.INTERFACE) {
			String msg = String.format("Class %s: only interfaces can be annotated with @%s annotation",
					databaseSchema.getSimpleName().toString(), BindDataSource.class.getSimpleName());
			throw (new InvalidKindForAnnotationException(msg));
		}

		if (!databaseSchema.getSimpleName().toString().endsWith(BindDataSourceBuilder.SUFFIX)) {
			String msg = String.format(
					"Interface %s marked with @%s annotation must have a typeName with suffix \""
							+ BindDataSourceBuilder.SUFFIX + "\" to be used with @BindDataSource",
					databaseSchema.getSimpleName().toString(), BindDataSource.class.getSimpleName());
			throw (new InvalidNameException(msg));
		}

		// go ahead to dataSource analysis
		// ASSERT: daoElement and beanElement is element for dao and bean
		// associated
		String schemaFileName = AnnotationUtility.extractAsString(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.FILENAME);
		int schemaVersion = AnnotationUtility.extractAsInt(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.VERSION);
		boolean generateLog = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.GENERATE_LOG);
		boolean generateSchema = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.GENERATE_SCHEMA);
		boolean generateAsyncTask = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.GENERATE_ASYNC_TASK);
		boolean generateCursorWrapper = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.GENERATE_CURSOR_WRAPPER);
		boolean generateRx = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSource.class,
				AnnotationAttributeType.GENERATE_RX);

		// get all dao used within SQLDatabaseSchema annotation
		List<String> daoIntoDataSource = AnnotationUtility.extractAsClassNameArray(elementUtils, databaseSchema,
				BindDataSource.class, AnnotationAttributeType.DAO_SET);

		String configCursorFactory = ReferredClasses.NO_CURSOR_FACTORY_CLASS_NAME;
		String configDatabaseErrorHandler = ReferredClasses.NO_DATABASE_ERROR_HANDLER_CLASS_NAME;
		String configDatabaseLifecycleHandler = ReferredClasses.NO_DATABASE_LIFECYCLE_HANDLER_CLASS_NAME;
		boolean configInMemory = false;
		boolean configLogEnabled = true;
		String configPopulatorClass = NoPopulator.class.getName();

		// manage for annotated data-source options
		BindDataSourceOptions dataSourceOptionsAnnotation = databaseSchema.getAnnotation(BindDataSourceOptions.class);
		if (dataSourceOptionsAnnotation != null) {
			configInMemory = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSourceOptions.class,
					AnnotationAttributeType.IN_MEMORY);
			configLogEnabled = AnnotationUtility.extractAsBoolean(databaseSchema, BindDataSourceOptions.class,
					AnnotationAttributeType.LOG_ENABLED);
			configPopulatorClass = AnnotationUtility.extractAsClassName(databaseSchema, BindDataSourceOptions.class,
					AnnotationAttributeType.POPULATOR);
			configCursorFactory = AnnotationUtility.extractAsClassName(databaseSchema, BindDataSourceOptions.class,
					AnnotationAttributeType.CURSOR_FACTORY);
			configDatabaseLifecycleHandler = AnnotationUtility.extractAsClassName(databaseSchema,
					BindDataSourceOptions.class, AnnotationAttributeType.DATABASE_LIFECYCLE_HANDLER);
		}

		SQLiteDatabaseSchema schema = new SQLiteDatabaseSchema((TypeElement) databaseSchema, schemaFileName,
				schemaVersion, generateSchema, generateLog, generateAsyncTask, generateCursorWrapper, generateRx,
				daoIntoDataSource, configCursorFactory, configDatabaseErrorHandler, configDatabaseLifecycleHandler,
				configInMemory, configLogEnabled, configPopulatorClass);

		// manage for content provider generation
		BindContentProvider contentProviderAnnotation = databaseSchema.getAnnotation(BindContentProvider.class);
		if (contentProviderAnnotation != null) {
			schema.generateContentProvider = true;
			schema.contentProvider = new SQLiteModelContentProvider();
			schema.contentProvider.authority = contentProviderAnnotation.authority();
		} else {
			schema.generateContentProvider = false;
		}

		return schema;

	}
protected SQLiteDatabaseSchema createDataSource ( Element databaseSchema ) { if ( databaseSchema . getKind ( ) != ElementKind . INTERFACE ) { String msg = String . format ( "Class %s: only interfaces can be annotated with @%s annotation" , databaseSchema . getSimpleName ( ) . toString ( ) , BindDataSource . class . getSimpleName ( ) ) ; throw ( new InvalidKindForAnnotationException ( msg ) ) ; } if ( ! databaseSchema . getSimpleName ( ) . toString ( ) . endsWith ( BindDataSourceBuilder . SUFFIX ) ) { String msg = String . format ( "Interface %s marked with @%s annotation must have a typeName with suffix \"" + BindDataSourceBuilder . SUFFIX + "\" to be used with @BindDataSource" , databaseSchema . getSimpleName ( ) . toString ( ) , BindDataSource . class . getSimpleName ( ) ) ; throw ( new InvalidNameException ( msg ) ) ; } String schemaFileName = AnnotationUtility . extractAsString ( databaseSchema , BindDataSource . class , AnnotationAttributeType . FILENAME ) ; int schemaVersion = AnnotationUtility . extractAsInt ( databaseSchema , BindDataSource . class , AnnotationAttributeType . VERSION ) ; boolean generateLog = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSource . class , AnnotationAttributeType . GENERATE_LOG ) ; boolean generateSchema = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSource . class , AnnotationAttributeType . GENERATE_SCHEMA ) ; boolean generateAsyncTask = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSource . class , AnnotationAttributeType . GENERATE_ASYNC_TASK ) ; boolean generateCursorWrapper = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSource . class , AnnotationAttributeType . GENERATE_CURSOR_WRAPPER ) ; boolean generateRx = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSource . class , AnnotationAttributeType . GENERATE_RX ) ; List < String > daoIntoDataSource = AnnotationUtility . extractAsClassNameArray ( elementUtils , databaseSchema , BindDataSource . class , AnnotationAttributeType . DAO_SET ) ; String configCursorFactory = ReferredClasses . NO_CURSOR_FACTORY_CLASS_NAME ; String configDatabaseErrorHandler = ReferredClasses . NO_DATABASE_ERROR_HANDLER_CLASS_NAME ; String configDatabaseLifecycleHandler = ReferredClasses . NO_DATABASE_LIFECYCLE_HANDLER_CLASS_NAME ; boolean configInMemory = false ; boolean configLogEnabled = true ; String configPopulatorClass = NoPopulator . class . getName ( ) ; BindDataSourceOptions dataSourceOptionsAnnotation = databaseSchema . getAnnotation ( BindDataSourceOptions . class ) ; if ( dataSourceOptionsAnnotation != null ) { configInMemory = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSourceOptions . class , AnnotationAttributeType . IN_MEMORY ) ; configLogEnabled = AnnotationUtility . extractAsBoolean ( databaseSchema , BindDataSourceOptions . class , AnnotationAttributeType . LOG_ENABLED ) ; configPopulatorClass = AnnotationUtility . extractAsClassName ( databaseSchema , BindDataSourceOptions . class , AnnotationAttributeType . POPULATOR ) ; configCursorFactory = AnnotationUtility . extractAsClassName ( databaseSchema , BindDataSourceOptions . class , AnnotationAttributeType . CURSOR_FACTORY ) ; configDatabaseLifecycleHandler = AnnotationUtility . extractAsClassName ( databaseSchema , BindDataSourceOptions . class , AnnotationAttributeType . DATABASE_LIFECYCLE_HANDLER ) ; } SQLiteDatabaseSchema schema = new SQLiteDatabaseSchema ( ( TypeElement ) databaseSchema , schemaFileName , schemaVersion , generateSchema , generateLog , generateAsyncTask , generateCursorWrapper , generateRx , daoIntoDataSource , configCursorFactory , configDatabaseErrorHandler , configDatabaseLifecycleHandler , configInMemory , configLogEnabled , configPopulatorClass ) ; BindContentProvider contentProviderAnnotation = databaseSchema . getAnnotation ( BindContentProvider . class ) ; if ( contentProviderAnnotation != null ) { schema . generateContentProvider = true ; schema . contentProvider = new SQLiteModelContentProvider ( ) ; schema . contentProvider . authority = contentProviderAnnotation . authority ( ) ; } else { schema . generateContentProvider = false ; } return schema ; }
Creates the data source.

@param databaseSchema
the database schema
@return databaseSchema