1 package spoon.examples.dbaccess.processing; 2 3 import spoon.examples.dbaccess.annotation.DBAccess; 4 import spoon.examples.dbaccess.annotation.DBType; 5 import spoon.examples.dbaccess.template.DBCodeTemplate; 6 import spoon.processing.AbstractAnnotationProcessor; 7 import spoon.processing.Severity; 8 import spoon.reflect.Factory; 9 import spoon.reflect.declaration.CtClass; 10 import spoon.reflect.declaration.CtConstructor; 11 import spoon.reflect.declaration.CtMethod; 12 import spoon.template.Substitution; 13 14 public class DBAccessProcessor extends 15 AbstractAnnotationProcessor<DBAccess, CtClass<?>> { 16 17 public void process(DBAccess dbAccess, CtClass<?> target) { 18 Factory f = target.getFactory(); 19 DBType t = dbAccess.type(); 20 if (t != DBType.RELATIONAL) 21 f.getEnvironment().report( 22 this, 23 Severity.ERROR, 24 target.getAnnotation(f.Type().createReference( 25 DBAccess.class)), "unsupported DB system"); 26 27 DBCodeTemplate template = new DBCodeTemplate(f, dbAccess.database(), 28 dbAccess.username(), dbAccess.password(), dbAccess.tableName()); 29 Substitution.insertField(target, template, f.Template().get( 30 DBCodeTemplate.class).getField("connection")); 31 for (CtConstructor c : target.getConstructors()) { 32 c.getBody().insertBegin( 33 Substitution.substituteMethodBody(target, template, 34 "initializerCode")); 35 } 36 for (CtMethod<?> m : target.getMethods()) { 37 template._columnName_ = m.getSimpleName().substring(3) 38 .toLowerCase(); 39 m.getBody().replace( 40 Substitution.substituteMethodBody(target, template, 41 "accessCode")); 42 } 43 } 44 45 } 46 | Popular Tags |