Search in sources :

Example 1 with CodeGenFile

use of ilargia.entitas.codeGeneration.data.CodeGenFile in project Entitas-Java by Rubentxu.

the class CodeGenerationTask method run.

@TaskAction
public void run() {
    CodeGenerationPluginExtension extension = getProject().getExtensions().findByType(CodeGenerationPluginExtension.class);
    if (extension == null) {
        extension = new CodeGenerationPluginExtension();
    }
    CodeGenerator codeGenerator = getCodeGenerator(extension, appDomain);
    List<CodeGenFile> gen = codeGenerator.generate();
}
Also used : CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) ICodeGenerator(ilargia.entitas.codeGeneration.interfaces.ICodeGenerator) CodeGenerator(ilargia.entitas.codeGeneration.CodeGenerator) TaskAction(org.gradle.api.tasks.TaskAction)

Example 2 with CodeGenFile

use of ilargia.entitas.codeGeneration.data.CodeGenFile in project Entitas-Java by Rubentxu.

the class CodeGeneratorOld method generate.

public List<CodeGenFile> generate(ICodeGeneratorDataProvider provider, String destinyDirectory, List<ICodeGenerator> codeGenerators) {
    List<String> scrDir = new ArrayList<String>() {

        {
            add("main/java");
            add("test/java");
            add("main\\java");
            add("test\\java");
            add("src");
        }
    };
    Optional<String> sourcePackage = scrDir.stream().filter((base) -> destinyDirectory.lastIndexOf(base) != -1).map((base) -> destinyDirectory.substring(destinyDirectory.lastIndexOf(base) + base.length() + 1)).map((base) -> base.replaceAll("/", ".").replaceAll("\\\\", ".")).findFirst();
    ArrayList<CodeGenFile> generatedFiles = new ArrayList<CodeGenFile>();
    List<JavaClassSource> files = new ArrayList<>();
    // if (sourcePackage.isPresent()) {
    // for (ICodeGenerator generator : generators) {
    // if (generator instanceof IContextCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IContextCodeGenerator) generator).generate(provider.poolNames(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // if (generator instanceof IComponentCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IComponentCodeGenerator) generator).generate(provider.componentInfos(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // if (generator instanceof IBlueprintsCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IBlueprintsCodeGenerator) generator).generate(provider.blueprintNames(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // }
    // }
    CodeGenFile entitas = generatedFiles.get(generatedFiles.size() - 1);
    for (CodeGenFile generatedFile : generatedFiles) {
        if (!generatedFile.fileName.endsWith("Matcher") && !entitas.fileContent.getPackage().equals(generatedFile.fileContent.getPackage())) {
            entitas.fileContent.addImport(generatedFile.fileName);
        }
    }
    writeFiles(destinyDirectory, files);
    return generatedFiles;
}
Also used : ICodeGeneratorDataProvider(ilargia.entitas.codeGeneration.interfaces.ICodeGeneratorDataProvider) CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) java.util(java.util) java.io(java.io) ICodeGenerator(ilargia.entitas.codeGeneration.interfaces.ICodeGenerator) JavaDocSource(org.jboss.forge.roaster.model.source.JavaDocSource) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) ComponentInfo(ilargia.entitas.codeGenerator.data.ComponentInfo) CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource)

Example 3 with CodeGenFile

use of ilargia.entitas.codeGeneration.data.CodeGenFile in project Entitas-Java by Rubentxu.

the class CodeGeneratorApp method handleGenerate.

@FXML
public void handleGenerate(ActionEvent actionEvent) throws IOException {
    result.setText("");
    progress.setVisible(true);
    result.setText("Generating...");
    if (props != null)
        saveProperties();
    // loads the items at another thread, asynchronously
    Task loader = new Task<List<CodeGenFile>>() {

        {
            setOnSucceeded(workerStateEvent -> {
                progress.setVisible(false);
                result.setText("Success");
            });
            setOnFailed(workerStateEvent -> {
                result.setText("Failed");
                getException().printStackTrace();
            });
        }

        @Override
        protected List<CodeGenFile> call() throws Exception {
            List<ICodeGenerator> codeGenerators = new ArrayList<>();
            if (componentsGenerator.isSelected())
                codeGenerators.add(new EntityGenerator());
            if (componentIndicesGenerator.isSelected())
                codeGenerators.add(new ComponentIndicesGenerator());
            if (contextsGenerator.isSelected())
                codeGenerators.add(new ContextGenerator());
            codeGenerators.add(new MatcherGenerator());
            codeGenerators.add(new EntitasGenerator());
            TypeReflectionProvider provider = new TypeReflectionProvider(fieldComponentFolder.getText());
            CodeGeneratorOld generator = new CodeGeneratorOld();
            return generator.generate(provider, fieldGeneratedFolder.getText(), codeGenerators);
        }
    };
    Thread loadingThread = new Thread(loader, "generated-loader");
    loadingThread.setDaemon(true);
    loadingThread.start();
}
Also used : Task(javafx.concurrent.Task) ArrayList(java.util.ArrayList) TypeReflectionProvider(com.ilargia.games.entitas.codeGenerator.providers.TypeReflectionProvider) ICodeGenerator(ilargia.entitas.codeGeneration.interfaces.ICodeGenerator) CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) FXML(javafx.fxml.FXML)

Example 4 with CodeGenFile

use of ilargia.entitas.codeGeneration.data.CodeGenFile in project Entitas-Java by Rubentxu.

the class CodeGeneratorOld method generate.

public List<CodeGenFile> generate(ICodeGeneratorDataProvider provider, String destinyDirectory, List<ICodeGenerator> codeGenerators) {
    List<String> scrDir = new ArrayList<String>() {

        {
            add("main/java");
            add("test/java");
            add("main\\java");
            add("test\\java");
            add("src");
        }
    };
    Optional<String> sourcePackage = scrDir.stream().filter((base) -> destinyDirectory.lastIndexOf(base) != -1).map((base) -> destinyDirectory.substring(destinyDirectory.lastIndexOf(base) + base.length() + 1)).map((base) -> base.replaceAll("/", ".").replaceAll("\\\\", ".")).findFirst();
    ArrayList<CodeGenFile> generatedFiles = new ArrayList<CodeGenFile>();
    List<JavaClassSource> files = new ArrayList<>();
    // if (sourcePackage.isPresent()) {
    // for (ICodeGenerator generator : generators) {
    // if (generator instanceof IContextCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IContextCodeGenerator) generator).generate(provider.poolNames(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // if (generator instanceof IComponentCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IComponentCodeGenerator) generator).generate(provider.componentInfos(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // if (generator instanceof IBlueprintsCodeGenerator) {
    // for (JavaClassSource javaClassSource : ((IBlueprintsCodeGenerator) generator).generate(provider.blueprintNames(), sourcePackage.get())) {
    // files.add(javaClassSource);
    // generatedFiles.add(new CodeGenFile(javaClassSource.getCanonicalName(), javaClassSource, generator.getClass().getName()));
    // }
    // 
    // }
    // }
    // }
    CodeGenFile entitas = generatedFiles.get(generatedFiles.size() - 1);
    for (CodeGenFile generatedFile : generatedFiles) {
        if (!generatedFile.fileName.endsWith("Matcher") && !entitas.fileContent.getPackage().equals(generatedFile.fileContent.getPackage())) {
            entitas.fileContent.addImport(generatedFile.fileName);
        }
    }
    writeFiles(destinyDirectory, files);
    return generatedFiles;
}
Also used : ICodeGeneratorDataProvider(ilargia.entitas.codeGeneration.interfaces.ICodeGeneratorDataProvider) CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) java.util(java.util) java.io(java.io) ICodeGenerator(ilargia.entitas.codeGeneration.interfaces.ICodeGenerator) JavaDocSource(org.jboss.forge.roaster.model.source.JavaDocSource) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) ComponentInfo(com.ilargia.games.entitas.codeGenerator.data.ComponentInfo) CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource)

Example 5 with CodeGenFile

use of ilargia.entitas.codeGeneration.data.CodeGenFile in project Entitas-Java by Rubentxu.

the class ComponentContextGenerator method generateContext.

private void generateContext(String contextName, ComponentData data) {
    String pkgDestiny = targetPackageConfig.getTargetPackage();
    if (!contexts.containsKey(contextName)) {
        JavaClassSource sourceGen = Roaster.parse(JavaClassSource.class, String.format("public class %1$sContext extends Context<%1$sEntity> {}", contextName));
        CodeGenFile<JavaClassSource> genFile = new CodeGenFile<JavaClassSource>(contextName + "Context", sourceGen, data.getSubDir());
        contexts.put(contextName, genFile);
        JavaClassSource codeGenerated = genFile.getFileContent();
        if (!pkgDestiny.endsWith(data.getSubDir())) {
            pkgDestiny += "." + data.getSubDir();
        }
        codeGenerated.setPackage(pkgDestiny);
        codeGenerated.addMethod().setName(contextName + "Context").setPublic().setConstructor(true).setParameters(String.format("int totalComponents, int startCreationIndex, ContextInfo contextInfo, EntityBaseFactory<%1$sEntity> factoryMethod", contextName)).setBody("super(totalComponents, startCreationIndex, contextInfo, factoryMethod, null);");
        codeGenerated.addImport("ilargia.entitas.Context");
        codeGenerated.addImport("ilargia.entitas.api.*");
        codeGenerated.addImport("ilargia.entitas.api.entitas.EntityBaseFactory");
        if (isUnique(data)) {
            addContextMethods(contextName, data, codeGenerated);
        }
    }
}
Also used : CodeGenFile(ilargia.entitas.codeGeneration.data.CodeGenFile) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource)

Aggregations

CodeGenFile (ilargia.entitas.codeGeneration.data.CodeGenFile)11 ICodeGenerator (ilargia.entitas.codeGeneration.interfaces.ICodeGenerator)7 JavaClassSource (org.jboss.forge.roaster.model.source.JavaClassSource)6 ICodeGeneratorDataProvider (ilargia.entitas.codeGeneration.interfaces.ICodeGeneratorDataProvider)3 ArrayList (java.util.ArrayList)3 Task (javafx.concurrent.Task)3 FXML (javafx.fxml.FXML)3 java.io (java.io)2 java.util (java.util)2 JavaDocSource (org.jboss.forge.roaster.model.source.JavaDocSource)2 ComponentInfo (com.ilargia.games.entitas.codeGenerator.data.ComponentInfo)1 TypeReflectionProvider (com.ilargia.games.entitas.codeGenerator.providers.TypeReflectionProvider)1 CodeGenerator (ilargia.entitas.codeGeneration.CodeGenerator)1 CodeGeneratorData (ilargia.entitas.codeGeneration.data.CodeGeneratorData)1 ICodeGenFilePostProcessor (ilargia.entitas.codeGeneration.interfaces.ICodeGenFilePostProcessor)1 ComponentInfo (ilargia.entitas.codeGenerator.data.ComponentInfo)1 TypeReflectionProvider (ilargia.entitas.codeGenerator.providers.TypeReflectionProvider)1 TaskAction (org.gradle.api.tasks.TaskAction)1