diff --git a/PeerAtCodeParser.jar b/PeerAtCodeParser.jar index 8e52e49..c01b4b8 100644 Binary files a/PeerAtCodeParser.jar and b/PeerAtCodeParser.jar differ diff --git a/src/dev/peerat/mapping/TreasureProcessor.java b/src/dev/peerat/mapping/TreasureProcessor.java index c217123..cb133f8 100644 --- a/src/dev/peerat/mapping/TreasureProcessor.java +++ b/src/dev/peerat/mapping/TreasureProcessor.java @@ -92,7 +92,11 @@ public class TreasureProcessor extends AbstractProcessor{ if(provider == null) return false; - provider.init(output); + try { + provider.init(output); + } catch (Exception e) { + throw new RuntimeException(e); + } for(Entry classes : map.entrySet()){ Class treasure = classes.getValue().find((element) -> { @@ -142,6 +146,7 @@ public class TreasureProcessor extends AbstractProcessor{ } } } + provider.complete(); return true; } diff --git a/src/dev/peerat/mapping/providers/Provider.java b/src/dev/peerat/mapping/providers/Provider.java index e3363b4..bf5d4ca 100644 --- a/src/dev/peerat/mapping/providers/Provider.java +++ b/src/dev/peerat/mapping/providers/Provider.java @@ -7,11 +7,13 @@ import dev.peerat.parser.java.Function; public interface Provider{ - void init(File file); + void init(File file) throws Exception; void mapTreasure(Class clazz); void mapBottle(Class clazz, Function function); void mapUses(Class clazz, Function function); + + void complete(); } diff --git a/src/dev/peerat/mapping/providers/mysql/MySQLRequestBuilder.java b/src/dev/peerat/mapping/providers/mysql/MySQLRequestBuilder.java index 94cd4a7..7ab9443 100644 --- a/src/dev/peerat/mapping/providers/mysql/MySQLRequestBuilder.java +++ b/src/dev/peerat/mapping/providers/mysql/MySQLRequestBuilder.java @@ -3,6 +3,7 @@ package dev.peerat.mapping.providers.mysql; import java.util.ArrayList; import java.util.List; +import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Value; import dev.peerat.parser.java.Value.BiValue; import dev.peerat.parser.java.Value.LambdaValue; @@ -10,14 +11,21 @@ import dev.peerat.parser.java.Value.MethodCallValue; public class MySQLRequestBuilder{ + private Function function; + private List calls; private String select; private String where; - public MySQLRequestBuilder(List calls){ + public MySQLRequestBuilder(Function function, List calls){ + this.function = function; this.calls = calls; } + public Function getFunction(){ + return this.function; + } + private String toStringOperation(MethodCallValue value){ String method = value.getToken().getValue(); if(method.equals("selectAll()")){ diff --git a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java index 757c79f..f68a7da 100644 --- a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java +++ b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java @@ -1,12 +1,18 @@ package dev.peerat.mapping.providers.mysql; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import dev.peerat.mapping.providers.Provider; import dev.peerat.mapping.providers.ProviderManager; +import dev.peerat.parser.ElementBuilder.Builder; +import dev.peerat.parser.Token; +import dev.peerat.parser.java.BuildedJavaFile; import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Value; @@ -20,14 +26,19 @@ public class MySQLProvider implements Provider{ } private List treasures; + private File repo; + private List requests; public MySQLProvider(){ this.treasures = new ArrayList<>(); + this.requests = new ArrayList<>(); } @Override - public void init(File file){ - + public void init(File file) throws Exception{ + repo = new File(file, "/dev/peerat/mapping/mysql/MySQlRepository.java"); + repo.getParentFile().mkdirs(); + repo.createNewFile(); } @@ -48,8 +59,8 @@ public class MySQLProvider implements Provider{ call = (MethodCallValue) call.base(); } list.add(0, call); - MySQLRequestBuilder builder = new MySQLRequestBuilder(list); - throw new RuntimeException(builder.build()); + MySQLRequestBuilder builder = new MySQLRequestBuilder(function, list); + this.requests.add(builder); } } @@ -58,4 +69,39 @@ public class MySQLProvider implements Provider{ } + + @Override + public void complete(){ + try{ + BuildedJavaFile file = new BuildedJavaFile(); + file.setPackage("dev.peerat.mapping.sql.MySQlRepository"); +// +// file.addImport(""); +// + Class clazz = new Class(null, new Token(0,0,"MySQlRepository",null)); + + for(MySQLRequestBuilder request : this.requests){ + Function base = request.getFunction(); + Function func = new Function( + null, + Modifier.PUBLIC, + null, + new Token(0,0,base.getReturnType().getValue(), null), + new Token(0,0,base.getName().getValue(),null), + base.getParameters()); + clazz.addFunction(func); + } + + file.setClass(clazz); + + Builder builder = new Builder(); + file.build().build(builder); + BufferedWriter writer = new BufferedWriter(new FileWriter(this.repo)); + builder.build(writer); + writer.flush(); + writer.close(); + }catch(Exception ex){ + throw new RuntimeException(ex); + } + } } diff --git a/src/dev/peerat/parser/java/BuildedJavaFile.java b/src/dev/peerat/parser/java/BuildedJavaFile.java new file mode 100644 index 0000000..10a9cc2 --- /dev/null +++ b/src/dev/peerat/parser/java/BuildedJavaFile.java @@ -0,0 +1,38 @@ +package dev.peerat.parser.java; + +import dev.peerat.parser.Bag; +import dev.peerat.parser.Token; + +public class BuildedJavaFile{ + + private JavaFile file; + + public BuildedJavaFile(){ + this.file = new JavaFile(); + } + + public BuildedJavaFile setPackage(String value){ + Bag bag = new Bag(); + bag.set(new Token(0, 0, value, null)); + this.file.setPackage(bag); + return this; + } + + public BuildedJavaFile addImport(String... values){ + for(String value : values){ + Import imp = new Import(false, new Token(0,0,value,null)); + this.file.addImport(imp); + } + return this; + } + + public BuildedJavaFile setClass(Class clazz){ + this.file.addClass(clazz); + return this; + } + + public JavaFile build(){ + return this.file; + } + +}