Search in sources :

Example 1 with BindContentProvider

use of com.abubusoft.kripton.android.annotation.BindContentProvider in project kripton by xcesco.

the class BindDataSourceSubProcessor method createDataSource.

/**
 * @param databaseSchema
 * @return databaseSchema
 */
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 = NoCursorFactory.class.getName();
    String configDatabaseErrorHandler = NoDatabaseErrorHandler.class.getName();
    String configDatabaseLifecycleHandler = NoDatabaseLifecycleHandler.class.getName();
    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;
}
Also used : SQLiteDatabaseSchema(com.abubusoft.kripton.processor.sqlite.model.SQLiteDatabaseSchema) BindDataSource(com.abubusoft.kripton.android.annotation.BindDataSource) InvalidNameException(com.abubusoft.kripton.processor.exceptions.InvalidNameException) BindDataSourceOptions(com.abubusoft.kripton.android.annotation.BindDataSourceOptions) BindContentProvider(com.abubusoft.kripton.android.annotation.BindContentProvider) InvalidKindForAnnotationException(com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException) SQLiteModelContentProvider(com.abubusoft.kripton.processor.sqlite.model.SQLiteModelContentProvider)

Aggregations

BindContentProvider (com.abubusoft.kripton.android.annotation.BindContentProvider)1 BindDataSource (com.abubusoft.kripton.android.annotation.BindDataSource)1 BindDataSourceOptions (com.abubusoft.kripton.android.annotation.BindDataSourceOptions)1 InvalidKindForAnnotationException (com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException)1 InvalidNameException (com.abubusoft.kripton.processor.exceptions.InvalidNameException)1 SQLiteDatabaseSchema (com.abubusoft.kripton.processor.sqlite.model.SQLiteDatabaseSchema)1 SQLiteModelContentProvider (com.abubusoft.kripton.processor.sqlite.model.SQLiteModelContentProvider)1