package org.reldb.rel.v0.generator; import java.util.TreeMap; import org.reldb.rel.exceptions.ExceptionSemantic; public class EnvironmentSettings { private EnvironmentSettings() { Attribute verboseExternalCompilation = new Attribute("VerboseExternalCompilation"); new Value(verboseExternalCompilation, "On", "Verbose compilation of external operators and types.") { void setter(Generator generator) { generator.setVerboseExternalCompilation(true); } }; new Value(verboseExternalCompilation, "Off", "Silent compilation of external operators and types. (Default)") { void setter(Generator generator) { generator.setVerboseExternalCompilation(false); } }; Attribute verboseRelvarUpdates = new Attribute("VerboseRelvarUpdates"); new Value(verboseRelvarUpdates, "On", "Updates to relvars will report number of tuples updated. (Default)") { void setter(Generator generator) { generator.setVerboseRelvarUpdates(true); } }; new Value(verboseRelvarUpdates, "Off", "Updates to relvars will not report number of tuples updated.") { void setter(Generator generator) { generator.setVerboseRelvarUpdates(false); } }; } private TreeMap<String, Attribute> attributes = new TreeMap<String, Attribute>(); private class Attribute { private String name; private TreeMap<String, Value> values = new TreeMap<String, Value>(); Attribute(String name) { this.name = name; attributes.put(name, this); } void add(Value value) { values.put(value.getValue(), value); } String getName() { return name; } Value findValue(String valueName) { return values.get(valueName); } String getUsage() { String out = ""; for (Value value: values.values()) out += "\n" + getName() + " " + value.getValue() + ": " + value.getDescription(); return out; } } private static abstract class Value { private String value; private String description; Value(Attribute attribute, String value, String description) { this.value = value; this.description = description; attribute.add(this); } String getValue() { return value; } String getDescription() { return description; } abstract void setter(Generator generator); } private String getUsage() { String out = ""; for (Attribute attribute: attributes.values()) out += attribute.getUsage(); return "\n" + out; } private Attribute findAttribute(String attributeName) { return attributes.get(attributeName); } private static EnvironmentSettings environmentSetter = null; public static void set(Generator generator, String attribute, String value) { if (environmentSetter == null) environmentSetter = new EnvironmentSettings(); Attribute a = environmentSetter.findAttribute(attribute); if (a == null) throw new ExceptionSemantic("RS0016: Unknown attribute '" + attribute + "'. Available attributes are: " + environmentSetter.getUsage()); Value v = a.findValue(value); if (v == null) throw new ExceptionSemantic("RS0017: Unknown value '" + value + "'. Available values are: " + a.getUsage()); v.setter(generator); } }