X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=5a9e382369288c89e3bb84a89a615deb9a139162;hb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;hp=d1bccd8643f5219bfb7378e7652fb6639db0a082;hpb=362f2db1b01f3562784864a1d6ac5f7b9be0a18a;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index d1bccd8..5a9e382 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -1,19 +1,20 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Copyright (C) 2014 The Jalview Authors * * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.structure; @@ -28,37 +29,47 @@ import jalview.datamodel.*; public class StructureSelectionManager { - static IdentityHashMap instances; + static IdentityHashMap instances; StructureMapping[] mappings; /** * debug function - write all mappings to stdout */ - public void reportMapping() { - if (mappings==null) - { - System.err.println("reportMapping: No PDB/Sequence mappings."); - }else{ - System.err.println("reportMapping: There are "+mappings.length+" mappings."); - for (int m=0;m(); + instances = new java.util.IdentityHashMap(); } - StructureSelectionManager instance=instances.get(context); - if (instance==null) + StructureSelectionManager instance = instances.get(context); + if (instance == null) { - instances.put(context, instance=new StructureSelectionManager()); + instances.put(context, instance = new StructureSelectionManager()); } return instance; } @@ -96,6 +107,7 @@ public class StructureSelectionManager /** * register a listener for alignment sequence mouseover events + * * @param svl */ public void addStructureViewerListener(Object svl) @@ -156,12 +168,28 @@ public class StructureSelectionManager String targetChain; for (int s = 0; s < sequence.length; s++) { + boolean infChain = true; if (targetChains != null && targetChains[s] != null) + { + infChain = false; targetChain = targetChains[s]; + } else if (sequence[s].getName().indexOf("|") > -1) { targetChain = sequence[s].getName().substring( sequence[s].getName().lastIndexOf("|") + 1); + if (targetChain.length() > 1) + { + if (targetChain.trim().length() == 0) + { + targetChain = " "; + } + else + { + // not a valid chain identifier + targetChain = ""; + } + } } else targetChain = ""; @@ -173,14 +201,12 @@ public class StructureSelectionManager boolean first = true; for (int i = 0; i < pdb.chains.size(); i++) { - // TODO: re http://issues.jalview.org/browse/JAL-583 : this patch may - // need to be revoked PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); - if (targetChain.length() > 0 && !targetChain.equals(chain.id)) + if (targetChain.length() > 0 && !targetChain.equals(chain.id) + && !infChain) { continue; // don't try to map chains don't match. } - // end of patch for limiting computed mappings // TODO: correctly determine sequence type for mixed na/peptide // structures AlignSeq as = new AlignSeq(sequence[s], @@ -236,7 +262,8 @@ public class StructureSelectionManager // allocate enough slots to store the mapping from positions in // sequence[s] to the associated chain - int[][] mapping = new int[sequence[s].findPosition(sequence[s].getLength()) + 2][2]; + int[][] mapping = new int[sequence[s].findPosition(sequence[s] + .getLength()) + 2][2]; int resNum = -10000; int index = 0; @@ -282,15 +309,16 @@ public class StructureSelectionManager listeners.removeElement(svl); if (svl instanceof SequenceListener) { - for (int i=0;i view_listeners=new Vector(); - public synchronized void sendViewPosition(jalview.api.AlignmentViewPanel source, int startRes, - int endRes, int startSeq, int endSeq) + + Vector view_listeners = new Vector(); + + public synchronized void sendViewPosition( + jalview.api.AlignmentViewPanel source, int startRes, int endRes, + int startSeq, int endSeq) { if (view_listeners != null && view_listeners.size() > 0) { - Enumeration listeners = view_listeners.elements(); + Enumeration listeners = view_listeners + .elements(); while (listeners.hasMoreElements()) { - AlignmentViewPanelListener slis = listeners - .nextElement(); + AlignmentViewPanelListener slis = listeners.nextElement(); if (slis != source) { slis.viewPosition(startRes, endRes, startSeq, endSeq, source); @@ -739,45 +781,58 @@ public class StructureSelectionManager } } } - - public void finalize() throws Throwable { - if (listeners!=null) { + public void finalize() throws Throwable + { + if (listeners != null) + { listeners.clear(); - listeners=null; + listeners = null; } - if (mappingData!=null) + if (mappingData != null) { mappingData.clear(); - mappingData=null; + mappingData = null; } - if (sel_listeners!=null) + if (sel_listeners != null) { sel_listeners.clear(); - sel_listeners=null; + sel_listeners = null; } - if (view_listeners!=null) + if (view_listeners != null) { view_listeners.clear(); - view_listeners=null; + view_listeners = null; } - mappings=null; - seqmappingrefs=null; + mappings = null; + seqmappingrefs = null; } /** * release all references associated with this manager provider + * * @param jalviewLite */ public static void release(StructureSelectionManagerProvider jalviewLite) { - StructureSelectionManager mnger=(instances.get(jalviewLite)); - if (mnger!=null) + // synchronized (instances) { - instances.remove(jalviewLite); - try { - mnger.finalize(); - } catch (Throwable x){}; + if (instances == null) + { + return; + } + StructureSelectionManager mnger = (instances.get(jalviewLite)); + if (mnger != null) + { + instances.remove(jalviewLite); + try + { + mnger.finalize(); + } catch (Throwable x) + { + } + ; + } } }