Search in sources :

Example 1 with M2MEntity

use of com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity in project kripton by xcesco.

the class BindDataSourceSubProcessor method generateEntityName.

/**
 * dao or entity can be null
 *
 * @param dao
 * @param entity
 * @return
 */
public static String generateEntityName(SQLiteDaoDefinition dao, SQLiteEntity entity) {
    String entityName;
    if (entity == null) {
        M2MEntity m2mEntity = M2MEntity.extractEntityManagedByDAO(dao.getElement());
        entityName = m2mEntity.getSimpleName();
    } else {
        entityName = entity.getSimpleName();
    }
    return entityName;
}
Also used : M2MEntity(com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity)

Example 2 with M2MEntity

use of com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity in project kripton by xcesco.

the class BindDataSourceSubProcessor method createSQLDaoDefinition.

/**
 * Create DAO definition
 *
 * @param globalBeanElements
 * @param globalDaoElements
 * @param generatedDaoParts
 * @param daoItem
 */
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());
        }
    }
    // set.
    if (!globalBeanElements.containsKey(currentDaoDefinition.getEntityClassName()) && !isGeneratedEntity(currentDaoDefinition.getEntityClassName())) {
        throw (new InvalidBeanTypeException(currentDaoDefinition));
    }
    schema.add(currentDaoDefinition);
    fillMethods(currentDaoDefinition, daoElement);
    /*
		 * if (generatedDaoPart != null) {
		 * currentDaoDefinition.addImplementedInterface(TypeUtility.typeName(
		 * generatedDaoPart)); fillMethods(currentDaoDefinition,
		 * generatedDaoPart); }
		 */
    // 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));
    }
}
Also used : BindDaoMany2Many(com.abubusoft.kripton.android.annotation.BindDaoMany2Many) TypeElement(javax.lang.model.element.TypeElement) Element(javax.lang.model.element.Element) GeneratedTypeElement(com.abubusoft.kripton.processor.element.GeneratedTypeElement) ExecutableElement(javax.lang.model.element.ExecutableElement) InvalidBeanTypeException(com.abubusoft.kripton.processor.exceptions.InvalidBeanTypeException) BindContentProvider(com.abubusoft.kripton.android.annotation.BindContentProvider) InvalidKindForAnnotationException(com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException) DaoDefinitionWithoutAnnotatedMethodException(com.abubusoft.kripton.processor.exceptions.DaoDefinitionWithoutAnnotatedMethodException) SQLiteDaoDefinition(com.abubusoft.kripton.processor.sqlite.model.SQLiteDaoDefinition) BindDao(com.abubusoft.kripton.android.annotation.BindDao) GeneratedTypeElement(com.abubusoft.kripton.processor.element.GeneratedTypeElement) BindGeneratedDao(com.abubusoft.kripton.android.annotation.BindGeneratedDao) M2MEntity(com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity) BindContentProviderPath(com.abubusoft.kripton.android.annotation.BindContentProviderPath)

Example 3 with M2MEntity

use of com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity in project kripton by xcesco.

the class BindM2MBuilder method generate.

public static Pair<Set<GeneratedTypeElement>, Set<GeneratedTypeElement>> generate(Filer filer, M2MModel model) throws Exception {
    entityResult.clear();
    daoResult.clear();
    BindM2MBuilder visitor = new BindM2MBuilder(filer);
    for (M2MEntity item : model.getEntities()) {
        visitor.generate(item);
    }
    Pair<Set<GeneratedTypeElement>, Set<GeneratedTypeElement>> result = new Pair<>();
    result.value0 = entityResult;
    result.value1 = daoResult;
    return result;
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) M2MEntity(com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity) Pair(com.abubusoft.kripton.common.Pair)

Example 4 with M2MEntity

use of com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity in project kripton by xcesco.

the class BindDataSourceSubProcessor method generateEntityQualifiedName.

public static String generateEntityQualifiedName(SQLiteDaoDefinition dao, SQLiteEntity entity) {
    String entityName;
    if (entity == null) {
        M2MEntity m2mEntity = M2MEntity.extractEntityManagedByDAO(dao.getElement());
        entityName = m2mEntity.getQualifiedName();
    } else {
        entityName = entity.getName().toString();
    }
    return entityName;
}
Also used : M2MEntity(com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity)

Example 5 with M2MEntity

use of com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity in project kripton by xcesco.

the class BindMany2ManySubProcessor method process.

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    try {
        model = new M2MModel();
        for (Element daoItem : roundEnv.getElementsAnnotatedWith(BindDaoMany2Many.class)) {
            if (daoItem.getKind() != ElementKind.INTERFACE) {
                String msg = String.format("%s %s, only interface can be annotated with @%s annotation", daoItem.getKind(), daoItem, BindDaoMany2Many.class.getSimpleName());
                throw (new InvalidKindForAnnotationException(msg));
            }
            M2MEntity entity = M2MEntity.extractEntityManagedByDAO((TypeElement) daoItem);
            model.entityAdd(entity);
        }
        result = BindM2MBuilder.generate(filer, model);
    } catch (Exception e) {
        String msg = e.getMessage();
        error(null, msg);
        if (DEBUG_MODE) {
            logger.log(Level.SEVERE, msg);
            e.printStackTrace();
        }
    }
    return true;
}
Also used : BindDaoMany2Many(com.abubusoft.kripton.android.annotation.BindDaoMany2Many) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement) GeneratedTypeElement(com.abubusoft.kripton.processor.element.GeneratedTypeElement) M2MModel(com.abubusoft.kripton.processor.bind.model.many2many.M2MModel) M2MEntity(com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity) InvalidKindForAnnotationException(com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException) InvalidKindForAnnotationException(com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException)

Aggregations

M2MEntity (com.abubusoft.kripton.processor.bind.model.many2many.M2MEntity)5 BindDaoMany2Many (com.abubusoft.kripton.android.annotation.BindDaoMany2Many)2 GeneratedTypeElement (com.abubusoft.kripton.processor.element.GeneratedTypeElement)2 InvalidKindForAnnotationException (com.abubusoft.kripton.processor.exceptions.InvalidKindForAnnotationException)2 Element (javax.lang.model.element.Element)2 TypeElement (javax.lang.model.element.TypeElement)2 BindContentProvider (com.abubusoft.kripton.android.annotation.BindContentProvider)1 BindContentProviderPath (com.abubusoft.kripton.android.annotation.BindContentProviderPath)1 BindDao (com.abubusoft.kripton.android.annotation.BindDao)1 BindGeneratedDao (com.abubusoft.kripton.android.annotation.BindGeneratedDao)1 Pair (com.abubusoft.kripton.common.Pair)1 M2MModel (com.abubusoft.kripton.processor.bind.model.many2many.M2MModel)1 DaoDefinitionWithoutAnnotatedMethodException (com.abubusoft.kripton.processor.exceptions.DaoDefinitionWithoutAnnotatedMethodException)1 InvalidBeanTypeException (com.abubusoft.kripton.processor.exceptions.InvalidBeanTypeException)1 SQLiteDaoDefinition (com.abubusoft.kripton.processor.sqlite.model.SQLiteDaoDefinition)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 ExecutableElement (javax.lang.model.element.ExecutableElement)1