import java.util.ArrayList;
import java.util.List;
import designPatternExtensions.ModelLoader;
import designPatternExtensions.designPattern.*;
import generators.ASTGenerator;
import models.deltaAlgebra.MultiplicityValue;
import models.deltaAlgebra.ObjectNode;
import models.deltaAlgebra.ReferenceEdge;
import models.dataSynchronizationModel.*;
public class Main {
public static void main(String[] args) {
List<ReferenceEdge> srcEdges = new ArrayList<>();
List<ReferenceEdge> dstEdges = new ArrayList<>();
ObjectNode companies = new ObjectNode("Companies");
ObjectNode company = new ObjectNode("Company");
ObjectNode customers = new ObjectNode("Customers");
ObjectNode customer = new ObjectNode("Customer");
ObjectNode string = new ObjectNode("String");
ReferenceEdge srcEdge = new ReferenceEdge(companies, company, "company", "String");
ReferenceEdge srcEdge2 = new ReferenceEdge(company, string, "address");
srcEdges.add(srcEdge);
srcEdges.add(srcEdge2);
ReferenceEdge dstEdge = new ReferenceEdge(customers, customer, "customer", "String");
ReferenceEdge dstEdge2 = new ReferenceEdge(customer, string, "address");
dstEdges.add(dstEdge);
dstEdges.add(dstEdge2);
List<Relation> relations = new ArrayList<>();
Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToMany);
DataSynchronizationDesign design;
// design = ModelLoader.load("models/CustomerManagement-PUSH.Json");
// System.out.println(design.getDeltaComplex());
// System.out.println(ASTGenerator.generate(design));
try {
DataSynchronizationContext context = new DataSynchronizationContext(relations, transferRelation, "address", TransferStyle.PULL);
design = new DataSynchronizationDesign(context);
// ObjectNode cm = new ObjectNode("CompanyMediator");
// MediatorInsertion mi = new MediatorInsertion(customer, company, cm, context);
// design.addMediatorInsertion(mi);
//
// DependencyInversion di = new DependencyInversion(company, new InterfaceNode(company, "ICompany"), customer);
// design.addDependencyInversion(di);
// design = new Flyweight().create();
System.out.println(design.getDeltaComplex());
System.out.println(ASTGenerator.generate(design));
} catch (IllegalRelationException e) {
e.printStackTrace();
}
}
}