diff --git a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java index bce4a44..13e7b25 100644 --- a/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java +++ b/src/main/java/org/ntlab/rdlcanvas/generaterdl/ScreenGenerateRDL.java @@ -3,17 +3,15 @@ import org.ntlab.rdlcanvas.parser.StringValue; import org.ntlab.rdlcanvas.parser.Value; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; public class ScreenGenerateRDL extends BaseGenerateRDL{ List> screenDataList = new ArrayList<>(); //各画面のWidget一覧 List screenRDLList = new ArrayList<>(); //RDLの式を格納するリスト - + Map> screenDataMap = new HashMap<>(); + //-> RDLSpecStatementのリストにすべて入れる public ScreenGenerateRDL(Value value){ createData(value); @@ -30,23 +28,36 @@ Map screenmap = ((org.ntlab.rdlcanvas.parser.JsonValue)value).getJson(); for (StringValue key1 : screenmap.keySet()){ - String screenId = key1.toString(); //ScreenIDを取得 + 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(); + for (StringValue key2 : widgetmap.keySet()){ - String wId = key2.toString(); //WidgetIDを取得 + 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(); - for (StringValue key3 : metamap.keySet()){ - String metaID = key3.getStringValue(); //MetaIDを取得 - Value data = metamap.get(key3); //Dataを取得 - List datalist = new ArrayList<>(Arrays.asList(screenId, wId, metaID, data.toString())); + for (StringValue key3 : metamap.keySet()){ + String metaId = key3.getStringValue(); //MetaIDを取得 + 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()); + //System.out.println("screenId: " + screenId + ", wId: " + wId + ", metaID: " + metaId + ", data: " + data.toString()); } } } + System.out.println(screenDataMap); } // 抽出したデータからRDL式を作成する @@ -66,6 +77,25 @@ } } + 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("structureType", "value"); + 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("structureType", "value"); + 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("structureType", "value"); + screenDataMap.computeIfAbsent(data.toString(), k -> new HashMap<>()).put("valueType", "boolean"); + } + } + + } + //Json構成データを返す @Override public List> getDataList(){