protected void createSQLDaoDefinition ( SQLiteDatabaseSchema schema , final Map < String , TypeElement > globalBeanElements , final Map < String , TypeElement > globalDaoElements , String daoItem ) { Element daoElement = globalDaoElements . get ( daoItem ) ; if ( daoElement . getKind ( ) != ElementKind . INTERFACE ) { String msg = String . format ( "Class %s: only interfaces can be annotated with @%s annotation" , daoElement . getSimpleName ( ) . toString ( ) , BindDao . class . getSimpleName ( ) ) ; throw ( new InvalidKindForAnnotationException ( msg ) ) ; } M2MEntity entity = M2MEntity . extractEntityManagedByDAO ( ( TypeElement ) daoElement ) ; // add to current schema generated entities too for ( GeneratedTypeElement genItem : this . generatedEntities ) { if ( genItem . getQualifiedName ( ) . equals ( entity . getQualifiedName ( ) ) ) { schema . generatedEntities . add ( genItem ) ; } } boolean generated = daoElement . getAnnotation ( BindGeneratedDao . class ) != null ; final SQLiteDaoDefinition currentDaoDefinition = new SQLiteDaoDefinition ( schema , daoItem , ( TypeElement ) daoElement , entity . getClassName ( ) . toString ( ) , generated ) ; // content provider management BindContentProviderPath daoContentProviderPath = daoElement . getAnnotation ( BindContentProviderPath . class ) ; if ( daoContentProviderPath != null ) { currentDaoDefinition . contentProviderEnabled = true ; currentDaoDefinition . contentProviderPath = daoContentProviderPath . path ( ) ; currentDaoDefinition . contentProviderTypeName = daoContentProviderPath . typeName ( ) ; if ( StringUtils . isEmpty ( currentDaoDefinition . contentProviderTypeName ) ) { Converter < String , String > convert = CaseFormat . UPPER_CAMEL . converterTo ( CaseFormat . LOWER_UNDERSCORE ) ; AssertKripton . assertTrue ( currentDaoDefinition . getParent ( ) . contentProvider != null , "DAO '%s' has an inconsistent content provider definition, perhaps you forget to use @%s in data source interface?" , currentDaoDefinition . getElement ( ) . getQualifiedName ( ) , BindContentProvider . class . getSimpleName ( ) ) ; currentDaoDefinition . contentProviderTypeName = currentDaoDefinition . getParent ( ) . contentProvider . authority + "." + convert . convert ( currentDaoDefinition . getSimpleEntityClassName ( ) ) ; } } // dao is associated to an entity is not contained in analyzed class // set. if ( ! globalBeanElements . containsKey ( currentDaoDefinition . getEntityClassName ( ) ) && ! isGeneratedEntity ( currentDaoDefinition . getEntityClassName ( ) ) ) { throw ( new InvalidBeanTypeException ( currentDaoDefinition ) ) ; } schema . add ( currentDaoDefinition ) ; fillMethods ( currentDaoDefinition , daoElement ) ; // get @annotation associated to many 2 many relationship BindDaoMany2Many daoMany2Many = daoElement . getAnnotation ( BindDaoMany2Many . class ) ; // dao definition must have >0 method associated to query if ( currentDaoDefinition . getCollection ( ) . size ( ) == 0 && daoMany2Many == null ) { throw ( new DaoDefinitionWithoutAnnotatedMethodException ( currentDaoDefinition ) ) ; } }
Create DAO definition .