package designPatternExtensions;
import models.objectOrientedTransfer.*;
import java.util.ArrayList;

//メモ
//依存性の逆転構造は再現できているが、OneToManyが使えないから再現できない？
//　SubjectがObserverを記憶し（ManyToOne?PULL?）→DesignCraftが最初に登録してるものとする
//　Clientから更新されたときに、Observerに通知する（OneToMany?PUSH？）→これが正解
//

public class Observer {
    public static DataTransferDesign create() throws IllegalRelationException {
        ObjectNode weather = new ObjectNode("Weather");
        ObjectNode orcs    = new ObjectNode("Orcs");
        ObjectNode hobbits = new ObjectNode("Hobbits");
        ObjectNode data    = new ObjectNode("WeatherType");

        Relation transferRelation = new Relation(weather, orcs, MultiplicityValue.OneToOne);
        DataTransferContext context = new DataTransferContext(
                new ArrayList<>(), transferRelation, data, "currentWeather", PushPullValue.PUSH
        );

        DataTransferDesign design = new DataTransferDesign(context);

        DependencyInversion di1 = new DependencyInversion(orcs, new InterfaceNode(orcs, "WeatherObserver"), weather);
        DependencyInversion di2 = new DependencyInversion(hobbits, new InterfaceNode(hobbits, "WeatherObserver"), weather);
        design.addDependencyInversion(di1);
        design.addDependencyInversion(di2);

        return design;
    }
}