/**
  * Finds the MaintainableCollectionDefinition corresponding to the given collection name. For
  * example, if the collection name is "A.B.C", it will attempt to find the
  * MaintainableCollectionDefinition for C that is nested in B that is nested under A. This may not
  * work correctly if there are duplicate collection definitions within the sections
  *
  * @param sections the sections of a maint doc
  * @param collectionName the name of a collection, relative to the root of the BO being
  *     maintained. This value may have index values (e.g. [1]), but these are ignored.
  * @return
  */
 public static MaintainableCollectionDefinition findMaintainableCollectionDefinition(
     List<MaintainableSectionDefinition> sections, String collectionName) {
   String[] collectionNameParts = StringUtils.split(collectionName, ".");
   for (MaintainableSectionDefinition section : sections) {
     MaintainableCollectionDefinition collDefinition =
         findMaintainableCollectionDefinitionHelper(
             section.getMaintainableItems(), collectionNameParts, 0);
     if (collDefinition != null) {
       return collDefinition;
     }
   }
   return null;
 }
  public static Map<String, AttributeSecurity> retrievePropertyPathToAttributeSecurityMappings(
      String docTypeName) {
    Map<String, AttributeSecurity> results = new HashMap<String, AttributeSecurity>();
    MaintenanceDocumentEntry entry =
        getMaintenanceDocumentDictionaryService().getMaintenanceDocumentEntry(docTypeName);
    String className = entry.getDataObjectClass().getName();

    for (MaintainableSectionDefinition section : entry.getMaintainableSections()) {
      for (MaintainableItemDefinition item : section.getMaintainableItems()) {
        if (item instanceof MaintainableFieldDefinition) {
          MaintainableFieldDefinition field = (MaintainableFieldDefinition) item;
          AttributeSecurity attributeSecurity =
              getDataDictionaryService().getAttributeSecurity(className, field.getName());
          if (attributeSecurity != null) {
            results.put(field.getName(), attributeSecurity);
          }
        } else if (item instanceof MaintainableCollectionDefinition) {
          addMaintenanceDocumentCollectionPathToSecurityMappings(
              results, "", (MaintainableCollectionDefinition) item);
        }
      }
    }
    return results;
  }