package org.openlca.core.model; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Table; import org.openlca.expressions.FormulaInterpreter; import org.openlca.expressions.InterpreterException; @Entity @Table(name = "tbl_parameters") public class Parameter extends CategorizedEntity { @Column(name = "scope") @Enumerated(EnumType.STRING) private ParameterScope scope = ParameterScope.GLOBAL; @Column(name = "is_input_param") private boolean inputParameter; @Column(name = "value") private double value; @Column(name = "formula") private String formula; @Embedded private Uncertainty uncertainty; @Column(name = "external_source") private String externalSource; @Column(name = "source_type") private String sourceType; /** * Returns true if the given name is a valid identifier for a parameter. We * allow the same rules as for Java identifiers. */ public static boolean isValidName(String paramaterName) { if (paramaterName == null) return false; String id = paramaterName.trim(); if (id.isEmpty()) return false; for (int i = 0; i < id.length(); i++) { char c = id.charAt(i); if (i == 0 && !Character.isLetter(c)) return false; if (i > 0 && !Character.isJavaIdentifierPart(c)) return false; } FormulaInterpreter interpreter = new FormulaInterpreter(); interpreter.bind(paramaterName, "1"); try { interpreter.eval(paramaterName); } catch (InterpreterException e) { return false; } return true; } @Override public Parameter clone() { Parameter clone = new Parameter(); Util.cloneRootFields(this, clone); clone.setFormula(getFormula()); clone.setInputParameter(isInputParameter()); clone.setScope(getScope()); if (getUncertainty() != null) clone.setUncertainty(getUncertainty().clone()); clone.setValue(getValue()); clone.setExternalSource(getExternalSource()); clone.setSourceType(getSourceType()); return clone; } public void setScope(ParameterScope type) { this.scope = type; } public boolean isInputParameter() { return inputParameter; } public void setInputParameter(boolean inputParameter) { this.inputParameter = inputParameter; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } public String getFormula() { return formula; } public void setFormula(String formula) { this.formula = formula; } public ParameterScope getScope() { return scope; } public Uncertainty getUncertainty() { return uncertainty; } public void setUncertainty(Uncertainty uncertainty) { this.uncertainty = uncertainty; } public String getExternalSource() { return externalSource; } public void setExternalSource(String externalSource) { this.externalSource = externalSource; } public String getSourceType() { return sourceType; } public void setSourceType(String sourceType) { this.sourceType = sourceType; } @Override public String toString() { return "Parameter [formula=" + formula + ", name=" + getName() + ", type=" + scope + "]"; } }