EntityProcessor.kt revision aa82fce1d73394bdc7f4c2510cf94a3572032b24
11600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar/*
21600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Copyright (C) 2016 The Android Open Source Project
31600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar *
41600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
51600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * you may not use this file except in compliance with the License.
61600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * You may obtain a copy of the License at
71600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar *
81600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
91600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar *
101600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Unless required by applicable law or agreed to in writing, software
111600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
121600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * See the License for the specific language governing permissions and
141600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * limitations under the License.
151600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar */
161600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar
171600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarpackage com.android.support.room.processor
181600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar
19faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyarimport com.android.support.room.vo.Entity
200fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyarimport com.google.auto.common.AnnotationMirrors
211600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.auto.common.MoreElements
221600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport javax.lang.model.element.TypeElement
231600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar
24aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyarclass EntityProcessor(baseContext: Context, val element: TypeElement) {
25aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar    val context = baseContext.fork(element)
261600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar
27aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar    fun process(): Entity {
28faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar        context.checker.hasAnnotation(element, com.android.support.room.Entity::class,
298bad027c789d3fb3da8e68fa0154f2a24ccc2865Yigit Boyar                ProcessorErrors.ENTITY_MUST_BE_ANNOTATED_WITH_ENTITY)
30aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar        val pojo = PojoProcessor(context, element).process()
310fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar        val annotation = MoreElements.getAnnotationMirror(element,
32faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar                com.android.support.room.Entity::class.java).orNull()
330fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar        val tableName : String
34faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar        if (annotation != null) {
350fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar            val annotationValue = AnnotationMirrors
36faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar                    .getAnnotationValue(annotation, "tableName").value.toString()
370fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar            if (annotationValue == "") {
380fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar                tableName = element.simpleName.toString()
390fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar            } else {
400fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar                tableName = annotationValue
410fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar            }
420fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar        } else {
430fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar            tableName = element.simpleName.toString()
440fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar        }
45faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar        context.checker.notBlank(tableName, element,
46faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar                ProcessorErrors.ENTITY_TABLE_NAME_CANNOT_BE_EMPTY)
4713a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar        val entity = Entity(element, tableName, pojo.type, pojo.fields)
48faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar        context.checker.check(entity.primaryKeys.isNotEmpty(), element,
49faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar                ProcessorErrors.MISSING_PRIMARY_KEY)
50e6325fbeaa2e6759496ea2ca9a4d3d958df690d7Yigit Boyar        return entity
511600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar    }
521600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar}
53