/*
* This file is part or JMathLib
*
* Check it out at http://www.jmathlib.de
*
* Author:
* (c) 2005-2009
*/
package jmathlib.core.functions;
import jmathlib.core.interpreter.*;
import java.io.*;
import java.net.*;
/**Class for storing and managing the m- and p-functions*/
public class MFileLoader extends RootObject
{
boolean pFileCachingEnabledB = false;
/**Default constructor*/
public MFileLoader()
{
}
/**loads an .m-file via the web
@param directory = the directory containing the file
@param mFileName = the name of the m file
@return the result of the file as a FunktionToken*/
public UserFunction loadMFileViaWeb(URL codeBase, String directoryAndFile, String mFileName)
{
String code = "";
UserFunction function = null;
ErrorLogger.debugLine("MFileLoader: loading >"+mFileName+".m<");
// open file and read m-file line by line
try
{
URL url = new URL(codeBase, directoryAndFile);
InputStream in = url.openStream();
BufferedReader inReader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = inReader.readLine()) != null)
{
code += line + "\n";
}
inReader.close();
}
catch (Exception e)
{
Errors.throwMathLibException("MFileLoader: m-file exception via web");
}
ErrorLogger.debugLine("MFileLoader: code: begin \n"+code+"\ncode end");
// send code to function parser and return function
FunctionParser funcParser = new FunctionParser();
function = funcParser.parseFunction(code);
// set name of user function
// remember: the name of the called function could be different compared
// to the function's name inside the m-file
function.setName(mFileName);
ErrorLogger.debugLine("MFileLoader: finished webloading >" + mFileName + ".m<");
return function;
}
public UserFunction loadMFile(File file) {
return loadMFile(file.getParent(), file.getName());
}
public UserFunction loadPFile(File file) {
return loadPFile(file.getParent(), file.getName());
}
/**reads in an .m-file
@param directory = the directory containing the file
@param mFileName = the name of the m file
@return the result of the file as a FunktionToken*/
public UserFunction loadMFile(String directory, String mFileName)
{
String code = "";
UserFunction function = null;
String fullFileName = directory + File.separator + mFileName+".m";
File file = null;
ErrorLogger.debugLine("MFileLoader: loading >"+mFileName+".m<");
// open file and read m-file line by line
try
{
file = new File (fullFileName);
BufferedReader inReader = new BufferedReader( new FileReader(file));
String line;
while ((line = inReader.readLine()) != null)
{
code += line + "\n";
}
inReader.close();
}
catch (Exception e)
{
Errors.throwMathLibException("MFileLoader: m-file exception");
}
ErrorLogger.debugLine("MFileLoader: code: begin \n"+code+"\ncode end");
// send code to function parser and return function
FunctionParser funcParser = new FunctionParser();
function = funcParser.parseFunction(code);
// set name of user function
// remember: the name of the called function could be different compared
// to the function's name inside the m-file
function.setName(mFileName);
// set date of file as it has been found on the disc
function.setLastModified(file.lastModified());
// set filename and full path to the function
function.setPathAndFileName(fullFileName);
// check if p-file caching is enabled
if (pFileCachingEnabledB)
{
//serialise the function as a p-file
try
{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(directory + File.separator + mFileName + ".p"));
out.writeObject(function);
}
catch(Exception e)
{
Errors.throwMathLibException("Error serialising function: " + e);
e.printStackTrace();
}
}
ErrorLogger.debugLine("MFileLoader: finished loading >" + mFileName + ".m<");
return function;
}
/**reads in an .p-file
@param directory = the directory containing the file
@param pFileName = the name of the p file
@return the result of the file as a FunktionToken*/
public UserFunction loadPFile(String directory, String pFileName)
{
UserFunction function = null;
ErrorLogger.debugLine("MFileLoader: loading >" + pFileName + ".p<");
try
{
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(directory + File.separator + pFileName + ".p"));
function = ((UserFunction)in.readObject());
ErrorLogger.debugLine("MFileLoader: code: " + function);
}
catch(Exception e)
{
ErrorLogger.debugLine("Error reading serialised function: " + e);
e.printStackTrace();
}
ErrorLogger.debugLine("MFileLoader: finished loading >" + pFileName + ".p<");
return function;
}
/** set caching of p-file to on of off
*
* @param pFileCaching true= caching of p-files on; false: caching of p-files off
*/
public void setPFileCaching(boolean pFileCaching)
{
pFileCachingEnabledB = pFileCaching;
}
/** return whether of not caching of p-files is enabled of not
*
* @return status of caching p-files
*/
public boolean getPFileCaching()
{
return pFileCachingEnabledB;
}
}