001: /*
002: * (c) Copyright 2007 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.Distribution;
030: import org.databene.benerator.Generator;
031: import org.databene.benerator.GeneratorWrapper;
032: import org.databene.benerator.InvalidGeneratorSetupException;
033: import org.databene.benerator.Sequence;
034: import org.databene.benerator.primitive.number.adapter.IntegerGenerator;
035:
036: /**
037: * Creates arrays of random length filled with random bytes.
038: * @author Volker Bergmann
039: * @since 0.3.04
040: */
041: public class ByteArrayGenerator extends GeneratorWrapper<Byte, byte[]> {
042:
043: /** The generator that creates the array length */
044: private IntegerGenerator sizeGenerator;
045:
046: // constructors ----------------------------------------------------------------------------------------------------
047:
048: public ByteArrayGenerator() {
049: this (null, 0, 30, Sequence.RANDOM);
050: }
051:
052: public ByteArrayGenerator(Generator<Byte> source, int minLength,
053: int maxLength) {
054: this (source, minLength, maxLength, Sequence.RANDOM);
055: }
056:
057: public ByteArrayGenerator(Generator<Byte> source, int minLength,
058: int maxLength, Distribution distribution) {
059: super (source);
060: this .sizeGenerator = new IntegerGenerator(minLength, maxLength,
061: 1, distribution);
062: }
063:
064: // configuration properties ----------------------------------------------------------------------------------------
065:
066: /** Returns the minimum array length to generate */
067: public long getMinLength() {
068: return sizeGenerator.getMin();
069: }
070:
071: /** Sets the minimum array length to generate */
072: public void setMinLength(int minLength) {
073: sizeGenerator.setMin(minLength);
074: }
075:
076: /** Returns the maximum array length to generate */
077: public long getMaxLength() {
078: return sizeGenerator.getMin();
079: }
080:
081: /** Sets the maximum array length to generate */
082: public void setMaxLength(int maxLength) {
083: sizeGenerator.setMax(maxLength);
084: }
085:
086: public Distribution getLengthDistribution() {
087: return sizeGenerator.getDistribution();
088: }
089:
090: public void setLengthDistribution(Distribution distribution) {
091: sizeGenerator.setDistribution(distribution);
092: }
093:
094: // generator implementation ----------------------------------------------------------------------------------------
095:
096: public Class<byte[]> getGeneratedType() {
097: return byte[].class;
098: }
099:
100: public void validate() {
101: if (dirty) {
102: super .validate();
103: sizeGenerator.validate();
104: if (source == null)
105: throw new InvalidGeneratorSetupException("source",
106: " is null");
107: dirty = false;
108: }
109: }
110:
111: /** @see org.databene.benerator.Generator#generate() */
112: public byte[] generate() {
113: int length = sizeGenerator.generate();
114: byte[] array = new byte[length];
115: for (int i = 0; i < length; i++)
116: array[i] = source.generate();
117: return array;
118: }
119:
120: // implementation --------------------------------------------------------------------------------------------------
121:
122: }
|