1 /* 2 * Portions of this software was developed by employees of the National Institute 3 * of Standards and Technology (NIST), an agency of the Federal Government and is 4 * being made available as a public service. Pursuant to title 17 United States 5 * Code Section 105, works of NIST employees are not subject to copyright 6 * protection in the United States. This software may be subject to foreign 7 * copyright. Permission in the United States and in foreign countries, to the 8 * extent that NIST may hold copyright, to use, copy, modify, create derivative 9 * works, and distribute this software and its documentation without fee is hereby 10 * granted on a non-exclusive basis, provided that this notice and disclaimer 11 * of warranty appears in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 14 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 15 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 17 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 18 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 19 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 20 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 21 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 22 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 23 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 24 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 25 */ 26 27 package gov.nist.secauto.metaschema.schemagen.xml.schematype; 28 29 import gov.nist.secauto.metaschema.core.util.ObjectUtils; 30 import gov.nist.secauto.metaschema.schemagen.SchemaGenerationException; 31 import gov.nist.secauto.metaschema.schemagen.xml.impl.XmlGenerationState; 32 33 import javax.xml.XMLConstants; 34 import javax.xml.namespace.QName; 35 36 import edu.umd.cs.findbugs.annotations.NonNull; 37 38 public interface IXmlType { 39 /** 40 * Get the type's name. 41 * <p> 42 * This is a shortcut to calling 43 * {@link #getQName()}.{@link QName#getLocalPart()}. 44 * 45 * @return the type name 46 */ 47 @NonNull 48 default String getTypeName() { 49 return ObjectUtils.notNull(getQName().getLocalPart()); 50 } 51 52 /** 53 * Get the type's XML qualified name. 54 * 55 * @return the qualified name 56 */ 57 @NonNull 58 QName getQName(); 59 60 /** 61 * Get the type name for use as a type reference. This type is namespace 62 * prefixed when needed. 63 * 64 * @return the type name 65 */ 66 @NonNull 67 default String getTypeReference() { 68 QName qname = getQName(); 69 String prefix = qname.getPrefix(); 70 String retval; 71 if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) { 72 retval = ObjectUtils.notNull(qname.getLocalPart()); 73 } else { 74 retval = ObjectUtils.notNull(new StringBuilder() 75 .append(prefix) 76 .append(':') 77 .append(qname.getLocalPart()) 78 .toString()); 79 } 80 return retval; 81 } 82 83 /** 84 * Generate the schema type. 85 * 86 * @param state 87 * the schema generation state used for context and writing 88 * @param anonymous 89 * {@code true} if the type should not have a name, or {@code false} if 90 * a name is required 91 * @throws SchemaGenerationException 92 * if an error occurred while writing the type 93 */ 94 void generateType(@NonNull XmlGenerationState state, boolean anonymous); 95 96 /** 97 * Determine if the type should be generated inline. 98 * 99 * @param state 100 * the schema generation state used for context 101 * @return {@code true} if the type should generated inline or {@code false} 102 * otherwise 103 */ 104 boolean isInline(@NonNull XmlGenerationState state); 105 106 /** 107 * Determine if the type is used in the schema. 108 * 109 * @param state 110 * the schema generation state used for context 111 * @return {@code true} if the type is used or {@code false} otherwise 112 */ 113 boolean isReferenced(@NonNull XmlGenerationState state); 114 115 /** 116 * Determine if the type is generated by the schema generator. 117 * <p> 118 * Built-in types are not generated by the schema generator. 119 * 120 * @param state 121 * the schema generation state used for context 122 * @return {@code true} if the type is generated by the schema generator or 123 * {@code false} otherwise 124 */ 125 boolean isGeneratedType(@NonNull XmlGenerationState state); 126 }