package senseiTests.domainsTest; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import sensei.util.IntWrapper; class StateTransferInfoPanel extends JPanel implements PhasePanelUser, TransferInfoPrintable, ActionListener { public StateTransferInfoPanel(StateTransferInfoPanelUser user) { super(new BorderLayout()); this.user=user; init(); makeUnvisible(); wrapper = new IntWrapper(); } public void makeUnvisible() { ((CardLayout) (statusPanel.getLayout())).last(statusPanel); disableFields(); } void showFields() { ((CardLayout) (statusPanel.getLayout())).first(statusPanel); } /** * Called from the PhasePanel when the output phase changes */ public void phaseChanged(int phase) { String state = user.phaseChanged(phase); if (state!=null) transferState.displayIfVisible(state); } public void showAssumeState(int subgroupId) { } public void showSyncTransferFields(int subgroupId, int coordinator, int inPhase, int outPhase, boolean outPhaseEnded) { disableFields(); displaySubgroupId(subgroupId); displayTransferMember(coordinator); inputPhase.display(inPhase); showOutputPhase(outPhase, MAX_NUM_PHASES, outPhaseEnded); displayAction("sync_transfer"); showFields(); } public void showStartTransferFields(int subgroupId, int coordinated, int inPhase, int maxPhases, int outPhase, boolean outPhaseEnded) { disableFields(); displaySubgroupId(subgroupId); displayTransferMember(coordinated); inputPhase.display(inPhase); showOutputPhase(outPhase, maxPhases, outPhaseEnded); displayAction("start_transfer"); showFields(); } public void showGetStateFields(int subgroupId, int inPhase, int maxPhases, int outPhase, boolean outPhaseEnded) { disableFields(); displaySubgroupId(subgroupId); inputPhase.display(inPhase); showOutputPhase(outPhase, maxPhases, outPhaseEnded); displayAction("get_state"); transferState.makeVisible(); showFields(); } public void showSetStateFields(int subgroupId, String substate, int inPhase) { disableFields(); displaySubgroupId(subgroupId); inputPhase.display(inPhase); displayAction("set_state"); transferState.display(substate); showFields(); } public void showGetStateFields(int subgroupId) { disableFields(); displaySubgroupId(subgroupId); displayAction("get_state"); showFields(); } public void showSetStateFields(int subgroupId, String substate) { disableFields(); displaySubgroupId(subgroupId); displayAction("set_state"); transferState.display(substate); showFields(); } public void showStopTransferFields(int subgroupId, int member, boolean transferEnded) { disableFields(); displaySubgroupId(subgroupId); displayTransferMember(member); displayTransferFinished(transferEnded); displayAction("stop_transfer"); showFields(); } public void showInterruptTransferFields(int subgroupId, int inPhase, int maxPhases, int outPhase, boolean outPhaseEnded) { disableFields(); displaySubgroupId(subgroupId); inputPhase.display(inPhase); showOutputPhase(outPhase, maxPhases, outPhaseEnded); displayAction("interrupt_transfer"); showFields(); } public void showContinueTransferFields(int subgroupId, int member, int inPhase, int maxPhases, int clientPhase, int outPhase, boolean outPhaseEnded) { disableFields(); displaySubgroupId(subgroupId); displayTransferMember(member); inputPhase.display(inPhase); showOutputPhase(outPhase, maxPhases, outPhaseEnded); additionalPhase.display(clientPhase); displayAction("continue_transfer"); showFields(); } void showOutputPhase(int phase, int maxOutPhases, boolean phaseEnded) { outputPhase.display(phase, maxOutPhases, phaseEnded); phaseChanged(phase); } void displaySubgroupId(int id) { wrapper.i=id; subgroup.display(wrapper.toString()); } void displayTransferFinished(boolean finished) { status.display(finished? "YES" : "NO"); } void displayStateSent(String stateSent) { transferState.display(stateSent); } void displayAction(String actionString) { action.display(actionString); } void displayTransferMember(int member) { transferMember.display(String.valueOf(member)); } void disableFields() { transferMember.makeUnvisible(); action.makeUnvisible(); transferState.makeUnvisible(); status.makeUnvisible(); inputPhase.makeUnvisible(); outputPhase.makeUnvisible(); additionalPhase.makeUnvisible(); } JPanel createTransferStatusPanel() { inputPhase = new PhasePanel("Input phase"); outputPhase = new EditablePhasePanel("Output phase", this); additionalPhase = new PhasePanel("Input client phase"); action = new FieldPanel("action: ", 9); transferMember = new FieldPanel("xfer member: ", 7); transferState = new FieldPanel("xfer state: ", 6); status = new FieldPanel("ended ok: ", 3); subgroup = new FieldPanel("subgroup id: ",9); confirmButton = new JButton("Confirm"); confirmButton.addActionListener(this); Box boxv = Box.createVerticalBox(); Box boxh1 = Box.createHorizontalBox(); Box boxh2 = Box.createHorizontalBox(); Box boxh3 = Box.createHorizontalBox(); boxv.add(boxh1); boxv.add(Box.createVerticalStrut(5)); boxv.add(boxh2); boxv.add(Box.createVerticalStrut(5)); boxv.add(boxh3); boxh1.add(subgroup); boxh1.add(action); boxh1.add(confirmButton); boxh2.add(transferMember); boxh2.add(transferState); boxh2.add(status); boxh3.add(inputPhase); boxh3.add(outputPhase); boxh3.add(additionalPhase); JPanel ret = new JPanel(); ret.add(boxv); return ret; } JPanel createEmptyPanel() { JPanel ret = new JPanel(new BorderLayout()); ret.add(new JLabel("There is currently no state transfer operation", SwingConstants.CENTER), BorderLayout.CENTER); return ret; } void init() { JPanel panel = new JPanel(new FlowLayout()); add(panel, BorderLayout.WEST); statusPanel = new JPanel(new CardLayout()); statusPanel.add(createTransferStatusPanel(),"1");//string not used statusPanel.add(createEmptyPanel(),"0"); panel.add(statusPanel); setBorder(BorderFactory.createTitledBorder("State Transfer Info")); } public void actionPerformed(ActionEvent e) { if (e.getSource()==confirmButton) { user.confirmed(outputPhase.getPhase(), outputPhase.getPhaseTermination()); } } JPanel statusPanel; JButton confirmButton; FieldPanel transferMember, action, transferState, status, subgroup; PhasePanel inputPhase, additionalPhase; EditablePhasePanel outputPhase; StateTransferInfoPanelUser user; IntWrapper wrapper; static public final int MAX_NUM_PHASES=PhasePanel.MAXNUMPHASES; };