Plugins
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. WebMail Plugin support
  2. ======================
  3. Since version v0.6.0, WebMail supports so-called plugins that are loaded at 
  4. WebMail boot time and are all singletons that provide some functionality.
  5. They can all be found in a special directory and all implement the interface
  6. webmail.server.Plugin.
  7. Initialization of the Plugins
  8. -----------------------------
  9. - The PluginHandler class searches for *.class files in the Plugin directory and
  10.   constructs the corresponding "Class" object (with class.forName() and the CLASSPATH
  11.   set to the plugin path).
  12. - If a class is an instance of webmail.server.plugin, an object is created with
  13.   Class.newInstance().
  14. - The object is then appended to a queue
  15. - A PluginDependencyTree is created to create the dependency structure of the
  16.   plugins.
  17. - While the queue is not empty, Webmail will try to add the next element of the Queue
  18.   to the tree. If it fails (no element in the tree provides the required functionality),
  19.   the element is added to the end of the queue again.
  20. - Then the root node register method is called which in turn does a depth search
  21.   to all leaves and calls the register methods of them
  22. Plugin registration
  23. -------------------
  24. Each plugin is registered calling the "public void register(WebMailServer parent)"
  25. method. Thus, each plugin has access to the necessary instances of WebMail classes.
  26. On registration, the plugin should perform some action, perhaps add itself to the
  27. URLHandlers or some other sort of thing
  28. Dependency resolution
  29. ---------------------
  30. All WebMail plugins have two methods:
  31. - public String provides() returns the name of the functionality this plugin provides
  32.   e.g. composer for the "Composer" plugin or "content bar" for the HTMLContentBar
  33. - public String requires() returns the name of the functionality that is required
  34.   for this plugin (currently there can only be one requirement, but that will perhaps
  35.   change if necessary). For example, WebMailHelp depends on some sort of "content bar".
  36. Dependencies are resolved using a simple tree structure that has the dependency "" in
  37. its root and therefore all Plugins with a returnvalue of requires() of "" as its 
  38. children. All other plugins are tried to add to this structure, each as a direct child
  39. of its requirement.
  40. If all plugins are added, the method register is called on the root node, thus 
  41. performing a depth first search on all its nodes and registering plugins in a 
  42. (one of many) valid order.
  43. Special plugins
  44. ---------------
  45. There are two kinds of "special" plugins: URLHandler and ContentProvider
  46. - URLHandler
  47.   URLHandler can register with the WebMailServer's ToplevelURLHandler and will
  48.   then be called whenever the registered URL or anything that starts with it and
  49.   cannot be handled by another handler. They must implement the handleURL method
  50.   that has the HTTP-header, the Session and the remaining suburl as parameters.
  51.   All URLHandlers are stored in a hierarchical URLHandler tree to speed up calls
  52. - ContentProvider
  53.   ContentProviders can register with their own icon and URL in the left-hand 
  54.   content bar. Otherwise they are like URLHandlers. They provide a number to 
  55.   determine the order where they appear on the content bar.