diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java new file mode 100644 index 0000000..bb21010 --- /dev/null +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java @@ -0,0 +1,69 @@ +package org.ntlab.rdlcanvas.generaterdl; + +import org.ntlab.rdlcanvas.models.*; + +import java.util.ArrayList; +import java.util.List; + +public class BaseGenerateRDL { + + + // name(order)::structuralType, valueType + public static void addResourceDeclaration(RDLSpec spec, String name, int order, StructuralType structuralType, ValueType valueType){ + spec.addRDLSpecResourceDeclaration(name, order, structuralType, valueType); + spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name)); + } + + // name(order)::valueType + public static void addResourceDeclaration(RDLSpec spec, String name, int order, ValueType valueType){ + spec.addRDLSpecResourceDeclaration(name, order, valueType); + spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name)); + } + + + // depending:depended + public static void addElementPairDependencyFormula(RDLSpec spec, String depending, boolean dependingPrimed, String depended, boolean dependedPrimed){ + + List dependedList = new ArrayList<>(); + + if(dependedPrimed) { + dependedList.add(spec.getRDLSpecResourceDeclaration(depended).getPrimedResource()); + } else { + dependedList.add(spec.getRDLSpecResourceDeclaration(depended).getResource()); + } + + if(dependingPrimed){ + RDLSpecDependencyFormula rdlSpecDependencyFormula = new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getPrimedResource(), dependedList)); + spec.addRDLSpecStatement(rdlSpecDependencyFormula); + } else { + RDLSpecDependencyFormula rdlSpecDependencyFormula = new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getResource(), dependedList)); + spec.addRDLSpecStatement(rdlSpecDependencyFormula); + } + + } + + // [depending:depended]:outsideDepended + public static void addNestedDependencyFormula(RDLSpec spec, String depending, boolean dependingPrimed, String depended, boolean dependedPrimed, String outsideDepended, boolean outsideDependedPrimed){ + List dependedInsideList = new ArrayList<>(); + List dependedOutsideList = new ArrayList<>(); + + if(dependedPrimed){ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended).getPrimedResource()); + }else{ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended).getResource()); + } + + if(outsideDependedPrimed){ + dependedOutsideList.add(spec.getRDLSpecResourceDeclaration(outsideDepended).getPrimedResource()); + }else{ + dependedOutsideList.add(spec.getRDLSpecResourceDeclaration(outsideDepended).getResource()); + } + + if(dependingPrimed){ + spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getPrimedResource(), dependedInsideList) ,dependedOutsideList))); + }else{ + spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getResource(), dependedInsideList) ,dependedOutsideList))); + } + + } +} diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java index 8f1a700..f407fd8 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java @@ -6,7 +6,9 @@ import java.util.List; -public class ScreenTemplateGenerateRDL{ +public class ScreenTemplateGenerateRDL extends BaseGenerateRDL{ + + ArrayList metaIdList = new ArrayList<>(List.of("wText", "wType", "wState", "wX", "wY", "wWidth", "wHeight", "wEnabled", "wVisible", "wColor")); public ScreenTemplateGenerateRDL(RDLSpec spec){ createScreenTemplateResourceDeclaration(spec); @@ -17,58 +19,35 @@ 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); + BaseGenerateRDL.addResourceDeclaration(spec, "screen", 1, StructuralType.structure, null); + BaseGenerateRDL.addResourceDeclaration(spec, "scId", 1, StructuralType.id, RDLSpecLang.typeString); + BaseGenerateRDL.addResourceDeclaration(spec, "widget", 2, StructuralType.structure, null); + BaseGenerateRDL.addResourceDeclaration(spec, "wId", 2, StructuralType.id, RDLSpecLang.typeString); + BaseGenerateRDL.addResourceDeclaration(spec, "wText", 2, RDLSpecLang.typeString); + BaseGenerateRDL.addResourceDeclaration(spec, "wType", 2, RDLSpecLang.typeString); + BaseGenerateRDL.addResourceDeclaration(spec, "wState", 2, RDLSpecLang.typeString); + BaseGenerateRDL.addResourceDeclaration(spec, "wX", 2, RDLSpecLang.typeInt); + BaseGenerateRDL.addResourceDeclaration(spec, "wY", 2, RDLSpecLang.typeInt); + BaseGenerateRDL.addResourceDeclaration(spec, "wWidth", 2, RDLSpecLang.typeInt); + BaseGenerateRDL.addResourceDeclaration(spec, "wHeight", 2, RDLSpecLang.typeInt); + BaseGenerateRDL.addResourceDeclaration(spec, "wEnabled", 2, RDLSpecLang.typeBoolean); + BaseGenerateRDL.addResourceDeclaration(spec, "wVisible", 2, RDLSpecLang.typeBoolean); + BaseGenerateRDL.addResourceDeclaration(spec, "wColor", 2, RDLSpecLang.typeString); } private void createScreenTemplateFormula(RDLSpec spec){ //ex screen:scId - createElementPairDependencyFormula("screen", "scId", spec); - createElementPairDependencyFormula("wText", "widget", spec); - createElementPairDependencyFormula("wType", "widget", spec); - createElementPairDependencyFormula("wState", "widget", spec); - createElementPairDependencyFormula("wX", "widget", spec); - createElementPairDependencyFormula("wY", "widget", spec); - createElementPairDependencyFormula("wHeight", "widget", spec); - createElementPairDependencyFormula("wWidth", "widget", spec); - createElementPairDependencyFormula("wEnabled", "widget", spec); - createElementPairDependencyFormula("wVisible", "widget", spec); - createElementPairDependencyFormula("wColor", "widget", spec); + BaseGenerateRDL.addElementPairDependencyFormula(spec, "screen", false, "scId", false); + for(String mId : metaIdList){ + BaseGenerateRDL.addElementPairDependencyFormula(spec, mId,false, "widget", false); + } // [widget:wid]:screen - createNestedDependencyFormula("widget", "wId", "screen", spec); + BaseGenerateRDL.addNestedDependencyFormula(spec, "widget", false, "wId", false, "screen", false); } - private void createElementPairDependencyFormula(String depending, String depended, RDLSpec spec){ - - List dependedList = new ArrayList<>(); - dependedList.add(spec.getRDLSpecResourceDeclaration(depended).getResource()); - spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getResource(), dependedList))); - - } - - private void createNestedDependencyFormula(String depending, String depended, String outsideDepended ,RDLSpec spec){ - List dependedInsideList = new ArrayList<>(); - List dependedOutsideList = new ArrayList<>(); - dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended).getResource()); - dependedOutsideList.add(spec.getRDLSpecResourceDeclaration(outsideDepended).getResource()); - spec.addRDLSpecStatement(new RDLSpecDependencyFormula(new RDLSpecDependency(new RDLSpecDependency(spec.getRDLSpecResourceDeclaration(depending).getResource(), dependedInsideList) ,dependedOutsideList))); - - } }