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", 0, 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);
}
}