package ca.bcgsc.abyssexplorer.visualization.picking; import java.util.ArrayList; import java.util.List; import javax.swing.event.ChangeListener; import ca.bcgsc.abyssexplorer.graph.ContigLabel; import ca.bcgsc.abyssexplorer.graph.Edge; import edu.uci.ics.jung.visualization.util.ChangeEventSupport; import edu.uci.ics.jung.visualization.util.DefaultChangeEventSupport; /** * Stores the state of paired-end contigs for * the currently selected single-end contig. * Only supports selection of one paired-end * contig at a time. * * @author Cydney Nielsen * */ public class PairedEndPathState implements ChangeEventSupport { /** * Indicates whether this state should influence the graph renderer */ protected boolean displayActive = true; /** * paired-end contig label */ protected ContigLabel selectedPeLabel; /** * single-end contig members */ protected List selectedMembers; /** * possible paired-end contig labels */ protected List possiblePeLabels; /** * Defines how to communicate with registered listeners */ protected ChangeEventSupport changeSupport = new DefaultChangeEventSupport(this); public int getNumSelectedMembers() { if (selectedMembers == null) { return 0; } else { return selectedMembers.size(); } } /** * Returns the position of the first occurrence * of the input edge in the currently selected * path. * * @param e * @return */ public int getPosition(Edge e) { if (selectedMembers == null) { throw new IndexOutOfBoundsException("Cannot get index position of edge " + e.getLabel() + ". No selected members"); } int index = 0; for (int i=0; i getPossibleLabels() { return possiblePeLabels; } public ContigLabel getSelectedLabel() { return selectedPeLabel; } public List getSelectedMembers() { return selectedMembers; } protected void pick(Edge e) { if (selectedMembers == null) { selectedMembers = new ArrayList(); } selectedMembers.add(e); } protected void pick(List edges) { if (selectedMembers == null) { selectedMembers = new ArrayList(edges.size()); } for (Edge e: edges) { pick(e); } } public void clear() { if (selectedMembers != null) { selectedMembers.clear(); } } public boolean isDisplayActive() { return displayActive; } public boolean isPicked(Edge e) { if (selectedMembers == null) { return false; } else { return selectedMembers.contains(e); } } public void setDisplayActive(boolean b) { displayActive = b; } public void setPossibleLabels(ContigLabel p) { if (possiblePeLabels == null) { possiblePeLabels = new ArrayList(1); } else { possiblePeLabels.clear(); } possiblePeLabels.add(p); } public void setPossibleLabels(List p) { possiblePeLabels = p; } public void setSelection(ContigLabel l, List m) { clear(); selectedPeLabel = l; pick(m); fireStateChanged(); } public void addChangeListener(ChangeListener l) { changeSupport.addChangeListener(l); } public void fireStateChanged() { changeSupport.fireStateChanged(); } public ChangeListener[] getChangeListeners() { return changeSupport.getChangeListeners(); } public void removeChangeListener(ChangeListener l) { changeSupport.removeChangeListener(l); } }