Commit 64f96cf6 authored by Eric Tobias's avatar Eric Tobias

Minor changes

parent 0393e0df
......@@ -30,15 +30,15 @@
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>dk.ange</groupId>
<artifactId>javaoctave</artifactId>
<version>0.6.4</version>
</dependency>
<dependency>
<groupId>lu.list.itis.dkd.tui</groupId>
<artifactId>tulip</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>dk.ange</groupId>
<artifactId>javaoctave</artifactId>
<version>0.6.5-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/**
* Copyright CRP Henri Tudor, 2014.
* All rights reserved. If you wish to use this code for any purpose,
* please contact CRP Henri Tudor's Technology Transfer Office : tto@tudor.lu
* Copyright CRP Henri Tudor, 2014. All rights reserved. If you wish to use this code for any
* purpose, please contact CRP Henri Tudor's Technology Transfer Office : tto@tudor.lu
*/
package lu.list.itis.dkd.cps.system;
import lu.list.itis.dkd.cps.variable.Variable;
import lu.list.itis.dkd.dbc.annotation.NonNullByDefault;
import lu.list.itis.dkd.dbc.annotation.Nullable;
import com.google.common.base.Preconditions;
import java.io.CharArrayWriter;
import java.util.LinkedHashSet;
import java.util.logging.Level;
......@@ -12,14 +17,9 @@ import java.util.logging.Logger;
import javax.script.ScriptEngine;
import com.google.common.base.Preconditions;
import dk.ange.octave.OctaveEngine;
import dk.ange.octave.type.Octave;
import dk.ange.octave.type.OctaveDouble;
import lu.list.itis.dkd.cps.variable.Variable;
import lu.list.itis.dkd.dbc.annotation.NonNullByDefault;
import lu.list.itis.dkd.dbc.annotation.Nullable;
/**
* @author Nico MACK [nico.mack@list.lu]
......@@ -27,8 +27,7 @@ import lu.list.itis.dkd.dbc.annotation.Nullable;
* @version 1
*/
@NonNullByDefault
public class OctaveEquation extends Equation
{
public class OctaveEquation extends Equation {
private OctaveMapping mapping, lockedMapping;
@Nullable
private String script;
......@@ -39,30 +38,29 @@ public class OctaveEquation extends Equation
/**
* Constructor
*
* @param mapping
* The mapping of variables to take into account for the equation.
* @param script
* The mathematical representation of the equation in string form.
* Note that the names of the variables in the script must coincide with
* the names of the variables in the mapping.
* The mathematical representation of the equation in string form. Note that the names of
* the variables in the script must coincide with the names of the variables in the
* mapping.
*/
public OctaveEquation(OctaveMapping mapping, String script)
{
super (mapping,script);
public OctaveEquation(OctaveMapping mapping, String script) {
super(mapping, script);
this.mapping = mapping;
this.lockedMapping = mapping;
this.script = script;
this.engineErrors = new CharArrayWriter ();
this.engineErrors = new CharArrayWriter();
}
/**
* Method called to evaluate the script of the equation with
* the variables provided by the mapping.
* Method called to evaluate the script of the equation with the variables provided by the
* mapping.
*/
@SuppressWarnings("null")
public synchronized void evaluate()
{
public synchronized void evaluate() {
LinkedHashSet<Variable> dependentVariables;
String evaluationErrors;
......@@ -73,30 +71,24 @@ public class OctaveEquation extends Equation
scriptEngine.setErrorWriter(engineErrors);
initParameters();
scriptEngine.eval(this.script);
}
catch (Exception exception)
{
LOGGER.log(Level.SEVERE,"Error while evaluating script " + this.script,exception);
} catch (Exception exception) {
LOGGER.log(Level.SEVERE, "Error while evaluating script " + this.script, exception);
}
dependentVariables = mapping.getDependentVariables();
for (Variable variable: dependentVariables)
{
for (Variable variable : dependentVariables) {
try {
OctaveDouble result = scriptEngine.get(OctaveDouble.class, variable.getName());
variable.setValue(result.get(1));
}
catch (Exception exception)
{
LOGGER.log(Level.SEVERE,"Error while retrieving variable " + variable.getName(),exception);
} catch (Exception exception) {
LOGGER.log(Level.SEVERE, "Error while retrieving variable " + variable.getName(), exception);
}
}
evaluationErrors = engineErrors.toString();
if (evaluationErrors.length() > 0)
{
LOGGER.log(Level.WARNING,"Error while evaluating equation :" + evaluationErrors);
if (evaluationErrors.length() > 0) {
LOGGER.log(Level.WARNING, "Error while evaluating equation :" + evaluationErrors);
}
......@@ -104,27 +96,24 @@ public class OctaveEquation extends Equation
/**
* Method used to replace variables with their actual values in the formula.
* @return
* The formula with variables replaced by their values, ready for evaluation.
*
* @return The formula with variables replaced by their values, ready for evaluation.
*/
private void initParameters()
{
for(Variable variable : lockedMapping.getIndependentVariables())
{
private void initParameters() {
for (Variable variable : lockedMapping.getIndependentVariables()) {
Double numericValue = Double.valueOf(variable.getValue().toString());
scriptEngine.put(variable.getName(),Octave.scalar(numericValue));
scriptEngine.put(variable.getName(), Octave.scalar(numericValue));
}
}
/**
* Method for setting the script engine to use.
*
* @param engine
* The {@link ScriptEngine} instance to use for
* evaluating the scripted formulas.
* The {@link ScriptEngine} instance to use for evaluating the scripted formulas.
*/
public void setScriptEngine (OctaveEngine engine)
{
public void setScriptEngine(OctaveEngine engine) {
scriptEngine = engine;
}
}
\ No newline at end of file
......@@ -16,14 +16,18 @@
*/
package lu.list.itis.dkd.tui.widget;
import lu.list.itis.dkd.cps.variable.NumericalVariable;
import lu.list.itis.dkd.cps.variable.tangible.TangibleNumericalVariable;
import lu.list.itis.dkd.dbc.annotation.NonNullByDefault;
import lu.list.itis.dkd.dbc.annotation.Nullable;
import lu.list.itis.dkd.tui.adapter.TangibleObject;
import lu.list.itis.dkd.tui.content.InformationProvider;
import lu.list.itis.dkd.tui.content.InformationReceiver;
import lu.list.itis.dkd.tui.utility.Point;
import lu.list.itis.dkd.tui.widget.builder.BaseValueWidgetBuilder;
import lu.list.itis.dkd.tui.widget.builder.ValueWidgetBuilder;
import lu.list.itis.dkd.tui.widget.corona.Corona;
import java.awt.Graphics2D;
/**
* A simple widget that holds an integer value and may modify the value base on a rotation.
......@@ -46,7 +50,7 @@ public final class ValueWidget extends BaseWidget implements InformationProvider
/** The value of the angle that is considered as one step. */
private double stepSize;
/** The variable holding the value to be stored and manipulated by the widget. */
private NumericalVariable variable;
private TangibleNumericalVariable variable;
/** The base value to be set for the variable. */
private final double baseValue;
/** Whether the value held by the widget is to be modified on a rotation of a handle. */
......@@ -66,7 +70,7 @@ public final class ValueWidget extends BaseWidget implements InformationProvider
this.lowerStopAngle = builder.lowerStopAngle;
this.upperStopAngle = builder.upperStopAngle;
this.stepSize = builder.stepSize;
this.setVariable(builder.variable);
this.variable = builder.variable;
this.modifyValueOnRotation = builder.modifyValueOnRotation;
/**
......@@ -105,30 +109,44 @@ public final class ValueWidget extends BaseWidget implements InformationProvider
/** {@inheritDoc} */
@Override
public @Nullable Double getInformation(Point position) {
return getInformation();
return variable.getInformation(position);
}
/** {@inheritDoc} */
@Override
public Double getInformation() {
return getVariable().getValue();
return variable.getInformation();
}
/**
* Simple getter method for variable.
*
* @return The value of variable.
*/
public NumericalVariable getVariable() {
public TangibleNumericalVariable getVariable() {
return variable;
}
/**
* Simple setter method for variable.
*
* @param variable
* The value to set variable to.
* @return
*/
public NumericalVariable setVariable(NumericalVariable variable) {
public TangibleNumericalVariable setVariable(TangibleNumericalVariable variable) {
this.variable = variable;
return variable;
}
@SuppressWarnings("unchecked")
@Override
public void paint(Graphics2D canvas) {
for (Corona corona : coronas.values()) {
if (corona instanceof InformationReceiver<?>) {
((InformationReceiver<String>) corona).setInformation(variable.getInformation().toString());
}
}
super.paint(canvas);
}
}
\ No newline at end of file
......@@ -16,8 +16,11 @@
*/
package lu.list.itis.dkd.tui.widget.builder;
import lu.list.itis.dkd.tui.exception.BuildException;
import lu.list.itis.dkd.tui.widget.ValueWidget;
import org.jdom2.Element;
/**
* The concrete builder that will build a new instance of {@link ValueWidget} with each call to
* {@link #build()}.
......@@ -28,9 +31,32 @@ import lu.list.itis.dkd.tui.widget.ValueWidget;
*/
public final class ValueWidgetBuilder extends BaseValueWidgetBuilder<ValueWidgetBuilder> {
/**
* Simple no-arg constructor initializing all fields.
*/
public ValueWidgetBuilder() {
super();
}
/**
* Constructor initializing all fields from an {@link Element} containing as child elements all
* the information on fields to initialize.
*
* @param rootElement
* The element harbouring, on child nodes, the necessary information to initialize all
* fields of the builder.
* @throws BuildException
* Thrown when any of the fields fail to populate due to an error in reading information
* from the XML file.
*/
public ValueWidgetBuilder(Element rootElement) throws BuildException {
super(rootElement);
}
/** {@inheritDoc} */
@Override
public ValueWidget build() {
return new ValueWidget(this);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment