/* Copyright (c) Oracle Corporation 1996.  All Rights Reserved */
/*****************************************************************************
  NAME
    nt.dei - V3 common deinstallation script for Windows 32-bit products

  DESCRIPTION
    This script performs common version analysis functionality across product
    DEI scripts.  It returns the variable 'doit', indictating whether the
    deinstallation is to proceed.

  CREATED
    Siddhartha Agarwal, July 10, 1996

  MODIFIED    DD-MMM-YY  Reason
  vrajkuma    13-01-97   doit is false if the product is part of any configurations.

*****************************************************************************/

{
  registry_label = registry_interface_label(current_registry);

  ui_product(registry_label);
  { ui_action(instantiate(analyze_deinstall_depend)); }
  ['UNBOUND_VARIABLE: { ui_action(UI_deinstalling); }] 

  /* If target home is default home, access software\oracle key structure */
  {
    if (oracle_home_info == default_home_info)
      signal('UNBOUND_VARIABLE);
    else if (not(multiple_home_aware))
      {
        signal('FAILURE,instantiate(moh_invalid_home));
      }
  }['UNBOUND_VARIABLE: multiple_home_aware = FALSE; ]

  doit = FALSE;

  if (unreferenced(current_registry))
    doit = TRUE;
  else if (member(registration("selected_registries"),current_registry))
    if (uniquely_self_referenced(current_registry))
      doit = TRUE;
    else
    {
	    templist = registry_references(current_registry);

	    extract(templist,current_registry);
	    subtract(templist,registration("selected_registries"));
            subtract(templist,all_child_registrations(current_registry));

	    if (not(empty(templist))) 
	      doit = yesno_dialog(instantiate(deinstall_prompt01),FALSE,
			          instantiate(deinstall_content01),
			          instantiate(deinstall_help01));
	    else
	      doit = TRUE;
    } 

  {
    groups_ini = "%shared_installer_home%\groups.ini";
    if (not(exists(groups_ini)))
      signal('FILE_NOT_FOUND);
    candidate_product = registry_name(current_registry);
    candidate_label = registry_interface_label(current_registry);
    group_sections = windows_initialization_file_sections(groups_ini);
    extract(group_sections,"CONFLICT RESOLUTION");

    notify_groups_list = list();
    while (not(empty(group_sections)))
    {
      candidate_section = first(group_sections);
      {
        product_list = get_configuration_products(candidate_section);
        if (member(product_list,candidate_product))
        {
          add(notify_groups_list,candidate_section);
        }
      }['UNBOUND_ENVIRONMENT_VARIABLE: continue();]
      group_sections = rest(group_sections);
    }

    if (not(empty(notify_groups_list)))
    {
    	{ shared_products_in_use = shared_products_in_use; }
	    ['UNBOUND_VARIABLE : shared_products_in_use = list(); /* Bad .avf */ ]
      add(shared_products_in_use, list(candidate_label,notify_groups_list));
      doit = FALSE;
    }
    else
    {
      /* there could still be product installed on the client */
      clients_list = get_all_clients();
      clients_dir = translate("CLIENTS_DIR", "$ORACLE");
      directorify(clients_dir);
      notify_clients_list = list();
      chosen_product = registry_name(current_registry);
      while( not(empty(clients_list)) )
      {
        client_name = first(clients_list);
        clients_rgs = "%clients_dir%\%client_name%.rgs";
        configured_products = list();
        sl = all_registrations(clients_rgs, 'shared);
        while(not(empty(sl)))
        {
          add(configured_products,registry_name(first(sl)));
          sl = rest(sl);
        }

        if( member(configured_products, chosen_product) )
          add(notify_clients_list, client_name);

        clients_list = rest(clients_list);
      }

      if (not(empty(notify_clients_list)))
      {
        prod_clients = implode(notify_clients_list, ",");
        information_dialog(instantiate(configured_on_client), 'NOCANCEL);
        doit = FALSE;
      }
    }

  }
  ['FILE_NOT_FOUND: continue();]

  return(doit);
}

  
