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<RDLSpecEvaluatableTerm> 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<RDLSpecEvaluatableTerm> dependedInsideList = new ArrayList<>();
List<RDLSpecEvaluatableTerm> 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)));
}
}
}