package org.ntlab.rdlcanvas.models;
import java.util.*;
public class RDLSpec {
private Map<String, RDLSpecResourceDeclaration> resourceMap;
private List<RDLSpecStatement> rdlSpecStatements;
private Map<String, Map<ValueType, RDLSpecResourceConstant>> rdlSpecResourceConstantMap;
public RDLSpec() {
resourceMap = new HashMap<>();
rdlSpecStatements = new ArrayList<>();
rdlSpecResourceConstantMap = new HashMap<>();
}
public void addRDLSpecResourceDeclaration(String name, int order, StructuralType structuralType, ValueType valueType) {
resourceMap.put(name, new RDLSpecResourceDeclaration(name, order, structuralType, valueType));
}
public void addRDLSpecResourceDeclaration(String name, int order, ValueType valueType) {
resourceMap.put(name, new RDLSpecResourceDeclaration(name, order, valueType));
}
public RDLSpecResourceDeclaration getRDLSpecResourceDeclaration(String name) {
if (!resourceMap.containsKey(name)) {
return null;
}
return resourceMap.get(name);
}
public RDLSpecResourceConstant getConstant(String value, ValueType valueType) {
if (rdlSpecResourceConstantMap.containsKey(value)) {
if (rdlSpecResourceConstantMap.get(value).containsKey(valueType)) {
return rdlSpecResourceConstantMap.get(value).get(valueType);
} else {
rdlSpecResourceConstantMap.get(value).put(valueType,new RDLSpecResourceConstant(value, valueType));
}
} else {
rdlSpecResourceConstantMap.put(value, new HashMap<>());
rdlSpecResourceConstantMap.get(value).put(valueType, new RDLSpecResourceConstant(value, valueType));
}
return rdlSpecResourceConstantMap.get(value).get(valueType);
}
public RDLSpecResourceConstant getTrue() {
if (!rdlSpecResourceConstantMap.containsKey("true")) {
rdlSpecResourceConstantMap.put("true", new HashMap<>());
if (!rdlSpecResourceConstantMap.get("true").containsKey(RDLSpecLang.typeBoolean)) {
rdlSpecResourceConstantMap.get("true").put(RDLSpecLang.typeBoolean, new RDLSpecResourceConstant("true", RDLSpecLang.typeBoolean));
}
}
return rdlSpecResourceConstantMap.get("true").get(RDLSpecLang.typeBoolean);
}
public RDLSpecResourceConstant getFalse() {
if (!rdlSpecResourceConstantMap.containsKey("false")) {
rdlSpecResourceConstantMap.put("false", new HashMap<>());
if (!rdlSpecResourceConstantMap.get("false").containsKey(RDLSpecLang.typeBoolean)) {
rdlSpecResourceConstantMap.get("false").put(RDLSpecLang.typeBoolean, new RDLSpecResourceConstant("false", RDLSpecLang.typeBoolean));
}
}
return rdlSpecResourceConstantMap.get("false").get(RDLSpecLang.typeBoolean);
}
public void addRDLSpecStatement(RDLSpecStatement rdlSpecStatement) {
rdlSpecStatements.add(rdlSpecStatement);
rdlSpecStatements.sort(Comparator.comparing(obj -> {
if (obj.isRDLSpecResourceDeclaration()) {
return 1;
}
if (obj.isRDLSpecInitialization()) {
return 2;
}
return 3;
}));
}
public List<RDLSpecStatement> getRDLSpecStatements() {
return rdlSpecStatements;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < rdlSpecStatements.size(); i++) {
sb.append(rdlSpecStatements.get(i)).append("\n");
}
return sb.toString();
}
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");
}
}
System.out.println(sb);
}
}