Package uk.ac.cranfield.thesis.client.view

Source Code of uk.ac.cranfield.thesis.client.view.GraphPanel$RungeKuttaSolverCallback

package uk.ac.cranfield.thesis.client.view;

import java.util.List;

import uk.ac.cranfield.thesis.client.service.ParserService;
import uk.ac.cranfield.thesis.client.service.ParserServiceAsync;
import uk.ac.cranfield.thesis.client.service.RungeKuttaSolverService;
import uk.ac.cranfield.thesis.client.service.RungeKuttaSolverServiceAsync;
import uk.ac.cranfield.thesis.shared.Equation;
import uk.ac.cranfield.thesis.shared.Solution;

import com.gargoylesoftware.htmlunit.javascript.host.Window;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.visualizations.corechart.LineChart;
import com.google.gwt.visualization.client.visualizations.corechart.Options;

public class GraphPanel extends CaptionPanel implements Runnable
{
   
    private LineChart chart;
    private List<String> equations;
    private DataTable dataTable;
    private final ParserServiceAsync parserService = ParserService.Util.getInstance();
    private RungeKuttaSolverServiceAsync rungeKuttaSolverService = RungeKuttaSolverService.Util.getInstance();
    private int equationsCounter;
    private DialogBox errorDialog;
    private InputPanel inputPanel;
   
    public GraphPanel(InputPanel panel)
    {
        this.inputPanel = panel;
        setCaptionText("Solution");
        setStyleName("bigFontRoundedBorder");
        errorDialog = new DialogBox();
        errorDialog.setAnimationEnabled(true);
        Button closeButton = new Button("Close");
        closeButton.addClickHandler(new ClickHandler()
        {
           
            @Override
            public void onClick(ClickEvent event)
            {
                errorDialog.hide();
            }
        });
        errorDialog.add(closeButton);
       
        // chart = new LineChart(DataTable.create(), createOptions());
        // add(chart);
    }
   
    @Override
    public void run()
    {
        createTable();
    }
   
    private Options createOptions()
    {
        Options options = Options.create();
        options.setWidth((Window.WINDOW_WIDTH / 2));
        options.setHeight((Window.WINDOW_HEIGHT / 2));
        // options.setTitle("Solution");
        return options;
    }
   
    public void setEquations(List<String> equations)
    {
        this.equations = equations;
    }
   
    private void createTable()
    {
        dataTable = DataTable.create();
        equationsCounter = 0;
        for (String equation : equations)
            parserService.parseEquation(equation, new ParserCallback());
    }
   
    private class EquationEvaluatorCallback implements AsyncCallback<Solution>
    {
       
        @Override
        public void onFailure(Throwable caught)
        {
            System.out.println(caught.getMessage());
        }
       
        @Override
        public void onSuccess(Solution solution)
        {
            for (int i = 0; i < solution.size(); i++)
            {
                // x
                // dataTable.setValue(i, solution.getxAxis(), i);
                // y
                // dataTable.setValue(i, solution.getyAxis(), solution.getResult(i));
            }
           
            equationsCounter++;
           
            if (equationsCounter == equations.size())
            {
                chart = new LineChart(dataTable, createOptions());
                clear();
                add(chart);
            }
        }
    };
   
    private class ParserCallback implements AsyncCallback<Equation>
    {
       
        @Override
        public void onFailure(Throwable caught)
        {
            errorDialog.setText(caught.getMessage());
            errorDialog.center();
            errorDialog.show();
        }
       
        @Override
        public void onSuccess(Equation result)
        {
            dataTable.addColumn(ColumnType.NUMBER, String.valueOf(result.getIndependentVariable()));
            dataTable.addColumn(ColumnType.NUMBER, result.getFunctionVariable() + "(" + result.getIndependentVariable()
                    + ")");
           
            rungeKuttaSolverService.solve(result, inputPanel.getStep(), inputPanel.getRangeStart(),
                    inputPanel.getRangeStop(), new RungeKuttaSolverCallback());
           
        }
    }
   
    private class RungeKuttaSolverCallback implements AsyncCallback<Solution>
    {
       
        @Override
        public void onFailure(Throwable caught)
        {
            errorDialog.setText(caught.getMessage());
            errorDialog.center();
            errorDialog.show();
           
        }
       
        @Override
        public void onSuccess(Solution result)
        {
            dataTable.addRows(result.size());
           
            // for (int i = 0; i < result.size(); i++)
            int k = 0;
            for (double i = result.getStart(); i < result.getStop() && k < result.size(); i += result.getStep())
            {
                // x
                dataTable.setValue(k, equationsCounter, i);
                // y
                dataTable.setValue(k, equationsCounter + 1, result.getResult(k));
               
               
                k++;
            }
           
            equationsCounter++;
           
            if (equationsCounter == equations.size())
            {
                chart = new LineChart(dataTable, createOptions());
                clear();
                add(chart);
            }
           
        }
    }
   
}
TOP

Related Classes of uk.ac.cranfield.thesis.client.view.GraphPanel$RungeKuttaSolverCallback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.