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

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: PluginDependencyTree.java,v 1.2 2000/04/06 08:02:02 wastl Exp $ */
  2. package net.wastl.webmail.server;
  3. import java.util.*;
  4. /*
  5.  * PluginDependencyTree.java
  6.  *
  7.  * Created: Sat Sep 11 14:52:22 1999
  8.  *
  9.  * Copyright (C) 1999-2000 Sebastian Schaffert
  10.  * 
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version 2
  14.  * of the License, or (at your option) any later version.
  15.  * 
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  * 
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  24.  */
  25. /**
  26.  *
  27.  * @author Sebastian Schaffert
  28.  * @version
  29.  */
  30. public class PluginDependencyTree {
  31.     
  32.     protected Plugin node;
  33.     protected String meprovides;
  34.     protected Vector children;
  35.     public PluginDependencyTree(Plugin p) {
  36. this.node=p;
  37. this.meprovides=p.provides();
  38. children=new Vector();
  39.     }
  40.     public PluginDependencyTree(String s) {
  41. this.node=null;
  42. this.meprovides=s;
  43. children=new Vector();
  44.     }
  45.     
  46.     public boolean provides(String s) {
  47. return s.equals(meprovides);
  48.     }
  49.     public String provides() {
  50. String s=meprovides;
  51. Enumeration e=children.elements();
  52. while(e.hasMoreElements()) {
  53.     PluginDependencyTree p=(PluginDependencyTree)e.nextElement();
  54.     s+=","+p.provides();
  55. }
  56. return s;
  57.     }
  58.     public boolean addPlugin(Plugin p) {
  59. if(p.requires().equals(meprovides)) {
  60.     children.addElement(new PluginDependencyTree(p));
  61.     return true;
  62. } else {
  63.     boolean flag=false;
  64.     Enumeration e=children.elements();
  65.     while(e.hasMoreElements()) {
  66. PluginDependencyTree pt=(PluginDependencyTree)e.nextElement();
  67. flag = flag || pt.addPlugin(p);
  68.     }
  69.     return flag;
  70. }
  71.     }
  72.     public void register(WebMailServer parent) {
  73. if(node!=null) {
  74.     //System.err.print(node.getName()+" ");
  75.     //System.err.flush();
  76.     node.register(parent);
  77. }
  78. /* Perform depth-first registraion. Breadth-first would be better, but
  79.    it will work anyway */
  80. Enumeration e=children.elements();
  81. while(e.hasMoreElements()) {
  82.     PluginDependencyTree p=(PluginDependencyTree)e.nextElement();
  83.     p.register(parent);
  84. }
  85.     }
  86.     
  87. } // PluginDependencyTree