logo       
Google Custom Search
    AddThis Social Bookmark Button

r10538 - in trunk/libraries: koala/sources/examples/buddha registry/generic: msg#00042

Subject: r10538 - in trunk/libraries: koala/sources/examples/buddha registry/generic web-framework
Author: hannes
Date: Tue Feb 21 01:09:58 2006
New Revision: 10538

Added:
   trunk/libraries/registry/generic/web-framework
   trunk/libraries/web-framework/
   trunk/libraries/web-framework/change.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/change.dylan
   trunk/libraries/web-framework/changes.dylan
      - copied unchanged from r10535, 
trunk/libraries/koala/sources/examples/buddha/changes.dylan
   trunk/libraries/web-framework/class-browser.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/class-browser.dylan
   trunk/libraries/web-framework/class-editor.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/class-editor.dylan
   trunk/libraries/web-framework/command.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/command.dylan
   trunk/libraries/web-framework/object-table.dylan
      - copied unchanged from r10535, 
trunk/libraries/koala/sources/examples/buddha/object-table.dylan
   trunk/libraries/web-framework/users.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/users.dylan
   trunk/libraries/web-framework/web-macro.dylan
      - copied, changed from r10535, 
trunk/libraries/koala/sources/examples/buddha/web-macro.dylan
Removed:
   trunk/libraries/koala/sources/examples/buddha/change.dylan
   trunk/libraries/koala/sources/examples/buddha/changes.dylan
   trunk/libraries/koala/sources/examples/buddha/class-browser.dylan
   trunk/libraries/koala/sources/examples/buddha/class-editor.dylan
   trunk/libraries/koala/sources/examples/buddha/command.dylan
   trunk/libraries/koala/sources/examples/buddha/object-table.dylan
   trunk/libraries/koala/sources/examples/buddha/users.dylan
   trunk/libraries/koala/sources/examples/buddha/web-macro.dylan
Modified:
   trunk/libraries/koala/sources/examples/buddha/buddha.dylan
   trunk/libraries/koala/sources/examples/buddha/buddha.lid
   trunk/libraries/koala/sources/examples/buddha/config.dylan
   trunk/libraries/koala/sources/examples/buddha/library.dylan
   trunk/libraries/koala/sources/examples/buddha/util.dylan
   trunk/libraries/koala/sources/examples/buddha/zone.dylan
Log:
Bug: 7257
*moved code from buddha to web-framework
*doesn't work yet completely


Modified: trunk/libraries/koala/sources/examples/buddha/buddha.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/buddha.dylan  (original)
+++ trunk/libraries/koala/sources/examples/buddha/buddha.dylan  Tue Feb 21 
01:09:58 2006
@@ -4,15 +4,12 @@
 define variable *config* = make(<config>,
                                 config-name: "config");
 
-//list containing recent changes
-define variable *changes* = #();
-
 define variable *version* = 0;
 
 define class <buddha> (<object>)
   constant slot config :: <config> = *config*;
   constant slot version :: <integer> = *version*;
-  constant slot changes = *changes*;
+  constant slot changes = get-all-changes();
   constant slot users = *users*;
 end;
 
@@ -73,7 +70,7 @@
   let buddha = dood-root(dood);
   dood-close(dood);
   *config* := buddha.config;
-  *changes* := buddha.changes;
+  set-changes(buddha.changes);
   *users* := buddha.users;
   if (buddha.version > *version*)
     *version* := buddha.version + 1;
@@ -113,10 +110,6 @@
   end;
 end;
 
-define generic respond-to-get (page,
-                               request :: <request>,
-                               response :: <response>,
-                               #key errors);
 
 define macro page-definer
   { define page ?:name end }
@@ -134,7 +127,7 @@
                unless (logged-in(request))
                  //error
                  respond-to-get(#"login", request, response,
-                                errors: list(make(<buddha-form-error>,
+                                errors: list(make(<web-error>,
                                                   error: "No valid user 
supplied\n")));
                  return();
                end;
@@ -265,17 +258,6 @@
          end; }
 end;
 
-define class <buddha-form-warning> (<condition>)
-  constant slot error-string :: <string>, required-init-keyword: warning:;
-end;
-
-define class <buddha-success> (<buddha-form-warning>)
-end;
-
-define class <buddha-form-error> (<error>)
-  constant slot error-string :: <string>, required-init-keyword: error:;
-end;
-
 define method respond-to-get (page == #"admin",
                               request :: <request>,
                               response :: <response>,
@@ -288,7 +270,7 @@
               { h2("Welcome, stranger"),
                 ul {
                   li(concatenate("Database version is ", show(*version*))),
-                  li(concatenate("There were ", show(*changes*.size), " 
changes")),
+                  li(concatenate("There were ", show(size(get-all-changes())), 
" changes")),
                   li(concatenate("There are ", show(*users*.size), " users")),
                   li{ a("User stats", href => "/koala/user-agents") }
                 },
@@ -323,7 +305,7 @@
               end)
     end;
   else
-    errors := add!(errors, make(<buddha-form-error>, error: "Permission 
denied"));
+    errors := add!(errors, make(<web-error>, error: "Permission denied"));
     respond-to-get (#"network", request, response, errors: errors);
   end;
 end;
@@ -420,7 +402,7 @@
       elseif (action = "redo")
         redo(change)
       end
-    exception (e :: <buddha-form-error>)
+    exception (e :: <web-error>)
       errors := add!(errors, e);
       return();
     end;
@@ -428,7 +410,7 @@
   let count = get-query-value("count");
   if (count & (count ~= ""))
     if (count = "all")
-      count := *changes*.size
+      count := size(get-all-changes())
     else
       count := integer-to-string(count)
     end
@@ -439,10 +421,10 @@
     collect(show-errors(errors));
     collect(with-xml()
               div(id => "content") {
-                a(concatenate("View all ", integer-to-string(*changes*.size), 
" changes"),
+                a(concatenate("View all ", 
integer-to-string(size(get-all-changes())), " changes"),
                   href => "/changes?count=all"),
                 ul {
-                  do(for (change in *changes*,
+                  do(for (change in get-all-changes(),
                           i from 0 to count)
                        block(ret)
                          collect(with-xml()
@@ -545,7 +527,7 @@
                do(for(error in errors)
                     collect(with-xml()
                               li(error.error-string,
-                                 class => if(instance?(error, 
<buddha-form-warning>))
+                                 class => if(instance?(error, 
<web-form-warning>))
                                             "green"
                                           else
                                             "red"
@@ -1227,6 +1209,7 @@
   end;
 end;
 
+/*
 define constant $yourname-users = make(<string-table>);
 
 define class <yourname-user> (<object>)
@@ -1246,7 +1229,7 @@
   let errs = #();
   format-out("ip %= pass %= host %= mac %= user %=\n",
              remote-ip, entered-password, hostname, entered-mac-address, user);
-end; /*
+end;
   block(ret)
     if (user)
       if (user.password = entered-password)
@@ -1273,12 +1256,12 @@
             redo(command);
             let change = make(<change>,
                               command: command);
-            *changes* := add!(*changes*, change);
+            add-change(change);
             let slot-names = apply(concatenate, map(method(x)
                                                         
concatenate(x.slot-name, " to ",
                                                                     
show(x.new-value), "  ")
                                                     end, changes));
-            signal(make(<buddha-success>,
+            signal(make(<web-success>,
                         warning: concatenate("Saved Host ",
                                              show(user.host),
                                              " changed slots: ",
@@ -1304,23 +1287,23 @@
           redo(command);
           let change = make(<change>,
                             command: command);
-          *changes* := add!(*changes*, change);
-          signal(make(<buddha-success>,
+          add-change(change);
+          signal(make(<web-success>,
                       warning: concatenate("Added host: ", show(new-host))));
         end;
       else
         //wrong password
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "Invalid user/password"));
       end;
       //post before get
-      signal(make(<buddha-form-error>,
+      signal(make(<web-error>,
                   error: "POST before GET, go away"));
     end;
   exception (e :: <condition>)
     errs := add!(errs, e);
     ret()
-  exception (e :: <buddha-form-error>)
+  exception (e :: <web-error>)
     errs := add!(errs, e);
     ret()
   exception (e :: <error>)

Modified: trunk/libraries/koala/sources/examples/buddha/buddha.lid
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/buddha.lid    (original)
+++ trunk/libraries/koala/sources/examples/buddha/buddha.lid    Tue Feb 21 
01:09:58 2006
@@ -2,8 +2,6 @@
 executable: buddha
 files: library
        util
-       web-macro
-       object-table
        config
        network
        vlan
@@ -14,9 +12,4 @@
        zone
        mac
        cisco-telnet
-       class-browser
-       command
-       change
-       class-editor
-       users
        buddha

Modified: trunk/libraries/koala/sources/examples/buddha/config.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/config.dylan  (original)
+++ trunk/libraries/koala/sources/examples/buddha/config.dylan  Tue Feb 21 
01:09:58 2006
@@ -1,10 +1,6 @@
 module: buddha
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
-define class <reference-object> (<object>)
-  slot visible? :: <boolean> = #t, init-keyword: visible?:;
-end;
-
 define web-class <config> (<object>)
   data config-name :: <string>;
   has-many vlan;
@@ -64,14 +60,14 @@
 define method check-in-context (tzone :: <zone>, tcname :: <cname>)
  => (res :: <boolean>)
   if (any?(method(x) x.source = tcname.source end, tzone.cnames))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   elseif (any?(method(x) x.host-name = tcname.source end, tzone.a-records))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   elseif (any?(method(x) x.host-name = tcname.source end,
                choose(method(y) y.zone = tzone end, *config*.hosts)))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   else
     #t;
@@ -81,14 +77,14 @@
 define method check-in-context (tzone :: <zone>, a-record :: <a-record>) 
  => (res :: <boolean>)
   if (any?(method(x) x.source = a-record.host-name end, tzone.cnames))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   elseif (any?(method(x) x.host-name = a-record.host-name end, 
tzone.a-records))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   elseif (any?(method(x) x.host-name = a-record.host-name end,
                choose(method(y) y.zone = tzone end, *config*.hosts)))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Same A record already exists"));
   else
     #t;
@@ -98,7 +94,7 @@
 define method check (zone :: <zone>, #key test-result = 0)
  => (res :: <boolean>)
   if (size(choose(method(x) x.zone-name = zone.zone-name end , 
*config*.zones)) > test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Zone with same name already exists"));
   else
     if (zone.reverse?)
@@ -112,32 +108,32 @@
  => (res :: <boolean>)
   if (size(choose(method(x) x.host-name = host.host-name end,
                   choose(method(x) x.zone = host.zone end, *config*.hosts))) > 
test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Host with same name already exists in zone"));
   elseif (size(choose(method(x) x.host-name = host.host-name end,
                       host.zone.a-records)) > 0)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "A record for host already exists in zone"));
   elseif (size(choose(method(x) x.target = host.host-name end,
                       host.zone.cnames)) > 0)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "A record already exists in zone"));
   elseif (size(choose(method(x) x.ipv4-address = host.ipv4-address end,
                       choose(method(x) x.subnet = host.subnet end, 
*config*.hosts))) > test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Host with same IP address already exists in subnet"));
   elseif (host.subnet.dhcp?
             & size(choose(method(x) x.mac-address = host.mac-address end,
                             choose(method(x) x.subnet = host.subnet end,
                                      *config*.hosts))) > test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Host with same MAC address already exists in subnet"));
   elseif ((host.ipv4-address = network-address(host.subnet.cidr)) |
             (host.ipv4-address = broadcast-address(host.subnet.cidr)))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Host can't have the network or broadcast address as 
IP"));
   elseif (~ ip-in-net?(host.subnet, host.ipv4-address))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Host is not in specified network"))
   else
     #t;
@@ -147,13 +143,13 @@
 define method check (vlan :: <vlan>, #key test-result = 0)
  => (res :: <boolean>)
   if ((vlan.number < 0) | (vlan.number > 4095))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "VLAN not in range 0 - 4095"));
   elseif (size(choose(method(x) x.number = vlan.number end , *config*.vlans)) 
> test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "VLAN with same number already exists"));
   elseif (size(choose(method(x) x.vlan-name = vlan.vlan-name end, 
*config*.vlans)) > test-result)
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "VLAN with same name already exists"));
   else
     #t;
@@ -163,7 +159,7 @@
 define method check (network :: <network>, #key test-result = 0)
  => (res :: <boolean>)
   unless (network-address(network.cidr) = base-network-address(network.cidr))
-    signal(make(<buddha-form-warning>,
+    signal(make(<web-form-warning>,
                 warning: "Network address is not the base network address, 
fixing this!"));
     network.cidr.cidr-network-address := base-network-address(network.cidr);
   end;
@@ -174,7 +170,7 @@
     end;
     #t;
   else
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Network overlaps with another network"));
   end if;
 end;
@@ -182,32 +178,32 @@
 define method check (subnet :: <subnet>, #key test-result = 0)
  => (res :: <boolean>)
   unless (network-address(subnet.cidr) = base-network-address(subnet.cidr))
-    signal(make(<buddha-form-warning>,
+    signal(make(<web-form-warning>,
                 warning: "Network address is not the base network address, 
fixing this!"));
     subnet.cidr.cidr-network-address := base-network-address(subnet.cidr);
   end;
   if (every?(method(x) x = subnet end, overlaps(subnet)))
     if (subnet-in-network?(subnet))
       if (subnet.dhcp-start > subnet.dhcp-end)
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP start greater than DHCP end"));
       elseif (subnet.dhcp-start = broadcast-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP start can't be broadcast address"))
       elseif (subnet.dhcp-start = network-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP start can't be network address"))
       elseif (subnet.dhcp-end = broadcast-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP end can't be broadcast address"))
       elseif (subnet.dhcp-end = network-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP end can't be network address"))
       elseif (subnet.dhcp-router = broadcast-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP router can't be broadcast address"))
       elseif (subnet.dhcp-router = network-address(subnet.cidr))
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP router can't be network address"))
       end;
       if (ip-in-net?(subnet, subnet.dhcp-start))
@@ -215,29 +211,29 @@
           if (ip-in-net?(subnet, subnet.dhcp-router))
             if ((subnet.dhcp-router > subnet.dhcp-start)
                   & (subnet.dhcp-router < subnet.dhcp-end))
-              signal(make(<buddha-form-error>,
+              signal(make(<web-error>,
                           error: "Router has to be outside of dhcp-range"));
             else
               #t;
             end if;
           else
-            signal(make(<buddha-form-error>,
+            signal(make(<web-error>,
                         error: "DHCP router not in subnet"));
           end
         else
-          signal(make(<buddha-form-error>,
+          signal(make(<web-error>,
                       error: "DHCP end not in subnet"));
         end
       else
-        signal(make(<buddha-form-error>,
+        signal(make(<web-error>,
                     error: "DHCP start not in subnet"));
       end
     else
-      signal(make(<buddha-form-error>,
+      signal(make(<web-error>,
                   error: "Subnet not in a defined network"));
     end
   else
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "Subnet overlaps with another subnet"));
   end if;
 end;

Modified: trunk/libraries/koala/sources/examples/buddha/library.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/library.dylan (original)
+++ trunk/libraries/koala/sources/examples/buddha/library.dylan Tue Feb 21 
01:09:58 2006
@@ -13,48 +13,10 @@
   use xml-rpc-common;
   use xml-parser;
   use dylan;
+  use web-framework;
   export buddha;
 end;
 
-define module web-macro
-  use common-dylan;
-
-  export <slot>,
-    slot-name,
-    slot-type,
-    slot-getter-method,
-    slot-setter-method,
-    slot-global-list,
-    default,
-    default-function,
-    default-help-text;
- 
-  export list-reference-slots,
-    reference-slots,
-    data-slots;
-
-  export \web-class-definer;
-end;
-
-
-/*
-define module changes
-  use common-dylan;
-  use xml;
-
-  export <entry>;
-end;
-*/
-
-define module object-table
-  use common-dylan;
-  use dylan-extensions, import: { address-of,
-                                  <string-table> };
-
-  export get-reference,
-    get-object;
-end;
-
 define module utils
   use common-dylan;
   use dylan-extensions, import: { debug-name };
@@ -66,37 +28,6 @@
     data;
 end;
 
-/*
-define module class-editor
-  use common-dylan;
-  use xml;
-  use web-macro;
-  use object-table;
-  use utils;
-  export edit-form,
-    remove-form,
-    add-form,
-    check;
-end;
-*/
-
-define module class-browser
-  use common-dylan;
-  use simple-xml;
-  use web-macro;
-  use object-table;
-  use format-out;
-  use utils;
-//  use class-editor;
-  export browse-list,
-    browse-table,
-    remove-form,  //this shouldn't be here
-    show,
-    browse,
-    to-table-header,
-    to-table;
-end;
-
 define module buddha
   use regular-expressions;
   use common-dylan;
@@ -121,9 +52,7 @@
   use xml-rpc-common, import: { base64-encode, base64-decode };
 
   use simple-xml;
-  use web-macro;
+  use web-framework;
   use object-table;
-  use class-browser;
-//  use class-editor;
   use utils;
 end;

Modified: trunk/libraries/koala/sources/examples/buddha/util.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/util.dylan    (original)
+++ trunk/libraries/koala/sources/examples/buddha/util.dylan    Tue Feb 21 
01:09:58 2006
@@ -29,12 +29,6 @@
   res;
 end;
 
-define method get-url-from-type (type) => (string :: <string>)
-  copy-sequence(type.debug-name,
-                start: 1,
-                end: type.debug-name.size - 1)
-end;
-
 define class <wrapper-sequence> (<sequence>)
   slot data :: <sequence>, init-keyword: data:;
 end;
@@ -95,3 +89,10 @@
   //<byte-vector>
   type-for-copy(seq.data);
 end;
+
+define method get-url-from-type (type) => (string :: <string>)
+  copy-sequence(type.debug-name,
+                start: 1,
+                end: type.debug-name.size - 1)
+end;
+

Modified: trunk/libraries/koala/sources/examples/buddha/zone.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/zone.dylan    (original)
+++ trunk/libraries/koala/sources/examples/buddha/zone.dylan    Tue Feb 21 
01:09:58 2006
@@ -278,12 +278,12 @@
                          arguments: list(zone, *config*.zones));
       let change = make(<change>,
                         command: command);
-      *changes* := add!(*changes*, change);
+      add-change(change);
       redo(command);
-      signal(make(<buddha-success>,
+      signal(make(<web-success>,
                   warning: concatenate("Added zone: ", show(zone))));
-    exception (e :: <buddha-form-error>)
-      signal(make(<buddha-form-warning>,
+    exception (e :: <web-error>)
+      signal(make(<web-form-warning>,
                   warning: concatenate("Couldn't add reverse zone, error was: 
", e.error-string)));
       ret();
     end;

Added: trunk/libraries/registry/generic/web-framework
==============================================================================
--- (empty file)
+++ trunk/libraries/registry/generic/web-framework      Tue Feb 21 01:09:58 2006
@@ -0,0 +1 @@
+abstract://dylan/web-framework/web-framework.lid

Copied: trunk/libraries/web-framework/change.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/change.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/change.dylan  (original)
+++ trunk/libraries/web-framework/change.dylan  Tue Feb 21 01:09:58 2006
@@ -1,6 +1,20 @@
-module: buddha
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
+define variable *changes* = #();
+
+define method get-all-changes () => (changes :: <list>)
+  *changes*;
+end;
+
+define method set-changes (changes :: <list>) => ()
+  *changes* := changes;
+end;
+
+define method add-change (change :: <change>) => ()
+  *changes* := add!(*changes*, change);
+end;
+
 define class <change> (<object>)
   slot author :: <string>;
   slot date :: <date>;
@@ -10,63 +24,18 @@
 define method initialize (change :: <change>, #rest rest, #key, #all-keys)
   next-method();
   change.date := current-date();
-  change.author := *user*.username;
+  change.author := current-user().username;
 end;
 
 define method undo (change :: <change>)
-  //rollback to change
-  /* let redo-start =
-    block(return)
-      for (ele in *changes*,
-           i from 0)
-        if (change = ele)
-          return(i - 1);
-        else
-          undo(ele.command)
-        end;
-      end;
-    end; */
   //undo the change
   undo(change.command);
-  //redo all other changes
- /*  for (i from redo-start to 0 by -1)
-    let ele = *changes*[i];
-    redo(ele.command);
-  end; */
   //on success, make a new <change> object, add it to *changes*
   let change = make(<change>,
                     command: reverse-command(change.command));
   *changes* := add!(*changes*, change);
 end;
 
-/*
-define method redo (change :: <change>)
-  //rollback to change
-  let redo-start =
-    block(return)
-      for (ele in *changes*,
-           i from 0)
-        if (change = ele)
-          return(i - 1);
-        else
-          undo(ele.command)
-        end;
-      end;
-    end;
-  //redo the change
-  redo(change.command);
-  //redo all other changes
-  for (i from redo-start to 0 by -1)
-    let ele = *changes*[i];
-    redo(ele.command);
-  end;
-  //on success, make a new <change> object, add it to *changes*
-  let change = make(<change>,
-                    command: change.command);
-  *changes* := add!(*changes*, change);
-end;
-*/
-
 define method print-xml (date :: <date>)
   let $month-names
     = #["Jan", "Feb", "Mar", "Apr", "May", "Jun",

Copied: trunk/libraries/web-framework/class-browser.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/class-browser.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/class-browser.dylan   
(original)
+++ trunk/libraries/web-framework/class-browser.dylan   Tue Feb 21 01:09:58 2006
@@ -1,4 +1,4 @@
-module: class-browser
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
 define method browse (object-type :: subclass(<object>),
@@ -143,31 +143,4 @@
   as(<string>, object)
 end;
 
-define method remove-form (object :: <object>, parent :: <object>,
-                           #key url :: <string> = "edit",
-                           xml)
-  with-xml()
-    form(action => "/edit", \method => "post")
-    { div(class => "edit")
-      {
-         input(type => "hidden",
-               name => "refer-to",
-               value => url),
-         input(type => "hidden",
-               name => "parent-object",
-               value => get-reference(parent)),
-         input(type => "hidden",
-               name => "remove-this",
-               value => get-reference(object)),
-         input(type => "hidden",
-               name => "action",
-               value => "remove-object"),
-         do(if(xml) xml end),
-         input(type => "submit",
-               name => "remove-button",
-               value => "Remove")
-      }
-    }
-  end;
-end;
 

Copied: trunk/libraries/web-framework/class-editor.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/class-editor.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/class-editor.dylan    
(original)
+++ trunk/libraries/web-framework/class-editor.dylan    Tue Feb 21 01:09:58 2006
@@ -1,7 +1,29 @@
-module: buddha
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
-define method check (object :: <object>, #key test-result = 0) => (res :: 
<boolean>)
+define class <web-form-warning> (<condition>)
+  constant slot error-string :: <string>, required-init-keyword: warning:;
+end;
+
+define class <web-success> (<web-form-warning>)
+end;
+
+define class <web-error> (<error>)
+  constant slot error-string :: <string>, required-init-keyword: error:;
+end;
+
+define open generic respond-to-get
+    (page, request :: <request>, response :: <response>, #key errors);
+
+define open generic respond-to-post
+    (page, request :: <request>, response :: <response>);
+
+define open generic check (object :: <object>, #key test-result)
+ => (res :: <boolean>);
+
+
+define method check (object :: <object>, #key test-result = 0)
+ => (res :: <boolean>)
   #t;
 end;
 
@@ -50,7 +72,11 @@
               value => "save-object"),
         input(type => "hidden",
               name => "refer-to",
-              value => if (refer) refer else 
get-url-from-type(object.object-class) end),
+              value => if (refer)
+                         refer
+                       else
+                         get-url-from-type(object.object-class)
+                       end),
         do(if(xml) xml end),
         input(type => "submit",
               name => "save-button",
@@ -183,6 +209,33 @@
   end;
 end;
 
+define method remove-form (object :: <object>, parent :: <object>,
+                           #key url :: <string> = "edit",
+                           xml)
+  with-xml()
+    form(action => "/edit", \method => "post")
+    { div(class => "edit")
+      {
+         input(type => "hidden",
+               name => "refer-to",
+               value => url),
+         input(type => "hidden",
+               name => "parent-object",
+               value => get-reference(parent)),
+         input(type => "hidden",
+               name => "remove-this",
+               value => get-reference(object)),
+         input(type => "hidden",
+               name => "action",
+               value => "remove-object"),
+         do(if(xml) xml end),
+         input(type => "submit",
+               name => "remove-button",
+               value => "Remove")
+      }
+    }
+  end;
+end;
 
 define method list-forms (obj :: <object>) => (res)
   let res = make(<stretchy-vector>);
@@ -258,29 +311,29 @@
   let action = as(<symbol>, get-query-value("action"));
   let object-string = get-query-value("parent-object");
   let object = get-object(object-string);
-  let handler <buddha-form-warning>
-    = method(e :: <buddha-form-warning>, next-handler :: <function>)
+  let handler <web-form-warning>
+    = method(e :: <web-form-warning>, next-handler :: <function>)
           errors := add!(errors, e)
       end;
   block(return)
     //add, save, remove... we may not need this here...
     unless (object)
-      signal(make(<buddha-form-error>,
+      signal(make(<web-error>,
                   error: concatenate("Unknown object: ", object-string)));
     end;
     select (action)
       #"add-object" => add-object(object, request);
       #"remove-object" => remove-object(object, request);
       #"save-object" => save-object(object, request);
-      otherwise => signal(make(<buddha-form-error>,
+      otherwise => signal(make(<web-error>,
                                error: concatenate("Unknown action: ",
                                                   as(<string>, action))));
       end select;
-  exception (e :: <buddha-form-error>)
+  exception (e :: <web-error>)
     errors := add!(errors, e);
     return();
   exception (e :: <error>)
-    errors := add!(errors, make(<buddha-form-error>,
+    errors := add!(errors, make(<web-error>,
                                 error: format-to-string("%=", e)));
     return();
   end; 
@@ -289,7 +342,7 @@
   block(return)
     unless ((elements.size = 2) & elements[1] = "detail")
       if ((action = #"add-object")
-        & (any?(rcurry(instance?, <buddha-form-error>), errors)))
+        & (any?(rcurry(instance?, <web-error>), errors)))
         respond-to-get(#"add", request, response, errors: errors);
         return();
       end;
@@ -321,7 +374,7 @@
       unless ((slot.slot-type = <boolean>) | value)
         value := slot.default-function(object);
         unless (value)
-          signal(make(<buddha-form-error>,
+          signal(make(<web-error>,
                       error: concatenate("Please specify ",
                                          slot.slot-name,
                                          " correctly!")));
@@ -340,7 +393,7 @@
     let change = make(<change>,
                       command: command);
     *changes* := add!(*changes*, change);
-    signal(make(<buddha-success>,
+    signal(make(<web-success>,
                 warning: concatenate("Added ",
                                      get-url-from-type(object-type),
                                      ": ", show(object))));
@@ -357,7 +410,7 @@
                     command: command);
   *changes* := add!(*changes*, change);
   redo(command);
-  signal(make(<buddha-success>,
+  signal(make(<web-success>,
               warning: concatenate("Removed ",
                                    get-url-from-type(object.object-class),
                                    ": ", show(object))));
@@ -429,11 +482,12 @@
     let change = make(<change>,
                       command: command);
     *changes* := add!(*changes*, change);
-    let slot-names = apply(concatenate, map(method(x)
-                                                concatenate(x.slot-name, " to 
",
-                                                            show(x.new-value), 
"  ")
-                                            end, slots));
-    signal(make(<buddha-success>,
+    let slot-names = apply(concatenate,
+                           map(method(x)
+                                   concatenate(x.slot-name, " to ",
+                                               show(x.new-value), "  ")
+                               end, slots));
+    signal(make(<web-success>,
                 warning: concatenate("Saved \"",
                                      get-url-from-type(object.object-class),
                                      "\", ",
@@ -442,3 +496,10 @@
                                      slot-names)));
   end;
 end;
+
+define method get-url-from-type (type) => (string :: <string>)
+  copy-sequence(type.debug-name,
+                start: 1,
+                end: type.debug-name.size - 1)
+end;
+

Copied: trunk/libraries/web-framework/command.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/command.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/command.dylan (original)
+++ trunk/libraries/web-framework/command.dylan Tue Feb 21 01:09:58 2006
@@ -1,4 +1,4 @@
-module: buddha
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
 define abstract class <command> (<object>)
@@ -133,8 +133,8 @@
   map(method(x)
           set-slot(x.slot-name, object, x.new-value)
       end, slots);
-  let handler <buddha-form-error>
-    = method(e :: <buddha-form-error>, next-handler :: <function>)
+  let handler <web-error>
+    = method(e :: <web-error>, next-handler :: <function>)
           unset-slots(object, slots);
           next-handler();
       end;
@@ -146,8 +146,8 @@
   map(method(x)
           set-slot(x.slot-name, object, x.old-value)
       end, slots);
-  let handler <buddha-form-error>
-    = method(e :: <buddha-form-error>, next-handler :: <function>)
+  let handler <web-error>
+    = method(e :: <web-error>, next-handler :: <function>)
           set-slots(object, slots);
           next-handler();
       end;

Copied: trunk/libraries/web-framework/users.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/users.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/users.dylan   (original)
+++ trunk/libraries/web-framework/users.dylan   Tue Feb 21 01:09:58 2006
@@ -1,4 +1,4 @@
-module: buddha
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
 define variable *users* = make(<string-table>);
@@ -16,13 +16,20 @@
   concatenate(user.username, " ", user.email);
 end;
 
-define method key (user :: <user>)
+define thread variable *user* = #f;
+
+define method current-user () => (user :: false-or(<user>))
+  *user*
+end;
+
+define inline-only method key (user :: <user>)
   user.username;
 end;
 
 define method check (user :: <user>, #key test-result = 0)
+ => (res :: <boolean>)
   if (element(*users*, key(user), default: #f))
-    signal(make(<buddha-form-error>,
+    signal(make(<web-error>,
                 error: "User with same name already exists!"))
   else
     #t;
@@ -44,6 +51,7 @@
   if (username & password)
     if (valid-user?(username, password))
       let session = ensure-session(request);
+      *user* := *users*[username];
       set-attribute(session, #"username", username);
     end;
   end;
@@ -52,6 +60,10 @@
 define method logged-in (request :: <request>)
  => (username :: false-or(<string>))
   let session = get-session(request);
-  session & get-attribute(session, #"username");
+  if (session)
+    let username = get-attribute(session, #"username");
+    *user* := *users*[username];
+    username;
+  end;
 end;
 

Copied: trunk/libraries/web-framework/web-macro.dylan (from r10535, 
trunk/libraries/koala/sources/examples/buddha/web-macro.dylan)
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/web-macro.dylan       
(original)
+++ trunk/libraries/web-framework/web-macro.dylan       Tue Feb 21 01:09:58 2006
@@ -1,6 +1,10 @@
-module: web-macro
+module: web-framework
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
+define open class <reference-object> (<object>)
+  slot visible? :: <boolean> = #t, init-keyword: visible?:;
+end;
+
 define class <slot> (<object>)
   constant slot slot-name :: <string>, init-keyword: name:;
   constant slot slot-type :: <object>, init-keyword: type:;
@@ -14,15 +18,15 @@
     init-keyword: default-help-text:;
 end;
 
-define generic list-reference-slots
+define open generic list-reference-slots
     (object :: subclass(<object>), #next next-method)
  => (res :: <list>);
 
-define generic reference-slots
+define open generic reference-slots
     (object :: subclass(<object>), #next next-method)
  => (res :: <list>);
 
-define generic data-slots
+define open generic data-slots
     (object :: subclass(<object>), #next next-method)
  => (res :: <list>);
 
-- 
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://www.gwydiondylan.org/mailman/listinfo/gd-chatter




Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>