/**
   * Sets the value for an "extra" property for this schema element. If a property already exists
   * with the specified name, then it will be overwritten. If the value is {@code null}, then any
   * existing property with the given name will be removed.
   *
   * @param elem The element where to set the extra property
   * @param name The name for the "extra" property. It must not be {@code null}.
   * @param value The value for the "extra" property. If it is {@code null}, then any existing
   *     definition will be removed.
   */
  public static void setExtraProperty(SchemaFileElement elem, String name, String value) {
    ifNull(name);

    if (value == null) {
      elem.getExtraProperties().remove(name);
    } else {
      elem.getExtraProperties().put(name, newLinkedList(value));
    }
  }
 /**
  * Retrieves the name of a single value property for this schema element.
  *
  * @param elem The element where to get the single value property from
  * @param propertyName The name of the property to get
  * @return The single value for this property, or <code>null</code> if it is this property is not
  *     set.
  */
 public static String getSingleValueProperty(SchemaFileElement elem, String propertyName) {
   List<String> values = elem.getExtraProperties().get(propertyName);
   if (values != null && !values.isEmpty()) {
     return values.get(0);
   }
   return null;
 }
 /**
  * Retrieves the definition string used to create this attribute type and including the
  * X-SCHEMA-FILE extension.
  *
  * @param elem The element where to get definition from
  * @return The definition string used to create this attribute type including the X-SCHEMA-FILE
  *     extension.
  */
 public static String getDefinitionWithFileName(SchemaFileElement elem) {
   final String schemaFile = getSchemaFile(elem);
   final String definition = elem.toString();
   if (schemaFile != null) {
     int pos = definition.lastIndexOf(')');
     return definition.substring(0, pos).trim()
         + " "
         + SCHEMA_PROPERTY_FILENAME
         + " '"
         + schemaFile
         + "' )";
   }
   return definition;
 }