package com.benetech.mde.util; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.util.HashMap; import java.util.List; import javax.swing.JFrame; import com.benetech.mde.bean.EquationDescriptionBean; import com.benetech.mde.bean.EquationDescriptionFileDataBean; import com.benetech.mde.bean.EquationDescriptionParamsBean; import com.benetech.mde.bean.JSONResponseBean; import gov.nasa.ial.mde.describer.Describer; import gov.nasa.ial.mde.io.TextDataFileParser; import gov.nasa.ial.mde.properties.MdeSettings; import gov.nasa.ial.mde.solver.Solver; import gov.nasa.ial.mde.solver.symbolic.AnalyzedData; import gov.nasa.ial.mde.solver.symbolic.AnalyzedEquation; import gov.nasa.ial.mde.solver.symbolic.AnalyzedItem; import gov.nasa.ial.mde.ui.graph.CartesianGraph; public class EquationUtil { public static String getMathDescription(String equation) { return getDescription(equation); } public static String getMathDescription(AnalyzedItem data){ return getDescription(data); } public static String getDescription(Object data){ String description = null; MdeSettings currentSettings = new MdeSettings("myAppsMdeProperties"); Solver solver = new Solver(); Describer describer = new Describer(solver, currentSettings); describer.setOutputFormat(Describer.TEXT_OUTPUT); if(data instanceof String) solver.add((String)data); else if(data instanceof AnalyzedData) solver.add((AnalyzedItem)data); solver.solve(); //solver.get(0).getAnalyzedItem().getFeatures(); if (solver.anyDescribable()) description = describer.getDescriptions("standards"); else description = "Equation `" + data + " ` is not supported by MDE."; solver.removeAll(); return description; } public static List<AnalyzedData> getAnalyzedData(String fileName){ File file = new File(fileName); TextDataFileParser fileParser = new TextDataFileParser(file); AnalyzedData data = null; List<AnalyzedData> list = null; try { list = fileParser.parse(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } public static EquationDescriptionParamsBean getEquationDescriptionParamsBean(String equation){ EquationDescriptionParamsBean bean = new EquationDescriptionParamsBean(); MdeSettings currentSettings = new MdeSettings("myAppsMdeProperties"); Solver solver = new Solver(); Describer describer = new Describer(solver, currentSettings); describer.setOutputFormat(Describer.TEXT_OUTPUT); solver.add((String)equation); solver.solve(); bean.setEquation(equation); bean.setSvg(getGraphSVG(solver)); if (solver.anyDescribable()) bean.setDescription(describer.getDescriptions("standards")); else bean.setDescription("Equation `" + equation + " ` is not supported by MDE."); AnalyzedItem item = solver.get(0).getAnalyzedItem(); if(item instanceof AnalyzedEquation){ AnalyzedEquation ae = (AnalyzedEquation)item; HashMap<String, String> params = new HashMap<String, String>(); for(String key : ae.getParameters()) params.put(key, String.valueOf(ae.getParameterValue(key))); bean.setParams(params); } solver.removeAll(); return bean; } public static EquationDescriptionBean getEquationDescriptionBean(String equation){ EquationDescriptionBean bean = new EquationDescriptionBean(equation); bean.setDescription(getMathDescription(equation)); return bean; } public static EquationDescriptionFileDataBean getEquationDescriptionFileDataBean(List<AnalyzedData>data){ EquationDescriptionFileDataBean bean = new EquationDescriptionFileDataBean(); int columns = data.size(); int rows = data.get(0).getDataSize(); double[][] table = new double[rows][columns + 1]; String [] column = new String[columns + 1]; int i = 1; double [] x = data.get(0).getXValues(); for(int k = 0; k < x.length; k++) table[k][0] = x[k]; column[0] = data.get(0).getXName(); for(AnalyzedData element : data){ double [] y = element.getYValues(); for(int j = 0; j < y.length; j ++) table[j][i] = y[j]; column[i] = element.getYName(); i++; } bean.setTable(table); bean.setColumn(column); bean.setDescription(getMathDescription(data.get(0))); return bean; } public static EquationDescriptionBean getEquationDescriptionBean(AnalyzedItem data){ EquationDescriptionBean bean = new EquationDescriptionBean(); bean.setDescription(getMathDescription(data)); return bean; } public static JSONResponseBean getJSONResponseBean(boolean success, Object data){ JSONResponseBean bean = new JSONResponseBean(success, data); return bean; } public static String getGraphSVG(Solver solver){ MdeSettings currentSettings = new MdeSettings("myAppsMdeProperties"); CartesianGraph grapher = new CartesianGraph(solver, currentSettings); JFrame window = new JFrame("Tutorial_CartesianGraph"); window.getContentPane().add(grapher); window.pack(); if (solver.anyGraphable()) { return grapher.getSVG(); }else{ return null; } } }