/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.xsd.typeprovider.schemaindexer; import gw.internal.xml.xsd.typeprovider.XmlSchemaElementTypeData; import gw.internal.xml.xsd.typeprovider.XmlSchemaFlattenedChild; import gw.internal.xml.xsd.typeprovider.XmlSchemaIndex; import gw.internal.xml.xsd.typeprovider.XmlSchemaPropertyType; import gw.internal.xml.xsd.typeprovider.XmlSchemaResourceTypeLoaderBase; import gw.internal.xml.xsd.typeprovider.XmlSchemaTypeInstanceTypeData; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaSimpleType; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaSimpleTypeContent; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaType; import gw.util.GosuClassUtil; import gw.util.Pair; import java.util.Collections; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; public class XmlSchemaSimpleTypeIndexer extends XmlSchemaIndexer<XmlSchemaSimpleType> { @Override public <T> void index( XmlSchemaSimpleType xsdType, String prefix, List<XmlSchemaFlattenedChild> flattenedChildren, boolean topLevel, boolean isPlural, XmlSchemaType currentType, boolean createTypes, Map<QName, XmlSchemaElementTypeData> usedElementNames, Map<Pair<XmlSchemaPropertyType, QName>, Boolean> pluralityMap, T context, List<Runnable> todo ) { xsdType.getSchemaIndex().registerFlattenedChildrenBySchemaType( xsdType, Collections.<XmlSchemaFlattenedChild>emptyList() ); // simple types have no children xsdType.getSchemaIndex().registerChildrenPluralityBySchemaType( xsdType, Collections.<Pair<XmlSchemaPropertyType, QName>, Boolean>emptyMap() ); // simple types have no children String xsdTypeName = xsdType.getName(); String packageName = xsdType.getSchemaIndex().getPackageName(); boolean createGosuType = true; boolean anonymous = false; XmlSchemaResourceTypeLoaderBase typeLoader = xsdType.getSchemaIndex().getTypeLoader(); if ( xsdTypeName == null ) { if ( currentType != null ) { createGosuType = false; } packageName += typeLoader.getAnonymousNamespacePrefix() + ".types.simple"; anonymous = true; } else { packageName += typeLoader.getTypesNamespacePrefix() + ".simple"; } prefix = appendToPrefix( prefix, XmlSchemaIndex.makeCamelCase( xsdTypeName, null ) ); if ( createGosuType && createTypes ) { String typeName = xsdType.getSchemaIndex().makeUniqueTypeName( packageName, prefix ); prefix = GosuClassUtil.getNameNoPackage( typeName ); // in case a suffix was added @SuppressWarnings( { "unchecked" } ) XmlSchemaTypeInstanceTypeData type = new XmlSchemaTypeInstanceTypeData<T>( ( XmlSchemaIndex<T> ) xsdType.getSchemaIndex(), typeLoader, typeName, xsdType, anonymous, context ); xsdType.getSchemaIndex().putTypeDataByName( typeName, type ); xsdType.getSchemaIndex().putTypeDataBySchemaObject( xsdType, type ); } XmlSchemaSimpleTypeContent content = xsdType.getContent(); if ( content != null ) { invokeIndexer( content, prefix, flattenedChildren, topLevel, isPlural, xsdType, createTypes, usedElementNames, pluralityMap, context, todo ); } } }