package jp.ac.aiit.jointry.services.broker.app; import jp.ac.aiit.jointry.services.broker.core.Agent; import jp.ac.aiit.jointry.services.broker.core.DInfo; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import jp.ac.aiit.jointry.models.Sprite; import jp.ac.aiit.jointry.services.file.FileManager; import jp.ac.aiit.jointry.util.JsonUtil; public class MainDialog extends JointryDialogBase { @Override public void onAnswer(int event, DInfo dinfo) { } @Override public void onQuery(int event, DInfo dinfo) { if (mainController == null) { return; } switch (event) { case M_MAIN_CONNECT: mMainConnect(dinfo); break; case M_MAIN_DISCONNECT: mMainDisconnect(dinfo); break; } } @Override public void onNotify(int event, DInfo dinfo) { if (mainController == null) { return; } switch (event) { case M_MAIN_MEMBERS: mMainMembers(dinfo); break; case M_MAIN_SYNCHRONIZE: mMainSynchronize(dinfo); break; case M_MAIN_SCRIPT_EXECUTE: mScriptExecute(); break; case M_MAIN_SCRIPT_STOP: mScriptStop(); break; default: break; } } private void mScriptExecute() { mainController.getBackStageController().start(); } private void mScriptStop() { try { mainController.getBackStageController().stop(); } catch (Exception ex) { Logger.getLogger(MainDialog.class.getName()).log(Level.SEVERE, null, ex); } } private void mMainConnect(DInfo dinfo) { JointryAccount.addUser(dinfo.get(K_USER_NAME)); mainController.refreshMembers(); sendMembers(); sendSynchronize(); } private void mMainDisconnect(DInfo dinfo) { JointryAccount.removeUser(dinfo.get(K_USER_NAME)); mainController.refreshMembers(); sendMembers(); } private void mMainSynchronize(DInfo dinfo) { mainController.initWindow("load"); //協同編集中のため初期化のみで良い String main_info = dinfo.get(K_MAIN_INFO); final List<String> list = JsonUtil.convertJsonStringToList(main_info); for (String jsonString : list) { Sprite sprite = null; try { sprite = JsonUtil.parseJSONStringToSprite(jsonString, new File("")); } catch (Exception ex) { Logger.getLogger(MainDialog.class.getName()).log(Level.SEVERE, null, ex); } if (sprite != null) { sprite.setMainController(mainController); mainController.getFrontStageController().addSprite(sprite, false); if (mainController.getFrontStageController().getCurrentSprite() == null) { mainController.getFrontStageController().setCurrentSprite(sprite); } } } } private void mMainMembers(DInfo dinfo) { JointryAccount.getUsers().clear(); String members = dinfo.get(K_USER_NAME_LIST); JointryAccount.addAllUser(members.substring(1, members.length() - 1).split(",")); mainController.refreshMembers(); } public static void sendSynchronize() { if (mainController.getAgent() != null) { List<String> spriteList = new ArrayList(); for (Sprite sprite : mainController.getFrontStageController().getSprites()) { String json = null; try { String tempFile = new MainDialog().makeFilePath(""); json = FileManager.convertSpriteToJson(sprite, tempFile); } catch (IOException ex) { Logger.getLogger(MainDialog.class.getName()).log(Level.SEVERE, null, ex); } spriteList.add(json); } String main_info = JsonUtil.convertObjectToJsonString(spriteList); DInfo dinfo = new DInfo(D_MAIN); dinfo.set(K_METHOD, M_MAIN_SYNCHRONIZE); dinfo.set(USER_ID, mainController.getUserName()); dinfo.set(K_MAIN_INFO, main_info); mainController.getAgent().sendNotify(dinfo); dinfo = new DInfo(D_MAIN); dinfo.set(K_METHOD, M_MAIN_MEMBERS); dinfo.set(USER_ID, mainController.getUserName()); dinfo.set(K_USER_NAME_LIST, JointryAccount.getUsers().toString()); mainController.getAgent().sendNotify(dinfo); } } public static void sendConnection(int event, Agent agent, String name) { if (agent != null) { DInfo dinfo = new DInfo(D_MAIN); dinfo.set(K_METHOD, event); dinfo.set(USER_ID, mainController.getUserName()); dinfo.set(K_USER_NAME, name); agent.sendQuery(dinfo); } } public static void sendEvent(Agent agent, int event) { if (agent != null) { DInfo dinfo = new DInfo(D_MAIN); dinfo.set(K_METHOD, event); dinfo.set(USER_ID, mainController.getUserName()); agent.sendNotify(dinfo); } } private void sendMembers() { DInfo dinfo = new DInfo(D_MAIN); dinfo.set(K_METHOD, M_MAIN_MEMBERS); dinfo.set(USER_ID, mainController.getUserName()); dinfo.set(K_USER_NAME_LIST, JointryAccount.getUsers().toString()); sendNotify(dinfo); } }