source: branches/dev-5819/Compiler/ModelicaCompiler/src/jastadd/DebugCompiler.jrag @ 13800

Last change on this file since 13800 was 13800, checked in by randersson, 8 weeks ago

#5819 Merged trunk into branch

File size: 5.9 KB
Line 
1/*
2    Copyright (C) 2014 Modelon AB
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, version 3 of the License.
7
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.
15*/
16
17import java.io.ByteArrayOutputStream;
18import java.io.File;
19import java.io.IOException;
20import java.io.PrintStream;
21
22import org.jmodelica.util.exceptions.CompilerException;
23import org.jmodelica.util.logging.Level;
24import org.jmodelica.util.logging.StreamingLogger;
25
26aspect DebugCompiler {
27   
28@SuppressWarnings("serial")
29public class DebugCompiler extends javax.swing.JFrame {
30
31        private javax.swing.JTextArea code;
32        private javax.swing.JTextField className;
33       
34        private ModelicaCompiler mc;
35    private javax.swing.JComboBox target;
36        private File tempDir;
37        private boolean deleteAll;
38    private javax.swing.JTextArea outText;
39    private javax.swing.JComboBox level;
40
41        public DebugCompiler() {
42                super("Compile Modelica code snippet");
43                javax.swing.Box page = new javax.swing.Box(javax.swing.BoxLayout.Y_AXIS);
44                add(page);
45               
46                page.add(new javax.swing.JLabel("Code:"));
47                code = new javax.swing.JTextArea("model Test\n\nend Test;", 20, 70);
48                page.add(new javax.swing.JScrollPane(code));
49               
50                page.add(new javax.swing.JLabel("Output:"));
51                outText = new javax.swing.JTextArea("", 20, 70);
52                page.add(new javax.swing.JScrollPane(outText));
53               
54                javax.swing.JPanel bottom = new javax.swing.JPanel(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
55                page.add(bottom);
56       
57        bottom.add(new javax.swing.JLabel("Log level:"));
58        level = new javax.swing.JComboBox(Level.values());
59        level.setSelectedItem(Level.DEBUG);
60        bottom.add(level);
61               
62                bottom.add(new javax.swing.JLabel("Target:"));
63                target = new javax.swing.JComboBox(ModelicaCompiler.TargetObject.values());
64        bottom.add(target);
65               
66        bottom.add(new javax.swing.JLabel("Class to compile:"));
67                className = new javax.swing.JTextField("Test", 20);
68                bottom.add(className);
69               
70                javax.swing.JButton compile = new javax.swing.JButton("Compile");
71                bottom.add(compile);
72                compile.addActionListener(new CompileListener());
73               
74                setDefaultCloseOperation(EXIT_ON_CLOSE);
75                pack();
76               
77                mc = new ModelicaCompiler(ModelicaCompiler.createOptions());
78                tempDir = getTempDir();
79                mc.setTempFileDir(tempDir);
80        }
81       
82        public File getTempDir() {
83                try {
84                        File tempDir = File.createTempFile("org.jmodelica.util.", "");
85                        tempDir.delete();
86                        if (tempDir.mkdir()) {
87                                tempDir.deleteOnExit();
88                                deleteAll = true;
89                                return tempDir;
90                        }
91                } catch (IOException e) {
92                } catch (SecurityException e) {
93                }
94                deleteAll = false;
95                return new File(System.getProperty("java.io.tmpdir"));
96        }
97       
98        public static void main(String[] args) {
99                new DebugCompiler().setVisible(true);
100        }
101
102        public class CompileListener implements java.awt.event.ActionListener {
103
104                public void actionPerformed(java.awt.event.ActionEvent e) {
105                    new CompilationThread(className.getText(), code.getText()).start();
106                }
107
108        }
109       
110        public class CompilationThread extends Thread {
111           
112        private String name;
113        private String code;
114       
115        public CompilationThread(String name, String code) {
116            this.name = name;
117            this.code = code;
118        }
119
120        public void run() {
121            File file = new File(tempDir, name  + ".mo");
122            Level lv = (Level) level.getSelectedItem();
123            OutputHandler out = new OutputHandler(outText, lv);
124            outText.setText("");
125            try {
126                PrintStream fs = new PrintStream(file);
127                fs.println(code);
128                fs.close();
129               
130                mc.setLogger(out);
131                ModelicaCompiler.TargetObject targ = (ModelicaCompiler.TargetObject) target.getSelectedItem();
132                mc.compileModel(new String[] { file.getAbsolutePath() }, name, targ, null);
133            } catch (Exception ex) {
134                out.writeException(ex);
135                return;
136            } finally {
137                try {
138                    if (deleteAll)
139                        for (File f : tempDir.listFiles())
140                            f.delete();
141                    else
142                        file.delete();
143                } catch (Exception ex) {}
144            }
145            out.info("*** Compilation sucessful. ***");
146        }
147       
148    }
149
150    public class OutputHandler extends ModelicaLogger {
151       
152        private javax.swing.JTextArea target;
153
154        public OutputHandler(javax.swing.JTextArea target, Level level) {
155            super(level);
156            this.target = target;
157        }
158
159        public void reset() {
160            target.setText("");
161        }
162
163        protected void writeException(Exception ex) {
164            if (ex instanceof CompilerException) {
165                do_write(ex.toString());
166            } else {
167                ByteArrayOutputStream buf = new ByteArrayOutputStream(512);
168                ex.printStackTrace(new PrintStream(buf));
169                do_write(buf.toString());
170            }
171        }
172
173        @Override
174        public void close() {
175        }
176
177        @Override
178        protected void write(Level level, Level alreadySentLevel, LoggingUnit unit) {
179            do_write(unit.print(level));
180        }
181
182        protected void do_write(String message) {
183            target.append(message + "\n");
184        }
185
186    }
187
188}
189
190}
Note: See TracBrowser for help on using the repository browser.