001: package pygmy.core;
002:
003: /**
004: * This class is used by handlers or endpoints to tell the server which options are
005: * used to configure the object.
006: */
007: public class ConfigOption {
008: String propertyName;
009: String defaultValue;
010: boolean isRequired;
011: String helpString;
012:
013: /**
014: * This is used to create an optional property that defaults to null if unspecified.
015: *
016: * @param propertyName the name of the property.
017: * @param helpString the help string shown to the user.
018: */
019: public ConfigOption(String propertyName, String helpString) {
020: this (propertyName, false, helpString);
021: }
022:
023: /**
024: * This is used to create an optional property that has a supplied default value.
025: *
026: * @param propertyName the name of the property.
027: * @param defaultValue the default value used if this property is unspecified.
028: * @param helpString the help string shown to the user.
029: */
030: public ConfigOption(String propertyName, String defaultValue,
031: String helpString) {
032: this .propertyName = propertyName;
033: this .defaultValue = defaultValue;
034: this .isRequired = false;
035: this .helpString = helpString;
036: }
037:
038: /**
039: * This is used to create a required property. There is no default supplied in the case
040: * where required is true. If you specify it as false it's the same as an optional property
041: * with no default.
042: *
043: * @param propertyName the name of the property.
044: * @param required Used to specify a required property. True for required, false for optional.
045: * @param helpString the help string shown to the user if nothing is specified.
046: */
047: public ConfigOption(String propertyName, boolean required,
048: String helpString) {
049: this .propertyName = propertyName;
050: this .defaultValue = null;
051: this .isRequired = required;
052: this .helpString = helpString;
053: }
054:
055: /**
056: * This is used to fetch the value of the property. It's returned as a String. It will return
057: * the default property if it's not specified.
058: * @param server the Server object used by the system.
059: * @param name the name of the handler or endpoint instance.
060: * @return the value of the property or the default value if it was supplied in the constructor.
061: */
062: public String getProperty(Server server, String name) {
063: String key = propertyName;
064: if (name != null) {
065: key = name + "." + key;
066: }
067: String value = server.getProperty(key, defaultValue);
068: if (isRequired && value == null) {
069: throw new IllegalArgumentException(key
070: + " is a required argument.");
071: }
072: return value;
073: }
074:
075: /**
076: * This is used to fetch the value of the property as a Boolean. It will return
077: * the default property if it's not specified.
078: * @param server the Server object used by the system.
079: * @param name the name of the handler or endpoint instance.
080: * @return a Boolean value of the property or the default value if it was supplied in the constructor.
081: */
082: public Boolean getBoolean(Server server, String name) {
083: return new Boolean(getProperty(server, name));
084: }
085:
086: /**
087: * This is used to fetch the value of the property as an Integer. It will return
088: * the default property if it's not specified.
089: * @param server the Server object used by the system.
090: * @param name the name of the handler or endpoint instance.
091: * @return an Integer value of the property or the default value if it was supplied in the constructor.
092: */
093: public Integer getInteger(Server server, String name) {
094: return new Integer(getProperty(server, name));
095: }
096:
097: /**
098: * This method is used to return a user viewable help string in case an object was misconfigured.
099: *
100: * @return the user viewable string for misconfigured properties.
101: */
102: public String toHelp() {
103: return propertyName + "\t"
104: + (isRequired ? "Required" : "Optional") + "\t"
105: + defaultValue + "\t" + helpString;
106: }
107:
108: /**
109: * The name of the configuration property that this ConfigOption was constructed with.
110: * @return the propery's name.
111: */
112: public String getName() {
113: return propertyName;
114: }
115: }
|