/* ChadoTransaction
*
* created: July 2006
*
* This file is part of Artemis
*
* Copyright (C) 2006 Genome Research Limited
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package uk.ac.sanger.artemis.chado;
import java.sql.Timestamp;
import uk.ac.sanger.artemis.io.GFFStreamFeature;
import uk.ac.sanger.artemis.util.DatabaseDocument;
/**
* Store information about a SQL transaction e.g UPDATE, INSERT, DELETE
* a feature, featureloc, featureprop, feature_dbxref, feature_synonym.
**/
public class ChadoTransaction
{
//
// FEATURE TRANSACTIONS
/** update statement */
public static final int UPDATE = 1;
/** insert statement */
public static final int INSERT = 2;
/** delete statement */
public static final int DELETE = 3;
/** type of statement e.g. UPDATE, INSERT, DELETE, ... */
protected int type;
/** feature unique name */
protected String old_uniquename;
private String uniquename;
/** last time feature was modified */
private Timestamp lastmodified;
/** the feature object */
private Object feature_obj;
/** the feature key */
private String featureKey;
private GFFStreamFeature gff_feature;
private String logComment;
/**
* Create a transaction to represent a single insert, delete or
* update.
* @param type the type of transcation, e.g. insert, delete, update.
* @param feature_obj the Feature
, FeatureLoc
,
* FeatureProp
, FeatureRelationship
, FeatureDbxref
,
* or FeatureSynonym
.
* @param lastmodified the last modified timestamp
* @param gff_feature the artemis GFF feature effected
*/
public ChadoTransaction(final int type,
final Object feature_obj,
final Timestamp lastmodified,
final GFFStreamFeature gff_feature,
final String featureKey,
final String logComment)
{
this.type = type;
this.lastmodified = lastmodified;
this.feature_obj = feature_obj;
this.gff_feature = gff_feature;
this.logComment = logComment;
if(featureKey != null &&
featureKey.equals(DatabaseDocument.EXONMODEL))
this.featureKey = "exon";
else
this.featureKey = featureKey;
}
/**
* Copy this transaction
* @return
*/
public ChadoTransaction copy()
{
final ChadoTransaction tsn = new ChadoTransaction(getType(), getFeatureObject(),
getLastModified(), getGff_feature(),
getFeatureKey(), logComment);
if(uniquename != null)
tsn.setUniquename(uniquename);
tsn.setOldUniquename(old_uniquename);
return tsn;
}
/**
* The type of SQL transaction
* @return the transaction type
*/
public int getType()
{
return type;
}
public String getTypeAsString()
{
if(type == UPDATE)
return "UPDATE";
else if(type == INSERT)
return "INSERT";
else if(type == DELETE)
return "DELETE";
return "";
}
/**
* Set the old uniquename, used when updating the uniquename
* @param uniquename
*/
public void setOldUniquename(final String old_uniquename)
{
this.old_uniquename = old_uniquename;
}
/**
* Get the unique names of features to change.
*/
public String getOldUniquename()
{
return old_uniquename;
}
/**
* Set a uniquename, e.g. to be used when changing a featureprop
* @param uniquename
*/
public void setUniquename(final String uniquename)
{
this.uniquename = uniquename;
}
public String getUniquename()
{
if(uniquename != null)
return uniquename;
if(getGff_feature() == null)
return null;
return (String)
getGff_feature().getQualifierByName("ID").getValues().get(0);
}
/**
* Get the last time modified time stamp.
* @return the Timestamp
*/
public Timestamp getLastModified()
{
return this.lastmodified;
}
public Object getFeatureObject()
{
return feature_obj;
}
public GFFStreamFeature getGff_feature()
{
return gff_feature;
}
public String getFeatureKey()
{
return featureKey;
}
public String getLogComment()
{
String key = "";
if(getFeatureKey() != null)
key = " KEY=" + getFeatureKey();
return "["+getTypeAsString()+"] "+logComment+key;
}
}