package org.seqcode.data.seqdata;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
* Simple pairing of a SeqLocator with the SeqExpt common to all replicates
* @author mahony
*
*/
public class SeqLocatorMatchedAligns implements Comparable<SeqLocatorMatchedAligns>{
public List<SeqExpt> expts=null;
public Collection<SeqAlignment> aligns=null;
public SeqLocator locator=null;
public SeqLocatorMatchedAligns(Collection<SeqAlignment> a, SeqLocator l) throws SeqLMENotReplicatesException{
aligns=a;
locator = l;
expts = new ArrayList<SeqExpt>();
Set<SeqExpt> tmpExpts = new TreeSet<SeqExpt>();
if(a!=null && !a.isEmpty()){
for(SeqAlignment align : aligns)
expts.add(align.getExpt());
expts.addAll(tmpExpts);
for(SeqExpt expt: expts){
if(!expts.get(0).isReplicateOf(expt))
throw new SeqLMENotReplicatesException("SeqLocatorMatchedAligns: input experiments are not replicates: "+locator.toString());
}
}
}
public int hashCode() {
return locator.hashCode();
}
public String toString(){return locator.toString();}
public int compareTo(SeqLocatorMatchedAligns o) {
return locator.compareTo(o.locator);
}
public boolean equals(Object o) {
if(!(o instanceof SeqLocatorMatchedAligns)) { return false; }
SeqLocatorMatchedAligns le =(SeqLocatorMatchedAligns)o;
if(!locator.getExptName().equals(le.locator.getExptName())) { return false; }
if(locator.getReplicates().size() != le.locator.getReplicates().size()) { return false; }
for(String rep : locator.getReplicates()) {
if(!le.locator.getReplicates().contains(rep)) { return false; }
}
if(!locator.getAlignName().equals(le.locator.getAlignName())) { return false; }
for(SeqAlignment a : aligns)
if(!le.aligns.contains(a))
return false;
return true;
}
public class SeqLMENotReplicatesException extends Exception{
public SeqLMENotReplicatesException(String message) {
super(message);
}
}
}