package context.apps.demos.homeactivity; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import context.arch.comm.DataObject; import context.arch.enactor.EnactorComponentInfo; import context.arch.enactor.EnactorListener; import context.arch.enactor.EnactorParameter; import context.arch.intelligibility.Explanation; import context.arch.intelligibility.hmm.HmmExplainer; import context.arch.intelligibility.query.Query; import context.arch.storage.Attributes; public class TimeStepPanel extends JPanel implements ActionListener, EnactorListener { private static final long serialVersionUID = 3516157109058541075L; private JButton backButton; private JButton forwardButton; private int MAX_STEP = 5; private int step; private HomeModel contextModel; private HomeApplication viewer; private HmmExplainer explainer; public TimeStepPanel(HomeApplication viewer) { this.viewer = viewer; this.contextModel = viewer.contextModel; this.explainer = (HmmExplainer) contextModel.activityEnactor.getExplainer(); backButton = new JButton(new ImageIcon("demos/home-hmm/img/arrow-left.png")); backButton.setToolTipText("Move back one step in time"); backButton.setPreferredSize(new Dimension(40, 40)); backButton.setEnabled(false); backButton.addActionListener(this); add(backButton); contextModel.activityEnactor.addListener(this); forwardButton = new JButton(new ImageIcon("demos/home-hmm/img/arrow-right.png")); forwardButton.setToolTipText("Move forward one step in time"); forwardButton.setPreferredSize(new Dimension(40, 40)); forwardButton.setEnabled(false); forwardButton.addActionListener(this); add(forwardButton); MAX_STEP = contextModel.numTimeSteps() - 1; initSequence(); } /** * Whether to step forward or backwards and by how many steps. * @param step */ public void setTimeStep(int step) { this.step = step; if (step <= HomeModel.SEQUENCE_LENGTH - 1) { backButton.setEnabled(false); } else if (step >= MAX_STEP) { forwardButton.setEnabled(false); } else { backButton.setEnabled(true); forwardButton.setEnabled(true); } contextModel.setTimeStep(step); } @Override public void actionPerformed(ActionEvent evt) { Object src = evt.getSource(); if (src == backButton) { setTimeStep(step - 1); } else if (src == forwardButton) { setTimeStep(step + 1); } // viewer.evidencePanel.setVisible(false); Query query = new Query(Query.QUESTION_WHAT, ActivityWidget.ACTIVITY, System.currentTimeMillis()); Explanation explanation = explainer.getExplanation(query); System.out.println("Explanation: " + explanation); viewer.presenter.render(explanation); } public void initSequence() { forwardButton.setEnabled(true); // step forward multiple times to fill full sequence for (int i = 0; i < HomeModel.SEQUENCE_LENGTH; i++) { forwardButton.doClick(); } // forwardButton.doClick(); // do one more, since otherwise evidences are NaN } @Override public void componentEvaluated(EnactorComponentInfo eci) { } @Override public void componentAdded(EnactorComponentInfo eci, Attributes paramAtts) {} @Override public void componentRemoved(EnactorComponentInfo eci, Attributes paramAtts) {} @Override public void parameterValueChanged(EnactorParameter parameter, Attributes validAtts, Object value) {} @Override public void serviceExecuted(EnactorComponentInfo eci, String serviceName, String functionName, Attributes input, DataObject returnDataObject) {} }