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

import org.ntlab.rdlcanvas.models.*;
import org.ntlab.rdlcanvas.parser.ArrayValue;
import org.ntlab.rdlcanvas.parser.StringValue;
import org.ntlab.rdlcanvas.parser.Value;

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

public class TableGenerateRDL extends BaseGenerateRDL{

    public TableGenerateRDL(Value value, RDLSpec spec){
        //System.out.println(value.toString());
        addTableRDL(value, spec);
    }

    public void addTableRDL(Value value, RDLSpec spec){

        Map<StringValue, Value> tableMap = ((org.ntlab.rdlcanvas.parser.JsonValue)value).getJson();


        for(StringValue key1 : tableMap.keySet()){
            String tableNameString = key1.getStringValue();
            Value meta =  tableMap.get(key1);
            Map<StringValue, Value> metaMap = ((org.ntlab.rdlcanvas.parser.JsonValue)meta).getJson();
            for(StringValue key2 : metaMap.keySet()){
                String metaIdString = key2.getStringValue();
                Value data = metaMap.get(key2);

                if(metaIdString.equals("keyName")){
                    addDependencyEquationFormula(spec, metaIdString, "tableId", false,  tableNameString, data);
                }else if(metaIdString.equals("columnName")){
                    if(data instanceof ArrayValue){
                            List<Value> dataList = ((ArrayValue) data).getValues();
                            int index = 0; //columnNo用のindex
                            for(Value v:dataList){
                                if(v instanceof StringValue){
                                    addNestedDependencyEquationFormula(spec, metaIdString, "columnNo", false, Integer.toString(index), "tableId", false, tableNameString, v);
                                }
                                index ++;
                            }
                    }
                }
            }
        }

    }

    //[depending : dependedId -> arguments] = value , ex [keyName : tableId -> "顧客"] = "顧客ID"
    public void addDependencyEquationFormula(RDLSpec spec, String depending, String dependedId, boolean dependedIdPrime, String argument, Value corrValue){
        ArrayList<RDLSpecEvaluatableTerm> dependedList = new ArrayList<>();
        ArrayList<RDLSpecEvaluatableTerm> argumentList = new ArrayList<>();

        if(dependedIdPrime){
            dependedList.add(spec.getRDLSpecResourceDeclaration(dependedId).getPrimedResource());
        }else{
            dependedList.add(spec.getRDLSpecResourceDeclaration(dependedId).getResource());
        }

        argumentList.add(spec.getConstant(argument, spec.getRDLSpecResourceDeclaration(dependedId).getResource().getValueType()));

        spec.addRDLSpecStatement(new RDLSpecEquationFormula(new RDLSpecDependencyTerm(spec.getRDLSpecResourceDeclaration(depending).getResource(), dependedList, argumentList), spec.getConstant(corrValue.toString(), checkValueType(corrValue))));
    }

    //[depending: insideDependedId -> insideArguments] : outsideDependedId -> outsideArguments] = corrValue
    public void addNestedDependencyEquationFormula(RDLSpec spec, String depending, String insideDependedId, boolean insideDependedIdPrime, String insideArgument, String outsideDependedId, boolean outsideDependedIdPrime, String outsideArgument, Value corrValue){

        RDLSpecDependencyTerm nestedDependencyTerm = createNestedDependencyTerm(spec, depending, insideDependedId, insideDependedIdPrime, insideArgument, outsideDependedId, outsideDependedIdPrime, outsideArgument);
        spec.addRDLSpecStatement(new RDLSpecEquationFormula(nestedDependencyTerm, spec.getConstant(corrValue.toString(), checkValueType(corrValue))));

    }
}