All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.jspinak.brobot.buildStateStructure.buildFromNames.write.stateSpecs.StateFieldSpec Maven / Gradle / Ivy

package io.github.jspinak.brobot.buildStateStructure.buildFromNames.write.stateSpecs;

import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import io.github.jspinak.brobot.database.state.state.State;
import io.github.jspinak.brobot.primatives.enums.StateEnum;
import io.github.jspinak.brobot.services.StateService;
import org.springframework.stereotype.Component;

import javax.lang.model.element.Modifier;
import java.util.List;

/**
 * Writes Java code for the remaining components of a State class:
 * - the State variable (State state = new State.Builder(ENUM)...)
 * - the initialization of this variable 'stateService.save(state)'.
 * - the Enum declaration 'public enum Name implements StateEnum...'.
 */
@Component
public class StateFieldSpec {

    private StateBuilder stateBuilder;

    public StateFieldSpec(StateBuilder stateBuilder) {
        this.stateBuilder = stateBuilder;
    }

    public TypeSpec getEnum(String enumName) {
        return TypeSpec.enumBuilder("Name")
                .addModifiers(Modifier.PUBLIC)
                .addEnumConstant(enumName)
                .addSuperinterface(StateEnum.class)
                .build();
    }

    public MethodSpec saveState() {
        return MethodSpec.constructorBuilder()
                .addModifiers(Modifier.PUBLIC)
                .addParameter(StateService.class, "stateService")
                .addStatement("stateService.save(state)")
                .build();
    }

    public FieldSpec getStateField(List imageNames, List regionNames, String enumName) {
        return FieldSpec.builder(State.class, "state")
                .addModifiers(Modifier.PRIVATE, Modifier.FINAL)
                .initializer(stateBuilder.getCode(imageNames, regionNames), State.Builder.class, enumName)
                .build();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy