Package org.metrapp.sys

Source Code of org.metrapp.sys.Controller

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.metrapp.sys;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import org.metrapp.basicrcode.InitialRCode;
import org.metrapp.dataModel.DataFrame;
import org.metrapp.dataModel.DataFrameFromCSV;
import org.metrapp.dataModel.StringDataFrame;
import org.metrapp.io.Loader;
import org.metrapp.io.Observer;
import org.metrapp.io.Subject;
import org.metrapp.newJavaFilters.JavaFilterData;
import rcaller.RCaller;
import rcaller.RCode;

/**
*
* @author Ilija
*/
public class Controller implements Subject {

    private static Controller instance = null;
    private String rScriptExecutablePath = null;
    private DataFrame dataFrame;
    private LinkedList<Observer> observers;
    private StringBuilder rCodeToBeExecuted;
    private String selectedFile;
    private String solarLongitude;
    private File graph;
    private String solarLong;

    private Controller() {
        rScriptExecutablePath = "";
        observers = new LinkedList<Observer>();
        rCodeToBeExecuted = new StringBuilder();
        solarLong = "";
    }

    public static Controller getInstance() {
        if (instance == null) {
            instance = new Controller();
        }
        return instance;
    }

    public boolean initializeBasic(RCaller caller, RCode code) {
        caller.setRscriptExecutable(rScriptExecutablePath);
        code.clear();
        return true;
    }

    public boolean updateDataFrame(DataFrame dt) {
        dataFrame = dt;
        notifyAllObservers();
        return true;
    }

    @Override
    public void attachObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void notifyAllObservers() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }

    @Override
    public Object getChange() {
        return dataFrame;
    }

    public LinkedList<Observer> getObservers() {
        return observers;
    }

    public void setObservers(LinkedList<Observer> observers) {
        this.observers = observers;
    }

    public DataFrame getDataFrame() {
        return dataFrame;
    }

    public void setDataFrame(DataFrame dataFrame) {
        this.dataFrame = dataFrame;
    }

    public void addRCode(String code) {
        rCodeToBeExecuted.append(code);
    }

    public void executeRCode(int status, String loadingFile, String rCall) {
        JavaFilterData.getInstance().loadData();
        RCaller caller = new RCaller();
        RCode code = new RCode();
        Controller.getInstance().initializeBasic(caller, code);
        if (status == 2 || status == 3 || status == 4) {
            code.addRCode(InitialRCode.returnInstance().returnAllInitialCode());
        }

//        code.addRCode(rCodeToBeExecuted.toString());
        if (status == 1) {
            code.addRCode(rCodeToBeExecuted.toString());
            String rCodeFix = "dataset<-data.frame(lapply(dataset2, as.character), stringsAsFactors=FALSE)";
            code.addRCode(rCodeFix);
        }

        if (status == 2) {
//            code.addRCode(InitialRCode.returnInstance().returnAllInitialCode());
            code.addRCode(loadingFile + "\n");
            code.addRCode("\n" + rCall);
            String rCodeFix = "result2<-data.frame(lapply(result, as.character), stringsAsFactors=FALSE)";
            code.addRCode(rCodeFix);
        }

        File plotFile = null;
        ImageIcon plotImage = null;

        if (status == 4) {
            code.addRCode(loadingFile + "\n");
            try {
                plotFile = code.startPlot();
            } catch (IOException ex) {
                System.out.println("Cannot create plot");
                Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
            }
            code.addRCode("\n" + rCall);
        }

        if (status == 3) {
            code.addRCode(rCall + "\n");
        }

        caller.setRCode(code);
        System.out.println("Kod koji ce da se izvrsi: \n" + code.toString());
        System.out.println("-----------------------------------------------------------------------------------");

        if (status == 1) {
            //we will parse csv from java
            //caller.runAndReturnResult("dataset");

            DataFrameFromCSV df = new DataFrameFromCSV();

            df.createDataFrameAndFillItWithData(new File(selectedFile));
            Controller.getInstance().updateDataFrame(df);

            caller.runOnly();
        }
        if (status == 2) {
            caller.runOnly();
            //caller.runAndReturnResult("result2");
        }

        if (status == 3) {
            caller.runAndReturnResult("result");
            DataFrame df = new StringDataFrame();
            File xmlDocument = caller.getParser().getXMLFile();
            df.createDataFrameAndFillItWithData(xmlDocument);
            solarLong = (String) df.getMatrix()[0][0];
        }

        if (status == 4) {
            caller.runOnly();
            plotImage = code.getPlot(plotFile);
//            code.showPlot(plotFile);
            graph = plotFile;
        }

        if (status != 4 && status != 3 && status != 2 && status != 1) {
            DataFrame df = new StringDataFrame();

            File xmlDocument = caller.getParser().getXMLFile();
            df.createDataFrameAndFillItWithData(xmlDocument);
            Controller.getInstance().updateDataFrame(df);
        }

        deleteRCode();
    }

    public void deleteRCode() {
        rCodeToBeExecuted.setLength(0);
    }

    public void updateTable() {

    }

    public void setPath(String path) {
        selectedFile = path;
    }

    public String getPath() {
        return selectedFile;
    }

    public String getrScriptExecutablePath() {
        return rScriptExecutablePath;
    }

    public void setrScriptExecutablePath(String rScriptExecutablePath) {
        this.rScriptExecutablePath = rScriptExecutablePath;
    }

    public String getSolarLongitude() {
        return solarLongitude;
    }

    public void setSolarLongitude(String solarLongitude) {
        this.solarLongitude = solarLongitude;
    }

    public File getGraph() {
        return graph;
    }

    public void setGraph(File graph) {
        this.graph = graph;
    }

    public String getSolarLong() {
        return solarLong;
    }

    public void setSolarLong(String solarLong) {
        this.solarLong = solarLong;
    }

}
TOP

Related Classes of org.metrapp.sys.Controller

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.