Module: environment-protocols Synopsis: Environment protocols Author: Andy Armstrong Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND /// Namespace object define class () end class ; define open generic name-namespace (server :: , name :: ) => (namespace :: ); define open generic do-namespace-names (function :: , server :: , namespace :: , #key imported?, client) => (); define open generic environment-object-home-name (server :: , object :: ) => (name :: false-or()); define open generic environment-object-name (server :: , object :: , namespace :: ) => (name :: false-or()); define open generic find-name (server :: , name :: , namespace :: , #key imported? = #t) => (name :: false-or()); /// Project dispatching methods define method name-namespace (project :: , name :: ) => (namespace :: ) let server = choose-server(project, name, error?: #t); name-namespace(server, name) end method name-namespace; define method do-namespace-names (function :: , project :: , namespace :: , #key client, imported? = #t) => () let server = choose-server(project, namespace); server & do-namespace-names(function, server, namespace, client: client, imported?: imported?) end method do-namespace-names; define method environment-object-home-name (project :: , object :: ) => (name :: false-or()) #f end method environment-object-home-name; define method environment-object-home-name (project :: , object :: ) => (name :: false-or()) let server = choose-server(project, object); server & environment-object-home-name(server, object) end method environment-object-home-name; define method environment-object-name (project :: , object :: , namespace :: ) => (name :: false-or()) #f end method environment-object-name; define method environment-object-name (project :: , object :: , namespace :: ) => (name :: false-or()) let server = choose-server(project, object); if (server & ensure-database-server(project, namespace)) environment-object-name(server, object, namespace) end end method environment-object-name; /// Implementation define function namespace-names (server :: , namespace :: , #key client, imported? = #t) => (names :: ) collect-environment-objects(do-namespace-names, server, namespace, client: client, imported?: imported?) end function namespace-names; define method environment-object-home-name (server :: , object :: ) => (name :: false-or()) #f end method environment-object-home-name; define method environment-object-name (server :: , object :: , namespace :: ) => (name :: false-or()) #f end method environment-object-name; /// find-name define method find-name (project :: , name :: , namespace :: , #key imported? = #t) => (name-object :: false-or()) let server = choose-server(project, namespace); server & find-name(server, name, namespace, imported?: imported?) end method find-name; define method find-name (server :: , name :: , namespace :: , #key imported? = #t) => (name-object :: false-or()) block (return) let name = as-lowercase(name); do-namespace-names (method (name-object) let primitive-name = environment-object-primitive-name(server, name-object); if (name = as-lowercase(primitive-name)) return(name-object) end end, server, namespace, imported?: imported?); #f end end method find-name;