home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / ProductFeatures.ycp < prev    next >
Text File  |  2006-11-29  |  7KB  |  270 lines

  1. /**
  2.  * File:    modules/ProductFetures.ycp
  3.  * Package:    installation
  4.  * Summary:    Product features
  5.  * Authors:    Anas Nashif <nashif@suse.de>
  6.  *              Jiri Srain <jsrain@suse.cz>
  7.  *
  8.  * $Id: ProductFeatures.ycp 31290 2006-06-02 10:54:10Z jsrain $
  9.  */
  10.  
  11. {
  12. module "ProductFeatures";
  13. textdomain "base";
  14.  
  15. import "Misc";
  16. import "Mode";
  17. import "Stage";
  18.  
  19. /**
  20.  * Map of all features
  21.  * See defaults map below for sample contents
  22.  */
  23. map<string,map<string,any> > features = nil;
  24.  
  25. /**
  26.  * Features to be saved in running system
  27.  * one item per feature, consists of key in file, section and option
  28.  */
  29. list<list<string> > features_to_save = [
  30.     ["UI_MODE", "globals", "ui_mode"],
  31.     ["ENABLE_AUTOLOGIN", "globals", "enable_autologin"],
  32.     ["EVMS_CONFIG", "partitioning", "evms_config"],
  33.     ["INCOMPLETE_TRANSLATION_TRESHOLD",
  34.     "globals", "incomplete_translation_treshold"],
  35.     ["VENDOR_URL", "globals", "vendor_url"],
  36. ];
  37.  
  38. /**
  39.  * Default values for features
  40.  * two-level map, section_name -> [ feature -> value ]
  41.  */
  42. map<string,map<string,any> > defaults = $[
  43.     "globals" : $[
  44.     "incomplete_translation_treshold" : "95",
  45.     "ui_mode" : "expert",
  46.     "enable_autologin" : true,
  47.     "language" : "",
  48.     "skip_language_dialog" : false,
  49.     "keyboard" : "",
  50.     "runlevel" : "",
  51.     "timezone" : "",
  52.     "fam_local_only" : "never",
  53.     "enable_firewall" : true,
  54.     "firewall_enable_ssh" : false,
  55.     "additional_kernel_parameters" : "",
  56.     "flags" : [],
  57.     "run_you" : true,
  58.     "relnotesurl" : "",
  59.     "vendor_url" : "",
  60.     "enable_clone" : false,
  61.     ],
  62.     "partitioning" : $[
  63.     "evms_config" : "no",
  64.     "use_flexible_partitioning" : false,
  65.     "flexible_partitioning" : $[],
  66.     ],
  67.     "software" : $[
  68.     "software_proposal" : "selection",
  69.     "selection_type" : `auto,
  70.     "delete_old_packages" : true,
  71.     "only_update_installed" : false,
  72.     "packages_transmogrify" : "",
  73.     "base_selection" : "",
  74.     "packages" : [],
  75.     "kernel_packages" : [],
  76.     "addon_selections" : [],
  77.     "inform_about_suboptimal_distribution" : false,
  78.     ],
  79.     "network" : $[
  80.     "force_static_ip" : false,
  81.     ],
  82. ];
  83.  
  84. // function pre-declarations
  85.  
  86. global string GetStringFeature (string section, string feature);
  87.  
  88.  
  89. /**
  90.  * Initialize default values of features
  91.  * @param force boolean drop all settings which were set before
  92.  */
  93. void InitFeatures (boolean force) {
  94.     if (! (force || features == nil))
  95.     return;
  96.     features = defaults;
  97. }
  98.  
  99. /**
  100.  * Set a feature section
  101.  * Default values will be used where value not defined
  102.  * @stable
  103.  * @param section name string the name of the section
  104.  * @param section_map a map containing data of the section
  105.  */
  106. global void SetSection(string section_name, map<string,any> section_map) {
  107.     InitFeatures (false);
  108.     y2debug("Setting section: %1", section_name);
  109.     section_map = (map<string,any>)
  110.     union (defaults[section_name]:$[], section_map);
  111.     features[section_name] = section_map;
  112. }
  113.  
  114. /**
  115.  * Get a complete section for evaluation
  116.  * @stable
  117.  * @param section_name string name of the section
  118.  * @return a map key->value, options in the section
  119.  */
  120. global map<string,any> GetSection(string section_name) {
  121.     InitFeatures (false);
  122.     return features[section_name]:$[];
  123. }
  124.  
  125. /**
  126.  * Save product features
  127.  * @stable
  128.  */
  129. global void Save() {
  130.     InitFeatures (false);
  131.     if (Mode::update()) // in case of update old file has different format
  132.     SCR::Execute (.target.bash, "test -f /etc/YaST2/ProductFeatures && /bin/rm /etc/YaST2/ProductFeatures");
  133.     foreach (string group, map<string,any> options, features, {
  134.     foreach (string key, any value, options, {
  135.         if (is (value, map) || is (value, list) || is (value, symbol))
  136.         y2debug ("Skipping option %1", key);
  137.         else
  138.         {
  139.         string strval = GetStringFeature (group, key);
  140.         SCR::Write (.product.features.value + group + key, strval);
  141.         }
  142.     });
  143.     });
  144.     SCR::Write (.product.features, nil );     // flush
  145. }
  146.  
  147. /**
  148.  * Restore product features in running system
  149.  * @stable
  150.  */
  151. global void Restore() {
  152.     InitFeatures (true);
  153.     list<string> groups = (list<string>)SCR::Dir (.product.features.section);
  154.     foreach (string group, groups, {
  155.     features[group] = features[group]:$[];
  156.     list<string> values = (list<string>)SCR::Dir (.product.features.value + group);
  157.     foreach (string v, values, {
  158.         features[group, v] = SCR::Read (.product.features.value + group + v);
  159.     });
  160.     });
  161. }
  162.  
  163. /**
  164.  * Initialize the features structure if needed
  165.  * @stable
  166.  * Either read from /etc/YaST2/ProductFeatures or set default values
  167.  */
  168. global void InitIfNeeded () {
  169.     if (features != nil)
  170.     return;
  171.     if (Stage::normal () || Stage::firstboot())
  172.     Restore ();
  173.     else
  174.     InitFeatures (false);
  175. }
  176.  
  177. /**
  178.  * Get value of a feature
  179.  * @stable
  180.  * @param section string section of the feature
  181.  * @param features string feature name
  182.  * @return any the feature value
  183.  */
  184. global any GetFeature (string section, string feature) {
  185.     InitIfNeeded ();
  186.     any ret = features[section, feature]:nil;
  187.     if (ret == nil)
  188.     ret = "";
  189.     return ret;
  190. }
  191.  
  192. /**
  193.  * Get value of a feature
  194.  * @stable
  195.  * @param section string section of the feature
  196.  * @param features string feature name
  197.  * @return string the feature value
  198.  */
  199. global string GetStringFeature (string section, string feature) {
  200.     any value = GetFeature (section, feature);
  201.     if (value == nil)
  202.     return nil;
  203.     else if (is (value, string))
  204.     return (string)value;
  205.     else if (is (value, boolean))
  206.     return (boolean)value ? "yes" : "no";
  207.     else
  208.     return sformat ("%1", value);
  209. }
  210.  
  211. /**
  212.  * Get value of a feature
  213.  * @stable
  214.  * @param section string section of the feature
  215.  * @param features string feature name
  216.  * @return boolean the feature value
  217.  */
  218. global boolean GetBooleanFeature (string section, string feature) {
  219.     any value = GetFeature (section, feature);
  220.     if (value == nil)
  221.     return nil;
  222.     else if (is (value, boolean))
  223.     return (boolean)value;
  224.     else if (is (value, string) && tolower ((string)value) == "yes")
  225.     return true;
  226.     else
  227.     return false;
  228.  
  229. }
  230.  
  231. /**
  232.  * Set value of a feature
  233.  * @stable
  234.  * @param section string section of the feature
  235.  * @param features string feature name
  236.  * @param value any the feature value
  237.  */
  238. global void SetFeature (string section, string feature, any value) {
  239.     InitIfNeeded ();
  240.     if (! haskey (features, section))
  241.     features[section] = $[];
  242.     features[section, feature] = value;
  243. }
  244.  
  245. /**
  246.  * Set value of a feature
  247.  * @stable
  248.  * @param section string section of the feature
  249.  * @param features string feature name
  250.  * @param value string the feature value
  251.  */
  252. global void SetStringFeature (string section, string feature, string value) {
  253.     SetFeature (section, feature, value);
  254. }
  255.  
  256. /**
  257.  * Set value of a feature
  258.  * @stable
  259.  * @param section string section of the feature
  260.  * @param features string feature name
  261.  * @param value boolean the feature value
  262.  */
  263. global void SetBooleanFeature (string section, string feature, boolean value) {
  264.     SetFeature (section, feature, value);
  265. }
  266.  
  267.  
  268. /* EOF */
  269. }
  270.