From b8827db6f86f1f012d4c0e5102f6805295408952 Mon Sep 17 00:00:00 2001 From: Nico Mack Date: Fri, 2 Feb 2018 15:31:02 +0100 Subject: [PATCH] Bug Fixes in Coronas. Added support for MapVariables to SQLExecutor. Added new Declaration class to allow access to fields of maps and indices of vectors in variable declarations in equation system Added invoking flag allowing to disable equation trigger by individual parameters. --- CPS/config/CpsNamespace.properties | 1 + CPS/config/equationsystem.properties | 1 + .../itis/dkd/tui/cps/system/Declaration.java | 19 ++++ .../itis/dkd/tui/cps/system/Equation.java | 6 +- .../tui/cps/system/EquationSystemBuilder.java | 46 ++++++++- .../list/itis/dkd/tui/cps/system/Mapping.java | 2 +- .../cps/system/executor/PythonExecutor.java | 4 + .../tui/cps/system/executor/SqlExecutor.java | 98 +++++++++++++++---- .../tui/cps/utility/EquationSystemBundle.java | 1 + .../dkd/tui/cps/variable/MapVariable.java | 8 +- .../tui/cps/variable/NumericalVariable.java | 5 +- .../dkd/tui/cps/variable/VectorVariable.java | 14 ++- .../itis/dkd/tui/utility/CpsNamespace.java | 1 + .../itis/dkd/tui/utility/HtmlTemplate.java | 5 +- .../dkd/tui/widget/corona/CoxcombSlice.java | 41 ++++++-- .../tui/widget/corona/VariableHtmlBox.java | 10 +- .../builder/BaseCoxcombSliceBuilder.java | 2 + 17 files changed, 216 insertions(+), 48 deletions(-) diff --git a/CPS/config/CpsNamespace.properties b/CPS/config/CpsNamespace.properties index 304abaf..d8f6e75 100644 --- a/CPS/config/CpsNamespace.properties +++ b/CPS/config/CpsNamespace.properties @@ -2,6 +2,7 @@ ABOVE_ELEMENT=above BELOW_ELEMENT=below BLINK_ON_OUT_OF_RANGE_NODE=blinkOnOutOfRange CAPPED_DISPLAY_NODE=cappedDisplay +FACE_IS_TOUCHABLE_NODE=faceIsTouchable ITEMS_VARIABLE_NODE=itemsVariable HTML_TEMPLATE_NODE=htmlTemplate LABEL_NODE=label diff --git a/CPS/config/equationsystem.properties b/CPS/config/equationsystem.properties index 37d85ac..9e4ce58 100644 --- a/CPS/config/equationsystem.properties +++ b/CPS/config/equationsystem.properties @@ -18,6 +18,7 @@ INDEX_ATTRIBUTE=index FORMAT_ATTRIBUTE=format FIELD_ATTRIBUTE=field INVOKE_ELEMENT=invoke +INVOKING_ATTRIBUTE=invoking EPSILON_ATTRIBUTE=epsilon EXECUTOR_ATTRIBUTE=executor NAME_ATTRIBUTE=name diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/Declaration.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/Declaration.java index 2d4a4ac..bad8dfd 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/Declaration.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/Declaration.java @@ -37,6 +37,7 @@ public class Declaration implements Cloneable { protected String format; protected int index; protected Variable variable; + protected boolean invoking; // --------------------------------------------------------------------------- // *************************************************************************** @@ -47,6 +48,7 @@ public class Declaration implements Cloneable { public Declaration(Variable variable) { this.variable = variable; this.index = -1; + this.invoking = true; } // --------------------------------------------------------------------------- @@ -56,6 +58,8 @@ public class Declaration implements Cloneable { this.variable = variable; this.field = field; this.index = -1; + this.invoking = true; + } // --------------------------------------------------------------------------- @@ -64,6 +68,8 @@ public class Declaration implements Cloneable { Preconditions.checkArgument((variable instanceof VectorVariable), StringUtils.build("Variable {} is not a VectorVariable!", variable.getName())); //$NON-NLS-1$ this.variable = variable; this.index = index; + this.invoking = true; + } // --------------------------------------------------------------------------- @@ -74,6 +80,7 @@ public class Declaration implements Cloneable { this.equate = other.equate; this.index = other.index; this.format = other.format; + this.invoking = other.invoking; } // --------------------------------------------------------------------------- @@ -106,6 +113,18 @@ public class Declaration implements Cloneable { // --------------------------------------------------------------------------- + public void setInvoking(boolean invoking) { + this.invoking = invoking; + } + + // --------------------------------------------------------------------------- + + public boolean isInvoking() { + return this.invoking; + } + + // --------------------------------------------------------------------------- + public void setFormat(String format) { this.format = format; } diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/Equation.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/Equation.java index b77670e..c0d341f 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/Equation.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/Equation.java @@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.LinkedHashSet; +import java.util.Map.Entry; import javax.script.ScriptEngine; @@ -142,9 +143,8 @@ public class Equation { } if (!isolated && consolidated && consolidatedListeners != null) { - for (InputChangeListener listener : consolidatedListeners.keySet()) { - Variable variable = consolidatedListeners.get(listener); - listener.inputChanged(new InputEvent(variable)); + for (Entry> entry : consolidatedListeners.entrySet()) { + entry.getKey().inputChanged(new InputEvent(entry.getValue())); } } diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/EquationSystemBuilder.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/EquationSystemBuilder.java index 064c105..64cafbd 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/EquationSystemBuilder.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/EquationSystemBuilder.java @@ -21,6 +21,8 @@ package lu.list.itis.dkd.tui.cps.system; import lu.list.itis.dkd.dbc.annotation.NonNullByDefault; +import lu.list.itis.dkd.tui.cps.InputChangeListener; +import lu.list.itis.dkd.tui.cps.InputEvent; import lu.list.itis.dkd.tui.cps.Phenomenon; import lu.list.itis.dkd.tui.cps.system.executor.Executor; import lu.list.itis.dkd.tui.cps.utility.EquationSystemBundle; @@ -30,6 +32,7 @@ import lu.list.itis.dkd.tui.utility.Point; import lu.list.itis.dkd.tui.utility.StringUtils; import com.google.common.base.Strings; +import com.jgoodies.common.base.Preconditions; import org.jdom2.Document; import org.jdom2.Element; @@ -287,6 +290,9 @@ public class EquationSystemBuilder { attribute = this.getAttribute(element, EquationSystemBundle.FIELD_ATTRIBUTE); attributes.put(EquationSystemBundle.FIELD_ATTRIBUTE, attribute); + attribute = this.getAttribute(element, EquationSystemBundle.INVOKING_ATTRIBUTE); + attributes.put(EquationSystemBundle.INVOKING_ATTRIBUTE, attribute); + attribute = this.getAttribute(element, EquationSystemBundle.DECIMALS_ATTRIBUTE); attributes.put(EquationSystemBundle.DECIMALS_ATTRIBUTE, attribute); @@ -531,9 +537,17 @@ public class EquationSystemBuilder { for (Element parameter : parameters) { parameterAttributes = this.extractAttributesForVariables(parameter); String identifier = parameterAttributes.get(EquationSystemBundle.NAME_ATTRIBUTE); + String invoking = parameterAttributes.get(EquationSystemBundle.INVOKING_ATTRIBUTE); + Variable variable = this.getIndependentVariable(parameterAttributes); if (variable != null) { Declaration declaration = this.buildDeclaration(variable, parameterAttributes); + + if (!Strings.isNullOrEmpty(invoking)) { + Matcher regex = booleanPattern.matcher(invoking); + declaration.setInvoking(regex.matches()); + } + declarations.add(declaration); } else { String message = StringUtils.build("Undefined parameter {} encountered! Check equation file!", identifier); //$NON-NLS-1$ @@ -679,7 +693,6 @@ public class EquationSystemBuilder { } else { executor = DEFAULT_EXECUTOR; } - } Mapping variableMapping = new Mapping(equationInputs, equationOutputs); @@ -693,7 +706,11 @@ public class EquationSystemBuilder { if (!periodic) { for (Declaration declaration : equationInputs) { Variable parameter = declaration.getVariable(); - parameter.addListener(equationSystem); + if (declaration.isInvoking()) { + parameter.addListener(equationSystem); + } else { + LOGGER.info("Parameter {} is non invoking and won't invoke equation {}!", declaration.getIdentifier(), equationName); //$NON-NLS-1$ + } } equations.put(equationName, equationSystem); } else { @@ -753,6 +770,31 @@ public class EquationSystemBuilder { } } + // --------------------------------------------------------------------------- + // *************************************************************************** + // * Class Body * + // *************************************************************************** + // --------------------------------------------------------------------------- + + public void atomicUpdate(List> variables, List values) { + Preconditions.checkArgument(!variables.isEmpty(), "No variables to update!"); + Preconditions.checkArgument(variables.size() == values.size(), "Sizes of variables and values lists must match!"); + + HashMap> consolidated = new HashMap<>(); + + for (int i = 0; i < variables.size(); i++) { + Variable variable = variables.get(i); + variable.suspendListenerNotification(true); + variable.setValueFromObject(values.get(i)); + variable.suspendListenerNotification(false); + consolidated = variable.consolidateListeners(consolidated); + } + + for (Entry> entry : consolidated.entrySet()) { + entry.getKey().inputChanged(new InputEvent(entry.getValue())); + } + } + // --------------------------------------------------------------------------- /** * Method used to parse the file containing the XML representation of the equation system. diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/Mapping.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/Mapping.java index 4ebc7b6..9614a9d 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/Mapping.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/Mapping.java @@ -145,7 +145,7 @@ public class Mapping { public boolean catersTo(Variable variable) { for (Declaration declaration : independentVariables) { if (variable.equals(declaration.getVariable())) { - return true; + return declaration.isInvoking(); } } return false; diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/PythonExecutor.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/PythonExecutor.java index 26ac37e..ae8749b 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/PythonExecutor.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/PythonExecutor.java @@ -305,10 +305,14 @@ public class PythonExecutor extends Executor { PyObject item = array.__getitem__(index); vector.set(index, (B) item.__tojava__(clazz)); } else { + if (vector.isEmpty()) { + clazz = null; + } vector.suspendListenerNotification(true); vector.clear(); for (PyObject item : array.asIterable()) { + clazz = (clazz != null) ? clazz : TYPE_MAPPING.get(item.getType()); vector.add(item.__tojava__(clazz)); } diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/SqlExecutor.java b/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/SqlExecutor.java index 74be3df..5d42e77 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/SqlExecutor.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/system/executor/SqlExecutor.java @@ -14,6 +14,7 @@ package lu.list.itis.dkd.tui.cps.system.executor; import lu.list.itis.dkd.tui.cps.system.Declaration; +import lu.list.itis.dkd.tui.cps.variable.MapVariable; import lu.list.itis.dkd.tui.cps.variable.Variable; import lu.list.itis.dkd.tui.cps.variable.VectorVariable; @@ -36,6 +37,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -53,6 +55,7 @@ public class SqlExecutor extends Executor { private String driverClass; private String userName; private String password; + private boolean autoCommit; private List columnValues = null; private List columnTypes = null; @@ -62,8 +65,9 @@ public class SqlExecutor extends Executor { private static final String SQL_DRIVER_CLASS = "sql.driver.class"; //$NON-NLS-1$ private static final String SQL_USER_NAME = "sql.user.name"; //$NON-NLS-1$ private static final String SQL_USER_PASSWORD = "sql.user.password"; //$NON-NLS-1$ + private static final String SQL_AUTO_COMMIT = "sql.autoCommit"; //$NON-NLS-1$ - private static final Pattern SQL_VAR_PATTERN = Pattern.compile("([\\$@])\\{([a-z0-9\\-_]+)\\}", Pattern.CASE_INSENSITIVE); //$NON-NLS-1$ + private static final Pattern SQL_VAR_PATTERN = Pattern.compile("([\\$@%])\\{([a-z0-9\\-_]+)\\}", Pattern.CASE_INSENSITIVE); //$NON-NLS-1$ private static final String SQL_PLACEHOLDER = "?"; //$NON-NLS-1$ private static final Logger LOGGER = LoggerFactory.getLogger(SqlExecutor.class.getSimpleName()); @@ -81,6 +85,7 @@ public class SqlExecutor extends Executor { private static final String SCALAR = "$"; //$NON-NLS-1$ private static final String VECTOR = "@"; //$NON-NLS-1$ + private static final String MAP = "%"; //$NON-NLS-1$ // *************************************************************************** // * Constructor(s) * @@ -95,6 +100,7 @@ public class SqlExecutor extends Executor { driverClass = properties.getProperty(SQL_DRIVER_CLASS); userName = properties.getProperty(SQL_USER_NAME); password = properties.getProperty(SQL_USER_PASSWORD); + autoCommit = Boolean.parseBoolean(properties.getProperty(SQL_AUTO_COMMIT, "false")); connectionPool = this.setupConnectionPool(); } @@ -138,7 +144,7 @@ public class SqlExecutor extends Executor { do { try { connection = connectionPool.getConnection(); - connection.setAutoCommit(false); + connection.setAutoCommit(autoCommit); numberOfConnections = connectionPool.getNumConnections(); } catch (SQLException p_Exception) { LOGGER.warn("Failed to acquire connection from Connection Pool for Datasource {}! Reconnection pool...", connectionUrl); //$NON-NLS-1$ @@ -158,6 +164,15 @@ public class SqlExecutor extends Executor { return connection; } + // --------------------------------------------------------------------------- + + private int appendPlaceholder(StringBuffer buffer, boolean positionalParameters, int positionalIndex) { + buffer.append(SQL_PLACEHOLDER); + if (positionalParameters) + buffer.append(positionalIndex++); + return positionalIndex; + } + // --------------------------------------------------------------------------- /** * replaces every occurrence of the previously specified interpolation pattern with the previously @@ -200,9 +215,7 @@ public class SqlExecutor extends Executor { placeholders.add(variable); if (SCALAR.equals(type)) { - interpolated.append(SQL_PLACEHOLDER); - if (positionalParameters) - interpolated.append(index++); + index = this.appendPlaceholder(interpolated, positionalParameters, index); } if (VECTOR.equals(type)) { Object value = parameters.get(variable); @@ -212,23 +225,45 @@ public class SqlExecutor extends Executor { if (!collection.isEmpty()) { for (int count = 0; count < collection.size(); count++) { interpolated.append(separator); - interpolated.append(SQL_PLACEHOLDER); - if (positionalParameters) - interpolated.append(index++); + index = this.appendPlaceholder(interpolated, positionalParameters, index); separator = ","; } } else { - interpolated.append(SQL_PLACEHOLDER); - if (positionalParameters) - interpolated.append(index++); + index = this.appendPlaceholder(interpolated, positionalParameters, index); } } else { - interpolated.append(SQL_PLACEHOLDER); - if (positionalParameters) - interpolated.append(index++); + index = this.appendPlaceholder(interpolated, positionalParameters, index); } } + if (MAP.equals(type)) { + Object value = parameters.get(variable); + if (value instanceof Map) { + Map map = (Map) value; + String separator = ""; + if (!map.isEmpty()) { + for (int count = 0; count < map.size(); count++) { + interpolated.append(separator); + interpolated.append("("); + index = this.appendPlaceholder(interpolated, positionalParameters, index); + interpolated.append(","); + index = this.appendPlaceholder(interpolated, positionalParameters, index); + interpolated.append(")"); + separator = ","; + } + } else { + interpolated.append("("); + index = this.appendPlaceholder(interpolated, positionalParameters, index); + interpolated.append(","); + index = this.appendPlaceholder(interpolated, positionalParameters, index); + interpolated.append(")"); + } + } else { + index = this.appendPlaceholder(interpolated, positionalParameters, index); + } + + } + } else { interpolated.append(interpolated.substring(interpolator.start(), interpolator.end())); } @@ -248,13 +283,23 @@ public class SqlExecutor extends Executor { Object value = context.get(placeholder); if (value instanceof Collection) { Collection collection = (Collection) value; - if (collection.size() > 0) { + if (!collection.isEmpty()) { for (Object item : collection) { statement.setObject(index++, item); } } else { statement.setObject(index++, null); } + } else if (value instanceof Map) { + Map map = (Map) value; + if (!map.isEmpty()) { + for (Entry entry : map.entrySet()) { + statement.setObject(index++, entry.getKey()); + statement.setObject(index++, entry.getValue()); + } + } else { + statement.setObject(index++, null); + } } else { statement.setObject(index++, value); } @@ -349,10 +394,25 @@ public class SqlExecutor extends Executor { public void set(Declaration declaration) { Variable variable = declaration.getVariable(); String identifier = (Strings.isNullOrEmpty(declaration.getEquate())) ? variable.getName() : declaration.getEquate(); + String field = declaration.getField(); + int index = declaration.getIndex(); + Object value; + + if (!Strings.isNullOrEmpty(field) && (variable instanceof MapVariable)) { + MapVariable map = (MapVariable) declaration.getVariable(); + value = map.get(field); + parameters.put(identifier, value); + } else if ((index >= 0) && (variable instanceof VectorVariable)) { + VectorVariable vector = (VectorVariable) declaration.getVariable(); + value = vector.get(index); + parameters.put(identifier, value); + } else { + value = variable.getValue(); + parameters.put(identifier, value); + } - parameters.put(identifier, variable.getValue()); if (LOGGER.isInfoEnabled()) { - LOGGER.info("Parameter -> {} = {}", variable.getName(), variable.getValue()); //$NON-NLS-1$ + LOGGER.info("Parameter -> {} = {}", identifier, value); //$NON-NLS-1$ } } @@ -471,7 +531,9 @@ public class SqlExecutor extends Executor { /** {@inheritDoc} */ @Override public void resetContext() { - // TODO Auto-generated method stub + columnNames.clear(); + columnTypes.clear(); + columnValues.clear(); } } diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/utility/EquationSystemBundle.java b/CPS/src/lu/list/itis/dkd/tui/cps/utility/EquationSystemBundle.java index 807eeb1..d36e824 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/utility/EquationSystemBundle.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/utility/EquationSystemBundle.java @@ -48,6 +48,7 @@ public class EquationSystemBundle extends NLS { public static String INDEX_ATTRIBUTE; public static String FORMAT_ATTRIBUTE; public static String FIELD_ATTRIBUTE; + public static String INVOKING_ATTRIBUTE; public static String INVOKE_ELEMENT; public static String EXECUTOR_ATTRIBUTE; public static String NAME_ATTRIBUTE; diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/variable/MapVariable.java b/CPS/src/lu/list/itis/dkd/tui/cps/variable/MapVariable.java index 9bb6f3c..048c0e9 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/variable/MapVariable.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/variable/MapVariable.java @@ -168,8 +168,7 @@ public class MapVariable extends Variable> implements Map @Override public void setValueFromObject(Object object) { - // TODO Auto-generated method stub - + this.value = this.valueFromObject(object); } // --------------------------------------------------------------------------- @@ -197,9 +196,12 @@ public class MapVariable extends Variable> implements Map /** {@inheritDoc} */ // --------------------------------------------------------------------------- + @SuppressWarnings("unchecked") @Override public Map valueFromObject(Object objectValue) { - // TODO Auto-generated method stub + if (objectValue instanceof Map) { + return (Map) objectValue; + } return null; } diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/variable/NumericalVariable.java b/CPS/src/lu/list/itis/dkd/tui/cps/variable/NumericalVariable.java index b254d9c..6716d6e 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/variable/NumericalVariable.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/variable/NumericalVariable.java @@ -147,7 +147,7 @@ public class NumericalVariable extends Variable { } if (this.valueRange != 0) { - double val = newValue + 0.0; + double val = this.roundToPrecision(newValue); if (val < this.minValue) val = this.minValue; @@ -392,7 +392,8 @@ public class NumericalVariable extends Variable { // --------------------------------------------------------------------------- public double getConstrainedValue() { - return this.normalizedValue * this.valueRange; + this.normalizedValue = this.normalizeValue(this.value); + return this.minValue + (this.normalizedValue * this.valueRange); } // --------------------------------------------------------------------------- diff --git a/CPS/src/lu/list/itis/dkd/tui/cps/variable/VectorVariable.java b/CPS/src/lu/list/itis/dkd/tui/cps/variable/VectorVariable.java index 8a9f24c..4cada62 100644 --- a/CPS/src/lu/list/itis/dkd/tui/cps/variable/VectorVariable.java +++ b/CPS/src/lu/list/itis/dkd/tui/cps/variable/VectorVariable.java @@ -235,14 +235,14 @@ public class VectorVariable extends Variable> implements List { /** {@inheritDoc} */ @Override public void clear() { - value.clear(); + if (value != null) + value.clear(); } /** {@inheritDoc} */ @Override public void setValueFromObject(Object object) { - // TODO Auto-generated method stub - + this.value = this.valueFromObject(object); } /** {@inheritDoc} */ @@ -268,10 +268,14 @@ public class VectorVariable extends Variable> implements List { } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public List valueFromObject(Object objectValue) { - // TODO Auto-generated method stub - return null; + if (objectValue instanceof List) { + return (List) objectValue; + } + + return new ArrayList<>(); } diff --git a/CPS/src/lu/list/itis/dkd/tui/utility/CpsNamespace.java b/CPS/src/lu/list/itis/dkd/tui/utility/CpsNamespace.java index 7daa02d..5f0b964 100644 --- a/CPS/src/lu/list/itis/dkd/tui/utility/CpsNamespace.java +++ b/CPS/src/lu/list/itis/dkd/tui/utility/CpsNamespace.java @@ -31,6 +31,7 @@ public class CpsNamespace extends NLS { public static String BLINK_ON_OUT_OF_RANGE_NODE; public static String CAPPED_DISPLAY_NODE; + public static String FACE_IS_TOUCHABLE_NODE; public static String HTML_TEMPLATE_NODE; diff --git a/CPS/src/lu/list/itis/dkd/tui/utility/HtmlTemplate.java b/CPS/src/lu/list/itis/dkd/tui/utility/HtmlTemplate.java index d379dbd..714783e 100644 --- a/CPS/src/lu/list/itis/dkd/tui/utility/HtmlTemplate.java +++ b/CPS/src/lu/list/itis/dkd/tui/utility/HtmlTemplate.java @@ -75,7 +75,10 @@ public class HtmlTemplate implements VariableBased { // --------------------------------------------------------------------------- public String render() { - return Interpolator.render(chunks); + if (dependsOnVariables()) { + return Interpolator.render(chunks); + } + return this.template; } // --------------------------------------------------------------------------- diff --git a/CPS/src/lu/list/itis/dkd/tui/widget/corona/CoxcombSlice.java b/CPS/src/lu/list/itis/dkd/tui/widget/corona/CoxcombSlice.java index 7ada0f0..5ba4699 100644 --- a/CPS/src/lu/list/itis/dkd/tui/widget/corona/CoxcombSlice.java +++ b/CPS/src/lu/list/itis/dkd/tui/widget/corona/CoxcombSlice.java @@ -61,6 +61,7 @@ public class CoxcombSlice extends ValueCorona implements InformationProvider 0) ? new BasicStroke(strokeWidth) : null; Shape labelPath; @@ -220,6 +231,7 @@ public class CoxcombSlice extends ValueCorona implements InformationProvider builder) { super(builder); - htmlTemplate = new HtmlTemplate(builder.htmlTemplate); + this.htmlTemplate = new HtmlTemplate(builder.htmlTemplate); if (!htmlTemplate.dependsOnVariables()) { - this.setInformation(builder.htmlTemplate); + this.htmlContent = this.htmlTemplate.render(); + this.setInformation(this.htmlContent); } } @@ -64,9 +65,10 @@ public class VariableHtmlBox extends HtmlBox implements VariableBased, InputChan public VariableHtmlBox(VariableHtmlBox original) { super(original); - htmlTemplate = new HtmlTemplate(original.htmlTemplate.getTemplate()); + this.htmlTemplate = new HtmlTemplate(original.htmlTemplate.getTemplate()); if (!htmlTemplate.dependsOnVariables()) { - this.setInformation(original.htmlTemplate.getTemplate()); + this.htmlContent = this.htmlTemplate.render(); + this.setInformation(this.htmlContent); } } diff --git a/CPS/src/lu/list/itis/dkd/tui/widget/corona/builder/BaseCoxcombSliceBuilder.java b/CPS/src/lu/list/itis/dkd/tui/widget/corona/builder/BaseCoxcombSliceBuilder.java index 0aa2803..6092a92 100644 --- a/CPS/src/lu/list/itis/dkd/tui/widget/corona/builder/BaseCoxcombSliceBuilder.java +++ b/CPS/src/lu/list/itis/dkd/tui/widget/corona/builder/BaseCoxcombSliceBuilder.java @@ -43,6 +43,7 @@ public abstract class BaseCoxcombSliceBuilder