summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java')
-rw-r--r--branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java1097
1 files changed, 0 insertions, 1097 deletions
diff --git a/branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java b/branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java
deleted file mode 100644
index a0155c76e6..0000000000
--- a/branches/sca-java-M2/sca/services/containers/container.javascript/src/main/java/org/apache/tuscany/container/javascript/utils/xmlfromxsd/TuscanySampleXmlUtil.java
+++ /dev/null
@@ -1,1097 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.container.javascript.utils.xmlfromxsd;
-
-import org.apache.xmlbeans.SchemaType;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.SchemaParticle;
-import org.apache.xmlbeans.SchemaLocalElement;
-import org.apache.xmlbeans.SchemaProperty;
-import org.apache.xmlbeans.GDuration;
-import org.apache.xmlbeans.GDurationBuilder;
-import org.apache.xmlbeans.GDate;
-import org.apache.xmlbeans.GDateBuilder;
-import org.apache.xmlbeans.XmlAnySimpleType;
-import org.apache.xmlbeans.SimpleValue;
-import org.apache.xmlbeans.XmlOptions;
-import org.apache.xmlbeans.XmlObject;
-import org.apache.xmlbeans.XmlInteger;
-import org.apache.xmlbeans.XmlDate;
-import org.apache.xmlbeans.XmlDateTime;
-import org.apache.xmlbeans.XmlTime;
-import org.apache.xmlbeans.XmlGYear;
-import org.apache.xmlbeans.XmlGYearMonth;
-import org.apache.xmlbeans.XmlGMonth;
-import org.apache.xmlbeans.XmlGMonthDay;
-import org.apache.xmlbeans.XmlGDay;
-import org.apache.xmlbeans.XmlDecimal;
-import org.apache.xmlbeans.XmlDuration;
-import org.apache.xmlbeans.soap.SchemaWSDLArrayType;
-import org.apache.xmlbeans.soap.SOAPArrayType;
-import org.apache.xmlbeans.impl.util.Base64;
-import org.apache.xmlbeans.impl.util.HexBin;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Random;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Arrays;
-
-import javax.xml.namespace.QName;
-
-/**
- * This class is a replication of the XMLBeans SampleXMLutil class. This replication
- * is required to overide the XMLBeans behaviour of this class in certain places. Since
- * most methods of the XMLBeans implementation of this class is private, no overiding
- * has been possible using inheritance. Hence this replication.
- *
- */
-public class TuscanySampleXmlUtil {
- private static final String BLANK_STRING = " ";
-
- private boolean generate_sample_data = false;
-
- private boolean _soapEnc;
-
- private static final int MAX_ELEMENTS = 1000;
-
- private int _nElements;
-
- boolean flag = true;
-
- private TuscanySampleXmlUtil(boolean soapEnc) {
- _soapEnc = soapEnc;
- }
-
- public TuscanySampleXmlUtil() {
- this(false);
- }
-
- public String createSampleForType(SchemaType sType) {
- XmlObject object = XmlObject.Factory.newInstance();
- XmlCursor cursor = object.newCursor();
- // Skip the document node
- cursor.toNextToken();
- // Using the type and the cursor, call the utility method to get a
- // sample XML payload for that Schema element
- createSampleForType(sType, cursor);
- // Cursor now contains the sample payload
- // Pretty print the result. Note that the cursor is positioned at the
- // end of the doc so we use the original xml object that the cursor was
- // created upon to do the xmlText() against.
- XmlOptions options = new XmlOptions();
- options.put(XmlOptions.SAVE_PRETTY_PRINT);
- options.put(XmlOptions.SAVE_PRETTY_PRINT_INDENT, 2);
- options.put(XmlOptions.SAVE_AGGRESSIVE_NAMESPACES);
- String result = object.xmlText(options);
- return result;
- }
-
- Random _picker = new Random(1);
-
- /**
- * Cursor position
- * Before:
- * <theElement>^</theElement>
- * After:
- * <theElement><lots of stuff/>^</theElement>
- */
- private void createSampleForType(SchemaType stype, XmlCursor xmlc) {
- if (_typeStack.contains(stype))
- //if ( !flag )
- return;
- //else
- // flag = false;
-
- _typeStack.add(stype);
-
- try {
- if (stype.isSimpleType() || stype.isURType()) {
- processSimpleType(stype, xmlc);
- return;
- }
-
- // complex Type
- // <theElement>^</theElement>
- processAttributes(stype, xmlc);
-
- // <theElement attri1="string">^</theElement>
- switch (stype.getContentType()) {
- case SchemaType.NOT_COMPLEX_TYPE:
- case SchemaType.EMPTY_CONTENT:
- // noop
- break;
- case SchemaType.SIMPLE_CONTENT: {
- processSimpleType(stype, xmlc);
- }
- break;
- case SchemaType.MIXED_CONTENT:
- if (isGenerate_sample_data())
- xmlc.insertChars(pick(WORDS) + " ");
- if (stype.getContentModel() != null) {
- processParticle(stype.getContentModel(), xmlc, true);
- }
- if (isGenerate_sample_data())
- xmlc.insertChars(pick(WORDS));
-
- break;
- case SchemaType.ELEMENT_CONTENT:
- if (stype.getContentModel() != null) {
- processParticle(stype.getContentModel(), xmlc, false);
- }
- break;
- }
- } finally {
- _typeStack.remove(_typeStack.size() - 1);
- }
- }
-
- private void processSimpleType(SchemaType stype, XmlCursor xmlc) {
- String sample = sampleDataForSimpleType(stype);
- xmlc.insertChars(sample);
-
- }
-
- private String sampleDataForSimpleType(SchemaType sType) {
- if (isGenerate_sample_data()) {
- return generateSampleDataForSimpleType(sType);
- } else {
- return BLANK_STRING;
- }
- }
-
- private String generateSampleDataForSimpleType(SchemaType sType) {
- if (XmlObject.type.equals(sType))
- return "anyType";
-
- if (XmlAnySimpleType.type.equals(sType))
- return "anySimpleType";
-
- if (sType.getSimpleVariety() == SchemaType.LIST) {
- SchemaType itemType = sType.getListItemType();
- StringBuffer sb = new StringBuffer();
- int length = pickLength(sType);
- if (length > 0)
- sb.append(sampleDataForSimpleType(itemType));
- for (int i = 1; i < length; i += 1) {
- sb.append(' ');
- sb.append(sampleDataForSimpleType(itemType));
- }
- return sb.toString();
- }
-
- if (sType.getSimpleVariety() == SchemaType.UNION) {
- SchemaType[] possibleTypes = sType.getUnionConstituentTypes();
- if (possibleTypes.length == 0)
- return "";
- return sampleDataForSimpleType(possibleTypes[pick(possibleTypes.length)]);
- }
-
- XmlAnySimpleType[] enumValues = sType.getEnumerationValues();
- if (enumValues != null && enumValues.length > 0) {
- return enumValues[pick(enumValues.length)].getStringValue();
- }
-
- switch (sType.getPrimitiveType().getBuiltinTypeCode()) {
- default:
- case SchemaType.BTC_NOT_BUILTIN:
- return "";
-
- case SchemaType.BTC_ANY_TYPE:
- case SchemaType.BTC_ANY_SIMPLE:
- return "anything";
-
- case SchemaType.BTC_BOOLEAN:
- return pick(2) == 0 ? "true" : "false";
-
- case SchemaType.BTC_BASE_64_BINARY: {
- String result = null;
- try {
- result = new String(Base64.encode(formatToLength(pick(WORDS), sType).getBytes("utf-8")));
- } catch (java.io.UnsupportedEncodingException e) { /* Can't possibly happen */
- }
- return result;
- }
-
- case SchemaType.BTC_HEX_BINARY:
- return HexBin.encode(formatToLength(pick(WORDS), sType));
-
- case SchemaType.BTC_ANY_URI:
- return formatToLength("http://www." + pick(DNS1) + "." + pick(DNS2) + "/" + pick(WORDS) + "/" + pick(WORDS), sType);
-
- case SchemaType.BTC_QNAME:
- return formatToLength("qname", sType);
-
- case SchemaType.BTC_NOTATION:
- return formatToLength("notation", sType);
-
- case SchemaType.BTC_FLOAT:
- return "1.5E2";
- case SchemaType.BTC_DOUBLE:
- return "1.051732E7";
- case SchemaType.BTC_DECIMAL:
- switch (closestBuiltin(sType).getBuiltinTypeCode()) {
- case SchemaType.BTC_SHORT:
- return formatDecimal("1", sType);
- case SchemaType.BTC_UNSIGNED_SHORT:
- return formatDecimal("5", sType);
- case SchemaType.BTC_BYTE:
- return formatDecimal("2", sType);
- case SchemaType.BTC_UNSIGNED_BYTE:
- return formatDecimal("6", sType);
- case SchemaType.BTC_INT:
- return formatDecimal("3", sType);
- case SchemaType.BTC_UNSIGNED_INT:
- return formatDecimal("7", sType);
- case SchemaType.BTC_LONG:
- return formatDecimal("10", sType);
- case SchemaType.BTC_UNSIGNED_LONG:
- return formatDecimal("11", sType);
- case SchemaType.BTC_INTEGER:
- return formatDecimal("100", sType);
- case SchemaType.BTC_NON_POSITIVE_INTEGER:
- return formatDecimal("-200", sType);
- case SchemaType.BTC_NEGATIVE_INTEGER:
- return formatDecimal("-201", sType);
- case SchemaType.BTC_NON_NEGATIVE_INTEGER:
- return formatDecimal("200", sType);
- case SchemaType.BTC_POSITIVE_INTEGER:
- return formatDecimal("201", sType);
- default:
- case SchemaType.BTC_DECIMAL:
- return formatDecimal("1000.00", sType);
- }
-
- case SchemaType.BTC_STRING: {
- String result;
- switch (closestBuiltin(sType).getBuiltinTypeCode()) {
- case SchemaType.BTC_STRING:
- case SchemaType.BTC_NORMALIZED_STRING:
- result = "string";
- break;
-
- case SchemaType.BTC_TOKEN:
- result = "token";
- break;
-
- default:
- result = "string";
- break;
- }
-
- return formatToLength(result, sType);
- }
-
- case SchemaType.BTC_DURATION:
- return formatDuration(sType);
-
- case SchemaType.BTC_DATE_TIME:
- case SchemaType.BTC_TIME:
- case SchemaType.BTC_DATE:
- case SchemaType.BTC_G_YEAR_MONTH:
- case SchemaType.BTC_G_YEAR:
- case SchemaType.BTC_G_MONTH_DAY:
- case SchemaType.BTC_G_DAY:
- case SchemaType.BTC_G_MONTH:
- return formatDate(sType);
- }
- }
-
- // a bit from the Aenid
- public static final String[] WORDS = new String[] { "ipsa", "iovis", "rapidum", "iaculata", "e", "nubibus", "ignem", "disiecitque", "rates",
- "evertitque", "aequora", "ventis", "illum", "exspirantem", "transfixo", "pectore", "flammas", "turbine", "corripuit", "scopuloque",
- "infixit", "acuto", "ast", "ego", "quae", "divum", "incedo", "regina", "iovisque", "et", "soror", "et", "coniunx", "una", "cum", "gente",
- "tot", "annos", "bella", "gero", "et", "quisquam", "numen", "iunonis", "adorat", "praeterea", "aut", "supplex", "aris", "imponet",
- "honorem", "talia", "flammato", "secum", "dea", "corde", "volutans", "nimborum", "in", "patriam", "loca", "feta", "furentibus",
- "austris", "aeoliam", "venit", "hic", "vasto", "rex", "aeolus", "antro", "luctantis", "ventos", "tempestatesque", "sonoras", "imperio",
- "premit", "ac", "vinclis", "et", "carcere", "frenat", "illi", "indignantes", "magno", "cum", "murmure", "montis", "circum", "claustra",
- "fremunt", "celsa", "sedet", "aeolus", "arce", "sceptra", "tenens", "mollitque", "animos", "et", "temperat", "iras", "ni", "faciat",
- "maria", "ac", "terras", "caelumque", "profundum", "quippe", "ferant", "rapidi", "secum", "verrantque", "per", "auras", "sed", "pater",
- "omnipotens", "speluncis", "abdidit", "atris", "hoc", "metuens", "molemque", "et", "montis", "insuper", "altos", "imposuit", "regemque",
- "dedit", "qui", "foedere", "certo", "et", "premere", "et", "laxas", "sciret", "dare", "iussus", "habenas", };
-
- private static final String[] DNS1 = new String[] { "corp", "your", "my", "sample", "company", "test", "any" };
-
- private static final String[] DNS2 = new String[] { "com", "org", "com", "gov", "org", "com", "org", "com", "edu" };
-
- private int pick(int n) {
- return _picker.nextInt(n);
- }
-
- private String pick(String[] a) {
- return a[pick(a.length)];
- }
-
- private String pick(String[] a, int count) {
- if (count <= 0)
- return "";
-
- int i = pick(a.length);
- StringBuffer sb = new StringBuffer(a[i]);
- while (count-- > 0) {
- i += 1;
- if (i >= a.length)
- i = 0;
- sb.append(' ');
- sb.append(a[i]);
- }
- return sb.toString();
- }
-
- private String pickDigits(int digits) {
- StringBuffer sb = new StringBuffer();
- while (digits-- > 0)
- sb.append(Integer.toString(pick(10)));
- return sb.toString();
- }
-
- private int pickLength(SchemaType sType) {
- XmlInteger length = (XmlInteger) sType.getFacet(SchemaType.FACET_LENGTH);
- if (length != null)
- return length.getBigIntegerValue().intValue();
- XmlInteger min = (XmlInteger) sType.getFacet(SchemaType.FACET_MIN_LENGTH);
- XmlInteger max = (XmlInteger) sType.getFacet(SchemaType.FACET_MAX_LENGTH);
- int minInt, maxInt;
- if (min == null)
- minInt = 0;
- else
- minInt = min.getBigIntegerValue().intValue();
- if (max == null)
- maxInt = Integer.MAX_VALUE;
- else
- maxInt = max.getBigIntegerValue().intValue();
- // We try to keep the length of the array within reasonable limits,
- // at least 1 item and at most 3 if possible
- if (minInt == 0 && maxInt >= 1)
- minInt = 1;
- if (maxInt > minInt + 2)
- maxInt = minInt + 2;
- if (maxInt < minInt)
- maxInt = minInt;
- return minInt + pick(maxInt - minInt);
- }
-
- /**
- * Formats a given string to the required length, using the following operations:
- * - append the source string to itself as necessary to pass the minLength;
- * - truncate the result of previous step, if necessary, to keep it within minLength.
- */
- private String formatToLength(String s, SchemaType sType) {
- String result = s;
- try {
- SimpleValue min = (SimpleValue) sType.getFacet(SchemaType.FACET_LENGTH);
- if (min == null)
- min = (SimpleValue) sType.getFacet(SchemaType.FACET_MIN_LENGTH);
- if (min != null) {
- int len = min.getIntValue();
- while (result.length() < len)
- result = result + result;
- }
- SimpleValue max = (SimpleValue) sType.getFacet(SchemaType.FACET_LENGTH);
- if (max == null)
- max = (SimpleValue) sType.getFacet(SchemaType.FACET_MAX_LENGTH);
- if (max != null) {
- int len = max.getIntValue();
- if (result.length() > len)
- result = result.substring(0, len);
- }
- } catch (Exception e) // intValue can be out of range
- {
- }
- return result;
- }
-
- private String formatDecimal(String start, SchemaType sType) {
- BigDecimal result = new BigDecimal(start);
- XmlDecimal xmlD;
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- BigDecimal min = xmlD != null ? xmlD.getBigDecimalValue() : null;
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- BigDecimal max = xmlD != null ? xmlD.getBigDecimalValue() : null;
- boolean minInclusive = true, maxInclusive = true;
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (xmlD != null) {
- BigDecimal minExcl = xmlD.getBigDecimalValue();
- if (min == null || min.compareTo(minExcl) < 0) {
- min = minExcl;
- minInclusive = false;
- }
- }
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (xmlD != null) {
- BigDecimal maxExcl = xmlD.getBigDecimalValue();
- if (max == null || max.compareTo(maxExcl) > 0) {
- max = maxExcl;
- maxInclusive = false;
- }
- }
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_TOTAL_DIGITS);
- int totalDigits = -1;
- if (xmlD != null) {
- totalDigits = xmlD.getBigDecimalValue().intValue();
-
- StringBuffer sb = new StringBuffer(totalDigits);
- for (int i = 0; i < totalDigits; i++)
- sb.append('9');
- BigDecimal digitsLimit = new BigDecimal(sb.toString());
- if (max != null && max.compareTo(digitsLimit) > 0) {
- max = digitsLimit;
- maxInclusive = true;
- }
- digitsLimit = digitsLimit.negate();
- if (min != null && min.compareTo(digitsLimit) < 0) {
- min = digitsLimit;
- minInclusive = true;
- }
- }
-
- int sigMin = min == null ? 1 : result.compareTo(min);
- int sigMax = max == null ? -1 : result.compareTo(max);
- boolean minOk = sigMin > 0 || sigMin == 0 && minInclusive;
- boolean maxOk = sigMax < 0 || sigMax == 0 && maxInclusive;
-
- // Compute the minimum increment
- xmlD = (XmlDecimal) sType.getFacet(SchemaType.FACET_FRACTION_DIGITS);
- int fractionDigits = -1;
- BigDecimal increment;
- if (xmlD == null)
- increment = new BigDecimal(1);
- else {
- fractionDigits = xmlD.getBigDecimalValue().intValue();
- if (fractionDigits > 0) {
- StringBuffer sb = new StringBuffer("0.");
- for (int i = 1; i < fractionDigits; i++)
- sb.append('0');
- sb.append('1');
- increment = new BigDecimal(sb.toString());
- } else
- increment = new BigDecimal(1.0);
- }
-
- if (minOk && maxOk) {
- // OK
- } else if (minOk && !maxOk) {
- // TOO BIG
- if (maxInclusive)
- result = max;
- else
- result = max.subtract(increment);
- } else if (!minOk && maxOk) {
- // TOO SMALL
- if (minInclusive)
- result = min;
- else
- result = min.add(increment);
- } else {
- // MIN > MAX!!
- }
-
- // We have the number
- // Adjust the scale according to the totalDigits and fractionDigits
- int digits = 0;
- BigDecimal ONE = new BigDecimal(BigInteger.ONE);
- for (BigDecimal n = result; n.abs().compareTo(ONE) >= 0; digits++)
- n = n.movePointLeft(1);
-
- if (fractionDigits > 0)
- if (totalDigits >= 0)
- result.setScale(Math.max(fractionDigits, totalDigits - digits));
- else
- result.setScale(fractionDigits);
- else if (fractionDigits == 0)
- result.setScale(0);
-
- return result.toString();
- }
-
- private String formatDuration(SchemaType sType) {
- XmlDuration d = (XmlDuration) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- GDuration minInclusive = null;
- if (d != null)
- minInclusive = d.getGDurationValue();
-
- d = (XmlDuration) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- GDuration maxInclusive = null;
- if (d != null)
- maxInclusive = d.getGDurationValue();
-
- d = (XmlDuration) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- GDuration minExclusive = null;
- if (d != null)
- minExclusive = d.getGDurationValue();
-
- d = (XmlDuration) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- GDuration maxExclusive = null;
- if (d != null)
- maxExclusive = d.getGDurationValue();
-
- GDurationBuilder gdurb = new GDurationBuilder();
- BigInteger min, max;
-
- gdurb.setSecond(pick(800000));
- gdurb.setMonth(pick(20));
-
- // Years
- // Months
- // Days
- // Hours
- // Minutes
- // Seconds
- // Fractions
- if (minInclusive != null) {
- if (gdurb.getYear() < minInclusive.getYear())
- gdurb.setYear(minInclusive.getYear());
- if (gdurb.getMonth() < minInclusive.getMonth())
- gdurb.setMonth(minInclusive.getMonth());
- if (gdurb.getDay() < minInclusive.getDay())
- gdurb.setDay(minInclusive.getDay());
- if (gdurb.getHour() < minInclusive.getHour())
- gdurb.setHour(minInclusive.getHour());
- if (gdurb.getMinute() < minInclusive.getMinute())
- gdurb.setMinute(minInclusive.getMinute());
- if (gdurb.getSecond() < minInclusive.getSecond())
- gdurb.setSecond(minInclusive.getSecond());
- if (gdurb.getFraction().compareTo(minInclusive.getFraction()) < 0)
- gdurb.setFraction(minInclusive.getFraction());
- }
-
- if (maxInclusive != null) {
- if (gdurb.getYear() > maxInclusive.getYear())
- gdurb.setYear(maxInclusive.getYear());
- if (gdurb.getMonth() > maxInclusive.getMonth())
- gdurb.setMonth(maxInclusive.getMonth());
- if (gdurb.getDay() > maxInclusive.getDay())
- gdurb.setDay(maxInclusive.getDay());
- if (gdurb.getHour() > maxInclusive.getHour())
- gdurb.setHour(maxInclusive.getHour());
- if (gdurb.getMinute() > maxInclusive.getMinute())
- gdurb.setMinute(maxInclusive.getMinute());
- if (gdurb.getSecond() > maxInclusive.getSecond())
- gdurb.setSecond(maxInclusive.getSecond());
- if (gdurb.getFraction().compareTo(maxInclusive.getFraction()) > 0)
- gdurb.setFraction(maxInclusive.getFraction());
- }
-
- if (minExclusive != null) {
- if (gdurb.getYear() <= minExclusive.getYear())
- gdurb.setYear(minExclusive.getYear() + 1);
- if (gdurb.getMonth() <= minExclusive.getMonth())
- gdurb.setMonth(minExclusive.getMonth() + 1);
- if (gdurb.getDay() <= minExclusive.getDay())
- gdurb.setDay(minExclusive.getDay() + 1);
- if (gdurb.getHour() <= minExclusive.getHour())
- gdurb.setHour(minExclusive.getHour() + 1);
- if (gdurb.getMinute() <= minExclusive.getMinute())
- gdurb.setMinute(minExclusive.getMinute() + 1);
- if (gdurb.getSecond() <= minExclusive.getSecond())
- gdurb.setSecond(minExclusive.getSecond() + 1);
- if (gdurb.getFraction().compareTo(minExclusive.getFraction()) <= 0)
- gdurb.setFraction(minExclusive.getFraction().add(new BigDecimal(0.001)));
- }
-
- if (maxExclusive != null) {
- if (gdurb.getYear() > maxExclusive.getYear())
- gdurb.setYear(maxExclusive.getYear());
- if (gdurb.getMonth() > maxExclusive.getMonth())
- gdurb.setMonth(maxExclusive.getMonth());
- if (gdurb.getDay() > maxExclusive.getDay())
- gdurb.setDay(maxExclusive.getDay());
- if (gdurb.getHour() > maxExclusive.getHour())
- gdurb.setHour(maxExclusive.getHour());
- if (gdurb.getMinute() > maxExclusive.getMinute())
- gdurb.setMinute(maxExclusive.getMinute());
- if (gdurb.getSecond() > maxExclusive.getSecond())
- gdurb.setSecond(maxExclusive.getSecond());
- if (gdurb.getFraction().compareTo(maxExclusive.getFraction()) > 0)
- gdurb.setFraction(maxExclusive.getFraction());
- }
-
- gdurb.normalize();
- return gdurb.toString();
- }
-
- private String formatDate(SchemaType sType) {
- GDateBuilder gdateb = new GDateBuilder(new Date(1000L * pick(365 * 24 * 60 * 60) + (30L + pick(20)) * 365 * 24 * 60 * 60 * 1000));
- GDate min = null, max = null;
- GDate temp;
-
- // Find the min and the max according to the type
- switch (sType.getPrimitiveType().getBuiltinTypeCode()) {
- case SchemaType.BTC_DATE_TIME: {
- XmlDateTime x = (XmlDateTime) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlDateTime) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlDateTime) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlDateTime) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_TIME: {
- XmlTime x = (XmlTime) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlTime) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlTime) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlTime) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_DATE: {
- XmlDate x = (XmlDate) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlDate) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlDate) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlDate) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_G_YEAR_MONTH: {
- XmlGYearMonth x = (XmlGYearMonth) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlGYearMonth) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlGYearMonth) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlGYearMonth) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_G_YEAR: {
- XmlGYear x = (XmlGYear) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlGYear) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlGYear) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlGYear) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_G_MONTH_DAY: {
- XmlGMonthDay x = (XmlGMonthDay) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlGMonthDay) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlGMonthDay) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlGMonthDay) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_G_DAY: {
- XmlGDay x = (XmlGDay) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlGDay) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlGDay) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlGDay) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- case SchemaType.BTC_G_MONTH: {
- XmlGMonth x = (XmlGMonth) sType.getFacet(SchemaType.FACET_MIN_INCLUSIVE);
- if (x != null)
- min = x.getGDateValue();
- x = (XmlGMonth) sType.getFacet(SchemaType.FACET_MIN_EXCLUSIVE);
- if (x != null)
- if (min == null || min.compareToGDate(x.getGDateValue()) <= 0)
- min = x.getGDateValue();
-
- x = (XmlGMonth) sType.getFacet(SchemaType.FACET_MAX_INCLUSIVE);
- if (x != null)
- max = x.getGDateValue();
- x = (XmlGMonth) sType.getFacet(SchemaType.FACET_MAX_EXCLUSIVE);
- if (x != null)
- if (max == null || max.compareToGDate(x.getGDateValue()) >= 0)
- max = x.getGDateValue();
- break;
- }
- }
-
- if (min != null && max == null) {
- if (min.compareToGDate(gdateb) >= 0) {
- // Reset the date to min + (1-8) hours
- Calendar c = gdateb.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, pick(8));
- gdateb = new GDateBuilder(c);
- }
- } else if (min == null && max != null) {
- if (max.compareToGDate(gdateb) <= 0) {
- // Reset the date to max - (1-8) hours
- Calendar c = gdateb.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, 0 - pick(8));
- gdateb = new GDateBuilder(c);
- }
- } else if (min != null && max != null) {
- if (min.compareToGDate(gdateb) >= 0 || max.compareToGDate(gdateb) <= 0) {
- // Find a date between the two
- Calendar c = min.getCalendar();
- Calendar cmax = max.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, 1);
- if (c.after(cmax)) {
- c.add(Calendar.HOUR_OF_DAY, -1);
- c.add(Calendar.MINUTE, 1);
- if (c.after(cmax)) {
- c.add(Calendar.MINUTE, -1);
- c.add(Calendar.SECOND, 1);
- if (c.after(cmax)) {
- c.add(Calendar.SECOND, -1);
- c.add(Calendar.MILLISECOND, 1);
- if (c.after(cmax))
- c.add(Calendar.MILLISECOND, -1);
- }
- }
- }
- gdateb = new GDateBuilder(c);
- }
- }
-
- gdateb.setBuiltinTypeCode(sType.getPrimitiveType().getBuiltinTypeCode());
- if (pick(2) == 0)
- gdateb.clearTimeZone();
- return gdateb.toString();
- }
-
- private SchemaType closestBuiltin(SchemaType sType) {
- while (!sType.isBuiltinType())
- sType = sType.getBaseType();
- return sType;
- }
-
- /**
- * Cracks a combined QName of the form URL:localname
- */
- public static QName crackQName(String qName) {
- String ns;
- String name;
-
- int index = qName.lastIndexOf(':');
- if (index >= 0) {
- ns = qName.substring(0, index);
- name = qName.substring(index + 1);
- } else {
- ns = "";
- name = qName;
- }
-
- return new QName(ns, name);
- }
-
- /**
- * Cursor position:
- * Before this call:
- * <outer><foo/>^</outer> (cursor at the ^)
- * After this call:
- * <<outer><foo/><bar/>som text<etc/>^</outer>
- */
- private void processParticle(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- int loop = determineMinMaxForSample(sp, xmlc);
-
- while (loop-- > 0) {
- switch (sp.getParticleType()) {
- case (SchemaParticle.ELEMENT):
- processElement(sp, xmlc, mixed);
- break;
- case (SchemaParticle.SEQUENCE):
- processSequence(sp, xmlc, mixed);
- break;
- case (SchemaParticle.CHOICE):
- processChoice(sp, xmlc, mixed);
- break;
- case (SchemaParticle.ALL):
- processAll(sp, xmlc, mixed);
- break;
- case (SchemaParticle.WILDCARD):
- processWildCard(sp, xmlc, mixed);
- break;
- default:
- // throw new Exception("No Match on Schema Particle Type: " + String.valueOf(sp.getParticleType()));
- }
- }
- }
-
- private int determineMinMaxForSample(SchemaParticle sp, XmlCursor xmlc) {
- int minOccurs = sp.getIntMinOccurs();
- int maxOccurs = sp.getIntMaxOccurs();
-
- if (minOccurs == maxOccurs)
- return minOccurs;
-
- int result = minOccurs;
- if (result == 0 && _nElements < MAX_ELEMENTS)
- result = 1;
-
- if (sp.getParticleType() != SchemaParticle.ELEMENT)
- return result;
-
- // it probably only makes sense to put comments in front of individual elements that repeat
-
- if (sp.getMaxOccurs() == null) {
- // xmlc.insertComment("The next " + getItemNameOrType(sp, xmlc) + " may be repeated " + minOccurs + " or more times");
- if (minOccurs == 0)
- xmlc.insertComment("Zero or more repetitions:");
- else
- xmlc.insertComment(minOccurs + " or more repetitions:");
- } else if (sp.getIntMaxOccurs() > 1) {
- xmlc.insertComment(minOccurs + " to " + String.valueOf(sp.getMaxOccurs()) + " repetitions:");
- } else {
- xmlc.insertComment("Optional:");
- }
- return result;
- }
-
- /*
- Return a name for the element or the particle type to use in the comment for minoccurs, max occurs
- */
- private String getItemNameOrType(SchemaParticle sp, XmlCursor xmlc) {
- String elementOrTypeName = null;
- if (sp.getParticleType() == SchemaParticle.ELEMENT) {
- elementOrTypeName = "Element (" + sp.getName().getLocalPart() + ")";
- } else {
- elementOrTypeName = printParticleType(sp.getParticleType());
- }
- return elementOrTypeName;
- }
-
- private void processElement(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- // cast as schema local element
- SchemaLocalElement element = (SchemaLocalElement) sp;
- /// ^ -> <elemenname></elem>^
- if (_soapEnc)
- xmlc.insertElement(element.getName().getLocalPart()); // soap encoded? drop namespaces.
- else
- xmlc.insertElement(element.getName().getLocalPart(), element.getName().getNamespaceURI());
- _nElements++;
- /// -> <elem>^</elem>
- xmlc.toPrevToken();
- // -> <elem>stuff^</elem>
- createSampleForType(element.getType(), xmlc);
- // -> <elem>stuff</elem>^
- xmlc.toNextToken();
-
- }
-
- private void moveToken(int numToMove, XmlCursor xmlc) {
- for (int i = 0; i < Math.abs(numToMove); i++) {
- if (numToMove < 0) {
- xmlc.toPrevToken();
- } else {
- xmlc.toNextToken();
- }
- }
- }
-
- private static final String formatQName(XmlCursor xmlc, QName qName) {
- XmlCursor parent = xmlc.newCursor();
- parent.toParent();
- String prefix = parent.prefixForNamespace(qName.getNamespaceURI());
- parent.dispose();
- String name;
- if (prefix == null || prefix.length() == 0)
- name = qName.getLocalPart();
- else
- name = prefix + ":" + qName.getLocalPart();
- return name;
- }
-
- private static final QName HREF = new QName("href");
-
- private static final QName ID = new QName("id");
-
- private static final QName XSI_TYPE = new QName("http://www.w3.org/2001/XMLSchema-instance", "type");
-
- private static final QName ENC_ARRAYTYPE = new QName("http://schemas.xmlsoap.org/soap/encoding/", "arrayType");
-
- private static final QName ENC_OFFSET = new QName("http://schemas.xmlsoap.org/soap/encoding/", "offset");
-
- private static final Set SKIPPED_SOAP_ATTRS = new HashSet(Arrays.asList(new QName[] { HREF, ID, ENC_OFFSET }));
-
- private void processAttributes(SchemaType stype, XmlCursor xmlc) {
- if (_soapEnc) {
- QName typeName = stype.getName();
- if (typeName != null) {
- xmlc.insertAttributeWithValue(XSI_TYPE, formatQName(xmlc, typeName));
- }
- }
-
- SchemaProperty[] attrProps = stype.getAttributeProperties();
- for (int i = 0; i < attrProps.length; i++) {
- SchemaProperty attr = attrProps[i];
- if (_soapEnc) {
- if (SKIPPED_SOAP_ATTRS.contains(attr.getName()))
- continue;
- if (ENC_ARRAYTYPE.equals(attr.getName())) {
- SOAPArrayType arrayType = ((SchemaWSDLArrayType) stype.getAttributeModel().getAttribute(attr.getName())).getWSDLArrayType();
- if (arrayType != null)
- xmlc.insertAttributeWithValue(attr.getName(), formatQName(xmlc, arrayType.getQName()) + arrayType.soap11DimensionString());
- continue;
- }
- }
- String defaultValue = attr.getDefaultText();
- xmlc.insertAttributeWithValue(attr.getName(), defaultValue == null ? sampleDataForSimpleType(attr.getType()) : defaultValue);
- }
- }
-
- private void processSequence(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- SchemaParticle[] spc = sp.getParticleChildren();
- for (int i = 0; i < spc.length; i++) {
- /// <parent>maybestuff^</parent>
- processParticle(spc[i], xmlc, mixed);
- //<parent>maybestuff...morestuff^</parent>
- if (mixed && i < spc.length - 1) {
- if (isGenerate_sample_data()) {
- xmlc.insertChars(pick(WORDS));
- } else {
- xmlc.insertChars("");
- }
- }
- }
- }
-
- private void processChoice(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- SchemaParticle[] spc = sp.getParticleChildren();
- xmlc.insertComment("You have a CHOICE of the next " + String.valueOf(spc.length) + " items at this level");
- for (int i = 0; i < spc.length; i++) {
- processParticle(spc[i], xmlc, mixed);
- }
- }
-
- private void processAll(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- SchemaParticle[] spc = sp.getParticleChildren();
- // xmlc.insertComment("You may enter the following " + String.valueOf(spc.length) + " items in any order");
- for (int i = 0; i < spc.length; i++) {
- processParticle(spc[i], xmlc, mixed);
- if (mixed && i < spc.length - 1)
- xmlc.insertChars(pick(WORDS));
- }
- }
-
- private void processWildCard(SchemaParticle sp, XmlCursor xmlc, boolean mixed) {
- xmlc.insertComment("You may enter ANY elements at this point");
- xmlc.insertElement("AnyElement");
- }
-
- /**
- * This method will get the base type for the schema type
- */
-
- private static QName getClosestName(SchemaType sType) {
- while (sType.getName() == null)
- sType = sType.getBaseType();
-
- return sType.getName();
- }
-
- private String printParticleType(int particleType) {
- StringBuffer returnParticleType = new StringBuffer();
- returnParticleType.append("Schema Particle Type: ");
-
- switch (particleType) {
- case SchemaParticle.ALL:
- returnParticleType.append("ALL\n");
- break;
- case SchemaParticle.CHOICE:
- returnParticleType.append("CHOICE\n");
- break;
- case SchemaParticle.ELEMENT:
- returnParticleType.append("ELEMENT\n");
- break;
- case SchemaParticle.SEQUENCE:
- returnParticleType.append("SEQUENCE\n");
- break;
- case SchemaParticle.WILDCARD:
- returnParticleType.append("WILDCARD\n");
- break;
- default:
- returnParticleType.append("Schema Particle Type Unknown");
- break;
- }
-
- return returnParticleType.toString();
- }
-
- private ArrayList _typeStack = new ArrayList();
-
- public boolean isGenerate_sample_data() {
- return generate_sample_data;
- }
-
- public void setGenerate_sample_data(boolean generate_sample_data) {
- this.generate_sample_data = generate_sample_data;
- }
-}