/* * eXist Open Source Native XML Database * Copyright (C) 2000-04, Wolfgang M. Meier (wolfgang@exist-db.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Id$ */ package org.exist.xmldb.concurrent; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Random; /** * @author wolf */ public class XMLGenerator { String[] words; int elementCnt; int attrCnt; int depth; Random random; boolean useNamespaces = false; public XMLGenerator(int elementCnt, int attrCnt, int depth, String[] words, boolean useNamespaces) { this.elementCnt = elementCnt; this.attrCnt = attrCnt; this.depth = depth; this.words = words; this.useNamespaces = useNamespaces; this.random = new Random(System.currentTimeMillis()); } public void generateXML(Writer writer) throws IOException { writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); writer.write("<ROOT-ELEMENT>"); for(int i = 0; i < elementCnt; i++) { writeElement(writer, 0); } writer.write("</ROOT-ELEMENT>"); } public String generateElement() throws IOException { StringWriter writer = new StringWriter(); writeElement(writer, 0); return writer.toString(); } protected void writeElement(Writer writer, int level) throws IOException { writer.write('<'); if (useNamespaces) { writer.write("t:"); } writer.write("ELEMENT"); if(level > 0) { writer.write('-'); writer.write(Integer.toString(level)); } if (useNamespaces) { writer.write(" xmlns:t=\"urn:test\""); } for(int i = 0; i < attrCnt; i++) { writer.write(' '); if (useNamespaces) { writer.write("t:"); } writer.write("attribute-"); writer.write(Integer.toString(i)); writer.write("=\""); writer.write(generateText(1)); writer.write("\""); } writer.write(">\n"); if(level < depth - 1) writeElement(writer, level + 1); else writer.write(generateText(20)); writer.write("\n</"); if (useNamespaces) writer.write("t:"); writer.write("ELEMENT"); if(level > 0) { writer.write('-'); writer.write(Integer.toString(level)); } writer.write(">\n"); } public String generateText(int len) { StringBuffer buf = new StringBuffer(); for(int i = 0; i < len; i++) { if(i > 0) buf.append(' '); int n = random.nextInt(words.length); buf.append(words[n]); } return buf.toString(); } }