commit 3f80808e9c36dbe847110fb1282a3ad9636b31eb Author: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed Jul 5 10:38:16 2023 +0200 First Commit, ORM V1 diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..c280ec5 --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..54ac269 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.settings/ +bin/ +.project diff --git a/PeerAtCodeParser.jar b/PeerAtCodeParser.jar new file mode 100644 index 0000000..690d957 Binary files /dev/null and b/PeerAtCodeParser.jar differ diff --git a/src/META-INF/services/javax.annotation.processing.Processor b/src/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 0000000..847cf76 --- /dev/null +++ b/src/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +be.jeffcheasey88.peeratcode.mapping.TreasureProcessor \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/mapping/Treasure.java b/src/be/jeffcheasey88/peeratcode/mapping/Treasure.java new file mode 100644 index 0000000..107d4e3 --- /dev/null +++ b/src/be/jeffcheasey88/peeratcode/mapping/Treasure.java @@ -0,0 +1,12 @@ +package be.jeffcheasey88.peeratcode.mapping; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.SOURCE) +@Target(ElementType.TYPE) +public @interface Treasure { + +} diff --git a/src/be/jeffcheasey88/peeratcode/mapping/TreasureProcessor.java b/src/be/jeffcheasey88/peeratcode/mapping/TreasureProcessor.java new file mode 100644 index 0000000..7594e11 --- /dev/null +++ b/src/be/jeffcheasey88/peeratcode/mapping/TreasureProcessor.java @@ -0,0 +1,92 @@ +package be.jeffcheasey88.peeratcode.mapping; + +import java.io.File; +import java.io.FileWriter; +import java.io.Writer; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map.Entry; +import java.util.Set; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Messager; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic.Kind; +import javax.tools.FileObject; +import javax.tools.StandardLocation; + +public class TreasureProcessor extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv){ + + Messager messager = processingEnv.getMessager(); + + + for(TypeElement annotation : annotations){ + for(Element element : roundEnv.getElementsAnnotatedWith(annotation)){ + messager.printMessage(Kind.WARNING, "["+roundEnv.processingOver()+"] I tried", element); + for(Entry opt : processingEnv.getOptions().entrySet()){ + messager.printMessage(Kind.WARNING, opt.getKey()+" -> "+opt.getValue(), element); + } + + File file = null; + try { +// FileObject resource = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, "", ""); +// messager.printMessage(Kind.WARNING, resource.toUri().toString(), element); +// resource.delete(); + + FileObject resource = processingEnv.getFiler().getResource(StandardLocation.SOURCE_OUTPUT, "", ""); + File clazz = new File(resource.toUri().toString().substring(6)+"/be/jeffcheasey88/peeratcode/model/Badge.class"); + if(clazz.exists()){ + messager.printMessage(Kind.WARNING, "["+roundEnv.processingOver()+"] I was created it", element); + return true; + } + + file = new File(resource.toUri().toString().substring(6)+"/be/jeffcheasey88/peeratcode/model/Badge.java"); + if(!file.exists()){ + File parent = file.getParentFile(); + if(!parent.exists()) parent.mkdirs(); + file.createNewFile(); + } + +// JavaFileObject resource = processingEnv.getFiler().createSourceFile("be/jeffcheasey88/peeratcode/model/"+element.getSimpleName()); + Writer writer = new FileWriter(file); + writer.append("package be.jeffcheasey88.peeratcode.model;\n\n"); + writer.append("public class Badge{\n"); + writer.append("public Badge(){ }\n"); + writer.append("}\n"); + writer.flush(); + writer.close(); + + Process p = Runtime.getRuntime().exec("javac be/jeffcheasey88/peeratcode/model/Badge.java", new String[0], new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\.generated")); + p.waitFor(); + + file.delete(); + +// Runtime.getRuntime().exec("copy /Y \"C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\.generated\\be\\jeffcheasey88\\peeratcode\\model\\Badge.class\" \"./../bin/be/jeffcheasey88/peeratcode/model/Badge.class\"").waitFor(); + + messager.printMessage(Kind.WARNING, "["+roundEnv.processingOver()+"] We created it !", element); + } catch (Exception e) { + e.printStackTrace(); + messager.printMessage(Kind.WARNING, "["+roundEnv.processingOver()+"] We not created it ! ("+file+") "+e.getMessage(), element); + } + } + } + + return true; + } + + @Override + public Set getSupportedAnnotationTypes(){ + return new HashSet<>(Arrays.asList(Treasure.class.getCanonicalName())); + } + + @Override + public SourceVersion getSupportedSourceVersion(){ + return SourceVersion.RELEASE_8; + } +} \ No newline at end of file