Skip to content

Commit 371bf7f

Browse files
committed
Added alpha support for ORMLite DAOs.
1 parent ae793d1 commit 371bf7f

28 files changed

Lines changed: 385 additions & 89 deletions

AndroidAnnotations/.settings/org.eclipse.core.resources.prefs

Lines changed: 0 additions & 3 deletions
This file was deleted.

AndroidAnnotations/.settings/org.eclipse.m2e.core.prefs

Lines changed: 0 additions & 5 deletions
This file was deleted.

AndroidAnnotations/.settings/org.maven.ide.eclipse.prefs

Lines changed: 0 additions & 8 deletions
This file was deleted.

AndroidAnnotations/androidannotations/.settings/org.eclipse.core.resources.prefs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#Thu Mar 15 10:12:07 CET 2012
21
eclipse.preferences.version=1
32
encoding//src/main/java=UTF-8
43
encoding//src/main/resources=UTF-8

AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import com.googlecode.androidannotations.annotations.NonConfigurationInstance;
6464
import com.googlecode.androidannotations.annotations.OptionsItem;
6565
import com.googlecode.androidannotations.annotations.OptionsMenu;
66+
import com.googlecode.androidannotations.annotations.OrmLiteDao;
6667
import com.googlecode.androidannotations.annotations.RoboGuice;
6768
import com.googlecode.androidannotations.annotations.RootContext;
6869
import com.googlecode.androidannotations.annotations.SystemService;
@@ -142,6 +143,7 @@
142143
import com.googlecode.androidannotations.processing.NonConfigurationInstanceProcessor;
143144
import com.googlecode.androidannotations.processing.OptionsItemProcessor;
144145
import com.googlecode.androidannotations.processing.OptionsMenuProcessor;
146+
import com.googlecode.androidannotations.processing.OrmLiteDaoProcessor;
145147
import com.googlecode.androidannotations.processing.PrefProcessor;
146148
import com.googlecode.androidannotations.processing.ResProcessor;
147149
import com.googlecode.androidannotations.processing.RestServiceProcessor;
@@ -198,6 +200,7 @@
198200
import com.googlecode.androidannotations.validation.NonConfigurationInstanceValidator;
199201
import com.googlecode.androidannotations.validation.OptionsItemValidator;
200202
import com.googlecode.androidannotations.validation.OptionsMenuValidator;
203+
import com.googlecode.androidannotations.validation.OrmLiteDaoValidator;
201204
import com.googlecode.androidannotations.validation.PrefValidator;
202205
import com.googlecode.androidannotations.validation.ResValidator;
203206
import com.googlecode.androidannotations.validation.RestServiceValidator;
@@ -288,7 +291,8 @@
288291
FragmentByTag.class, //
289292
BeforeTextChange.class, //
290293
TextChange.class, //
291-
AfterTextChange.class //
294+
AfterTextChange.class, //
295+
OrmLiteDao.class //
292296
})
293297
@SupportedSourceVersion(SourceVersion.RELEASE_6)
294298
public class AndroidAnnotationProcessor extends AnnotatedAbstractProcessor {
@@ -456,6 +460,7 @@ private ModelValidator buildModelValidator(IRClass rClass, AndroidSystemServices
456460
modelValidator.register(new BeforeTextChangeValidator(processingEnv, rClass));
457461
modelValidator.register(new TextChangeValidator(processingEnv, rClass));
458462
modelValidator.register(new AfterTextChangeValidator(processingEnv, rClass));
463+
modelValidator.register(new OrmLiteDaoValidator(processingEnv, rClass));
459464
return modelValidator;
460465
}
461466

@@ -533,6 +538,7 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices
533538
modelProcessor.register(new TextChangeProcessor(processingEnv, rClass));
534539
modelProcessor.register(new BeforeTextChangeProcessor(processingEnv, rClass));
535540
modelProcessor.register(new AfterTextChangeProcessor(processingEnv, rClass));
541+
modelProcessor.register(new OrmLiteDaoProcessor());
536542
return modelProcessor;
537543
}
538544

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Copyright (C) 2010-2011 eBusiness Information, Excilys Group
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package com.googlecode.androidannotations.annotations;
17+
18+
import java.lang.annotation.ElementType;
19+
import java.lang.annotation.Retention;
20+
import java.lang.annotation.RetentionPolicy;
21+
import java.lang.annotation.Target;
22+
23+
/**
24+
* Should be used on custom classes to enable usage of AndroidAnnotations
25+
*
26+
* Any view related code should happen in an {@link AfterViews} annotated
27+
* method.<br>
28+
* <br>
29+
*
30+
* Most annotations are supported in {@link OrmLiteDao} classes
31+
*
32+
*/
33+
@Retention(RetentionPolicy.SOURCE)
34+
@Target(ElementType.FIELD)
35+
public @interface OrmLiteDao {
36+
37+
Class<?> model();
38+
39+
Class<?> helper();
40+
}

AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/CanonicalNameConstants.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@ public final class CanonicalNameConstants {
113113
public static final String ON_CONTENT_VIEW_AVAILABLE_EVENT = "roboguice.activity.event.OnContentViewAvailableEvent";
114114
public static final String ON_CREATE_EVENT = "roboguice.activity.event.OnCreateEvent";
115115

116+
/*
117+
* ORMLite
118+
*/
119+
public static final String DAO_MANAGER = "com.j256.ormlite.dao.DaoManager";
120+
public static final String CONNECTION_SOURCE = "com.j256.ormlite.support.ConnectionSource";
121+
public static final String OPEN_HELPER_MANAGER = "com.j256.ormlite.android.apptools.OpenHelperManager";
122+
public static final String SQL_EXCEPTION = "java.sql.SQLException";
123+
116124
private CanonicalNameConstants() {
117125
}
118126

AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/EBeansHolder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ public class Classes {
105105
public final JClass ON_CONTENT_VIEW_AVAILABLE_EVENT = refClass(CanonicalNameConstants.ON_CONTENT_VIEW_AVAILABLE_EVENT);
106106
public final JClass ON_CREATE_EVENT = refClass(CanonicalNameConstants.ON_CREATE_EVENT);
107107

108+
/*
109+
* OrmLite
110+
*/
111+
public final JClass CONNECTION_SOURCE = refClass(CanonicalNameConstants.CONNECTION_SOURCE);
112+
public final JClass OPEN_HELPER_MANAGER = refClass(CanonicalNameConstants.OPEN_HELPER_MANAGER);
113+
public final JClass DAO_MANAGER = refClass(CanonicalNameConstants.DAO_MANAGER);
114+
public final JClass SQL_EXCEPTION = refClass(CanonicalNameConstants.SQL_EXCEPTION);
108115
}
109116

110117
private final Map<Element, EBeanHolder> EBeanHolders = new HashMap<Element, EBeanHolder>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/**
2+
* Copyright (C) 2010-2011 eBusiness Information, Excilys Group
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package com.googlecode.androidannotations.processing;
17+
18+
import static com.sun.codemodel.JExpr.ref;
19+
20+
import java.lang.annotation.Annotation;
21+
22+
import javax.lang.model.element.Element;
23+
import javax.lang.model.type.MirroredTypeException;
24+
import javax.lang.model.type.TypeMirror;
25+
26+
import com.googlecode.androidannotations.annotations.OrmLiteDao;
27+
import com.googlecode.androidannotations.helper.CanonicalNameConstants;
28+
import com.googlecode.androidannotations.processing.EBeansHolder.Classes;
29+
import com.sun.codemodel.JBlock;
30+
import com.sun.codemodel.JCodeModel;
31+
import com.sun.codemodel.JExpr;
32+
import com.sun.codemodel.JExpression;
33+
import com.sun.codemodel.JTryBlock;
34+
35+
public class OrmLiteDaoProcessor implements ElementProcessor {
36+
37+
@Override
38+
public Class<? extends Annotation> getTarget() {
39+
return OrmLiteDao.class;
40+
}
41+
42+
@Override
43+
public void process(Element element, JCodeModel codeModel, EBeansHolder eBeansHolder) {
44+
EBeanHolder holder = eBeansHolder.getEnclosingEBeanHolder(element);
45+
Classes classes = holder.classes();
46+
47+
String fieldName = element.getSimpleName().toString();
48+
OrmLiteDao annotation = element.getAnnotation(OrmLiteDao.class);
49+
50+
// Get model object class
51+
TypeMirror modelObjectTypeMirror = null;
52+
try {
53+
annotation.model();
54+
} catch (MirroredTypeException mte) {
55+
modelObjectTypeMirror = mte.getTypeMirror();
56+
}
57+
58+
// Get database hleper class
59+
TypeMirror databaseHelperTypeMirror = null;
60+
try {
61+
annotation.helper();
62+
} catch (MirroredTypeException mte) {
63+
databaseHelperTypeMirror = mte.getTypeMirror();
64+
}
65+
66+
JBlock methodBody = holder.init.body();
67+
68+
// get connection source
69+
String connectionSourceRef = "_aa_connection_source";
70+
methodBody.decl(classes.CONNECTION_SOURCE, connectionSourceRef);
71+
JExpression dbHelperExpr = holder.refClass(databaseHelperTypeMirror.toString()).dotclass();
72+
methodBody.assign(ref(connectionSourceRef), holder.refClass(CanonicalNameConstants.OPEN_HELPER_MANAGER).staticInvoke("getHelper").arg(ref("context_")).arg(dbHelperExpr).invoke("getConnectionSource"));
73+
74+
// create dao from dao manager
75+
JTryBlock tryBlock = methodBody._try();
76+
tryBlock.body().assign(ref(fieldName), holder.refClass(CanonicalNameConstants.DAO_MANAGER).staticInvoke("createDao").arg(JExpr.ref(connectionSourceRef)).arg(holder.refClass(modelObjectTypeMirror.toString()).dotclass()));
77+
tryBlock._catch(classes.SQL_EXCEPTION);
78+
}
79+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* Copyright (C) 2010-2011 eBusiness Information, Excilys Group
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package com.googlecode.androidannotations.validation;
17+
18+
import java.lang.annotation.Annotation;
19+
20+
import javax.annotation.processing.ProcessingEnvironment;
21+
import javax.lang.model.element.Element;
22+
23+
import com.googlecode.androidannotations.annotations.OrmLiteDao;
24+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
25+
import com.googlecode.androidannotations.helper.IdValidatorHelper;
26+
import com.googlecode.androidannotations.model.AnnotationElements;
27+
import com.googlecode.androidannotations.rclass.IRClass;
28+
29+
public class OrmLiteDaoValidator implements ElementValidator {
30+
31+
private IdValidatorHelper validatorHelper;
32+
private IdAnnotationHelper annotationHelper;
33+
34+
public OrmLiteDaoValidator(ProcessingEnvironment processingEnv, IRClass rClass) {
35+
annotationHelper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
36+
validatorHelper = new IdValidatorHelper(annotationHelper);
37+
}
38+
39+
@Override
40+
public Class<? extends Annotation> getTarget() {
41+
return OrmLiteDao.class;
42+
}
43+
44+
@Override
45+
public boolean validate(Element element, AnnotationElements validatedElements) {
46+
47+
IsValid valid = new IsValid();
48+
49+
validatorHelper.enclosingElementHasEnhancedViewSupportAnnotation(element, validatedElements, valid);
50+
51+
validatorHelper.isNotPrivate(element, valid);
52+
53+
return valid.isValid();
54+
}
55+
56+
}

0 commit comments

Comments
 (0)