<%@ page import="electric.registry.*,iubio.srs.*,java.util.*" %> <%@ page import="javax.servlet.http.*,javax.servlet.jsp.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %> <%@ page import="java.io.*,org.w3c.dom.*,javax.xml.transform.*,javax.xml.transform.dom.*,javax.xml.transform.stream.*" %> <%! // static/global code static boolean canDo= true; static int pagesize= 20; static int atpage= 0; static int nResults = 0 ; static String query= "none"; static String dirinfo, libinfo; static String dirname, dirSelector, libSelector, xmlresults; static String format= "html"; static ArrayList libnames; static String libnamesXsl, dirnameXsl, err; static String baseDN= ""; //"srv=srs"; static ConvertKeyVals toxml= ConvertKeyVals.getInstance(); static SRSsoapPortType app; // reference to web service hosted in this app //? need a new one of these for each query?? // add a soap host/service url choice ... don't rely on localhost service app? // e.g. fix Registry.bind( app, class) static { try { libnames= new ArrayList(); libnames.add("lib=none"); libnames.add("lib=GenBank"); libnames.add("lib=SwissProt"); app = (SRSsoapPortType) Registry.bind( "srs", SRSsoapPortType.class ); } catch( Exception ex ) { err= ex.getMessage(); } } static void setFormat(String fmt) { if (fmt==null || fmt.length()==0) fmt= format; format= fmt; if (fmt.equals("html")) fmt= "xml"; toxml.setReturnType(fmt); if (canDo) app.setReturnType(fmt); // this one is doing conversion now - change to client? } static String dsml2html= "bionames-dsml.xsl"; static String xtransform( String xml, String xsl ) throws Exception { StringWriter sbuffer= new StringWriter(); StreamSource source; if (xsl.endsWith(".xsl")) source = new StreamSource(new File(xsl)); // FIXME - path to bionames folder //source = new StreamSource(new URL(xsl).openStream()); //? else source = new StreamSource(new StringReader(xsl)); Document document = new electric.xml.Document( xml ); TransformerFactory factory = TransformerFactory.newInstance(); Transformer processor = factory.newTransformer( source ); StreamResult result = new StreamResult( sbuffer ); processor.transform( new DOMSource( document ), result ); return sbuffer.toString(); } static void getDirInfo() { if (dirnameXsl==null) { // this would be easier w/ some xpath function StringBuffer s= new StringBuffer(); s.append(""); s.append(" "); s.append(""); s.append(""); s.append("dn=;"); s.append(""); s.append(""); s.append("name=;"); s.append("cn=;"); s.append(""); s.append(""); dirnameXsl= s.toString(); } int nrecs= 0; dirname= ""; String savefmt= format; //setFormat("xml"); dirinfo= toxml.getHeader(); if (canDo) { nrecs= app.search(baseDN,"base",null,"","*","99","0"); //"base","(objectClass=*)","*,+","99","0" if (nrecs>0) { //app.setReturnType("xml"); //! urk, need to fix soap server get kinds ! String dirxml= app.getPage(0, nrecs); dirinfo += dirxml; try { String dn= xtransform( dirxml, dirnameXsl); String[] kv= splitString(dn,";"); // "=;" is bad for dn's for (int i=0; i 0) { v= k.substring(e+1); k= k.substring(0,e); } if ("name".equals(k)) { dirname= v; break; } else if ("cn".equals(k)) { dirname= v; break; } else if ("dn".equals(k)) { dirname= v; } } } catch (Exception e){} } } if (nrecs==0) dirinfo += ""; dirinfo += toxml.getFooter(); //setFormat(savefmt); } static void getLibInfo() { if (libnamesXsl==null) { StringBuffer s= new StringBuffer(); s.append(""); s.append(" "); s.append(""); s.append(""); s.append(";"); s.append(""); s.append(""); libnamesXsl= s.toString(); } int nrecs= 0; String savefmt= format; //setFormat("xml"); libinfo= toxml.getHeader(); if (canDo) { nrecs= app.search(baseDN,"one",null,"","*","0","0"); //nrecs= app.search(baseDN,"one",null,"","","0","0"); //ok= ldapsearch(ldapurl,"one","(objectClass=*)","*,+",null,null); if (nrecs>0) { // argg - want soap server to return key/value list for lib names also String libxml= app.getPage(0, nrecs); libinfo += libxml; //!toxml.toXML(libxml); } } if (nrecs==0) libinfo += ""; libinfo += toxml.getFooter(); //setFormat(savefmt); if (nrecs>0) try { libnames.clear(); String libns= xtransform( libinfo, libnamesXsl); String[] libs= splitString(libns,";"); if (libs!=null) for (int i=0; i\n"); for (int i=0; i"); s.append(lib); s.append("\n"); } s.append("\n"); libSelector= s.toString(); return libSelector; } static String[] splitString(String s, String del) { if (s==null) return new String[0]; StringTokenizer st= new StringTokenizer(s, del); int n= st.countTokens(); String[] ss= new String[n]; for (int i=0; i0) && (field!=null && field.length()>0) && (value!=null && value.length()>0) ); query = "[lib={"+lib+"}-"+field+":"+value+"]"; if (!ok) { if (!"sub".equals(scope)) { query= ""; ok= true; } } if (!ok) err= "" +""; // else if (app == null) // err= "" // +""; else if (canDo) nResults= app.search( basedn, scope, query, objectClasses, attributes, sizelimit, timelimit); pageContext.setAttribute("query",query); pageContext.setAttribute("nResults",new Integer(nResults)); if ( nResults > 0 ) nextPage(request, pageContext); else { if (err==null) err= "" +""; xmlresults= err; pageContext.setAttribute("results",xmlresults); pageContext.setAttribute("moreresults",""); } } static void nextPage(HttpServletRequest request, PageContext pageContext) { String x = toxml.getHeader(); int nrecs= pagesize; if (nrecs>nResults - atpage) nrecs= nResults-atpage; if (canDo) x += app.getPage(atpage, nrecs); x += toxml.getFooter(); xmlresults= x; pageContext.setAttribute("results",x); pageContext.setAttribute("moreresults",(nrecs>=nResults)?"true":""); } %> Bio-data Directories: SRS-WS-Test

Experimental Biodata Directory Systems
Sequence Retrieval System via Web Services

<% if (err!=null) { out.print("Error: "+err+"

"); err= null; } dsml2html= (String)pageContext.getAttribute("dsml2html"); setFormat(request.getParameter("format")); pageContext.setAttribute("format",format); try { pagesize= Integer.parseInt(request.getParameter("pagesize")); } catch (Exception ex) { pagesize= 20; } if (dirinfo==null) { getDirInfo(); getLibInfo(); } if ("dir".equals(request.getParameter("info"))) { pageContext.setAttribute("dirinfo",dirinfo); // testing } else if ("lib".equals(request.getParameter("info"))) { pageContext.setAttribute("libinfo",libinfo); // testing } else if ("nextpage".equals(request.getParameter("action"))) { nextPage(request, pageContext); } else { String libsel= makeLibSelector(request.getParameterValues("lib")); //pageContext.setAttribute("libsel",libsel); if ("search".equals(request.getParameter("action"))) { doSearch(request, pageContext); } } %>


<%= dirname %>

---------- ">Directory Info ---------- ">Library Info ----------

Library <%= libSelector %>
Library field(s) > e.g., des id all
Match string >
Return object > * = result summary, BioseqEntry, BioseqRecord
Return attributes > E.g. *=all dn,id,nam,seq
Search base > Search scope
Size limit > Output format

Results:

Query=
No. matches=
<%= xtransform(xmlresults, dsml2html) %>

Directory info

<%= xtransform(dirinfo, dsml2html) %>

Library info

<%= xtransform(libinfo, dsml2html) %>