def _discover_subfolder(self, model_subfolder_name, location, result=None):
        """
        Discover the subfolder indicated by the model subfolder name. Append the model subfolder to the
        current location context, and pop that location before return
        :param model_subfolder_name: Name of the model subfolder
        :param location: context containing the current subfolder information
        :return: discovered dictionary
        """
        _method_name = '_discover_subfolder'
        _logger.entering(model_subfolder_name,
                         location.get_folder_path(),
                         class_name=_class_name,
                         method_name=_method_name)
        location.append_location(model_subfolder_name)
        deployer_utils.set_flattened_folder_token(location, self._aliases)

        _logger.finer('WLSDPLY-06115',
                      model_subfolder_name,
                      self._aliases.get_model_folder_path(location),
                      class_name=_class_name,
                      method_name=_method_name)
        # handle null model_subfolder name which should never happen in discover. throw exception about version
        if result is None:
            result = OrderedDict()
        name_token = self._aliases.get_name_token(location)
        _logger.finest('WLSDPLY-06116',
                       model_subfolder_name,
                       self._aliases.get_model_folder_path(location),
                       name_token,
                       class_name=_class_name,
                       method_name=_method_name)
        if name_token is not None:
            if self._aliases.requires_unpredictable_single_name_handling(
                    location):
                subfolder_result = self._discover_subfolder_with_single_name(
                    model_subfolder_name, location, name_token)
            elif self._aliases.requires_artificial_type_subfolder_handling(
                    location):
                subfolder_result = self._discover_artificial_folder(
                    model_subfolder_name, location, name_token)
            else:
                subfolder_result = self._discover_subfolder_with_names(
                    model_subfolder_name, location, name_token)
        else:
            subfolder_result = self._discover_subfolder_singleton(
                model_subfolder_name, location)
        add_to_model_if_not_empty(result, model_subfolder_name,
                                  subfolder_result)
        location.pop_location()
        _logger.exiting(class_name=_class_name,
                        method_name=_method_name,
                        result=result)
        return result
    def update_rcu_password(self):
        """
        Update the password of each rcu schema and then update the bootstrap password
        """

        _method_name = 'update_rcu_password'

        domain_info = self.model.get_model_domain_info()
        if RCU_DB_INFO in domain_info:
            rcu_db_info = RcuDbInfo(self.model_context, self.aliases,
                                    domain_info[RCU_DB_INFO])
            rcu_schema_pass = rcu_db_info.get_rcu_schema_password()
            rcu_prefix = rcu_db_info.get_rcu_prefix()

            location = LocationContext()
            location.append_location(JDBC_SYSTEM_RESOURCE)

            folder_path = self.aliases.get_wlst_list_path(location)
            self.wlst_helper.cd(folder_path)
            ds_names = self.wlst_helper.lsc()
            domain_typedef = self.model_context.get_domain_typedef()
            rcu_schemas = domain_typedef.get_rcu_schemas()
            if len(rcu_schemas) == 0:
                return
            schemas_len = len(rcu_schemas)

            for i in range(0, schemas_len):
                rcu_schemas[i] = rcu_prefix + '_' + rcu_schemas[i]

            for ds_name in ds_names:
                location = deployer_utils.get_jdbc_driver_params_location(
                    ds_name, self.aliases)
                password_location = LocationContext(location)

                wlst_path = self.aliases.get_wlst_attributes_path(location)
                self.wlst_helper.cd(wlst_path)

                location.append_location(JDBC_DRIVER_PARAMS_PROPERTIES)
                deployer_utils.set_flattened_folder_token(
                    location, self.aliases)
                token_name = self.aliases.get_name_token(location)
                if token_name is not None:
                    location.add_name_token(token_name,
                                            DRIVER_PARAMS_USER_PROPERTY)
                wlst_path = self.aliases.get_wlst_attributes_path(location)
                self.wlst_helper.cd(wlst_path)
                ds_user = self.wlst_helper.get('Value')

                if ds_user in rcu_schemas:
                    wlst_path = self.aliases.get_wlst_attributes_path(
                        password_location)
                    self.wlst_helper.cd(wlst_path)
                    wlst_name, wlst_value = \
                        self.aliases.get_wlst_attribute_name_and_value(password_location, PASSWORD_ENCRYPTED,
                                                                            rcu_schema_pass, masked=True)
                    self.wlst_helper.set(wlst_name, wlst_value, masked=True)

                domain_home = self.model_context.get_domain_home()
                config_file = domain_home + '/config/fmwconfig/jps-config-jse.xml'
                opss_user = rcu_prefix + '_OPSS'
                if self._modifyBootStrapCredential:
                    self.wlst_helper.modify_bootstrap_credentials(
                        jps_configfile=config_file,
                        username=opss_user,
                        password=rcu_schema_pass)