package context.apps.demos.roomlight; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JLabel; import javax.swing.JPanel; import context.arch.discoverer.Discoverer; import context.arch.intelligibility.Explanation; import context.arch.intelligibility.presenters.QueryPanel; import context.arch.intelligibility.presenters.StringPresenter; import context.arch.intelligibility.query.Query; import context.arch.intelligibility.query.QueryListener; /** * Main application with GUI to display the *intelligible* smart room application. * This demonstrates some intelligibility features. * @author Brian Y. Lim * */ public class RoomIntelligibleApplication extends RoomApplication implements QueryListener { private static final long serialVersionUID = 2850838476909478218L; private QueryPanel queryPanel; private JLabel explanationLabel; private JPanel intelligibilityPanel; public RoomIntelligibleApplication() { super(); /* * Context intelligibility */ explainer = enactor.getExplainer(); // presenter = new TypePanelPresenter(enactor); presenter = new StringPresenter(enactor); queryPanel = new QueryPanel(enactor); intelligibilityPanel.add(queryPanel); explanationLabel = new JLabel(); intelligibilityPanel.add(explanationLabel); queryPanel.addQueryListener(this); } @Override protected void initLayout() { super.initLayout(); /* * Bottom panel for explanations */ intelligibilityPanel = new JPanel(); intelligibilityPanel.setPreferredSize(new Dimension(10, 80)); add(intelligibilityPanel, BorderLayout.SOUTH); } @Override public void setLight(int light) { super.setLight(light); queryPanel.update(); } /** * Called when the user selects a query. * It generates the corresponding explanation, and has it rendered. */ @Override public void queryInvoked(Query query) { Explanation explanation = explainer.getExplanation(query); System.out.println("explanation: " + explanation); String text = presenter.render(explanation); explanationLabel.setText("<html>" + text + "</html>"); } public static void main(String[] args) { Discoverer.start(); new RoomIntelligibleApplication().setVisible(true); } }