X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2FEnfinEnvision2OneWay.java;h=53d5b4aaec081ad411fa5e7e31f3873b92a39175;hb=a69b975b0f7ba9d1004f9c7769ba6acc4140d074;hp=890551523db11da2f3769673a4eadb1ffcef6c4e;hpb=784398bbc60a0e6ae55c6cde1b4f5b1b6f4a5592;p=jalview.git diff --git a/src/jalview/ws/EnfinEnvision2OneWay.java b/src/jalview/ws/EnfinEnvision2OneWay.java index 8905515..53d5b4a 100644 --- a/src/jalview/ws/EnfinEnvision2OneWay.java +++ b/src/jalview/ws/EnfinEnvision2OneWay.java @@ -1,5 +1,19 @@ -/** +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.ws; @@ -11,6 +25,7 @@ import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.util.GroupUrlLink; +import java.awt.Component; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -36,89 +51,130 @@ import org.xml.sax.helpers.DefaultHandler; /** * Lightweight runnable to discover dynamic 'one way' group URL services + * * @author JimP - * + * */ -public class EnfinEnvision2OneWay extends DefaultHandler implements Runnable,WSMenuEntryProviderI +public class EnfinEnvision2OneWay extends DefaultHandler implements + Runnable, WSMenuEntryProviderI { - private static EnfinEnvision2OneWay groupURLLinksGatherer=null; - public static EnfinEnvision2OneWay getInstance() { - if (groupURLLinksGatherer==null) { + private static EnfinEnvision2OneWay groupURLLinksGatherer = null; + + public static EnfinEnvision2OneWay getInstance() + { + if (groupURLLinksGatherer == null) + { groupURLLinksGatherer = new EnfinEnvision2OneWay(); } return groupURLLinksGatherer; } - private void waitForCompletion() { + + private void waitForCompletion() + { if (groupURLLinksGatherer.isRunning()) { - // wait around and show a visual delay indicator - Cursor oldCursor = Desktop.instance.getCursor(); - Desktop.instance.setCursor(new Cursor(Cursor.WAIT_CURSOR)); - while (groupURLLinksGatherer.isRunning()) - { - try { - Thread.sleep(100); - } catch (InterruptedException e ){}; + // wait around and show a visual delay indicator + Cursor oldCursor = Desktop.instance.getCursor(); + Desktop.instance.setCursor(new Cursor(Cursor.WAIT_CURSOR)); + while (groupURLLinksGatherer.isRunning()) + { + try + { + Thread.sleep(100); + } catch (InterruptedException e) + { + } + ; + } + Desktop.instance.setCursor(oldCursor); } - Desktop.instance.setCursor(oldCursor); - } } - public Vector getEnvisionServiceGroupURLS() { + + public Vector getEnvisionServiceGroupURLS() + { waitForCompletion(); return groupURLLinks; } + /** - * indicate if + * indicate if */ - private static String BACKGROUND="BACKGROUNDPARAM"; + private static String BACKGROUND = "BACKGROUNDPARAM"; + /** - * contains null strings or one of the above constants - indicate if this URL is a special case. + * contains null strings or one of the above constants - indicate if this URL + * is a special case. */ private Vector additionalPar = new Vector(); + /** * the enfin service URL */ - private String enfinService=null; - private String description=null; + private String enfinService = null; + + private String description = null; + private String wfname; - /* (non-Javadoc) - * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String) + + /* + * (non-Javadoc) + * + * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, + * java.lang.String, java.lang.String) */ public void endElement(String uri, String localName, String qName) throws SAXException { - -// System.err.println("End element: : '"+uri+" "+localName+" "+qName); - if (qName.equalsIgnoreCase("workflow") && description!=null && description.length()>0) + + // System.err.println("End element: : '"+uri+" "+localName+" "+qName); + if (qName.equalsIgnoreCase("workflow") && description != null + && description.length() > 0) { - //groupURLLinks.addElement("UNIPROT|EnVision2|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=Default&datasetName=JalviewIDs$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,"); - //groupURLLinks.addElement("Seqs|EnVision2|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=Default&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCES=/([A-Za-z]+)+/=$&inputType=1|,"); - System.err.println("Adding entry for "+wfname+" "+description); - if (wfname.toLowerCase().indexOf("funcnet")==-1) + // groupURLLinks.addElement("UNIPROT|EnVision2|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=Default&datasetName=JalviewIDs$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,"); + // groupURLLinks.addElement("Seqs|EnVision2|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=Default&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCES=/([A-Za-z]+)+/=$&inputType=1|,"); + System.err.println("Adding entry for " + wfname + " " + description); + if (wfname.toLowerCase().indexOf("funcnet") == -1) { groupURLdescr.addElement(description); groupURLdescr.addElement(description); - groupURLLinks.addElement(wfname+"|"+"http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow="+wfname+"&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,"); // #"+description+"#"); - groupURLLinks.addElement(wfname+"|"+"http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow="+wfname+"&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCES=/([A-Za-z]+)+/=$&inputType=1|,"); // #"+description+"#"); + groupURLLinks + .addElement(wfname + + "|" + + "http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=" + + wfname + + "&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,"); // #"+description+"#"); + groupURLLinks + .addElement(wfname + + "|" + + "http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow=" + + wfname + + "&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCES=/([A-Za-z]+)+/=$&inputType=1|,"); // #"+description+"#"); } } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) */ public void characters(char[] ch, int start, int length) throws SAXException { - if (description!=null) { - for (int i=start; iend) + // we skip sequences which do not have any non-gaps in the region of + // interest + if (start > end) { continue; } // just collect ids from dataset sequence - // TODO: check if IDs collected from selecton group intersects with the current selection, too + // TODO: check if IDs collected from selecton group intersects with the + // current selection, too SequenceI sqi = seqs[sq]; - while (sqi.getDatasetSequence()!=null) { - sqi = sqi.getDatasetSequence(); } + while (sqi.getDatasetSequence() != null) + { + sqi = sqi.getDatasetSequence(); + } DBRefEntry[] dbr = sqi.getDBRef(); - if (dbr!=null && dbr.length>0) + if (dbr != null && dbr.length > 0) { - for (int d=0;d0) + if (linkMenus[m] != null + && linkMenus[m].getMenuComponentCount() > 0) { groupLinksMenu.add(linkMenus[m]); } } - + return groupLinksMenu; } return null; } private boolean createAndAddLinks(JMenu[] linkMenus, boolean usingNames, - GroupUrlLink urlLink, String label, String ltarget, String descr, String[] ids, - String[] seqstr) + GroupUrlLink urlLink, String label, String ltarget, String descr, + String[] ids, String[] seqstr) { - Object[] urlset = urlLink.makeUrlStubs(ids,seqstr, "FromJalview"+System.currentTimeMillis(),false); - if (urlset!=null) + Object[] urlset = urlLink.makeUrlStubs(ids, seqstr, "FromJalview" + + System.currentTimeMillis(), false); + if (urlset != null) { int type = urlLink.getGroupURLType() & 3; - //System.out.println(urlLink.getGroupURLType() +" "+((String[])urlset[3])[0]); + // System.out.println(urlLink.getGroupURLType() + // +" "+((String[])urlset[3])[0]); // first two bits ofurlLink type bitfield are sequenceids and sequences // TODO: FUTURE: ensure the groupURL menu structure can be generalised - addshowLink(linkMenus[type], label + (((type & 1)==1) ? ("("+(usingNames ? "Names" : ltarget)+")") : ""), descr, urlLink, urlset); + addshowLink(linkMenus[type], label + + " " + + (usingNames ? (((type & 1) == 1) ? "(Names)" : "") : ("(" + + ltarget + ")")), descr, urlLink, urlset); return true; } return false; } - /// end of stuff copied from popupmenu - public void attachWSMenuEntry(final JMenu wsmenu, final AlignFrame alignFrame) + + // / end of stuff copied from popupmenu + public void attachWSMenuEntry(final JMenu wsmenu, + final AlignFrame alignFrame) { final JMenu enfinServiceMenu = new JMenu("Envision 2"); wsmenu.add(enfinServiceMenu); enfinServiceMenu.setEnabled(false); wsmenu.addMenuListener(new MenuListener() - { - // this listener remembers when the menu was first selected, and - // doesn't rebuild the session list until it has been cleared and - // reselected again. - boolean refresh = true; + { + // this listener remembers when the menu was first selected, and + // doesn't rebuild the session list until it has been cleared and + // reselected again. + boolean refresh = true; - public void menuCanceled(MenuEvent e) - { - refresh = true; - } + public void menuCanceled(MenuEvent e) + { + refresh = true; + } - public void menuDeselected(MenuEvent e) - { - refresh = true; - } + public void menuDeselected(MenuEvent e) + { + refresh = true; + } - public void menuSelected(MenuEvent e) + public void menuSelected(MenuEvent e) + { + if (refresh) { - if (refresh) + try { - try { - buildGroupLinkMenu(enfinServiceMenu,alignFrame); - } catch (OutOfMemoryError ex) - { - Cache.log.error("Out of memory when calculating the Envision2 links.",ex); - enfinServiceMenu.setEnabled(false); - } - refresh = false; + buildGroupLinkMenu(enfinServiceMenu, alignFrame); + } catch (OutOfMemoryError ex) + { + Cache.log.error( + "Out of memory when calculating the Envision2 links.", + ex); + enfinServiceMenu.setEnabled(false); } + refresh = false; } - }); - - + } + }); + } }