Package org.geotools.maven.xmlcodegen

Source Code of org.geotools.maven.xmlcodegen.GeneratorUtils

package org.geotools.maven.xmlcodegen;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDTypeDefinition;
import org.geotools.xml.Schemas;

/**
* Utility class used for generating.
*
* @author Justin Deoliveira, The Open Planning Project
*
*/
public class GeneratorUtils {

  /**
   * Returns all the types defined in <param>schema</param>, including anonymous complex
   * types.
   *
   * @param schema the schema.
   *
   * @return A list of types, including anonymous complex types.
   */
  public static List allTypes( XSDSchema schema ) {
    //get the named types
    List types = new ArrayList( schema.getTypeDefinitions() );
     
    //get anonymous types
    List anonymous = new ArrayList();
   
    //add any anonymous types of global elements + attributes
    for ( Iterator e = schema.getElementDeclarations().iterator(); e.hasNext(); ) {
      XSDElementDeclaration element = (XSDElementDeclaration ) e.next();
      if ( element.getAnonymousTypeDefinition() != null ) {
        element.getAnonymousTypeDefinition().setName( "_" + element.getName() );
        anonymous.add( element.getAnonymousTypeDefinition() );
      }
    }
    for ( Iterator a = schema.getAttributeDeclarations().iterator(); a.hasNext(); ) {
      XSDAttributeDeclaration attribute = (XSDAttributeDeclaration) a.next();
      if ( attribute.getAnonymousTypeDefinition() != null ) {
        attribute.getAnonymousTypeDefinition().setName( "_" + attribute.getName() );
        anonymous.add( attribute.getAnonymousTypeDefinition() );
      }
    }
      //add any anonymous types foudn with type definitions
      for ( Iterator t = types.iterator(); t.hasNext(); ) {
        XSDTypeDefinition type = (XSDTypeDefinition) t.next();
        List particles = Schemas.getChildElementParticles( type, false );
        for ( Iterator p = particles.iterator(); p.hasNext(); ) {
          XSDParticle particle = (XSDParticle) p.next();
          XSDElementDeclaration element = (XSDElementDeclaration) particle.getContent();
         
          //ignore element references, caught in teh above loop
          if ( element.isElementDeclarationReference() )
            continue;
         
          if ( element.getAnonymousTypeDefinition() != null ) {
            element.getAnonymousTypeDefinition().setName( type.getName() + "_" + element.getName() );
            anonymous.add( element.getAnonymousTypeDefinition() );
          }
        }
      }
     
      types.addAll( anonymous );
      return types;
  }
 
  /**
     * Returns all the types defined in <param>schema</param> whose names are
     * included in the specified set of names.
     * <p>
     * If <tt>names</tt> is null or empty all types are returned.
     * </p>
     * @param schema the schema.
     * @param names the names of types to include.
     *
     * @return A list of types, including anonymous complex types.
     */
  public static List types( XSDSchema schema, Set names ) {
      List allTypes = allTypes( schema );
      if ( names != null && !names.isEmpty() ) {
          for (Iterator t = allTypes.iterator(); t.hasNext(); ) {
              XSDTypeDefinition type = (XSDTypeDefinition) t.next();
              if ( type.getName() != null && names.contains(type.getName())) {
                  continue;
              }
             
              t.remove();
          }
      }
     
      return allTypes;
  }
}
TOP

Related Classes of org.geotools.maven.xmlcodegen.GeneratorUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.