Newer
Older
RDLCanvas / src / main / java / org / ntlab / rdlcanvas / generaterdl / ScreenTemplateGenerateRDL.java
package org.ntlab.rdlcanvas.generaterdl;

import org.ntlab.rdlcanvas.models.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class ScreenTemplateGenerateRDL {

    public ScreenTemplateGenerateRDL(RDLSpec spec){
        createScreenTemplateResourceDeclaration(spec);
        createScreenTemplateFormula(spec);
        //System.out.println(spec.toString()); //デバッグ用
    }

    private void createScreenTemplateResourceDeclaration(RDLSpec spec){

        //ex screen(1) :: struct
        spec.addRDLSpecResourceDeclaration("screen", 1, StructuralType.structure, null);
        spec.addRDLSpecResourceDeclaration("scId", 1, StructuralType.id, RDLSpecLang.typeString);
        spec.addRDLSpecResourceDeclaration("widget", 2, StructuralType.structure, null);
        spec.addRDLSpecResourceDeclaration("wId", 2, StructuralType.id, RDLSpecLang.typeString);
        spec.addRDLSpecResourceDeclaration("wText", 2, RDLSpecLang.typeString);
        spec.addRDLSpecResourceDeclaration("wType", 2, RDLSpecLang.typeString);
        spec.addRDLSpecResourceDeclaration("wState", 2, RDLSpecLang.typeString);
        spec.addRDLSpecResourceDeclaration("wX", 2, RDLSpecLang.typeInt);
        spec.addRDLSpecResourceDeclaration("wY", 2, RDLSpecLang.typeInt);
        spec.addRDLSpecResourceDeclaration("wWidth", 2, RDLSpecLang.typeInt);
        spec.addRDLSpecResourceDeclaration("wHeight", 2, RDLSpecLang.typeInt);
        spec.addRDLSpecResourceDeclaration("wEnabled", 2, RDLSpecLang.typeBoolean);
        spec.addRDLSpecResourceDeclaration("wVisible", 2, RDLSpecLang.typeBoolean);
        spec.addRDLSpecResourceDeclaration("wColor", 2, RDLSpecLang.typeString);

        //SpecStatementにResourceDeclaretionを追加
        for(String name: spec.getResourceMap().keySet()){
            spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name));
        }
    }

    private void createScreenTemplateFormula(RDLSpec spec){

        List<RDLSpecEvaluatableTerm> dependedList = new ArrayList<>();
        List<RDLSpecEvaluatableTerm> dependingList = new ArrayList<>();

        //ex screen:scId
        dependedList.add(spec.getRDLSpecResourceDeclaration("scId").getResource());
        spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration("screen").getResource(), dependedList)));
        dependedList.clear();

        // ex wText:widget
        dependedList.add(spec.getRDLSpecResourceDeclaration("widget").getResource());
        spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration("wText").getResource(), dependedList)));
        dependedList.clear();

        //ex wState:widget
        dependedList.add(spec.getRDLSpecResourceDeclaration("widget").getResource());
        spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration("wText").getResource(), dependedList)));
        dependedList.clear();


    }

    private void createElementPairDependencyFormula(String depending, String depended, List<RDLSpecEvaluatableTerm> dependedList){

    }


}