diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java index 10ea6d8..4d136d8 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/GenerateRDL.java @@ -9,12 +9,13 @@ public GenerateRDL() { Parser parser = new Parser(); ScreenGenerateRDL screenGenerateRDL = new ScreenGenerateRDL(parser.getValue()); - + ScreenTemplateGenerateRDL screenTemplateGenerateRDL = new ScreenTemplateGenerateRDL(); } public GenerateRDL(final BufferedReader reader) { Parser parser = new Parser(reader); ScreenGenerateRDL screenGenerateRDL = new ScreenGenerateRDL(parser.getValue()); + ScreenTemplateGenerateRDL screenTemplateGenerateRDL = new ScreenTemplateGenerateRDL(); } } diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java index 91fcf9d..a717399 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java @@ -1,137 +1,64 @@ package org.ntlab.rdlcanvas.generaterdl; +import org.ntlab.rdlcanvas.models.RDLSpec; +import org.ntlab.rdlcanvas.models.RDLSpecLang; +import org.ntlab.rdlcanvas.models.ValueType; import org.ntlab.rdlcanvas.parser.StringValue; import org.ntlab.rdlcanvas.parser.Value; import java.util.*; -import java.util.stream.Collectors; -public class ScreenGenerateRDL extends BaseGenerateRDL{ +public class ScreenGenerateRDL{ - List> screenDataList = new ArrayList<>(); //各画面のWidget一覧 - List screenRDLList = new ArrayList<>(); //RDLの式を格納するリスト - Map> screenDataMap = new HashMap<>(); //-> RDLSpecStatementのリストにすべて入れる + RDLSpec spec = new RDLSpec(); + + + // parser済みのJsonを引数とする public ScreenGenerateRDL(Value value){ - createData(value); - createRDL(screenDataList); - //outputData(); //デバッグ用 - //outputRDL(); //デバッグ用 + createScreenConstant(value); } // Jsonを構成するデータを抽出する - private void createData(Value value){ + private void createScreenConstant(Value value){ Map screenmap = ((org.ntlab.rdlcanvas.parser.JsonValue)value).getJson(); for (StringValue key1 : screenmap.keySet()){ - String screenId = key1.getStringValue(); //ScreenIDを取得 - if(!screenDataMap.containsKey(screenId)){ - screenDataMap.computeIfAbsent(screenId, k -> new HashMap<>()).put("order", 1); //1階として値を登録 - screenDataMap.computeIfAbsent(screenId, k -> new HashMap<>()).put("structureType", "id"); - screenDataMap.computeIfAbsent(screenId, k -> new HashMap<>()).put("valueType", "string"); - } - Value widget = screenmap.get(key1); - Map widgetmap = ((org.ntlab.rdlcanvas.parser.JsonValue)widget).getJson(); + String screenId = key1.getStringValue(); //ScreenIDをStringValue(key1)からStringに変換 + spec.getConstant(screenId, checkValueType(key1)); //定数(Constant)の一覧に値を登録 + Value widgets = screenmap.get(key1); + Map widgetmap = ((org.ntlab.rdlcanvas.parser.JsonValue)widgets).getJson(); for (StringValue key2 : widgetmap.keySet()){ - String wId = key2.getStringValue(); //WidgetIDを取得 - if(!screenDataMap.containsKey(wId)) { - screenDataMap.computeIfAbsent(wId, k -> new HashMap<>()).put("order", 2); //2階として値を登録 - screenDataMap.computeIfAbsent(wId, k -> new HashMap<>()).put("structureType", "id"); - screenDataMap.computeIfAbsent(wId, k -> new HashMap<>()).put("valueType", "string"); - } - Value meta = widgetmap.get(key2); - Map metamap = ((org.ntlab.rdlcanvas.parser.JsonValue)meta).getJson(); + String wId = key2.getStringValue(); //widgetIDをStringValue(key2)からStringに変換 + spec.getConstant(wId, checkValueType(key2)); + Value metas = widgetmap.get(key2); + Map metamap = ((org.ntlab.rdlcanvas.parser.JsonValue)metas).getJson(); for (StringValue key3 : metamap.keySet()){ - String metaId = key3.getStringValue(); //MetaIDを取得 + String metaId = key3.getStringValue(); //MetaIDをStringValue(key3)からStringへ変換 Value data = metamap.get(key3); //Dataを取得 - createDataMap(data); - List datalist = new ArrayList<>(Arrays.asList(screenId, wId, metaId, data.toString())); - screenDataList.add(datalist); - //System.out.println("screenId: " + screenId + ", wId: " + wId + ", metaID: " + metaId + ", data: " + data.toString()); + spec.getConstant(data.toString(), checkValueType(data)); } } } - System.out.println(screenDataMap); + spec.outputConstant(); //デバッグ用 Constantを出力 } - // 抽出したデータからRDL式を作成する - private void createRDL(List> screenDataList){ - for(List data: screenDataList){ - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("[["); - stringBuilder.append(data.get(2)); - stringBuilder.append(":wId->"); - stringBuilder.append(data.get(1)); - stringBuilder.append("]:scId->"); - stringBuilder.append(data.get(0)); - stringBuilder.append("]="); - stringBuilder.append(data.get(3)); - screenRDLList.add(stringBuilder); + private ValueType checkValueType(Value value) { + if (value.getClass().getSimpleName().equals("StringValue")) { + return RDLSpecLang.typeString; + } else if (value.getClass().getSimpleName().equals("IntegerValue")) { + return RDLSpecLang.typeInt; + } else if (value.getClass().getSimpleName().equals("BooleanValue")) { + return RDLSpecLang.typeBoolean; } + return RDLSpecLang.typeDouble; } - private void createDataMap(Value data){ - if(!screenDataMap.containsKey(data.toString())) { - if (data.getClass().getSimpleName().equals("StringValue")) { - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("order", 2); //1階として値を登録 - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("structuralType", "primitive"); - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("valueType", "string"); - } else if (data.getClass().getSimpleName().equals("IntegerValue")) { - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("order", 2); //1階として値を登録 - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("structuralType", "primitive"); - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("valueType", "int"); - } else if (data.getClass().getSimpleName().equals("BooleanValue")) { - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("order", 2); //1階として値を登録 - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("structuralType", "primitive"); - screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("valueType", "boolean"); - } - } - - } - - //Json構成データを返す - @Override - public List> getDataList(){ - return screenDataList; - } - - //DataListに渡された値のリストを追加 - @Override - public void setDataList(String screenId, String wId, String metaID, String data){ - screenDataList.add(Arrays.asList(screenId, wId, metaID, data)); - } - - // DataListを標準出力 - @Override - public void outputData(){ - for(List data : screenDataList){ - System.out.println("screenId: " + data.get(0) + ", wId: " + data.get(1) + ", wMeta: " + data.get(2) + ", data: " + data.get(3)); - } - } - - //RDL式を返す - @Override - public List getRDLList(){ - return screenRDLList; - } - - //RDL式を標準出力 - @Override - public void outputRDL(){ - String result = screenRDLList.stream() - .map(StringBuilder::toString) - .collect(Collectors.joining("\n")); - - System.out.println(result); - } - - - } diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java new file mode 100644 index 0000000..6e00257 --- /dev/null +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenTemplateGenerateRDL.java @@ -0,0 +1,45 @@ +package org.ntlab.rdlcanvas.generaterdl; + +import org.ntlab.rdlcanvas.models.RDLSpec; +import org.ntlab.rdlcanvas.models.RDLSpecLang; +import org.ntlab.rdlcanvas.models.StructuralType; + + +public class ScreenTemplateGenerateRDL { + + RDLSpec spec = new RDLSpec(); + + + public ScreenTemplateGenerateRDL(){ + createScreenTemplateResourceDeclaration(); + System.out.println(spec.toString()); + } + + private void createScreenTemplateResourceDeclaration(){ + 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(){ + + } + + +} diff --git a/src/main/java/org/ntlab/rdlcanvas/models/RDLSpec.java b/src/main/java/org/ntlab/rdlcanvas/models/RDLSpec.java index 4b5e98d..7ff1ad9 100644 --- a/src/main/java/org/ntlab/rdlcanvas/models/RDLSpec.java +++ b/src/main/java/org/ntlab/rdlcanvas/models/RDLSpec.java @@ -79,6 +79,10 @@ return rdlSpecStatements; } + public Map getResourceMap() { + return resourceMap; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -88,12 +92,18 @@ return sb.toString(); } + public void outputResource(){ + StringBuilder sb = new StringBuilder(); + for (String key :resourceMap.keySet()){ + sb.append(getRDLSpecResourceDeclaration(key)).append("\n"); + } + System.out.println(sb); + } + public void outputConstant(){ StringBuilder sb = new StringBuilder(); for (String key : rdlSpecResourceConstantMap.keySet()) { - for (ValueType valueType : rdlSpecResourceConstantMap.get(key).keySet()) { - sb.append(key).append(", ").append("primitive, ").append(valueType).append("\n"); - } + sb.append(key).append(", ").append("primitive, ").append("\n"); } System.out.println(sb); }