package org.uva.sea.ql.gui.startIDE; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.swing.DefaultListModel; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import org.uva.sea.ql.ast.statement.Form; import org.uva.sea.ql.gui.questionaire.QuestionaireView; import org.uva.sea.ql.parser.jacc.ParseException; import problems.Error; import problems.Problems; import problems.Warning; public class IDEController { private final JFrame frame; private Form form; public IDEController(JFrame frame){ this.frame = frame; } public void typeCheck() { TypeChecker controller = new TypeChecker(); try { IDERenderer.warnings.removeAllElements(); IDERenderer.errors.removeAllElements(); form = controller.runTypeChecker(readText()); Problems typeProblems = controller.getProblems(form); addProblemsToList(typeProblems); } catch (ParseException e1) { JOptionPane.showMessageDialog(frame, "Parse Error", "Error", JOptionPane.ERROR_MESSAGE); } } private void addProblemsToList(Problems problems) { for(Warning w : problems.warnings){ IDERenderer.warnings.addElement(w.toString()); } for(Error e : problems.errors){ IDERenderer.errors.addElement(e.toString()); } } private String readText() { String questionaire = IDERenderer.input.getText(); return questionaire; } public void generateQuestionairePressed() { typeCheck(); if(isEmpty(IDERenderer.errors) && isEmpty(IDERenderer.warnings)){ startQuesionaire(); } else { JOptionPane.showMessageDialog(frame, "There are errors / warnings in the code", "Error", JOptionPane.ERROR_MESSAGE); } } private void startQuesionaire() { QuestionaireView b = new QuestionaireView(form); b.newScreen(form); } private boolean isEmpty(DefaultListModel<String> list){ return list.isEmpty(); } public void saveButtonClicked(String input) { BufferedWriter buffwriter = null; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File("/home/me/Documents")); int retrival = chooser.showSaveDialog(null); if (retrival == JFileChooser.APPROVE_OPTION) { try { File file = new File(chooser.getSelectedFile()+".dsl"); file.createNewFile(); buffwriter = new BufferedWriter(new FileWriter(chooser.getSelectedFile()+".dsl")); buffwriter.write(input); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { try { buffwriter.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } public void printFileToField(File file) throws IOException { BufferedReader br = new BufferedReader(new FileReader(file)); try { String line = br.readLine(); while (line != null) { IDERenderer.input.append(line + '\n'); line = br.readLine(); } } finally { br.close(); } } public void loadButtonPressed() { final JFileChooser fc = new JFileChooser(); fc.setFileFilter(new FileFilter() { @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } final String name = f.getName(); return name.endsWith(".dsl") || name.endsWith(".txt"); } @Override public String getDescription() { return "*.dsl,*.txt"; } }); int returnVal = fc.showOpenDialog(frame); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); try { printFileToField(file); } catch (IOException e1) { e1.printStackTrace(); } } else { } } }