001: /*
002: * Copyright 2005 Paul Hinds
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.tp23.antinstaller.input;
017:
018: import java.util.MissingResourceException;
019:
020: import org.tp23.antinstaller.InstallerContext;
021: import org.tp23.antinstaller.ValidationException;
022: import org.tp23.antinstaller.renderer.AILanguagePack;
023:
024: /**
025: * This is the super class of all "Input types". It is called OutputField since
026: * it handles the base features of "Input types" for outputing text for
027: * the user to read. It also encapsulates some convenience methods for
028: * interpreting boolean values from the command line and in configuration files.
029: */
030: public abstract class OutputField {
031:
032: // i18n support
033: protected static final AILanguagePack langPack = new AILanguagePack();
034: private static int commentIdx = 0;
035:
036: /* This is redundant unless language packs are used
037: */
038: private String name = "comment." + ++commentIdx;
039:
040: protected String displayText;
041: protected String explanatoryText;
042: protected ResultContainer resultContainer;
043:
044: public OutputField() {
045:
046: }
047:
048: /* This is redundant unless language packs are used
049: */
050: public String getName() {
051: return name;
052: }
053:
054: /* This is redundant unless language packs are used
055: */
056: public void setName(String name) {
057: this .name = name;
058: }
059:
060: public String getDisplayText() {
061: if (langPack.isI18n()) {
062: return langPack.getString(getName() + ".displayText");
063: }
064: return displayText;
065: }
066:
067: public void setDisplayText(String displayText) {
068: this .displayText = displayText;
069: }
070:
071: public String getExplanatoryText() {
072: if (langPack.isI18n()) {
073: try {
074: return langPack.getString(getName()
075: + ".explanatoryText");
076: } catch (MissingResourceException e) {
077: // ignore and return null explanatoryText is optional
078: }
079: }
080: return explanatoryText;
081: }
082:
083: public void setExplanatoryText(String explanatoryText) {
084: this .explanatoryText = explanatoryText;
085: }
086:
087: public void setResultContainer(ResultContainer resultContainer) {
088: this .resultContainer = resultContainer;
089: }
090:
091: /**
092: * Validate the user input (or lack of it)
093: * This method should return false if the validation fails an throw an exception
094: * if it is not possible to validate or there is an error.
095: *
096: * @param cxt InstallerContext
097: * @throws ValidationException thrown in error conditions not validation failure
098: * @return boolean
099: */
100: public abstract boolean validate(InstallerContext cxt)
101: throws ValidationException;
102:
103: /**
104: * Used to validate the configuration, this can be run prior to distributing the
105: * installer to check that the config is valid. Will not be used at runtime.
106: * @throws ValidationException
107: * @return boolean
108: */
109: public abstract boolean validateObject();
110:
111: //////////////////////Static convenience methods
112:
113: /** true if specified and true or yes.
114: * N.B it is possible for X, isTrue(X) == isFalse(X);
115: * This occurs if the value is null.
116: */
117: public static boolean isTrue(String value) {
118: if (value == null)
119: return false;
120: return value.equalsIgnoreCase("true")
121: || value.equalsIgnoreCase("yes");
122: }
123:
124: /** same as isTrue() but default is false if not specified */
125: public static boolean isFalse(String value) {
126: if (value == null)
127: return false;
128: return value.equalsIgnoreCase("false")
129: || value.equalsIgnoreCase("no");
130: }
131:
132: /**
133: * Return true if the value is set to true or false, returns false if the value is null
134: * @param value String
135: * @return boolean
136: */
137: public static boolean requiredBoolean(String value) {
138: return isTrue(value) || isFalse(value);
139: }
140:
141: /**
142: * Return true if the value is set to true or false, returns false if the value is null
143: * @param value String
144: * @return boolean
145: */
146: public static boolean optionalBoolean(String value) {
147: return value == null || isTrue(value) || isFalse(value);
148: }
149: }
|