You are viewing a plain text version of this content. The canonical link for it is here.
Posted to watchdog-dev@jakarta.apache.org by sa...@locus.apache.org on 2000/11/21 05:11:21 UTC

cvs commit: jakarta-watchdog-4.0/src/tools/org/apache/jspxml FileLister.java GetWorkspaceInJSP.java GetWorkspaceInXML.java jsp2XML.java

santosh     00/11/20 20:11:21

  Added:       src/tools/org/apache/jspxml FileLister.java
                        GetWorkspaceInJSP.java GetWorkspaceInXML.java
                        jsp2XML.java
  Log:
  Utility files ...to run the tests against the XML view of the JSP pages (workspace)
  
  Revision  Changes    Path
  1.1                  jakarta-watchdog-4.0/src/tools/org/apache/jspxml/FileLister.java
  
  Index: FileLister.java
  ===================================================================
  package org.apache.jspxml;
  
  import java.io.*;
  import java.util.*;
  
  public class FileLister
  {
  protected Vector file_list ;
  protected File start_dir ;
  protected String extension ;
  
  public FileLister()
  {
  file_list = new Vector();
  start_dir = new File(System.getProperty("user.dir") );
  extension ="jsp" ; //default
  }
  
  public FileLister(String absolute_path , String extension )
  {
  file_list = new Vector();
  start_dir = new File(absolute_path);
  this.extension = extension ;
  }
  
  public Object[] listFiles()
  {
  System.out.println("Please wait while FileLister searches all the subdirectries..........");
  
  addFiles(start_dir);
  System.out.println("Search complete");
  return  file_list.toArray();
  }
  
  protected void  addFiles(File start_dir)
  {
  
    if ( !start_dir.isDirectory()   ) //if its a file 
     {
     String file_name = start_dir.getName();
     int dot_index = file_name .lastIndexOf(".");
  
       if(dot_index <0 ) //not found
     {
       if(extension==null)
       	file_list.add( start_dir.getAbsolutePath() );
  
       	return ;
  
    }
  
  String file_extension = file_name.substring(dot_index+1 , file_name.length() );
         
  	if(file_extension.equals(extension) ) 
       	    file_list.add( start_dir.getAbsolutePath() );
       return;
     }
  //we are here means we have a directory
  
  File[] sub_files = start_dir.listFiles();
      for(int i=0 ; i< sub_files.length ; i++)
       addFiles(sub_files[i])   ;
  
  
   }
  
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/tools/org/apache/jspxml/GetWorkspaceInJSP.java
  
  Index: GetWorkspaceInJSP.java
  ===================================================================
  package org.apache.jspxml;
  
  import java.io.*;
  import java.util.*;
  
  import org.apache.jspxml.FileLister;
  import org.apache.jspxml.jsp2XML;
  
  //This file is an utility which helps running the entire jsp test suite with the 
  //XML view of JSP pages. It saves the original JSP files so that they can be restored back
  //XML views are generated dynamically and given the same file name as original jsp files
  
  public class GetWorkspaceInJSP
  {
  
  public static void main (String[] args )
  {
   String jsp_file=null;
   String xml_file=null ;
  
  if( args.length < 1)
    {
   System.out.println("Usage : java jsp2XML <diretory>  ");
   return;
    }
  
  String root = args[0];
  String extension="jsp" ; //files with extension .jsp
  
  FileLister lister = new FileLister(root , extension) ;
  Object[] files = lister.listFiles();
  
  for(int i=0; i< files.length;i++)
  {
  jsp_file = (String)files[i];
  int index = jsp_file.lastIndexOf(".jsp");
  //It should rename the orginal jsp files to their original names and save the xml
  //files with the extension .xml appended
  
  
  File jsp_save = new File (jsp_file + ".original" ) ;
  
   if ( jsp_save.exists() ) //the current workspace is in XML and JSP view 
  			 // exists ....rename the files
    {
  new File(jsp_file).renameTo(new File(jsp_file + ".xml") );
  jsp_save.renameTo(new File(jsp_file) );
    }
  
  
  }  //end for
  
  }
  
  } //end class
  
  
  
  
  
  1.1                  jakarta-watchdog-4.0/src/tools/org/apache/jspxml/GetWorkspaceInXML.java
  
  Index: GetWorkspaceInXML.java
  ===================================================================
  package org.apache.jspxml;
  
  import java.io.*;
  import java.util.*;
  
  import org.apache.jspxml.FileLister;
  import org.apache.jspxml.jsp2XML;
  
  //This file is an utility which helps running the entire jsp test suite with the 
  //XML view of JSP pages. It saves the original JSP files so that they can be restored back
  //XML views are generated dynamically and given the same file name as original jsp files
  
  public class GetWorkspaceInXML
  {
  
  public static void main (String[] args )
  {
   String jsp_file=null;
   String xml_file=null ;
  
  if( args.length < 1)
    {
   System.out.println("Usage : java jsp2XML <diretory>  ");
   return;
    }
  
  String root = args[0];
  String extension="jsp" ; //files with extension .jsp
  
  FileLister lister = new FileLister(root , extension) ;
  Object[] files = lister.listFiles();
  
  for(int i=0; i< files.length;i++)
  {
  jsp_file = (String)files[i];
  int index = jsp_file.lastIndexOf(".jsp");
  
    if(index !=-1)
      xml_file = jsp_file.substring(0,index) + "XML" + ".jsp" ; 
  
  //it should convert only if there has been no conversion so far
  //The condition for which is no .original and no .xml file otherwise
  //just rename the files properly
  
  File xml_save = new File (jsp_file + ".xml" ) ;
  File jsp_save = new File (jsp_file + ".original" ) ;
  
   if ( xml_save.exists() ) //the current workspace is in JSP and xml view 
  			 // exists ..rename the files
    {
  new File(jsp_file).renameTo(new File(jsp_file + ".original") );
  xml_save.renameTo(new File(jsp_file) );
  continue;
    }
  
   if ( jsp_save.exists() ) //the current workspace is in XML and JSP view 
  			 // exists....do nothing
    {
     continue;
    }
  
  //if we are here means this is the first time we are converting
  //rename the JSp file and convert to XML view
  
  new File(jsp_file).renameTo( new File(jsp_file +".original") );
  System.out.println("Generating XML View of " + jsp_file);
  jsp2XML jsp_converter = new jsp2XML(jsp_file + ".original" );
  String xml= jsp_converter.ConvertJsp2XML();
  
  try
   {
   FileWriter fw = new FileWriter(jsp_file);
   fw.write(xml);
   fw.close();
   }
  catch(IOException ioe)
   {
  System.err.println("Error writing to file" + xml_file );
   }
  
  }  //end for
  
  }
  
  } //end class
  
  
  
  
  
  1.1                  jakarta-watchdog-4.0/src/tools/org/apache/jspxml/jsp2XML.java
  
  Index: jsp2XML.java
  ===================================================================
  package org.apache.jspxml;
  
  import java.io.*;
  import java.util.*;
  
  
  
  /*
  commented ....initial design...not using anymore
  class JSP_elements
  {
  //JSP Elements as known till JSP 1.2 specs
  
  public static final String JSP_COMMENT= "<%--" ; //comment
  public static final String JSP_DIRECTIVE= "<%@" ;//Directive
  public static final String JSP_SCRIPTLET="<%" ; //Scriptlet
  public static final String JSP_DECLARATION="<%!" ; //Declaration 
  public static final String JSP_EXPRESSION="<%=" ; //Expression
  
  public static final String isJSPToken(String token)
  {
    if(token==null) 
    return null;
  
    if(token.equals(JSP_COMMENT) )
    return JSP_COMMENT;
    if(token.equals(JSP_DIRECTIVE) )
    return JSP_DIRECTIVE;
    if(token.equals(JSP_SCRIPTLET) )
    return JSP_SCRIPTLET;
    if(token.equals(JSP_DECLARATION) )
    return JSP_DECLARATION;
    if(token.equals(JSP_EXPRESSION) )
    return JSP_EXPRESSION;
  
    return null;
  
  }
  
  }
  
  
  class JSP_block
  {
  //this class is a helper class that is used to keep track of a block of code
  //which is under a JSP element
  
  //start_index and end_index give the start and end index in a string having a jsp block of code
  
  public int start_index;
  public int end_index;
  //element_type tells the type of jsp element for this block
  public String element_type;
  
  public JSP_block(int start , int end , String type)
  {
  start_index=start;
  end_index=end;
  element_type=type;
  }
  
  public static JSP_block getNextJSPBlock(String input_str , int start , int end)
                throws Exception
  {
  //returns the next block of JSP from a string between the given indexes
   if(input_str ==null)
    return null;
  
  String work_str = input_str.substr(start , end+1);
  int start_index=work_str.indexOf("<%"); //every element starts with <%
  int end_index=0;
   if(start_index==-1) //no JSp element is there
   return(null);
  
  char next_char =work_str.charAt(temp_index+2) ;
  
    if(next_char=='@' )  //A directive
    {
   end_index=work_str.indexOf("%>");
  
      if(end_index==-1)
      throw Exception;
    return(new JSP_block(start_index,end_index+2,JSP_elements.JSP_DIRECTIVE );
    }
  
    if(next_char=='!' )  //A Decalaration
    {
   end_index=work_str.indexOf("%>");
  
      if(end_index==-1)
      throw Exception;
    return(new JSP_block(start_index,end_index+2,JSP_elements.JSP_DECLARATION );
    }
  
    if(next_char=='=' )  //An Expression
    {
   end_index=work_str.indexOf("%>");
  
      if(end_index==-1)
      throw Exception;
    return(new JSP_block(start_index,end_index+2,JSP_elements.JSP_EXPRESSION );
    }
  
    if(next_char=='-' )  //Might be a comment..treat a comment for time being
    {
   end_index=work_str.indexOf("--%>");
  
      if(end_index==-1)
      throw Exception;
    return(new JSP_block(start_index,end_index+4,JSP_elements.JSP_COMMENT );
    }
  
  //if none of above then it should be a scriptlet
  
   end_index=work_str.indexOf("%>");
  
      if(end_index==-1)
      throw Exception;
    return(new JSP_block(start_index,end_index+2,JSP_elements.JSP_SCRIPTELT );
  
  
  }
  
  
  }
  */
  
  
  public class jsp2XML
  {
  
  public String xml_ns;  //for xml name spaces
  public String input_jsp;  //String representation of input JSP file
  
  protected static String new_line;
  public static  String xml_prolog;
  public static  String jsp_root_tag;
  public static String author_comments;
  public static String jsp_end_tag;
  protected Hashtable tag_prefix ;
  //Initialize above variables Here
  
   static {
  new_line = System.getProperty("line.separator");
  
  //The final xml will be prolog + comments + root_tag +xmlns+ body + end_tag
  //Note new_line is not required but we use it for formatting
  
  //xml_prolog = "<?xml version=\'1.0\' encoding=\'us-ascii\'?>" + new_line ;
  xml_prolog="<!DOCTYPE root" + new_line;
  xml_prolog+="PUBLIC \"-//Sun Microsystems Inc.//DTD JavaServer Pages Version 1.2//EN\"" + new_line ;
  xml_prolog+="\"http://java.sun.com/products/jsp/dtd/jspcore_1_2.dtd\" > " ;
  
  author_comments = new_line + "<!-- This File is generated automatically by jsp2XML converter tool --> " + new_line ;
  author_comments+= "<!-- Written By Santosh Singh -->" ;
  
  jsp_root_tag = new_line + "<jsp:root" + new_line ;
  //note that we haven't yet closed the jsp:root since taglib directives will also be added here
  jsp_end_tag = new_line +"</jsp:root>" ;
  
  
  
  }//initialization complete
  
  public jsp2XML(String input_jsp_file)
  {
  input_jsp="";
  xml_ns="xmlns:jsp=\"http://java.sun.com/products/jsp/dtd/jsp_1_2.dtd\"" ;
  xml_ns +=new_line ;
  tag_prefix = new Hashtable();
  readJspFileintoString(input_jsp_file) ;
  }
  
  protected String parseDirective(String directive_str )
  {
  // \t is not same as a space
  
  StringTokenizer st= new StringTokenizer(directive_str," \t\n\r\f" );
  String directive = st.nextToken();
  String out_file="";
     if( ! (directive.equals("taglib")) )  //not a taglib directive
     {
      out_file+="<jsp:directive." + directive +" " ;
  
      while(st.hasMoreTokens() )
      out_file+=st.nextToken() + " " ;
  
     out_file+="/>" ;
     return out_file;
     }
  
  //If it is a taglib directive we need to change the xml NameSpace
  //Construct a new String Tokenizer with =\t\n" as delimiters	
  
  st =new StringTokenizer(directive_str," =\t\n\r\"" , false );
  directive = st.nextToken();
  out_file+="<jsp:directive." + directive +" ";
  String uri="";
  String prefix="";
     while(st.hasMoreTokens() )
    {
  String next_token=st.nextToken();
  
         if(next_token.equals("uri") )
         uri=st.nextToken();
  
         if(next_token.equals("prefix") )
         prefix=st.nextToken();
  
    }
  //update XML Name Space
  xml_ns+="xmlns:" + prefix +"=" ;
  xml_ns+="\"" + uri +"\"" + new_line  ;
  //put the prefix in the hashtable
  
  tag_prefix.put(prefix , prefix);
  
  
  //update xml output
  out_file += "uri=\"" + uri + "\"" + " " ;
  out_file+="prefix=\"" + prefix +"\"" + " ";
  out_file+="/>" ; //end of taglib
  return out_file;
  }
  
  
  protected String convert(String jsp )
  {
  int element_index=0;
  int last_index=0;
  int end_index=0;
  int action_index=0;
  int tag_level=0;
  String xml="";
  boolean jsp_element_first=false;
  boolean cdata_closed = true; 
   
  while(element_index>=0 || action_index>=0)
  {
  element_index=jsp.indexOf("<%" , last_index);
  action_index=jsp.indexOf(":" , last_index); //might be an action
  
    if((element_index < action_index) || (action_index==-1) )
           jsp_element_first=true;
  
         else
    	 jsp_element_first=false;
  
  
  if( cdata_closed )
  {
  xml+=new_line+ "<![CDATA[ " + new_line ;
  cdata_closed=false;
  }
  
   if(element_index!=-1 && jsp_element_first) //JSP element was found before action
   {
   xml+=jsp.substring(last_index , element_index);
   xml+=new_line + "]]>" + new_line ; //end of CDATA section
   cdata_closed=true;
  
   char jsp_char = jsp.charAt(element_index+2);
  
      if( jsp_char =='-' ) //jsp Comment
      {
     xml+= new_line +"<!--" ; //XML comment
     end_index=jsp.indexOf("--%>" , last_index );
     xml+=jsp.substring(element_index+4,end_index);
     xml+="-->" ;
     last_index=end_index+4;
     continue;
      }//end JSP Comment
  
      if( jsp_char =='=' ) //Jsp Expression
      {
     xml+=new_line+"<jsp:expression>" ; 
     end_index=jsp.indexOf("%>" , last_index );
     xml+= new_line + "<![CDATA[" + new_line ;
     xml+=jsp.substring(element_index+3,end_index);
     xml+=new_line +"]]>"+new_line ; //end of CDATA
     xml+= new_line +"</jsp:expression>"+new_line ;
     last_index=end_index+2;
     continue;
      }//end JSP Expression
  
  if( jsp_char =='!' ) //jsp Declaration
      {
     xml+=new_line+"<jsp:declaration>" ;
     end_index=jsp.indexOf("%>" , last_index );
     xml+=new_line+"<![CDATA[" + new_line ;
     xml+=jsp.substring(element_index+3,end_index);
     xml+=new_line+"]]>" + new_line ; //end of CDATA
     xml+=new_line+"</jsp:declaration>"+new_line ;
     last_index=end_index+2;
     continue;
      }//end JSP Declaration
  
  if( jsp_char =='@' ) //jsp Directive
      {
     end_index=jsp.indexOf("%>" , last_index );
   String directive = jsp.substring(element_index+3,end_index);
  
     xml+=parseDirective(directive); //this adds to xml String itself
     last_index=end_index+2;
     continue;
      }//end JSP Directive
  
   //if we reach here it means we got a JSP Scriptlet
     xml+=new_line+"<jsp:scriptlet>" +new_line;
     end_index=jsp.indexOf("%>" , last_index );
     xml+=new_line+"<![CDATA[" +new_line ;
     xml+=jsp.substring(element_index+2,end_index);
     xml+=new_line+"]]>" +new_line ; //end of CDATA
     xml+=new_line+"</jsp:scriptlet>" +new_line ;
     last_index=end_index+2;
     continue;
   } //end if
  
  //This is the code to take care of jsp actions like jsp:forward and custom actions
  //Here for simplicity a am assuming that these standard strings are 
  //not used as part of template text. Note that all these elements
  //start with "jsp:" 
  
  if(action_index!=-1) // might be a custom or standard action
    {
  //find the previous element
  int save_index=action_index ;
  char ch= jsp.charAt(action_index);
   while( ch!='<' )
   {
   action_index--;
  
      //don't wanna go back to where we already are
     if(action_index < last_index)
     break;
     
   ch=jsp.charAt(action_index);
   }
  
   String action_name = jsp.substring(action_index+1,save_index);
  
     if( (action_index<last_index) || action_name.endsWith(" ") )
      {
        //don't close the existing CDATA section
       // because it's a template text
        xml+=jsp.substring(last_index , save_index+1);
        last_index= save_index+1;
        continue;
      }
  
  //Check for an end tag
  
     if(action_name.startsWith("/") )
     {
       //close the existiong CDATA section first
        xml+=jsp.substring(last_index , action_index);
        end_index=jsp.indexOf( ">" , action_index);
        xml+=jsp.substring(action_index , end_index+1);
        last_index=end_index+1;
        tag_level--;
                  if(tag_level==0)
        		cdata_closed=true;
        continue;
     }
  
  
  //we found a Standard action or a custom action
  //the attributes of these action might contain runtime expressions
  
  action_name = action_name.trim();
  
     if(action_name.equals("jsp") || tag_prefix.containsKey(action_name) )
      {
  	 xml+=jsp.substring(last_index , action_index);
  
           if(tag_level==0)
           {
  	 xml+=new_line + "]]>"+new_line ; //end of CDATA section
           }
  
           tag_level++;
           cdata_closed=false;
  
           end_index=jsp.indexOf(">" , action_index); 
           ch=jsp.charAt(end_index-1);
             while(ch=='%')
             {
              last_index=end_index+1;
              end_index=jsp.indexOf(">" , last_index); 
              ch=jsp.charAt(end_index-1);
             }
  
           xml+=parseAttributes( jsp.substring(action_index ,end_index+1) );
   	 last_index=end_index+1;
  
           if( jsp.charAt(end_index-1)=='/' ) //end of tag
          {
                  tag_level--;
                  if(tag_level==0)
           	cdata_closed=true;
  
          }
    }
  else  //template text again
    {
        xml+=jsp.substring(last_index , save_index+1);
        last_index= save_index+1;
    }
  } //end action
  
  }//end while
  
  //Remaining part of the string
       xml+=jsp.substring(last_index);
  //close the CDATA section
       xml+=new_line + "]]>" + new_line ;
   
  return xml;
  
  } //end convert
  
  public String parseAttributes(String xml_tag)
  {
  //parse the request time attributes if any
  String parsed_string="";
  int element_index = xml_tag.indexOf("<%=");
  int last_index=0;
  
    while (element_index !=-1)  //found a reqquest time attribute
    {
    parsed_string+=xml_tag.substring(last_index,element_index) ;
    parsed_string+="%=" ;
    last_index=element_index+3;
    element_index = xml_tag.indexOf("%>" ,last_index);
    parsed_string+=xml_tag.substring(last_index,element_index);
    parsed_string+="%" ;
  
    last_index=element_index+2;
    element_index=xml_tag.indexOf("<%=" ,last_index);
    }
   parsed_string+=xml_tag.substring(last_index);
   return parsed_string;
  
  }
  
  private void readJspFileintoString( String jsp_file )
  {
    if (jsp_file ==null)
    return;
  
  try
  {
  FileReader in_file = new FileReader(jsp_file);
  BufferedReader br = new BufferedReader(in_file);
  
  String line=br.readLine() ;
  
  
      while(line !=null)
      {
    // remove all the spaces from beginning and end of the line
   //and convert to quoting to XML
  
   //   line=convertToXMLQuoting(line);
  
      line=line+new_line ; //readLine removes new line
      input_jsp+=line;
      line=br.readLine() ;
  
      }
   br.close();
   in_file.close();
  
  }
  catch(IOException ioex)
   {
  System.out.println("I/O Error in Reading");
   }
  
  } //end readJspFileintoString
  
  public String ConvertJsp2XML()
  {
  
  String output_xml =convert( input_jsp);
  
  //we have the xml file in output_xml
  //The final file is
  //xml_prolog + xml_ns + jsp_root_tag +xml+ jsp_end_tag
  
  xml_ns=xml_ns.trim() ;
  xml_ns+=">" + new_line ; //close the XML Name Space
  output_xml=xml_prolog+ author_comments + jsp_root_tag +xml_ns+ output_xml + jsp_end_tag ;
  return output_xml;
  }
  
  public void ConvertJsp2XML(String xml_file)
  {
  
  String output_xml=convert( input_jsp);
  
  //we have the xml file in output_xml
  //The final file is
  //xml_prolog + xml_ns + jsp_root_tag +xml+ jsp_end_tag
  
  xml_ns=xml_ns.trim() ;
  xml_ns+=">" + new_line ; //close the XML Name Space
  output_xml=xml_prolog+ author_comments + jsp_root_tag +xml_ns+ output_xml + jsp_end_tag ;
  //write it to the file
  try
  {
  FileWriter out_file = new FileWriter(xml_file);
    out_file.write(output_xml, 0, output_xml.length() ) ;
    out_file.flush();
    out_file.close();
  }
  catch(IOException ioex)
   {
  System.out.println("I/O Error in writing");
   }
  
  } //end convertToXML
  
  } //end class