Load provider & receive Treasuers, SeaBottle & Uses

This commit is contained in:
jeffcheasey88 2023-11-08 15:42:58 +01:00
parent f0f22dae94
commit fbdfd71f00
4 changed files with 34 additions and 13 deletions

View file

@ -42,6 +42,13 @@ public class TreasureProcessor extends AbstractProcessor{
@Override @Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
try {
String[] providers = processingEnv.getOptions().get("treasure.providers").split(";");
for(String provider : providers) java.lang.Class.forName(provider);
}catch(Exception ex){
throw new RuntimeException(ex);
}
String[] sources = processingEnv.getOptions().get("treasure.source").split(";"); String[] sources = processingEnv.getOptions().get("treasure.source").split(";");
List<File> workingDir = new ArrayList<>(); List<File> workingDir = new ArrayList<>();
@ -80,12 +87,14 @@ public class TreasureProcessor extends AbstractProcessor{
}, values); }, values);
if(values.size() < 1) continue; if(values.size() < 1) continue;
InstanceValue ship = (InstanceValue)values.get(0); InstanceValue ship = (InstanceValue)values.get(0);
String providerType = ship.getParameters().get(0).getToken().getValue(); String providerType = ship.getParameters().get(0).getToken().getValue().replace("\"", "");
provider = ProviderManager.getInstance().getProvider(providerType); provider = ProviderManager.getInstance().getProvider(providerType);
} }
if(provider == null) return false; if(provider == null) return false;
provider.init(output);
for(Entry<File, JavaFile> classes : map.entrySet()){ for(Entry<File, JavaFile> classes : map.entrySet()){
Class treasure = classes.getValue().find((element) -> { Class treasure = classes.getValue().find((element) -> {
if(element instanceof Class){ if(element instanceof Class){
@ -96,6 +105,7 @@ public class TreasureProcessor extends AbstractProcessor{
}); });
if(treasure != null){ if(treasure != null){
provider.mapTreasure(treasure); provider.mapTreasure(treasure);
annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName(), e)));
List<Function> seaBottles = new ArrayList<>(); List<Function> seaBottles = new ArrayList<>();
treasure.findAll((element) -> { treasure.findAll((element) -> {
if(element instanceof Function){ if(element instanceof Function){
@ -103,7 +113,7 @@ public class TreasureProcessor extends AbstractProcessor{
return function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle return function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle
} }
return false; return false;
}, null); }, seaBottles);
for(Function function : seaBottles){ for(Function function : seaBottles){
provider.mapBottle(treasure, function); provider.mapBottle(treasure, function);
} }
@ -115,7 +125,7 @@ public class TreasureProcessor extends AbstractProcessor{
classes.getValue().findAll((element) -> { classes.getValue().findAll((element) -> {
if(element instanceof Class){ if(element instanceof Class){
Class c = (Class)element; Class c = (Class)element;
return c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure return !c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
} }
return false; return false;
}, noTreasures); }, noTreasures);
@ -124,7 +134,7 @@ public class TreasureProcessor extends AbstractProcessor{
clazz.findAll((element) -> { clazz.findAll((element) -> {
if(element instanceof Function){ if(element instanceof Function){
Function function = (Function)element; Function function = (Function)element;
return function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle return !function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle
} }
return false; return false;
}, functions); }, functions);

View file

@ -1,10 +1,14 @@
package dev.peerat.mapping.providers; package dev.peerat.mapping.providers;
import java.io.File;
import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Function;
public interface Provider{ public interface Provider{
void init(File file);
void mapTreasure(Class clazz); void mapTreasure(Class clazz);
void mapBottle(Class clazz, Function function); void mapBottle(Class clazz, Function function);

View file

@ -1,5 +1,6 @@
package dev.peerat.mapping.providers.mysql; package dev.peerat.mapping.providers.mysql;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -10,17 +11,23 @@ import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Value; import dev.peerat.parser.java.Value;
import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.java.operation.ReturnOperation;
public class MySQlProvider implements Provider{ public class MySQLProvider implements Provider{
static{ static{
ProviderManager.getInstance().register("mysql", new MySQlProvider()); ProviderManager.getInstance().register("mysql", new MySQLProvider());
} }
private List<String> treasures; private List<String> treasures;
private MySQlProvider(){ public MySQLProvider(){
this.treasures = new ArrayList<>(); this.treasures = new ArrayList<>();
} }
@Override
public void init(File file){
}
@Override @Override
public void mapTreasure(Class clazz){ public void mapTreasure(Class clazz){
@ -31,7 +38,7 @@ public class MySQlProvider implements Provider{
public void mapBottle(Class clazz, Function function){ public void mapBottle(Class clazz, Function function){
ReturnOperation operation = (ReturnOperation) function.getElements().get(0); ReturnOperation operation = (ReturnOperation) function.getElements().get(0);
Value value = operation.getValue(); Value value = operation.getValue();
throw new IllegalArgumentException(value.toString());
} }
@Override @Override

View file

@ -2,19 +2,19 @@ package dev.peerat.mapping.providers.mysql;
import dev.peerat.mapping.providers.Map; import dev.peerat.mapping.providers.Map;
public class MySqlMap implements Map{ public class MySQLMap implements Map{
public MySqlMap(){} public MySQLMap(){}
public MySqlMap link(Class<?> clazz, String table){ public MySQLMap link(Class<?> clazz, String table){
return this; return this;
} }
public MySqlMap ref(String table_from, String column_from, String table_to, String column_to){ public MySQLMap ref(String table_from, String column_from, String table_to, String column_to){
return this; return this;
} }
public MySqlMap bind(Class<?> clazz, String jfield, String sfield){ public MySQLMap bind(Class<?> clazz, String jfield, String sfield){
return this; return this;
} }