From: <rv...@us...> - 2011-04-25 21:46:30
|
Revision: 801 http://treebase.svn.sourceforge.net/treebase/?rev=801&view=rev Author: rvos Date: 2011-04-25 21:46:23 +0000 (Mon, 25 Apr 2011) Log Message: ----------- PhyloWS sub-controllers now re-factored Modified Paths: -------------- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSMatrixController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSStudyController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTaxonController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTreeController.java trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSController.java 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSController.java 2011-04-25 21:46:23 UTC (rev 801) @@ -1,5 +1,9 @@ package org.cipres.treebase.web.controllers; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -10,163 +14,93 @@ import org.cipres.treebase.TreebaseIDString; import org.cipres.treebase.TreebaseUtil; import org.cipres.treebase.TreebaseIDString.MalformedTreebaseIDString; -import org.cipres.treebase.domain.matrix.Matrix; -import org.cipres.treebase.domain.matrix.MatrixService; -import org.cipres.treebase.domain.study.Study; -import org.cipres.treebase.domain.study.StudyService; -import org.cipres.treebase.domain.tree.PhyloTree; -import org.cipres.treebase.domain.tree.PhyloTreeService; import org.cipres.treebase.web.Constants; -public class PhyloWSController implements Controller { - private static String ncbiBaseUrl = "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id="; - private static String uBioBaseUrl = "http://www.ubio.org/browser/details.php?namebankID="; +public abstract class PhyloWSController implements Controller { private static final long serialVersionUID = 1L; - private MatrixService mMatrixService; - private PhyloTreeService mPhyloTreeService; - private StudyService mStudyService; - private static String format = "format"; - - /* - * this array is used to identify whether a path fragment maps to an object - * for which web pages are available. Maybe this should be an enum or a map - * instead. - */ - private static String[] classesWithPages = { "tree", "study", "matrix" }; + private static String searchBase = "/treebase-web/search/"; /** - * Given an object prefix ("tree", "study" or "matrix") and an object ID, constructs + * + * @return + */ + abstract String getDisplayPage(); + + /** + * Given an object ID and a servlet request object, constructs * a relative URL to an HTML page about that object. - * @param prefix identifies either studies, matrices or trees * @param objectId is the primary key for the requested object * @param request is the servlet request, which we need to check for reviewer access - * @return a relative URL to an HTML page, or an empty string - * @throws Exception + * @return a relative URL to an HTML page + * @throws ObjectNotFoundException */ - private String createUrl(String prefix, Long objectId,HttpServletRequest request) throws Exception { - String url = ""; - StringBuffer base = new StringBuffer("/treebase-web/search/study"); - - // requested object is a study - if ( prefix.equals(TreebaseIDString.getPrefixForClass(Study.class)) ) { - Study study = getStudyService().findByID(objectId); - if ( study == null ) { - throw new ObjectNotFoundException("Can't find study " + objectId); - } - if ( ! TreebaseUtil.isEmpty(request.getParameter(Constants.X_ACCESS_CODE))) { - request.setAttribute("initialReviewerRedirect", true); - return base - .append("/summary.html?id=") - .append(objectId) - .append('&') - .append(Constants.X_ACCESS_CODE) - .append('=') - .append(request.getParameter(Constants.X_ACCESS_CODE)) - .toString(); - } - else { - return base - .append("/summary.html?id=") - .append(objectId) - .toString(); - } - } - - // requested object is a matrix - else if ( prefix.equals(TreebaseIDString.getPrefixForClass(Matrix.class)) ) { - Matrix matrix = getMatrixService().findByID(objectId); - if ( matrix == null ) { - throw new ObjectNotFoundException("Can't find matrix " + objectId); - } - Study study = matrix.getStudy(); - return base - .append("/matrix.html?id=") - .append(study.getId()) - .append("&matrixid=") - .append(objectId) - .toString(); - } - - // requested object is a tree - else if ( prefix.equals(TreebaseIDString.getPrefixForClass(PhyloTree.class)) ) { - PhyloTree phyloTree = getPhyloTreeService().findByID(objectId); - if ( phyloTree == null ) { - throw new ObjectNotFoundException("Can't find tree " + objectId); - } - Study study = phyloTree.getStudy(); - return base - .append("/tree.html?id=") - .append(study.getId()) - .append("&treeid=") - .append(objectId) - .toString(); - } - return url; + private String createDisplayUrl(Long objectId,HttpServletRequest request) throws ObjectNotFoundException { + StringBuffer base = new StringBuffer(searchBase + "study/"); + base.append(getDisplayPage()); + Map<String,String> params = getObjectQueryParameters(objectId); + return createUrl(base, params, request); } - - public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) - throws Exception { - res.setContentType("text/plain"); - String url = null; - //String domain = "http://" + req.getServerName() + ":" + req.getServerPort(); - if ( ! TreebaseUtil.isEmpty(req.getParameter(Constants.X_ACCESS_CODE)) ) { - req.getSession().setAttribute( - Constants.X_ACCESS_CODE, - req.getParameter(Constants.X_ACCESS_CODE)); - } - try { - String pathInfo = req.getPathInfo(); - if ( TreebaseUtil.isEmpty(pathInfo) ) { - throw new InvalidRequestException( - "Invalid request '" - + pathInfo - + "', should be /${class}/${NamespacedGUID}"); - } - String[] pathComponents = pathInfo.split("/"); - if ( pathComponents[pathComponents.length-1].equals("find") ) { - //url = domain + createSearchUrl(pathComponents[pathComponents.length-2],req); - url = createSearchUrl(pathComponents[pathComponents.length-2],req); - } else { - String rawNamespacedGUID = pathComponents[pathComponents.length-1]; - if ( rawNamespacedGUID.startsWith("uBio:") ) { // XXX be polite, use real URL - url = uBioBaseUrl + rawNamespacedGUID.substring("uBio:".length()); + + /** + * + */ + public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws IOException { + String url = null; + String pathInfo = req.getPathInfo(); + + // url has "find" in it, re-direct to search services + if ( pathInfo.indexOf("find") != -1 ) { + url = createSearchUrl(req); + } + else { + try { + NamespacedGUID namespacedGUID = new NamespacedGUID(pathInfo); + TreebaseIDString tbID = namespacedGUID.getTreebaseIDString(); + String serializationFormat = createSerializationFormat(req); + if ( hasWebPage(tbID.getClass()) && ! TreebaseUtil.isEmpty(serializationFormat) ) { + + // output format is html, re-direct to display services + if ( serializationFormat.equals("html") ) { + url = createDisplayUrl(tbID.getId(),req); + } + + // output format is something else, re-direct to download services + else { + url = createDownloadUrl(tbID.getId(),serializationFormat,req); + } } - else if ( rawNamespacedGUID.startsWith("NCBI:") ) { // XXX be polite, use real URL - url = ncbiBaseUrl + rawNamespacedGUID.substring("NCBI:".length()); - } + + // no output format, re-direct to base resource url else { - NamespacedGUID namespacedGUID = new NamespacedGUID(rawNamespacedGUID); - TreebaseIDString tbID = namespacedGUID.getTreebaseIDString(); - if ( hasWebPage(pathComponents) ) { - String serializationFormat = createSerializationFormat(req); - if ( TreebaseUtil.isEmpty(serializationFormat) ) { - url = "/treebase-web/search/study/anyObjectAsRDF.rdf?namespacedGUID=" + namespacedGUID.toString(); - } - else if ( serializationFormat.equals("html") ) { - url = createUrl(tbID.getTypePrefix(),tbID.getId(),req); - } - else { - url = createDownloadUrl(tbID.getTypePrefix(),tbID.getId(),serializationFormat); - } - } - else { - url = "/treebase-web/search/study/anyObjectAsRDF.rdf?namespacedGUID=" + namespacedGUID.toString(); - } + url = createResourceUrl(namespacedGUID, req); } - } - } catch ( MalformedTreebaseIDString e ) { - res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Bad ID string: " + e.getMessage()); - } catch ( ObjectNotFoundException e ) { - res.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage()); - } catch ( InvalidRequestException e ) { - res.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); + } catch ( MalformedTreebaseIDString e ) { + res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Bad ID string: " + e.getMessage()); + } catch ( ObjectNotFoundException e ) { + res.sendError(HttpServletResponse.SC_NOT_FOUND, "Object not found: " + e.getMessage()); + } } + if ( ! TreebaseUtil.isEmpty(url) ) { + res.setContentType("text/plain"); res.setStatus(HttpServletResponse.SC_SEE_OTHER); res.setHeader("Location", url); } return null; } + + /** + * + * @param guid + * @param req + * @return + */ + private String createResourceUrl(NamespacedGUID guid,HttpServletRequest req) { + StringBuffer base = new StringBuffer(searchBase + "study/anyObjectAsRDF.rdf"); + Map<String,String> params = new HashMap<String,String>(); + params.put("namespacedGUID", guid.toString()); + return createUrl(base,params,req); + } /** * This is a placeholder method that might parse accept headers for content-negotiation @@ -175,20 +109,28 @@ * @return */ private String createSerializationFormat(HttpServletRequest request) { - return request.getParameter(format); + return request.getParameter("format"); } - private String createSearchUrl(String path,HttpServletRequest request) { - StringBuilder sb = new StringBuilder("/treebase-web/search/"); - sb - .append(path) - .append("Search.html?query=") - .append(request.getParameter("query")) - .append("&format=") - .append(request.getParameter("format")) - .append("&recordSchema=") - .append(request.getParameter("recordSchema")); - return sb.toString(); + /** + * + * @return + */ + abstract String getSearchPage(); + + /** + * + * @param request + * @return + */ + private String createSearchUrl(HttpServletRequest request) { + StringBuffer sb = new StringBuffer(searchBase); + sb.append(getSearchPage()); + Map<String,String> params = new HashMap<String,String>(); + params.put("query", request.getParameter("query")); + params.put("format", createSerializationFormat(request)); + params.put("recordSchema", request.getParameter("recordSchema")); + return createUrl(sb,params,request); } /** @@ -197,110 +139,70 @@ * @param pathComponents * @return true of web page exists, false otherwise */ - private boolean hasWebPage(String[] pathComponents) { - for ( int i = ( pathComponents.length - 1 ); i >= 0; i-- ) { - for ( int j = 0; j < classesWithPages.length; j++ ) { - if ( pathComponents[i].equals(classesWithPages[j]) ) { - return true; - } - } - } - return false; - } + abstract boolean hasWebPage(Class<?> theClass); + + /** + * + * @param objectId + * @return + * @throws ObjectNotFoundException + */ + abstract Map<String,String> getObjectQueryParameters(Long objectId) throws ObjectNotFoundException; - private String createDownloadUrl(String prefix, Long objectId, String format) throws Exception { - if ( format.equals("xml") ) { - format = "nexml"; + /** + * + * @param base + * @param params + * @return + */ + private String createUrl(StringBuffer base,Map<String,String> params,HttpServletRequest req) { + if ( ! TreebaseUtil.isEmpty(req.getParameter(Constants.X_ACCESS_CODE))) { + req.setAttribute("initialReviewerRedirect", true); + params.put(Constants.X_ACCESS_CODE, req.getParameter(Constants.X_ACCESS_CODE)); + req.getSession().setAttribute(Constants.X_ACCESS_CODE,req.getParameter(Constants.X_ACCESS_CODE)); } - String url = ""; - StringBuffer base = new StringBuffer("/treebase-web/search"); - if ( prefix.equals(TreebaseIDString.getPrefixForClass(Study.class)) ) { - Study study = getStudyService().findByID(objectId); - if ( study == null ) { - throw new ObjectNotFoundException("Can't find study " + objectId); - } - return base - .append("/downloadAStudy.html?id=") - .append(objectId) - .append("&format=") - .append(format) - .toString(); - } - else if ( prefix.equals(TreebaseIDString.getPrefixForClass(Matrix.class)) ) { - Matrix matrix = getMatrixService().findByID(objectId); - if ( matrix == null ) { - throw new ObjectNotFoundException("Can't find matrix " + objectId); - } - Study study = matrix.getStudy(); - if ( study == null ) { - throw new ObjectNotFoundException("Can't find study for matrix "+objectId); - } - return base - .append("/downloadAMatrix.html?id=") - .append(study.getId()) - .append("&matrixid=") - .append(objectId) - .append("&format=") - .append(format) - .toString(); - } - else if ( prefix.equals(TreebaseIDString.getPrefixForClass(PhyloTree.class)) ) { - PhyloTree phyloTree = getPhyloTreeService().findByID(objectId); - if ( phyloTree == null ) { - throw new ObjectNotFoundException("Can't find tree " + objectId); - } - Study study = phyloTree.getStudy(); - if ( study == null ) { - throw new ObjectNotFoundException("Can't find study for tree "+objectId); - } - return base - .append("/downloadATree.html?id=") - .append(study.getId()) - .append("&treeid=") - .append(objectId) - .append("&format=") - .append(format) - .toString(); - } - return url; + if ( ! params.isEmpty() ) { + base.append('?'); + } + for ( String key : params.keySet() ) { + base.append(key).append('=').append(params.get(key)).append('&'); + } + String url = base.toString(); + return url.substring(0, url.length() - 2 ); } - - public MatrixService getMatrixService() { - return mMatrixService; - } - public void setMatrixService(MatrixService matrixService) { - mMatrixService = matrixService; - } - public PhyloTreeService getPhyloTreeService() { - return mPhyloTreeService; - } + /** + * + * @return + */ + abstract String getDownloadPage(); - public void setPhyloTreeService(PhyloTreeService phyloTreeService) { - mPhyloTreeService = phyloTreeService; + /** + * + * @param objectId + * @param format + * @return + * @throws ObjectNotFoundException + */ + private String createDownloadUrl(Long objectId, String format,HttpServletRequest req) throws ObjectNotFoundException { + StringBuffer base = new StringBuffer(searchBase); + base.append(getDownloadPage()); + Map<String,String> params = getObjectQueryParameters(objectId); + params.put("format", format); + return createUrl(base,params,req); } - - public StudyService getStudyService() { - return mStudyService; - } - - public void setStudyService(StudyService studyService) { - mStudyService = studyService; - } + /** + * + * @author rvosa + * + */ class ObjectNotFoundException extends Exception { private static final long serialVersionUID = 1L; public ObjectNotFoundException(String message) { super(message); } } - - class InvalidRequestException extends Exception { - private static final long serialVersionUID = 1L; - public InvalidRequestException(String message) { - super(message); - } - } } Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSMatrixController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSMatrixController.java 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSMatrixController.java 2011-04-25 21:46:23 UTC (rev 801) @@ -1,5 +1,58 @@ package org.cipres.treebase.web.controllers; +import java.util.HashMap; +import java.util.Map; + +import org.cipres.treebase.domain.matrix.Matrix; +import org.cipres.treebase.domain.matrix.MatrixService; +import org.cipres.treebase.domain.study.Study; + public class PhyloWSMatrixController extends PhyloWSController { + private MatrixService mMatrixService; + + @Override + String getSearchPage() { + return "matrixSearch.html"; + } + + @Override + String getDownloadPage() { + return "downloadAMatrix.html"; + } + + @Override + Map<String,String> getObjectQueryParameters(Long objectId) throws ObjectNotFoundException { + Matrix matrix = getMatrixService().findByID(objectId); + if ( matrix == null ) { + throw new ObjectNotFoundException("Can't find matrix " + objectId); + } + Study study = matrix.getStudy(); + if ( study == null ) { + throw new ObjectNotFoundException("Can't find study for matrix "+objectId); + } + Map<String,String> params = new HashMap<String,String>(); + params.put("id", ""+study.getId()); + params.put("matrixid", ""+objectId); + return params; + } + + @Override + String getDisplayPage() { + return "matrix.html"; + } + + @Override + boolean hasWebPage(Class<?> theClass) { + return Matrix.class.isAssignableFrom(theClass); + } + + public MatrixService getMatrixService() { + return mMatrixService; + } + + public void setMatrixService(MatrixService matrixService) { + mMatrixService = matrixService; + } + } Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSStudyController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSStudyController.java 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSStudyController.java 2011-04-25 21:46:23 UTC (rev 801) @@ -1,5 +1,52 @@ package org.cipres.treebase.web.controllers; +import java.util.HashMap; +import java.util.Map; + +import org.cipres.treebase.domain.study.Study; +import org.cipres.treebase.domain.study.StudyService; + public class PhyloWSStudyController extends PhyloWSController { + private StudyService mStudyService; + + @Override + String getSearchPage() { + return "studySearch.html"; + } + + @Override + String getDownloadPage() { + return "downloadAStudy.html"; + } + + @Override + Map<String,String> getObjectQueryParameters(Long objectId) throws ObjectNotFoundException { + Study study = getStudyService().findByID(objectId); + if ( study == null ) { + throw new ObjectNotFoundException("Can't find study " + objectId); + } + Map<String,String> params = new HashMap<String,String>(); + params.put("id", ""+objectId); + return params; + } + + @Override + String getDisplayPage() { + return "summary.html"; + } + + @Override + boolean hasWebPage(Class<?> theClass) { + return Study.class.isAssignableFrom(theClass); + } + + public StudyService getStudyService() { + return mStudyService; + } + + public void setStudyService(StudyService studyService) { + mStudyService = studyService; + } + } Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTaxonController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTaxonController.java 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTaxonController.java 2011-04-25 21:46:23 UTC (rev 801) @@ -1,5 +1,37 @@ package org.cipres.treebase.web.controllers; +import java.util.HashMap; +import java.util.Map; + +import org.cipres.treebase.domain.taxon.TaxonLabel; + public class PhyloWSTaxonController extends PhyloWSController { + @Override + String getSearchPage() { + return "taxonSearch.html"; + } + + @Override + String getDownloadPage() { + return "downloadATaxon.html"; + } + + @Override + Map<String,String> getObjectQueryParameters(Long objectId) throws ObjectNotFoundException { + // TODO Auto-generated method stub + return new HashMap<String,String>(); + } + + @Override + String getDisplayPage() { + // TODO Auto-generated method stub + return "taxon.html"; + } + + @Override + boolean hasWebPage(Class<?> theClass) { + return TaxonLabel.class.isAssignableFrom(theClass); + } + } Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTreeController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTreeController.java 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/PhyloWSTreeController.java 2011-04-25 21:46:23 UTC (rev 801) @@ -1,5 +1,58 @@ package org.cipres.treebase.web.controllers; +import java.util.HashMap; +import java.util.Map; + +import org.cipres.treebase.domain.study.Study; +import org.cipres.treebase.domain.tree.PhyloTree; +import org.cipres.treebase.domain.tree.PhyloTreeService; + public class PhyloWSTreeController extends PhyloWSController { + private PhyloTreeService mPhyloTreeService; + + @Override + String getSearchPage() { + return "treeSearch.html"; + } + + @Override + String getDownloadPage() { + return "downloadATree.html"; + } + + @Override + Map<String,String> getObjectQueryParameters(Long objectId) throws ObjectNotFoundException { + PhyloTree phyloTree = getPhyloTreeService().findByID(objectId); + if ( phyloTree == null ) { + throw new ObjectNotFoundException("Can't find tree " + objectId); + } + Study study = phyloTree.getStudy(); + if ( study == null ) { + throw new ObjectNotFoundException("Can't find study for tree "+objectId); + } + Map<String,String> params = new HashMap<String,String>(); + params.put("id",""+study.getId()); + params.put("treeid", ""+objectId); + return params; + } + + @Override + String getDisplayPage() { + return "tree.html"; + } + + @Override + boolean hasWebPage(Class<?> theClass) { + return PhyloTree.class.isAssignableFrom(theClass); + } + + public PhyloTreeService getPhyloTreeService() { + return mPhyloTreeService; + } + + public void setPhyloTreeService(PhyloTreeService phyloTreeService) { + mPhyloTreeService = phyloTreeService; + } + } Modified: trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml =================================================================== --- trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml 2011-04-25 18:46:13 UTC (rev 800) +++ trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml 2011-04-25 21:46:23 UTC (rev 801) @@ -42,34 +42,22 @@ <property name="studyService"><ref bean="studyService"></ref></property> </bean> - <bean id="phyloWSController" class="org.cipres.treebase.web.controllers.PhyloWSController"> - <property name="matrixService"><ref bean="matrixService"></ref></property> - <property name="phyloTreeService"><ref bean="phyloTreeService"></ref></property> - <property name="studyService"><ref bean="studyService"></ref></property> + <bean id="phyloWSController" class="org.cipres.treebase.web.controllers.PhyloWSController"> </bean> <bean id="phyloWSStudyController" class="org.cipres.treebase.web.controllers.PhyloWSStudyController"> - <property name="matrixService"><ref bean="matrixService"></ref></property> - <property name="phyloTreeService"><ref bean="phyloTreeService"></ref></property> <property name="studyService"><ref bean="studyService"></ref></property> </bean> - <bean id="phyloWSTaxonController" class="org.cipres.treebase.web.controllers.PhyloWSTaxonController"> - <property name="matrixService"><ref bean="matrixService"></ref></property> - <property name="phyloTreeService"><ref bean="phyloTreeService"></ref></property> - <property name="studyService"><ref bean="studyService"></ref></property> + <bean id="phyloWSTaxonController" class="org.cipres.treebase.web.controllers.PhyloWSTaxonController"> </bean> <bean id="phyloWSMatrixController" class="org.cipres.treebase.web.controllers.PhyloWSMatrixController"> - <property name="matrixService"><ref bean="matrixService"></ref></property> - <property name="phyloTreeService"><ref bean="phyloTreeService"></ref></property> - <property name="studyService"><ref bean="studyService"></ref></property> + <property name="matrixService"><ref bean="matrixService"></ref></property> </bean> <bean id="phyloWSTreeController" class="org.cipres.treebase.web.controllers.PhyloWSTreeController"> - <property name="matrixService"><ref bean="matrixService"></ref></property> <property name="phyloTreeService"><ref bean="phyloTreeService"></ref></property> - <property name="studyService"><ref bean="studyService"></ref></property> </bean> <bean id="filenameController" class="org.cipres.treebase.web.controllers.ShortPathUrlFilenameViewController"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |