import java.io.*; import java.util.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class mm extends HttpServlet { static int indentLevel = -1; public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); Enumeration flds = req.getParameterNames(); String Coden = new String(); String HEAD="/mm/head"; String EXTFILE="/apps/multimedia/ext_includes"; String TAIL="/mm/tail"; String ROOTDIR="/ftp/public/epaps"; String PapId = req.getParameter("ID"); PapId = ((PapId==null) ? "" : PapId ); String IdType = req.getParameter("IDTYPE"); IdType = ((IdType==null) ? "" : IdType ); String DoiCoden = req.getParameter("CODEN"); DoiCoden = ((DoiCoden==null) ? "" : DoiCoden ); String FileName = req.getParameter("FILE"); FileName = ((FileName==null) ? "" : FileName ); if ( PapId.equals("") ) this.error(req,res,out,"Missing papId"); if ( !IdType.equals("") || IdType.indexOf("doi") >= 0 ){ if( !DoiCoden.equals("")) this.error(req,res,out,"Missing DoiCoden"); Coden = ( DoiCoden); String Ptr = PapId.substring(8,PapId.length()-1); PapId += Ptr; //out.println("DEBUG0 : " +Coden); } else { char currentChar; if ( PapId.indexOf("E-") < 0 ) this.error(req,res,out,"Missing E-"); currentChar = PapId.charAt(1); if ( currentChar != '-' ) this.error(req,res,out,"Missing E-"); Coden = PapId.substring(2,8); //out.println("DEBUG1 : " +Coden); } String SubDir = GetDirectory( Coden); String Directory = ( ROOTDIR +"/" +SubDir +"/" +PapId); if( !FileName.equals("") ) { String Location = ("ftp://ftp.aip.org/" +Directory.substring(11,Directory.length()-1) +"/" +FileName); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(Location); try { dispatcher.forward(req, res); } catch (ServletException e) { out.print(""); } } this.loadFile (req, res, out, HEAD); //out.println("DEBUG2 : " +Directory); PrintTitle( Coden , out); //out.println("DEBUG3 : " +Directory); ScanFiles( Directory, out); this.loadFile (req, res, out, TAIL); } public void PrintTitle ( String Coden, PrintWriter out ){ String text = null; String retIt = new String(); File input = new File("/apps/multimedia/title_lookup"); int fieldNumber = 0; String fields[] = new String[2]; try { BufferedReader myStream = new BufferedReader(new InputStreamReader( new FileInputStream(input))); while ((text = myStream.readLine()) != null){ char[] possArray = text.toCharArray(); if (possArray[0] == '#' ) continue; else if ( text.indexOf(Coden) >= 0){ if ( text.length() > 6 ) out.println(text.substring(6, text.length() -1) +"

"); } } } catch(IOException e) { System.out.println("Exception in mm : "+e.toString() ); } } public void ScanFiles ( String Directory, PrintWriter out){ File path = new File(Directory); File files[]; indentLevel++; int Count = 0; String Store[] = new String[1000]; files = path.listFiles(); Arrays.sort(files); for (int i = 0, n = files.length; i < n; i++) { for (int indent = 0; indent < indentLevel; indent++) { System.out.print(" "); } if (!files[i].isDirectory()){ String pname = files[i].toString(); if( pname.indexOf("index.html") >= 0) { out.println( "The author has provided an "); out.println( "HTML index page to facilitate the access of these files.

"); } else if( pname.indexOf("index.htm") >= 0) { out.println( "The author has provided an "); out.println("HTML index page to facilitate the access of these files.

"); } else Store[Count++] = pname; // if the file is a diectory, call listPath recursevly //if (files[i].isDirectory()) { // listPath(files[i]); // } } indentLevel--; } for( int i=0; i < Count; i++) { if ( Store[i].length() > 12 ){ StringTokenizer z = new StringTokenizer(Store[i], "/"); int n = z.countTokens(); String t = null; while (z.hasMoreTokens()) t = z.nextToken(); out.println("" +t +""); if ( Store[i].indexOf("README.TXT") >= 0) out.println(" files accompany each deposit and contain a description of the materials and instructions for use.

"); else { // Get the number of bytes in the file File file = new File(Store[i]); float length = file.length() / (float) 1024; out.println(" (" +length +" kB)

"); } } } } public static String GetDirectory ( String Coden ){ String text = null; String retIt = new String(); File input = new File("/apps/multimedia/coden_lookup"); int fieldNumber = 0; String fields[] = new String[2]; try { BufferedReader myStream = new BufferedReader(new InputStreamReader( new FileInputStream(input))); while ((text = myStream.readLine()) != null){ char[] possArray = text.toCharArray(); if (possArray[0] == '#' ) continue; else if ( (text.indexOf(Coden) ) >= 0){ StringTokenizer st = new StringTokenizer(text," "); while (st.hasMoreTokens()) fields[fieldNumber++] = st.nextToken(); } retIt = fields[1]; } // end while } catch(IOException e) { System.out.println("Exception in mm : "+e.toString() ); } return retIt; } public void error(HttpServletRequest req, HttpServletResponse res, PrintWriter out, String code) throws IOException { req.setAttribute ("myError" , code); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/mm/error.jsp"); try { dispatcher.forward(req, res); } catch (ServletException e) { out.print("

Missing file

"); } } public void loadFile (HttpServletRequest req, HttpServletResponse res, PrintWriter out, String Url) throws IOException { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(Url); try { dispatcher.include(req, res); } catch (ServletException e) { out.print(""); } } }