Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / application / views / FlowLayerWindow.java
package application.views;

import application.ApplicationWindow;
import application.editor.Editor;
import application.editor.IStageChangeListener;
import application.editor.Stage;
import application.editor.stages.DataFlowModelingStage;
import application.editor.stages.DependencyModelingStage;
import application.editor.stages.PushPullSelectionStage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class FlowLayerWindow extends JDialog implements IStageChangeListener {
    private String title = "Flow Layer";
    private JCheckBox dataFlowCheckBox = null;
    private JCheckBox pushFlowCheckBox = null;
    private JCheckBox pullFlowCheckBox = null;
    private JCheckBox dependencyCheckBox = null;

    private Stage stage = null;

    public FlowLayerWindow(final ApplicationWindow owner){
        super(owner);

        setTitle(title);
        setDefaultCloseOperation(HIDE_ON_CLOSE);

        stage = Editor.STAGE_PUSH_PULL_SELECTION;

        // Add check boxes.
        dataFlowCheckBox  = new JCheckBox("Data-Flow", false);
        pushFlowCheckBox = new JCheckBox("Push-Flow", true);
        pullFlowCheckBox   = new JCheckBox("Pull-Flow", true);
        dependencyCheckBox = new JCheckBox("Dependency", false);

        // Add handlers to the check boxes.
        dataFlowCheckBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stage.setLayerEnabled(Stage.DATA_FLOW_LAYER, dataFlowCheckBox.isSelected());
            }});

        pushFlowCheckBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stage.setLayerEnabled(Stage.PUSH_FLOW_LAYER, pushFlowCheckBox.isSelected());
            }});

        pullFlowCheckBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stage.setLayerEnabled(Stage.PULL_FLOW_LAYER, pullFlowCheckBox.isSelected());
            }});

        dependencyCheckBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, dependencyCheckBox.isSelected());
            }});

        dataFlowCheckBox.setEnabled(false);
        pushFlowCheckBox.setEnabled(false);
        pullFlowCheckBox.setEnabled(false);
        dependencyCheckBox.setEnabled(false);

        // Initialize the layer panel layout.
        Container panel = getContentPane();
        panel.setLayout(new GridLayout(/*low*/4, /*col*/1));
        panel.add(dataFlowCheckBox);
        panel.add(pushFlowCheckBox);
        panel.add(pullFlowCheckBox);
        panel.add(dependencyCheckBox);
        Point location = new Point(owner.getX() + (owner.getWidth() / 2) - (this.getWidth() / 2), owner.getY() + (owner.getHeight() / 2) - (this.getHeight() / 2));
        setLocation(location);

        pack();
        setResizable(false);
    }

    /**
     * Toggle the activation of layer check boxes whenever the current stage changes.
	 */
    @Override
    public void stageChanged(Stage newStage) {
        if (newStage instanceof DependencyModelingStage) {
            // DependencyStageでは全て操作可能
            dataFlowCheckBox.setEnabled(true);
            pushFlowCheckBox.setEnabled(true);
            pullFlowCheckBox.setEnabled(true);
            dependencyCheckBox.setEnabled(true);

            // Dependencyチェックを自動でON
            dependencyCheckBox.setSelected(true);
            newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, true);

        } else if (newStage instanceof PushPullSelectionStage) {
            // PushPullStage:Data,Push,Pullを表示(操作不可)
            setAllCheckBoxesEnabled(false);
            dataFlowCheckBox.setSelected(true);
            pushFlowCheckBox.setSelected(true);
            pullFlowCheckBox.setSelected(true);
            dependencyCheckBox.setSelected(false);

            newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, true);
            newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, true);
            newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, true);
            newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);

        } else if (newStage instanceof DataFlowModelingStage) {
            // DataFlowStage:Dataのみ表示(操作不可)
            setAllCheckBoxesEnabled(false);
            dataFlowCheckBox.setSelected(true);
            pushFlowCheckBox.setSelected(false);
            pullFlowCheckBox.setSelected(false);
            dependencyCheckBox.setSelected(false);

            newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, true);
            newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, false);
            newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, false);
            newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);
        } else {
            // その他ステージではすべて非活性
            setAllCheckBoxesEnabled(false);
            dataFlowCheckBox.setSelected(false);
            pushFlowCheckBox.setSelected(false);
            pullFlowCheckBox.setSelected(false);
            dependencyCheckBox.setSelected(false);

            newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, false);
            newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, false);
            newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, false);
            newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);
        }

    }

    private void setAllCheckBoxesEnabled(boolean enabled) {
        dataFlowCheckBox.setEnabled(enabled);
        pushFlowCheckBox.setEnabled(enabled);
        pullFlowCheckBox.setEnabled(enabled);
        dependencyCheckBox.setEnabled(enabled);
    }
}