package generator;

import generators.ASTGenerator;
import models.objectOrientedTransfer.*;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

public class TestMultipleContexts {
    @Test
    public void testMultipleContexts() {
        try {
            List<ReferenceEdge> srcEdges = new ArrayList<>();
            List<ReferenceEdge> dstEdges = new ArrayList<>();
            ObjectNode main = new ObjectNode("Main");
            ObjectNode star = new ObjectNode("Star");
            ObjectNode states = new ObjectNode("States");
            ObjectNode memento = new ObjectNode("Memento");
            ReferenceEdge srcEdge = new ReferenceEdge(main, star, "star");
            srcEdges.add(srcEdge);
            ReferenceEdge dstEdge = new ReferenceEdge(main, states, "states");
            dstEdges.add(dstEdge);
            List<Relation> relations = new ArrayList<>();
            Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToOne);
            DataTransferContext context = new DataTransferContext(relations, transferRelation, memento, "memento", PushPullValue.PULL);
            DataTransferDesign design = new DataTransferDesign(context);

            List<ReferenceEdge> srcEdges2 = new ArrayList<>();
            List<ReferenceEdge> dstEdges2 = new ArrayList<>();
            ReferenceEdge srcEdge2 = new ReferenceEdge(main, states, "states");
            srcEdges2.add(srcEdge2);
            ReferenceEdge dstEdge2 = new ReferenceEdge(main, star, "star");
            dstEdges2.add(dstEdge2);
            Relation transferRelation2 = new Relation(srcEdges2, dstEdges2, MultiplicityValue.OneToOne);
            DataTransferContext context2 = new DataTransferContext(relations, transferRelation2, memento, "memento", PushPullValue.PUSH);
            design.addTransferContext(context2);

            System.out.println(ASTGenerator.generate(design));
        } catch (IllegalRelationException e) {
            e.printStackTrace();
        }
    }
}
