view src/main/java/christie/datagear/LocalDataGearManager.java @ 272:b592fe1d4a4e default tip

create example Attendance
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Thu, 01 Jul 2021 20:41:07 +0900
parents be7063c0684b
children
line wrap: on
line source

package christie.datagear;

import christie.datagear.command.*;
import christie.datagear.dg.DataGear;

import static christie.datagear.command.CommandType.PUT;

/**
 * Created by e125769 on 12/7/17.
 */
public class LocalDataGearManager extends DataGearManager {

    public void put(String key, Object data) {//main use
        DataGear dg = new DataGear(data);
        put(key, dg);
    }

    public void put(String key, DataGear dg) {
        Command cm = new CommandBuilder().init(CommandType.PUT).cgmID(1)
                                                               .toDgmName("local")
                                                               .key(key)
                                                               .dg(dg)
                                                               .build();
        runCommand(cm);
    }

    public void runCommand(Command cm){
        switch (cm.type) {
            case PUT:
                dataGears.setData(cm);
                if (waitList.containsKey(cm.key)){
                    runCommand(waitList.getAndRemoveCommand(cm.key));
                }
                break;
            case TAKE:
            case REMOTETAKE:
            case PEEK:
            case REMOTEPEEK:
                if (dataGears.containsKey(cm.key)) {
                    setData(cm);
                    cm.execute();
                } else {
                    waitList.add(cm);
                }
                break;
            case REPLY:
                cm.execute();
                break;
        }
    }

    private void setData(Command cm){
        cm.setDg(dataGears.getData(cm));
    }

    @Override
    public void resolveWaitCommand(String key, DataGear dg) {
    }

    @Override
    public void finish() {
        System.exit(0);
    }

    @Override
    public void close() {
    }

    @Override
    public void shutdown() {
    }
}