package net.seninp.grammarviz.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.util.Observable; import javax.swing.JFileChooser; import net.seninp.grammarviz.model.GrammarVizMessage; import net.seninp.grammarviz.model.GrammarVizModel; import net.seninp.grammarviz.session.UserSession; /** * Implements the Controler component for GrammarViz2 GUI MVC. * * @author psenin * */ public class GrammarVizController extends Observable implements ActionListener { private GrammarVizModel model; private UserSession session; /** * Constructor. * * @param model the program's model. */ public GrammarVizController(GrammarVizModel model) { super(); this.model = model; this.session = new UserSession(); } /** * Implements a listener for the "Browse" button at GUI; opens FileChooser and so on. * * @return the action listener. */ public ActionListener getBrowseFilesListener() { ActionListener selectDataActionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Select Data File"); String filename = model.getDataFileName(); if (!((null == filename) || filename.isEmpty())) { fileChooser.setSelectedFile(new File(filename)); } if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); // here it calls to model -informing about the selected file. // model.setDataSource(file.getAbsolutePath()); } } }; return selectDataActionListener; } /** * Load file listener. * * @return the listener instance. */ public ActionListener getLoadFileListener() { ActionListener loadDataActionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { model.loadData(e.getActionCommand()); } }; return loadDataActionListener; } /** * This provide Process action listener. Gets all the parameters from the session component * * @return */ public ActionListener getProcessDataListener() { ActionListener discretizeAndGrammarListener = new ActionListener() { public void actionPerformed(ActionEvent event) { StringBuffer logSB = new StringBuffer("running inference with settings:"); logSB.append(" SAX window: ").append(session.useSlidingWindow); logSB.append(", SAX paa: ").append(session.useSlidingWindow); logSB.append(", SAX alphabet: ").append(session.useSlidingWindow); logSB.append(", sliding window:").append(session.useSlidingWindow); logSB.append(", num.reduction:").append(session.useSlidingWindow); logSB.append(", norm.threshold: ").append(session.useSlidingWindow); logSB.append(", GI alg: ").append(session.giAlgorithm); logSB.append(", grammar filename: ").append(session.useSlidingWindow); log(logSB.toString()); try { model.processData(session.giAlgorithm, session.useSlidingWindow, session.numerosityReductionStrategy, session.saxWindow, session.saxPAA, session.saxAlphabet, session.normalizationThreshold, session.grammarOutputFileName); } catch (IOException exception) { // TODO Auto-generated catch block exception.printStackTrace(); } } }; return discretizeAndGrammarListener; } @Override public void actionPerformed(ActionEvent e) { this.setChanged(); notifyObservers(new GrammarVizMessage(GrammarVizMessage.STATUS_MESSAGE, "controller: Unknown action performed " + e.getActionCommand())); } /** * Gets the current session. * * @return */ public UserSession getSession() { return this.session; } /** * Performs logging messages distribution. * * @param message the message to log. */ private void log(String message) { this.setChanged(); notifyObservers( new GrammarVizMessage(GrammarVizMessage.STATUS_MESSAGE, "controller: " + message)); } }