home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / icsclass.jar / lotus / domino / servlet / ServletManagerConfig.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-15  |  9.6 KB  |  416 lines

  1. package lotus.domino.servlet;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.Reader;
  8. import java.io.StringReader;
  9. import java.util.Hashtable;
  10. import javax.servlet.ServletContext;
  11.  
  12. public class ServletManagerConfig {
  13.    public static final String ALIAS_DIRECTIVE = "ALIAS";
  14.    public static final String SERVICE_DIRECTIVE = "SERVICE";
  15.    public static final String SSI_DIRECTIVE = "SSI";
  16.    public static final String SERVLET_DIRECTIVE = "SERVLET";
  17.    private String i_configurationInfo;
  18.    private Hashtable i_servletTable = ServletManager.getServletTable();
  19.    private Hashtable i_invokerTable = new Hashtable();
  20.    private StringListTable i_serviceTable;
  21.    private Hashtable i_ssiTable;
  22.    private ServletContext i_context;
  23.  
  24.    public ServletManagerConfig() {
  25.       String var1 = System.getProperty("os.name");
  26.       boolean var2 = var1.equals("Windows 95") || var1.equals("Windows NT") || var1.equals("OS2");
  27.       this.i_serviceTable = new StringListTable(var2);
  28.       this.i_ssiTable = new Hashtable();
  29.       this.i_configurationInfo = "";
  30.    }
  31.  
  32.    protected void destroy() {
  33.    }
  34.  
  35.    private String formatConfigFile(String var1) {
  36.       String var2 = "#";
  37.       String var3 = "";
  38.  
  39.       try {
  40.          BufferedReader var6 = new BufferedReader(new StringReader(var1));
  41.  
  42.          for(String var5 = var6.readLine(); var5 != null; var5 = var6.readLine()) {
  43.             if (var5.indexOf(var2) != -1) {
  44.                var5 = var5.substring(0, var5.indexOf(var2));
  45.             }
  46.  
  47.             if (!var5.equals("")) {
  48.                var3 = var3 + var5.trim() + "\n";
  49.             }
  50.          }
  51.  
  52.          var6 = new BufferedReader(new StringReader(var3));
  53.          var3 = "";
  54.          String var13 = var6.readLine();
  55.          String var7 = "";
  56.          boolean var9 = false;
  57.  
  58.          while(var13 != null) {
  59.             var9 = false;
  60.             var7 = var13;
  61.             int var4 = var13.indexOf("{");
  62.             if (var4 == -1) {
  63.                var13 = var6.readLine();
  64.                if (var13 == null) {
  65.                   var3 = var3 + "\n" + var7;
  66.                   break;
  67.                }
  68.  
  69.                var4 = var13.indexOf("{");
  70.                if (var4 == -1) {
  71.                   var9 = true;
  72.                } else if (var13.indexOf("{") == 0) {
  73.                   var7 = var7 + var13.substring(0, var4).trim() + "{";
  74.                   var13 = var7.substring(var4 + 1);
  75.                } else {
  76.                   var9 = true;
  77.                }
  78.             } else {
  79.                String var8 = var13.substring(var4 + 1);
  80.                var7 = var13.substring(0, var4).trim() + "{";
  81.                int var10 = var8.indexOf("}");
  82.                if (var10 != -1) {
  83.                   System.out.println("Close brace is on same line....moving to next");
  84.                   if (var8.equals("}")) {
  85.                      var7 = var7 + "\n" + var8;
  86.                      var13 = var6.readLine();
  87.                   } else {
  88.                      if (!var8.substring(0, var10).trim().equals("")) {
  89.                         var7 = var7 + "\n" + var8.substring(0, var10).trim();
  90.                      }
  91.  
  92.                      var7 = var7 + "\n}";
  93.                      if (var8.length() > var10) {
  94.                         System.out.println("There is another direct after the close brace");
  95.                         var13 = var8.substring(var10 + 1).trim();
  96.                         System.out.println("Directive: " + var13);
  97.                      } else {
  98.                         var13 = var6.readLine();
  99.                      }
  100.                   }
  101.  
  102.                   var9 = true;
  103.                } else if (!var8.equals("")) {
  104.                   var7 = var7 + "\n" + var8;
  105.                }
  106.             }
  107.  
  108.             if (!var9) {
  109.                for(var13 = var6.readLine(); var13 != null && var13.indexOf("}") == -1; var13 = var6.readLine()) {
  110.                   var7 = var7 + "\n" + var13;
  111.                }
  112.  
  113.                if (var13 != null) {
  114.                   var7 = var7 + "\n" + var13.substring(0, var13.indexOf("}") + 1);
  115.                }
  116.  
  117.                var13 = var6.readLine();
  118.             }
  119.  
  120.             if (var7 != null) {
  121.                if (!var3.equals("")) {
  122.                   var3 = var3 + "\n";
  123.                }
  124.  
  125.                var3 = var3 + var7;
  126.             }
  127.          }
  128.       } catch (IOException var11) {
  129.          ((Throwable)var11).printStackTrace();
  130.       }
  131.  
  132.       return var3;
  133.    }
  134.  
  135.    public void initialize(String var1, String var2) {
  136.       try {
  137.          DominoServletContext var3 = new DominoServletContext(this.i_servletTable, NativeStub.extract("SERVER_SOFTWARE"), var2, NativeStub.getAttributeTable());
  138.          FileReader var4 = new FileReader(var1);
  139.          this.initialize((Reader)var4, (ServletContext)var3);
  140.          ((InputStreamReader)var4).close();
  141.       } catch (IOException var5) {
  142.          this.logError("I/O Error while reading the configuration file: " + var1);
  143.       } catch (Throwable var6) {
  144.          this.logError(var6.toString());
  145.          var6.printStackTrace();
  146.       }
  147.    }
  148.  
  149.    public void initialize(Reader var1, String var2) {
  150.       try {
  151.          DominoServletContext var3 = new DominoServletContext(this.i_servletTable, NativeStub.extract("SERVER_SOFTWARE"), var2, NativeStub.getAttributeTable());
  152.          this.initialize((Reader)var1, (ServletContext)var3);
  153.          var1.close();
  154.       } catch (IOException var4) {
  155.          this.logError("I/O Error while reading configuration file");
  156.       } catch (Throwable var5) {
  157.          this.logError(var5.toString());
  158.          var5.printStackTrace();
  159.       }
  160.    }
  161.  
  162.    public void initialize(Reader var1, ServletContext var2) {
  163.       this.i_context = var2;
  164.  
  165.       try {
  166.          BufferedReader var3 = new BufferedReader(var1);
  167.          String var4 = "";
  168.  
  169.          for(String var5 = var3.readLine(); var5 != null; var5 = var3.readLine()) {
  170.             var4 = var4 + var5 + "\n";
  171.          }
  172.  
  173.          var4 = this.formatConfigFile(var4);
  174.          this.addConfigurationInfo(var4);
  175.       } catch (IOException var6) {
  176.          this.logError("I/O error while reading configuration file");
  177.          ((Throwable)var6).printStackTrace();
  178.       } catch (Throwable var7) {
  179.          this.logError(var7.toString());
  180.          var7.printStackTrace();
  181.       }
  182.    }
  183.  
  184.    private void addConfigurationInfo(String var1) {
  185.       this.i_configurationInfo = this.i_configurationInfo + var1 + "\n";
  186.       String var2 = "";
  187.  
  188.       try {
  189.          BufferedReader var3 = new BufferedReader(new StringReader(var1));
  190.  
  191.          for(String var4 = var3.readLine(); var4 != null; var4 = var3.readLine()) {
  192.             try {
  193.                var2 = "";
  194.                int var5 = 0;
  195.                int var6 = var4.indexOf(" ");
  196.                if (var6 == -1) {
  197.                   throw new MalformedConfigurationException("No arguments were supplied for directive:" + var4);
  198.                }
  199.  
  200.                String var7 = var4.substring(var5, var6).toUpperCase();
  201.                if (var4.indexOf("{") == -1) {
  202.                   var2 = var4;
  203.                } else {
  204.                   while(var4 != null && !var4.equals("}")) {
  205.                      var2 = var2 + var4 + "\n";
  206.                      var4 = var3.readLine();
  207.                   }
  208.  
  209.                   if (var4.equals("}")) {
  210.                      var2 = var2 + var4;
  211.                   }
  212.  
  213.                   if (var4 == null) {
  214.                      throw new MalformedConfigurationException("End of file detected early. Servlet directive did not end with a closing brace:");
  215.                   }
  216.                }
  217.  
  218.                if (this.isServletDirective(var7)) {
  219.                   DominoServletInvoker var8 = this.toDominoServletInvoker(var2);
  220.                   if (var8 != null) {
  221.                      String var9 = var8.getName();
  222.                      this.i_invokerTable.put(var9, var8);
  223.                   } else {
  224.                      System.err.println("Could not create a Servlet from the following block:\n" + var2);
  225.                   }
  226.                } else if (this.isMappingDirective(var7)) {
  227.                   if (var7.equals("SERVICE")) {
  228.                      this.addMappingDirective(var2, this.i_serviceTable);
  229.                   }
  230.                } else {
  231.                   if (!var7.equals("SSI")) {
  232.                      this.logError("Unknown directive was detected in configuration file. Directive=" + var7);
  233.                      throw new MalformedConfigurationException("Found unknown directive in configuration: " + var7);
  234.                   }
  235.  
  236.                   var5 = var2.indexOf(" ");
  237.                   if (var5 == -1) {
  238.                      throw new MalformedConfigurationException("Invalid SSI configuration:" + var2);
  239.                   }
  240.  
  241.                   String var14 = var2.substring(var5 + 1, var2.length());
  242.                   DominoServletInvoker var15 = (DominoServletInvoker)this.i_invokerTable.get(var14);
  243.                   if (var15 == null) {
  244.                      System.err.println("SSI directive failed: No servlet with name=" + var14 + " has been configured");
  245.                   } else {
  246.                      this.i_ssiTable.put(var14, var15);
  247.                   }
  248.                }
  249.             } catch (MalformedConfigurationException var10) {
  250.                this.logError("Error found in configuration file: " + ((Throwable)var10).toString());
  251.                System.err.println("Malformed servlet configuration block found in configuration file:");
  252.                System.err.println(var2);
  253.                ((Throwable)var10).printStackTrace(System.err);
  254.             }
  255.          }
  256.  
  257.       } catch (IOException var11) {
  258.          this.logError("I/O error while reading configuration file");
  259.          ((Throwable)var11).printStackTrace();
  260.       } catch (Throwable var12) {
  261.          this.logError(var12.toString());
  262.          var12.printStackTrace();
  263.       }
  264.    }
  265.  
  266.    private DominoServletInvoker toDominoServletInvoker(String var1) {
  267.       Object var2 = null;
  268.       Object var3 = null;
  269.       Object var4 = null;
  270.       Hashtable var5 = new Hashtable();
  271.  
  272.       try {
  273.          BufferedReader var6 = new BufferedReader(new StringReader(var1));
  274.          String var14 = var6.readLine();
  275.          int var7 = var14.indexOf(" ");
  276.          if (var7 == -1) {
  277.             throw new MalformedConfigurationException("Malformed Servlet Directive: no iarguments were supplied in Servlet directive");
  278.          } else {
  279.             ++var7;
  280.             int var8 = var14.indexOf(" ", var7);
  281.             String var16;
  282.             if (var8 != -1) {
  283.                var16 = var14.substring(var7, var8);
  284.             } else {
  285.                var8 = var14.indexOf("{", var7);
  286.                if (var8 == -1) {
  287.                   throw new MalformedConfigurationException("Malformed Servlet Directive: no class name was found on Servlet Directive line");
  288.                }
  289.  
  290.                var16 = var14.substring(var7, var8);
  291.                var8 = var7 - 1;
  292.             }
  293.  
  294.             var7 = var8 + 1;
  295.             var8 = var14.indexOf("{", var7);
  296.             if (var8 == -1) {
  297.                throw new MalformedConfigurationException("Malformed Servlet block: no open brace({) was found on Servlet Directive line");
  298.             } else {
  299.                String var17 = var14.substring(var7, var8).trim();
  300.  
  301.                for(String var15 = var6.readLine(); var15 != null && !var15.equals("}"); var15 = var6.readLine()) {
  302.                   var7 = 0;
  303.                   var8 = var15.indexOf("=");
  304.                   if (var8 == -1) {
  305.                      throw new MalformedConfigurationException("Malformed Servlet block: no equals was found in parameter list");
  306.                   }
  307.  
  308.                   String var9 = var15.substring(var7, var8);
  309.                   if (var9.equals("")) {
  310.                      throw new MalformedConfigurationException("Malformed Servlet block: no parameter name was supplied in parameter list");
  311.                   }
  312.  
  313.                   var7 = var8 + 1;
  314.                   var8 = var15.length();
  315.                   String var10 = var15.substring(var7, var8);
  316.                   var10 = var10.trim();
  317.                   if (var10.equals("")) {
  318.                      throw new MalformedConfigurationException("Malformed Servlet block: no parameter value was supplied in parameter list");
  319.                   }
  320.  
  321.                   var5.put(var9, var10);
  322.                }
  323.  
  324.                DominoServletConfig var26 = new DominoServletConfig(this.i_context, var5);
  325.                DominoServletInvoker var28 = new DominoServletInvoker(var17, var26, var16);
  326.                return var28;
  327.             }
  328.          }
  329.       } catch (IOException var11) {
  330.          this.logError("I/O error while reading configuration file");
  331.          System.err.println("Error found in servlet configuration block from configuration file:");
  332.          System.err.println(var1);
  333.          ((Throwable)var11).printStackTrace(System.err);
  334.          return null;
  335.       } catch (MalformedConfigurationException var12) {
  336.          this.logError("Error found in configuration file: " + ((Throwable)var12).toString());
  337.          System.err.println("Malformed servlet configuration block found in configuration file:");
  338.          System.err.println(var1);
  339.          ((Throwable)var12).printStackTrace(System.err);
  340.          return null;
  341.       } catch (Throwable var13) {
  342.          this.logError("servlet trace: " + var13.toString());
  343.          System.err.println("Error found in servlet configuration block found in configuration file:");
  344.          System.err.println(var1);
  345.          var13.printStackTrace(System.err);
  346.          return null;
  347.       }
  348.    }
  349.  
  350.    private String addMappingDirective(String var1, String var2) {
  351.       int var3 = var1.indexOf(" ");
  352.       if (var3 == -1) {
  353.          this.logError("Could not map servlet to step because no instance name was supplied: (" + var1 + ") is invalid");
  354.       } else {
  355.          String var4 = var1.substring(var3).trim();
  356.          if (this.i_invokerTable.get(var4) == null) {
  357.             this.logError("Could not map servlet to step because Servlet instance " + var4 + "is not defined: (" + var1 + ") is invalid");
  358.          } else if (var2.equals("")) {
  359.             var2 = var2 + var4;
  360.          } else {
  361.             var2 = var2 + "," + var4;
  362.          }
  363.       }
  364.  
  365.       return var2;
  366.    }
  367.  
  368.    private String addMappingDirective(String var1, StringListTable var2) {
  369.       int var5 = var1.indexOf(" ") + 1;
  370.       int var6 = var1.indexOf(" ", var5);
  371.       String var3 = var1.substring(var5, var6);
  372.       String var4 = var1.substring(var6 + 1).trim();
  373.       if (this.i_invokerTable.get(var3) != null) {
  374.          var2.put(var4, var3);
  375.       } else {
  376.          this.logError("Alias for " + var4 + " failed: servlet " + var3 + " does not exist");
  377.       }
  378.  
  379.       return var3;
  380.    }
  381.  
  382.    private boolean isMappingDirective(String var1) {
  383.       return var1.equals("SERVICE");
  384.    }
  385.  
  386.    private boolean isServletDirective(String var1) {
  387.       return var1.equals("SERVLET");
  388.    }
  389.  
  390.    private void logError(String var1) {
  391.       NativeStub.log_error("Servlet configuration error: ");
  392.       NativeStub.log_error(var1);
  393.       System.out.println(var1);
  394.    }
  395.  
  396.    public String getConfigurationInfo() {
  397.       return this.i_configurationInfo;
  398.    }
  399.  
  400.    public Hashtable getSSITable() {
  401.       return this.i_ssiTable;
  402.    }
  403.  
  404.    public Hashtable getInvokerTable() {
  405.       return this.i_invokerTable;
  406.    }
  407.  
  408.    public Hashtable getServletTable() {
  409.       return this.i_servletTable;
  410.    }
  411.  
  412.    public StringListTable getServiceTable() {
  413.       return this.i_serviceTable;
  414.    }
  415. }
  416.