package jp.ac.aiit.jointry.services.broker.app;
import static jp.ac.aiit.jointry.services.broker.core.Common.V_OK;
import jp.ac.aiit.jointry.services.broker.core.DInfo;
import jp.ac.aiit.jointry.services.broker.core.DialogBase;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import jp.ac.aiit.jointry.controllers.MainController;
import jp.ac.aiit.jointry.models.Sprite;
public abstract class JointryDialogBase extends DialogBase implements JointryCommon {
protected static MainController mainController;
protected static boolean installed = false;
public abstract void onAnswer(int event, DInfo dinfo);
public abstract void onQuery(int event, DInfo dinfo);
public abstract void onNotify(int event, DInfo dinfo);
public static void install(MainController mainController) {
if (!installed) {
DialogBase.addDialog(JointryCommon.D_MAIN, MainDialog.class);
DialogBase.addDialog(JointryCommon.D_SPRITE, SpriteDialog.class);
DialogBase.addDialog(JointryCommon.D_BLOCK, BlockDialog.class);
if (mainController != null) {
JointryDialogBase.mainController = mainController;
}
installed = true;
}
}
@Override
public void onAnswer(final DInfo dinfo) {
JFXPanel jfxPanel = new JFXPanel(); //Toolkit not initialized対策
Platform.runLater(new Runnable() {
@Override
public void run() {
onAnswer(getEvent(dinfo), dinfo);
}
});
}
@Override
public void onQuery(final DInfo dinfo) {
JFXPanel jfxPanel = new JFXPanel(); //Toolkit not initialized対策
Platform.runLater(new Runnable() {
@Override
public void run() {
onQuery(getEvent(dinfo), dinfo);
sendAnswer(dinfo, V_OK);
}
});
}
@Override
public void onNotify(final DInfo dinfo) {
JFXPanel jfxPanel = new JFXPanel(); //Toolkit not initialized対策
Platform.runLater(new Runnable() {
@Override
public void run() {
onNotify(getEvent(dinfo), dinfo);
}
});
}
protected int getEvent(DInfo dinfo) {
int event = dinfo.getInt(JointryCommon.K_METHOD);
if (event == 0) {
return JointryCommon.M_DUMMY;
}
return event;
}
protected Sprite getTargetSprite(DInfo dinfo) {
if (mainController == null) {
return null;
}
for (Sprite sprite : mainController.getFrontStageController().getSprites()) {
if (sprite.getName().equals(dinfo.get(K_SPRITE_NAME))) {
return sprite;
}
}
return null;
}
}