<%@ page import="electric.registry.*,iubio.srs.*,java.util.*" %> <%@ page import="javax.servlet.http.*,javax.servlet.jsp.*" %> <%@ page import="java.net.*,javax.naming.*,javax.naming.directory.*" %> <%@ 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 ldapurl= "ldap://localhost:10389/"; static String ldapurl= "ldap://bio-mirror.net:3895/srv=srs"; static ArrayList ldapurls; static ConvertKeyVals toxml= ConvertKeyVals.getInstance(); static DirContext dir ; static NamingEnumeration dirresults; static boolean moreresults; static { try { libnames= new ArrayList(); libnames.add("none"); ldapurls= new ArrayList(); String mainu= ldapurl; ldapurls.add("ldap://iubio.bio.indiana.edu/"); // read from some doc ldapurls.add("ldap://bio-mirror.net:3895/srv=srs"); ldapurls.add("ldap://localhost:10389/srv=srs"); ldapurls.add("ldap://bio-mirror.net:3891/"); //ldapurls.add("ldap://eugenes.org:3891/o=euGenes"); //ldapurls.add("ldap://eugenes.org:3891/srv=srsgnomap"); //ldapurls.add("ldap://eugenes.org:3892/srv=das,o=euGenes"); //ldapurls.add("ldap://eugenes.org:3894/srv=bio-ontology,o=euGenes"); setLdapUrl(mainu); } catch( Exception ex ) { } } static void setLdapUrl(String lurl) { if (lurl!=null && lurl.length()>0 && (dirSelector==null || !lurl.equals(ldapurl))) { ldapurl= lurl; if (!ldapurls.contains(ldapurl)) ldapurls.add(ldapurl); // if no basedn on url, check server for namingContexts ?? Object[] nc= getNamingContexts(ldapurl); for (int i= 0; i\n"); for (int i=0; i"); s.append(lurl); s.append("\n"); } s.append("\n"); dirSelector= s.toString(); return dirSelector; } static void setFormat(String fmt) { if (fmt==null || fmt.length()==0) fmt= format; format= fmt; if (fmt.equals("html")) fmt= "xml"; toxml.setReturnType(fmt); } // static String doctype= // "\n"; // static String xmlns= " xmlns=\"http://www.dsml.org/DSML\""; // // static String fixdoctype(String x) { // return x; // // int i= x.indexOf(""); // // if (i<0) return x; // // else // // return x.substring(0,i+5) + xmlns + x.substring(i+5); // // //return x.substring(0,i) + doctype + x.substring(i); // } // x:transform is biting big ones 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 // if (xsl.startsWith(""; dirinfo += toxml.getFooter(); } static void getLibInfo() { boolean ok= false; libinfo= toxml.getHeader(); if (canDo) { //ok= ldapsearch(ldapurl,"one","(objectClass=*)","*","99","0"); ok= ldapsearch(ldapurl,"one","(objectClass=*)","*,+",null,null);// //dang - want all attr for ldap referals -- "*,+" if (ok) try { libnames.clear(); String[] keyvals= getPage( 99, libnames, null); if (keyvals==null || keyvals.length==0) ok= false; libinfo += toxml.toXML( keyvals); } catch (Exception ex) { libinfo += "\n"; libinfo += ""+ex.getMessage()+"\n"; libinfo += "\n"; } } if (!ok) libinfo += ""; libinfo += toxml.getFooter(); } static String libkey= "lib"; static String makeLibSelector(String[] sels) { StringBuffer s= new StringBuffer(); for (int i=0; i\n"); s.append(""); 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) sc.setReturningAttributes(attr); //? if (filter==null) filter="(objectClass=*)"; // DirContext dir; // NamingEnumeration results; dir = (DirContext) new InitialDirContext(env); dirresults = dir.search( basedn, filter, sc); return (dirresults.hasMore()); } catch (Exception e) { return false; } } static void doSearch(HttpServletRequest request, PageContext pageContext) { String field= request.getParameter( "field" ); String value= request.getParameter( "value" ); //String basedn= request.getParameter( "basedn" ); String scope= request.getParameter( "scope" ); String objectClasses = request.getParameter( "objectClasses" ); String attributes= request.getParameter( "attributes" ); String sizelimit= request.getParameter( "sizelimit" ); String timelimit= request.getParameter( "timelimit" ); String lib= request.getParameter( "lib" ); String[] libs= request.getParameterValues("lib"); String[] fields= splitString( field," ,;"); String err= null; nResults = 0 ; atpage= 0; boolean ok= ( (libs!=null && libs.length>0) && (field!=null && field.length()>0) && (value!=null && value.length()>0) ); //"[lib={"+lib+"}-"+field+":"+value+"]"; query = "(&"; if (objectClasses==null) objectClasses= "*"; query += "(objectClass="+objectClasses+")"; // need to iterate all !? //query += "(lib="+lib+")"; if (libs!=null && libs.length>1) { query += "(|"; for (int i=0; i1) { //? do OR or AND of values ? query += "(|"; for (int i=0; i0) query += "("+field+"="+value+")"; query += ")"; if (!ok && !"sub".equals(scope)) ok= true; //? if (!ok) err= "" +""; else if (canDo) ok= ldapsearch( ldapurl, scope, query, attributes, sizelimit, timelimit); pageContext.setAttribute("query",query); //pageContext.setAttribute("nResults",new Integer(nResults)); if ( ok ) 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) { String[] keyvals= getPage( nrecs, null, null); //atpage, x += toxml.toXML( keyvals); } x += toxml.getFooter(); xmlresults= x; pageContext.setAttribute("results",xmlresults); pageContext.setAttribute("moreresults",(moreresults)?"true":""); } %> Bio-data Directories: SRS-LDAP-Test

Experimental Biodata Directory Systems
Sequence Retrieval System via Lightweight Directory Access Protocol

<% // page/request specific code // // for some odd reason this file named .xsl STOPped being importable - glue bug? // c:import url="bionames-dsml.xsl" var="testxsl" scope="page // out.print("page xsl="+pageContext.getAttribute("testxsl")); out.println("
"); if ("setserver".equals(request.getParameter("action"))) { dirinfo= null; libinfo= null; } setLdapUrl(request.getParameter("ldapurl")); pageContext.setAttribute("ldapurl",ldapurl); 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 ----------

Bio-Directory Server (LDAP) " >  
<%= dirSelector %>
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
Size limit > Search scope Result Page size >
Time limit > Output format

Results:

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

Directory info

<%= xtransform(dirinfo, dsml2html) %>

Library info

<%= xtransform(libinfo, dsml2html) %>