diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java deleted file mode 100644 index bb21010..0000000 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseGenerateRDL.java +++ /dev/null @@ -1,69 +0,0 @@ -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/BaseMetaGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseMetaGenerateRDL.java new file mode 100644 index 0000000..16d7507 --- /dev/null +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/BaseMetaGenerateRDL.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 BaseMetaGenerateRDL { + + + // name(order)::structuralType, valueType + public 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 void addResourceDeclaration(RDLSpec spec, String name, int order, ValueType valueType){ + spec.addRDLSpecResourceDeclaration(name, order, valueType); + spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name)); + } + + + // depending:depended + public 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 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/GenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java index 75ae7d5..7e3dfe5 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java @@ -1,6 +1,6 @@ package org.ntlab.rdlcanvas.generaterdl; -import org.ntlab.rdlcanvas.models.RDLSpec; +import org.ntlab.rdlcanvas.models.*; import org.ntlab.rdlcanvas.parser.Parser; import java.io.BufferedReader; @@ -11,25 +11,17 @@ public GenerateRDL() { Parser parser = new Parser(); - ScreenTemplateGenerateRDL screenTemplateGenerateRDL = new ScreenTemplateGenerateRDL(spec); - ScreenGenerateRDL screenGenerateRDL = new ScreenGenerateRDL(parser.getValue(), spec); + MetaScreenGenerateRDL metaScreenGenerateRDL = new MetaScreenGenerateRDL(spec); MetaTableGenerateRDL metaTableGenerateRDL = new MetaTableGenerateRDL(spec); - for(String name: spec.getResourceMap().keySet()){ - spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name)); - } - System.out.println(spec.toString()); - spec.outputConstant(); + MetaScreenViewGenerateRDL metaScreenViewGenerateRDL = new MetaScreenViewGenerateRDL(spec); + } public GenerateRDL(final BufferedReader reader) { Parser parser = new Parser(reader); - ScreenTemplateGenerateRDL screenTemplateGenerateRDL = new ScreenTemplateGenerateRDL(spec); - ScreenGenerateRDL screenGenerateRDL = new ScreenGenerateRDL(parser.getValue(), spec); + MetaScreenGenerateRDL metaScreenGenerateRDL = new MetaScreenGenerateRDL(spec); MetaTableGenerateRDL metaTableGenerateRDL = new MetaTableGenerateRDL(spec); - //SpecStatementにResourceDeclaretionを追加 - for(String name: spec.getResourceMap().keySet()){ - spec.addRDLSpecStatement(spec.getRDLSpecResourceDeclaration(name)); - } + MetaScreenViewGenerateRDL metaScreenViewGenerateRDL = new MetaScreenViewGenerateRDL(spec); System.out.println(spec.toString()); spec.outputConstant(); diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaScreenViewGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaScreenViewGenerateRDL.java new file mode 100644 index 0000000..7bf6050 --- /dev/null +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaScreenViewGenerateRDL.java @@ -0,0 +1,48 @@ +package org.ntlab.rdlcanvas.generaterdl; + +import org.ntlab.rdlcanvas.models.*; + +import java.util.ArrayList; +import java.util.Arrays; + +public class MetaScreenViewGenerateRDL extends BaseMetaGenerateRDL{ + + public MetaScreenViewGenerateRDL(RDLSpec spec){ + addScreenViewResourceDeclaration(spec); + addScreenViewFormula(spec); + } + + private void addScreenViewResourceDeclaration(RDLSpec spec){ + + // ex curWidget(1)::struct + addResourceDeclaration(spec, "curWidget", 1, StructuralType.structure, null); + addResourceDeclaration(spec, "curWId", 1, StructuralType.id, RDLSpecLang.typeString); + addResourceDeclaration(spec, "curWText", 1, RDLSpecLang.typeString); + addResourceDeclaration(spec, "curWState", 1, RDLSpecLang.typeString); + addResourceDeclaration(spec, "curScId", 1, StructuralType.id, RDLSpecLang.typeString); + + } + + private void addScreenViewFormula(RDLSpec spec){ + + // ex curWidget:curWId + addElementPairDependencyFormula(spec, "curWidget", false, "curWId", false); + addElementPairDependencyFormula(spec, "curWidget", false, "curWId", true); + addElementPairDependencyFormula(spec, "curWText", false, "curWidget", false); + addElementPairDependencyFormula(spec, "curWState", false, "curWidget", false); + + + addScreenViewEquationFormula(spec); + + } + + // curWidget = [[widget:wId->curWId]:scId->curScId, curWId->curWId] + private void addScreenViewEquationFormula(RDLSpec spec){ + RDLSpecDependencyTerm insideDependencyTerm = new RDLSpecDependencyTerm(spec.getRDLSpecResourceDeclaration("widget").getResource(), new ArrayList<>(Arrays.asList(spec.getRDLSpecResourceDeclaration("wId").getResource())), new ArrayList<>(Arrays.asList(spec.getRDLSpecResourceDeclaration("curWId").getResource()))); + RDLSpecDependencyTerm outsideDependencyTerm = new RDLSpecDependencyTerm(insideDependencyTerm, new ArrayList<>(Arrays.asList(spec.getRDLSpecResourceDeclaration("scId").getResource(), spec.getRDLSpecResourceDeclaration("curWId").getResource())), new ArrayList<>(Arrays.asList(spec.getRDLSpecResourceDeclaration("curScId").getResource(), spec.getRDLSpecResourceDeclaration("curWId").getResource()))); + RDLSpecEquationFormula rdlSpecEquationFormula = new RDLSpecEquationFormula(spec.getRDLSpecResourceDeclaration("curWidget").getResource(), outsideDependencyTerm); + spec.addRDLSpecStatement(rdlSpecEquationFormula); + + } + +} diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaTableGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaTableGenerateRDL.java index 552aeb8..160b063 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaTableGenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/MetaTableGenerateRDL.java @@ -1,27 +1,70 @@ package org.ntlab.rdlcanvas.generaterdl; -import org.ntlab.rdlcanvas.models.RDLSpec; -import org.ntlab.rdlcanvas.models.RDLSpecLang; -import org.ntlab.rdlcanvas.models.StructuralType; -import org.ntlab.rdlcanvas.models.ValueType; +import org.ntlab.rdlcanvas.models.*; -public class MetaTableGenerateRDL { +import java.util.ArrayList; +import java.util.List; + +public class MetaTableGenerateRDL extends BaseMetaGenerateRDL{ public MetaTableGenerateRDL(RDLSpec spec){ - createMetaTableResourceDeclaration(spec); + addMetaTableResourceDeclaration(spec); + addMetaTableFormula(spec); } - private void createMetaTableResourceDeclaration(RDLSpec spec){ + private void addMetaTableResourceDeclaration(RDLSpec spec){ - spec.addRDLSpecResourceDeclaration("table", 1, StructuralType.structure, null); - spec.addRDLSpecResourceDeclaration("tableId", 1, StructuralType.id, RDLSpecLang.typeString); - spec.addRDLSpecResourceDeclaration("keyName", 1, RDLSpecLang.typeString); - spec.addRDLSpecResourceDeclaration("curKey", 1, RDLSpecLang.typeString); - spec.addRDLSpecResourceDeclaration("columnName", 2, RDLSpecLang.typeString); - spec.addRDLSpecResourceDeclaration("columnNo", 2, StructuralType.id, RDLSpecLang.typeInt); - spec.addRDLSpecResourceDeclaration("columnValue", 2, RDLSpecLang.typeString); - spec.addRDLSpecResourceDeclaration("key", 2, StructuralType.id, RDLSpecLang.typeString); + // ex table(1)::structure + addResourceDeclaration(spec, "table", 1, StructuralType.structure, null); + addResourceDeclaration(spec, "tableId", 1, StructuralType.id, RDLSpecLang.typeString); + addResourceDeclaration(spec, "keyName", 1, RDLSpecLang.typeString); + addResourceDeclaration(spec, "curKey", 1, RDLSpecLang.typeString); + addResourceDeclaration(spec, "columnName", 2, RDLSpecLang.typeString); + addResourceDeclaration(spec, "columnNo", 2, StructuralType.id, RDLSpecLang.typeInt); + addResourceDeclaration(spec, "columnValue", 2, RDLSpecLang.typeString); + addResourceDeclaration(spec, "key", 2, StructuralType.id, RDLSpecLang.typeString); + + } + + private void addMetaTableFormula(RDLSpec spec){ + + // ex table:tableId + addElementPairDependencyFormula(spec, "table", false, "tableId", false); + addElementPairDependencyFormula(spec, "table", false, "tableId", true); + addElementPairDependencyFormula(spec, "keyName", false, "table", false); + + addNestedDependencyFormula(spec, "columnName", false, "columnNo", false, "table", false); + addNestedDependencyFormula(spec, "columnValue", false, "columnNo", false, "key", false, "table", false); + } + // [depending:depended01, depended02]:outsideDepended + public void addNestedDependencyFormula(RDLSpec spec, String depending, boolean dependingPrimed, String depended01, boolean depended01Primed, String depended02, boolean depended02Primed, String outsideDepended, boolean outsideDependedPrimed) { + List dependedInsideList = new ArrayList<>(); + List dependedOutsideList = new ArrayList<>(); + + if(depended01Primed){ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended01).getPrimedResource()); + }else{ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended01).getResource()); + } + + if(depended02Primed){ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended02).getPrimedResource()); + }else{ + dependedInsideList.add(spec.getRDLSpecResourceDeclaration(depended02).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))); + } } }