diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/TableGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/TableGenerateRDL.java index e0cf2cd..15d5427 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/TableGenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/TableGenerateRDL.java @@ -1,7 +1,74 @@ 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 { +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 tableMap = ((org.ntlab.rdlcanvas.parser.JsonValue)value).getJson(); + + + for(StringValue key1 : tableMap.keySet()){ + String tableNameString = key1.getStringValue(); + Value meta = tableMap.get(key1); + Map 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 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 dependedList = new ArrayList<>(); + ArrayList 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)))); + + } }