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 / clients / slp.ycp < prev    next >
Text File  |  2006-11-29  |  5KB  |  194 lines

  1. /**
  2.  * File:    clients/slp.ycp
  3.  * Package:    SLP
  4.  * Summary:    SLP Browser
  5.  * Authors:    Anas Nashif <nashif@suse.de>
  6.  *
  7.  * $Id: slp.ycp 17823 2004-06-14 12:32:40Z nashif $
  8.  *
  9.  * Browse SLP services
  10.  */
  11. {
  12.     import "SLP";
  13.     textdomain "slp";
  14.     import "Wizard";
  15.     import "Label";
  16.  
  17.     define term createTableItem(map srv) ``{
  18.  
  19.         term tabitem = `item();
  20.  
  21.         string srvurl = srv["srvurl"]:"";
  22.  
  23.         tabitem = `item(
  24.                 `id( srvurl),
  25.                 substring(srv["pcSrvType"]:"", 8 ),
  26.                 substring(srv["srvurl"]:"", 8 ),
  27.                 srv["lifetime"]:0
  28.                 );
  29.         return tabitem;
  30.     }
  31.  
  32.     /**
  33.      * Process Tree Items
  34.      */
  35.     define list<map> createTreeItem(list<map> Tree, string srvType, list<string> Sub) ``{
  36.  
  37.  
  38.         Tree = Wizard::AddTreeItem(Tree, "", srvType, "service:" + srvType );
  39.         Sub = filter(string s, Sub, ``(s!=""));
  40.         foreach(string s, Sub, ``{
  41.                 term si = `item();
  42.                 string Id = "service:" + srvType + ":" + s;
  43.                 Tree =Wizard::AddTreeItem(Tree, "service:" + srvType, s , Id);
  44.                 });
  45.  
  46.         return Tree;
  47.     }
  48.  
  49.     define list fillTable(list<map> response) ``{
  50.         list items = maplist(map srv, response, ``{
  51.                 return(createTableItem(srv));
  52.                 });
  53.  
  54.         return items;
  55.     }
  56.  
  57.     define map<string, list<string> > processTree(list<string> typeResponse ) ``{
  58.         map<string, list<string> > treeData = $[];
  59.         foreach(string t, typeResponse, ``{
  60.                 list<string> tok = splitstring(t, ":");
  61.                 list<string> s = [];
  62.                 s=add(s, tok[2]:"" );
  63.                 string t1 = tok[1]:"";
  64.                 if (!haskey(treeData, t1) )
  65.                 {
  66.                     treeData[t1] = s ;
  67.                 }
  68.                 else
  69.                 {
  70.                     list old = treeData[t1]:[];
  71.                     treeData[t1] = (list<string>)union(s,old) ;
  72.                 }
  73.                 });
  74.         return treeData;
  75.     }
  76.  
  77.  
  78.     define list<map> fillTree(list<string> typeResponse) ``{
  79.         list<map> Tree = [];
  80.         map<string, list<string> > data = processTree(typeResponse);
  81.         foreach(string type, list<string> sub,  data, ``{
  82.                 Tree = createTreeItem(Tree, type, sub);
  83.                 });
  84.  
  85.         return Tree;
  86.     }
  87.  
  88.  
  89.     /*
  90.     list<map> response = SLP::FindSrvs("CIM-Object-Manager");
  91.     */
  92.     list tableItems = [];
  93.     list treeItems = [];
  94.  
  95.     term contents =
  96.         `Top(
  97.                 `VBox(
  98.                     `Table( `id( `table ), `opt( `notify,  `immediate),
  99.                         `header( _("Type"), _("URL"), _("Lifetime") ),
  100.                         tableItems ),
  101.                     `RichText(`id(`attr),  "" )
  102.                     )
  103.             );
  104.  
  105.     list<string> typeResponse = SLP::FindSrvTypes("*", "");
  106.  
  107.     string title = _("SLP Browser");
  108.     Wizard::CreateTreeDialog();
  109.     Wizard::SetDesktopIcon("slp");
  110.     list<map> Tree = fillTree(typeResponse);
  111.     y2debug("Tree=%1", Tree);
  112.     Wizard::CreateTree(Tree, _("Service Types") );
  113.  
  114.     string help = dgettext("base", "No help available");
  115.     Wizard::SetContentsButtons(title, contents, help, Label::BackButton(),
  116.             Label::FinishButton());
  117.  
  118.     Wizard::HideAbortButton();
  119.     Wizard::DisableBackButton();
  120.  
  121.  
  122.  
  123.     any input = nil;
  124.     map cache = $[];
  125.     map attrcache = $[];
  126.     repeat {
  127.  
  128.         string srvtype = "";
  129.         string srv = "";
  130.         map event = UI::WaitForEvent();
  131.         input = event["ID"]:nil;
  132.         if (input == `wizardTree)
  133.             input = UI::QueryWidget(`id(`wizardTree), `CurrentItem);
  134.  
  135.         y2debug("input: %1", input);
  136.         if (is(input, string))
  137.         {
  138.             srvtype = Wizard::QueryTreeItem();
  139.         }
  140.         else if (input == `table )
  141.         {
  142.             srv = (string) UI::QueryWidget(`id(`table), `CurrentItem);
  143.         }
  144.         y2debug("srvtype: %1", srvtype );
  145.         y2debug("srv: %1", srv );
  146.         list<map> srvsResponse = [];
  147.         if(haskey(cache, srvtype))
  148.         {
  149.             srvsResponse = cache[srvtype]:[];
  150.         }
  151.         else
  152.         {
  153.             srvsResponse = SLP::FindSrvs(srvtype , "");
  154.             cache[srvtype] = srvsResponse;
  155.         }
  156.         tableItems = fillTable(srvsResponse);
  157.  
  158.         list<string> attr = [];
  159.         string sum = "";
  160.  
  161.         foreach(map s , srvsResponse, ``{
  162.                 string srvurl = s["srvurl"]:"";
  163.                 if(haskey(attrcache, srvurl))
  164.                 {
  165.                 attr = attrcache[srvurl]:[];
  166.                 }
  167.                 else
  168.                 {
  169.                 y2debug("s: %1", s);
  170.                 attr = SLP::FindAttrs(srvurl);
  171.                 y2debug("attr: %1", attr);
  172.                 attrcache[srvurl] = attr;
  173.                 }
  174.                 });
  175.  
  176.         if (is(input, string))
  177.         {
  178.             UI::ChangeWidget(`id(`table), `Items, tableItems);
  179.             srv = srvsResponse[0,"srvurl"]:"xxx";
  180.             sum = SLP::AttrSummary(attrcache[srv]:[]);
  181.             UI::ChangeWidget(`id(`attr), `Value, sum);
  182.         }
  183.         else if (input == `table )
  184.         {
  185.             sum = SLP::AttrSummary(attrcache[srv]:[]);
  186.             UI::ChangeWidget(`id(`attr), `Value, sum);
  187.         }
  188.     } until (input == `next || input == `abort || input == `cancel);
  189.  
  190.     UI::CloseDialog();
  191.     return input;
  192.     // EOF
  193. }
  194.