/*
* Encog(tm) Workbench v3.4
* http://www.heatonresearch.com/encog/
* https://github.com/encog/encog-java-workbench
*
* Copyright 2008-2016 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.workbench.tabs.population.epl;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import org.encog.ml.prg.EncogProgram;
import org.encog.parse.expression.common.RenderCommonExpression;
import org.encog.parse.expression.rpn.RenderRPN;
import org.encog.util.Format;
import org.encog.util.HTMLReport;
import org.encog.workbench.EncogWorkBench;
import org.encog.workbench.dialogs.select.SelectDialog;
import org.encog.workbench.dialogs.select.SelectItem;
import org.encog.workbench.frames.document.tree.ProjectEGFile;
import org.encog.workbench.tabs.EncogCommonTab;
import org.encog.workbench.tabs.query.general.RegressionQueryTab;
import org.encog.workbench.tabs.visualize.epl.EPLLatexTab;
import org.encog.workbench.tabs.visualize.epl.EPLTreeTab;
public class EncogProgramTab extends EncogCommonTab implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JToolBar toolbar;
private JButton buttonQuery;
private JButton buttonRestructure;
private JButton buttonVisualize;
private final JScrollPane scroll;
private final JEditorPane editor;
private EncogProgram program;
public EncogProgramTab(final EncogProgram data) {
super(null);
this.program = (EncogProgram) data;
setLayout(new BorderLayout());
this.toolbar = new JToolBar();
this.toolbar.setFloatable(false);
this.toolbar.add(this.buttonQuery = new JButton("Query"));
this.toolbar.add(this.buttonRestructure = new JButton("Restructure"));
this.toolbar.add(this.buttonVisualize = new JButton("Visualize"));
this.buttonQuery.addActionListener(this);
this.buttonRestructure.addActionListener(this);
this.buttonVisualize.addActionListener(this);
add(this.toolbar, BorderLayout.PAGE_START);
this.editor = new JEditorPane("text/html", "");
this.editor.setEditable(false);
this.scroll = new JScrollPane(this.editor);
add(this.scroll, BorderLayout.CENTER);
produceReport();
}
public void actionPerformed(final ActionEvent action) {
try {
if (action.getSource() == this.buttonQuery) {
performQuery();
} else if (action.getSource() == this.buttonVisualize) {
this.handleVisualize();
} else if (action.getSource() == this.buttonRestructure) {
this.handleRestructure();
}
} catch (Throwable t) {
EncogWorkBench.displayError("Error", t);
}
}
private void handleRestructure() {
try {
String source = EncogWorkBench
.displayInput("Enter a new expression.");
this.program.compileExpression(source);
this.produceReport();
} catch (Throwable t) {
EncogWorkBench.displayError("Compile Error", t);
}
}
private void performQuery() {
try {
RegressionQueryTab tab = new RegressionQueryTab(this.program);
EncogWorkBench.getInstance().getMainWindow().getTabManager()
.openModalTab(tab, "Query Encog Program");
} catch (Throwable t) {
EncogWorkBench.displayError("Error", t);
}
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void handleVisualize() {
SelectItem selectTree;
SelectItem selectLatex;
List<SelectItem> list = new ArrayList<SelectItem>();
list.add(selectTree = new SelectItem("Tree",
"View the program as a tree."));
list.add(selectLatex = new SelectItem("LaTeX Formula",
"Render the program as a LaTex Formula."));
SelectDialog sel = new SelectDialog(EncogWorkBench.getInstance()
.getMainWindow(), list);
sel.setVisible(true);
if (sel.getSelected() == selectTree) {
analyzeTree();
} else if (sel.getSelected() == selectLatex) {
analyzeLatex();
}
}
private void analyzeTree() {
try {
EPLTreeTab tab = new EPLTreeTab(this.program);
EncogWorkBench.getInstance().getMainWindow().getTabManager()
.openModalTab(tab, "Encog Program");
} catch (Throwable t) {
EncogWorkBench.displayError("Error", t);
}
}
private void analyzeLatex() {
try {
EPLLatexTab tab = new EPLLatexTab(this.program);
EncogWorkBench.getInstance().getMainWindow().getTabManager()
.openModalTab(tab, "Encog Program");
} catch (Throwable t) {
EncogWorkBench.displayError("Error", t);
}
}
public void produceReport() {
HTMLReport report = new HTMLReport();
report.beginHTML();
report.title("EncogProgram");
report.beginBody();
report.h1(this.program.getClass().getSimpleName());
report.beginTable();
report.tablePair("Input Count",
Format.formatInteger(this.program.getInputCount()));
String score = "N/A";
String adjustedScore = "N/A";
if( !Double.isNaN(this.program.getScore())) {
score = Format.formatDouble(this.program.getScore(), 4);
}
if( !Double.isNaN(this.program.getAdjustedScore())) {
adjustedScore = Format.formatDouble(this.program.getAdjustedScore(), 4);
}
report.tablePair("Size", Format.formatInteger(this.program.size()));
report.tablePair("Score", score);
report.tablePair("Adjusted Score",adjustedScore);
RenderCommonExpression renderCommonFormat = new RenderCommonExpression();
RenderRPN renderRPN = new RenderRPN();
report.tablePair("Common Format",
renderCommonFormat.render(this.program));
report.tablePair("Reverse Polish Notation (RPN)",
renderRPN.render(this.program));
report.endTable();
report.endBody();
report.endHTML();
this.editor.setText(report.toString());
}
@Override
public String getName() {
return "Encog Program";
}
}