/*
The Broad Institute
SOFTWARE COPYRIGHT NOTICE AGREEMENT
This software and its documentation are copyright (2006) by the
Broad Institute/Massachusetts Institute of Technology. All rights are
reserved.
This software is supplied without any warranty or guaranteed support
whatsoever. Neither the Broad Institute nor MIT can be responsible for its
use, misuse, or functionality.
*/
package calhoun.gebo.internal.db;
import java.awt.Color;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.prefs.Preferences;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;
import calhoun.bean.AnalysisRun;
import calhoun.bean.Repeat;
import calhoun.bean.RepeatCluster;
import calhoun.gebo.api.AlignmentManager;
import calhoun.gebo.api.EditableTrackManager;
import calhoun.gebo.db.DataAccessException;
import calhoun.gebo.db.DynamicPropertyCriterion;
import calhoun.gebo.db.EditManager;
import calhoun.gebo.model.Alignment;
import calhoun.gebo.model.AlignmentTrack;
import calhoun.gebo.model.AnnotatedGene;
import calhoun.gebo.model.Criterion;
import calhoun.gebo.model.CurationFlag;
import calhoun.gebo.model.Feature;
import calhoun.gebo.model.FeatureLink;
import calhoun.gebo.model.FeatureTrack;
import calhoun.gebo.model.Helpful;
import calhoun.gebo.model.Identified;
import calhoun.gebo.model.Property;
import calhoun.gebo.model.RangeTrack;
import calhoun.gebo.model.RetirementCode;
import calhoun.gebo.model.Segment;
import calhoun.gebo.model.Sequence;
import calhoun.gebo.model.SequenceGroup;
import calhoun.gebo.model.SimpleSegment;
import calhoun.gebo.model.SortCriterion;
import calhoun.gebo.model.Strand;
import calhoun.gebo.model.SubFeature;
import calhoun.gebo.model.TranscriptType;
import calhoun.gebo.util.C;
import calhoun.gebo.util.Informer;
import calhoun.gebo.util.P;
import calhoun.gebo.util.Q;
import calhoun.gebo.util.S;
import calhoun.gebo.util.U;
import calhoun.gebo.util.W;
/**
* The TrackManager for the Calhoun Oracle Database.
*
* @author Reinhard Engels
*/
public class CalhounTrackManager extends CalhounGuts implements
AlignmentManager, EditableTrackManager, Helpful {
private static Informer I = new Informer(CalhounTrackManager.class);
// /////////////////////////////////////////////////////////////////////////
// Constructors.
// /////////////////////////////////////////////////////////////////////////
/**
* Creates a new CalhounTrackManager instance.
*
* @param connection
* a Connection value
*/
private CalhounTrackManager() {
super("CalhounTM", "Calhoun");
m_columnPositionByName.put(AP.FEATURE_ID, new Integer(1));
m_columnPositionByName.put(AP.START, new Integer(2));
m_columnPositionByName.put(AP.STOP, new Integer(3));
m_columnPositionByName.put(AP.LABEL, new Integer(4));
m_columnPositionByName.put(AP.STRAND, new Integer(5));
loadVirtualTrackIdsByTrackId();
}
// /////////////////////////////////////////////////////////////////////////
// Static Factory Methods.
// /////////////////////////////////////////////////////////////////////////
public static CalhounTrackManager getInstance() {
if (INSTANCE == null) {
INSTANCE = new CalhounTrackManager();
}
return INSTANCE;
}
// AlignmentManager Interface.
public Property[] getProperties(Alignment alignment) {
return new Property[] {};
}
public String[] getPropertyKeys() {
return new String[] {};
}
public int getMaxOverlaps() {
return m_maxOverlaps;
}
public void setMaxOverlaps(int maxOverlaps) {
m_maxOverlaps = maxOverlaps;
}
public static List getNucleotideAlignmentSpanTracks(
Sequence sequence) {
List tracks = new ArrayList();
for (FeatureTrack t : sequence.getTracks()) {
if (t instanceof CalhounTrack) {
CalhounTrack ct = (CalhounTrack) t;
if (ct.getTrackType().isAlignmentSpan()
&& ct.getOntologyTerm().getId().equals("348")) {
tracks.add(ct);
}
}
}
return tracks;
}
public AlignmentTrack loadAlignmentUri(String uri, Segment reference,
Segment query, int order) throws Exception {
throw new Exception("Calhoun alignment uris not yet supported.\n"
+ "Unable to find matching alingment track for uri:\n" + uri);
}
/**
* Not a great place to put this...
*/
public static List getAlignmentTracks(Segment reference,
List