samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java
changeset 355 d1e7424dc988
child 357 837370f791ba
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java	Tue Jun 01 12:08:47 2010 +0200
     1.3 @@ -0,0 +1,53 @@
     1.4 +/*
     1.5 + * To change this template, choose Tools | Templates
     1.6 + * and open the template in the editor.
     1.7 + */
     1.8 +
     1.9 +package org.apidesign.livedb.impl;
    1.10 +
    1.11 +import java.io.IOException;
    1.12 +import java.io.Writer;
    1.13 +import java.util.Set;
    1.14 +import javax.annotation.processing.AbstractProcessor;
    1.15 +import javax.annotation.processing.Processor;
    1.16 +import javax.annotation.processing.RoundEnvironment;
    1.17 +import javax.annotation.processing.SupportedAnnotationTypes;
    1.18 +import javax.annotation.processing.SupportedSourceVersion;
    1.19 +import javax.lang.model.SourceVersion;
    1.20 +import javax.lang.model.element.Element;
    1.21 +import javax.lang.model.element.PackageElement;
    1.22 +import javax.lang.model.element.TypeElement;
    1.23 +import javax.tools.JavaFileObject;
    1.24 +import org.apidesign.livedb.LiveDB;
    1.25 +import org.openide.util.lookup.ServiceProvider;
    1.26 +
    1.27 +/**
    1.28 + *
    1.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    1.30 + */
    1.31 +@SupportedAnnotationTypes("org.apidesign.livedb.LiveDB")
    1.32 +@SupportedSourceVersion(SourceVersion.RELEASE_6)
    1.33 +@ServiceProvider(service=Processor.class)
    1.34 +public class LiveDBProcessor extends AbstractProcessor {
    1.35 +    @Override
    1.36 +    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    1.37 +        for (Element e : roundEnv.getElementsAnnotatedWith(LiveDB.class)) {
    1.38 +            LiveDB db = e.getAnnotation(LiveDB.class);
    1.39 +            PackageElement pe = (PackageElement)e;
    1.40 +            String clsName = pe.getQualifiedName().toString() + "." + db.classname();
    1.41 +            try {
    1.42 +                JavaFileObject src = processingEnv.getFiler().createSourceFile(clsName, pe);
    1.43 +                Writer w = src.openWriter();
    1.44 +                w.append("package " + pe.getQualifiedName() + ";\n");
    1.45 +                w.append("class " + db.classname() + " {\n");
    1.46 +                w.append("  public String " + db.field() + ";\n");
    1.47 +                w.append("}");
    1.48 +                w.close();
    1.49 +            } catch (IOException ex) {
    1.50 +                throw new IllegalStateException(ex);
    1.51 +            }
    1.52 +        }
    1.53 +        return true;
    1.54 +    }
    1.55 +
    1.56 +}