001: /*
002: * (c) Copyright 2006 by Volker Bergmann. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, is permitted under the terms of the
006: * GNU General Public License.
007: *
008: * For redistributing this software or a derivative work under a license other
009: * than the GPL-compatible Free Software License as defined by the Free
010: * Software Foundation or approved by OSI, you must first obtain a commercial
011: * license to this software product from Volker Bergmann.
012: *
013: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
014: * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS,
015: * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
016: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
017: * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
018: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
019: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
020: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
021: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
022: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
023: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
024: * POSSIBILITY OF SUCH DAMAGE.
025: */
026:
027: package org.databene.benerator.wrapper;
028:
029: import org.databene.benerator.Generator;
030: import org.databene.benerator.ValidatingGenerator;
031: import org.databene.benerator.InvalidGeneratorSetupException;
032: import org.databene.commons.validator.StringLengthValidator;
033:
034: import java.text.MessageFormat;
035:
036: /**
037: * Assembles the output of several source generators by a java.text.MessageFormat.<br/>
038: * <br/>
039: * Created: 08.06.2006 21:48:08
040: * @deprecated use databene-commons' MessageConverter class
041: */
042: public class MessageGenerator extends ValidatingGenerator<String> {
043:
044: /**
045: * Pattern of the MessageFormat to use.
046: * @see MessageFormat
047: */
048: private String pattern;
049:
050: /** minumum length of the generated String */
051: private int minLength;
052:
053: /** maxumum length of the generated String */
054: private int maxLength;
055:
056: /** provides the objects to format */
057: private CompositeArrayGenerator helper;
058:
059: private boolean dirty;
060:
061: // constructors ----------------------------------------------------------------------------------------------------
062:
063: /** Sets minLength to 0, maxLength to 30 and all other values empty. */
064: public MessageGenerator() {
065: this (null, 0, 30);
066: }
067:
068: /** Initializes Generator */
069: public MessageGenerator(String pattern, int minLength,
070: int maxLength, Generator... sources) {
071: super (new StringLengthValidator());
072: this .pattern = pattern;
073: this .minLength = minLength;
074: this .maxLength = maxLength;
075: this .helper = new CompositeArrayGenerator(Object.class, sources);
076: this .dirty = true;
077: }
078:
079: // config properties -----------------------------------------------------------------------------------------------
080:
081: /** Returns the pattern property */
082: public String getPattern() {
083: return pattern;
084: }
085:
086: /** Sets the pattern property */
087: public void setPattern(String pattern) {
088: this .pattern = pattern;
089: }
090:
091: /* Returns the minimum length of the generated String */
092: public int getMinLength() {
093: return minLength;
094: }
095:
096: /* Sets the minimum length of the generated String */
097: public void setMinLength(int minLength) {
098: this .minLength = minLength;
099: }
100:
101: /* Returns the maximum length of the generated String */
102: public int getMaxLength() {
103: return maxLength;
104: }
105:
106: /* Sets the maximum length of the generated String */
107: public void setMaxLength(int maxLength) {
108: this .maxLength = maxLength;
109: }
110:
111: /** Sets the source generators */
112: public void setSources(Generator[] sources) {
113: this .helper.setSources(sources);
114: }
115:
116: // generator interface ---------------------------------------------------------------------------------------------
117:
118: /** ensures consistency of the generator's state */
119: public void validate() {
120: if (dirty) {
121: if (pattern == null)
122: throw new InvalidGeneratorSetupException("pattern",
123: "is null");
124: StringLengthValidator v = (StringLengthValidator) validator;
125: v.setMinLength(minLength);
126: v.setMaxLength(maxLength);
127: helper.validate();
128: dirty = false;
129: }
130: }
131:
132: public Class<String> getGeneratedType() {
133: return String.class;
134: }
135:
136: /** Implementation of ValidatingGenerator's generation callback method */
137: public String generateImpl() {
138: Object[] values = helper.generate();
139: return MessageFormat.format(pattern, values);
140: }
141:
142: /** @see org.databene.benerator.Generator#reset() */
143: public void reset() {
144: helper.reset();
145: }
146:
147: /** @see org.databene.benerator.Generator#close() */
148: public void close() {
149: helper.close();
150: }
151:
152: public boolean available() {
153: return helper.available();
154: }
155:
156: // java.lang.Object overrides --------------------------------------------------------------------------------------
157:
158: /** Returns a String representation of the generator */
159: public String toString() {
160: return getClass().getSimpleName() + "[pattern='" + pattern
161: + "', " + minLength + "<=length<=" + maxLength + "]";
162: }
163: }
|