private static KerberosConfigurationDescriptor processConfiguration(KerberosConfigurationDescriptor previousStackConfiguration,
                                                                      KerberosConfigurationDescriptor newStackConfiguration,
                                                                      KerberosConfigurationDescriptor userConfiguration) {

    KerberosConfigurationDescriptor updatedValue = new KerberosConfigurationDescriptor((userConfiguration == null) ? null : userConfiguration.toMap());

    Map<String, String> previousValue = (previousStackConfiguration == null) ? null : previousStackConfiguration.getProperties();
    Map<String, String> newValue = (newStackConfiguration == null) ? null : newStackConfiguration.getProperties();
    Map<String, String> userValue = updatedValue.getProperties();

    updatedValue.setProperties(processProperties(previousValue, newValue, userValue));

    return updatedValue;
  }
Processes a {@link KerberosConfigurationDescriptor} to change the user-supplied data based on the changes
observed between the previous stack version's data and the new stack version's data.

@param previousStackConfiguration a {@link KerberosConfigurationDescriptor} from the previous stack version's Kerberos descriptor
@param newStackConfiguration      a {@link KerberosConfigurationDescriptor} from the new stack version's Kerberos descriptor
@param userConfiguration          a {@link KerberosConfigurationDescriptor} from the user-specified Kerberos descriptor
@return an updated {@link KerberosConfigurationDescriptor}
ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptorUpdateHelper.java