From d19c3f1bc3b1734775ff616ca29320d14d8b6026 Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Tue, 1 Sep 2009 11:19:10 +0000 Subject: [PATCH] changes to handle ortho/paralogs that do not have a match feature but just have a feature_relationship link git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@11678 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- uk/ac/sanger/artemis/chado/ArtemisUtils.java | 16 ++++- .../chado/ChadoTransactionManager.java | 63 ++++++++++++++++--- .../chado/ClusterLazyQualifierValue.java | 4 +- 3 files changed, 72 insertions(+), 11 deletions(-) diff --git a/uk/ac/sanger/artemis/chado/ArtemisUtils.java b/uk/ac/sanger/artemis/chado/ArtemisUtils.java index 82e76f486..8fb15c642 100644 --- a/uk/ac/sanger/artemis/chado/ArtemisUtils.java +++ b/uk/ac/sanger/artemis/chado/ArtemisUtils.java @@ -518,7 +518,8 @@ public class ArtemisUtils * @return */ protected static Feature getMatchFeatureWithFeatureRelations(final String uniqueName, - final String qualifierName, String qualifierString, final GFFStreamFeature feature) + final String qualifierName, String qualifierString, final GFFStreamFeature feature, + final boolean isDelete) { final int queryFeatureId; @@ -559,7 +560,18 @@ public class ArtemisUtils String matchName = getString(qualifierStrings, "match_name"); String clusterName = getString(qualifierStrings, "cluster_name"); if(!matchName.equals("")) - matchFeature.setUniqueName(matchName.substring(11)); + { + // there is no match feature just a direct feature_relationship link + if(link.equals(matchName.substring(11))) + { + if(isDelete) + return null; + else + matchFeature.setUniqueName("ORTHO_PARA_" + uniqueName + "_" + link); + } + else + matchFeature.setUniqueName(matchName.substring(11)); + } else if(!clusterName.equals("")) matchFeature.setUniqueName(clusterName.substring(13)); else diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java index 4f5617230..d168e2082 100644 --- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java +++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java @@ -98,7 +98,7 @@ public class ChadoTransactionManager org.apache.log4j.Logger.getLogger(ChadoTransactionManager.class); public static boolean addSegments = true; - private Vector sql = new Vector(); + private Vector<ChadoTransaction> sql = new Vector<ChadoTransaction>(); /** GFF3 predefined tags, i.e. not feature_prop's */ private static String reserved_tags[] = @@ -1644,13 +1644,21 @@ public class ChadoTransactionManager org.gmod.schema.sequence.Feature matchFeature = ArtemisUtils.getMatchFeatureWithFeatureRelations(uniquename, qualifierName, - qualifierString, feature); + qualifierString, feature, true); - tsn = new ChadoTransaction(ChadoTransaction.DELETE, - matchFeature, - null, (GFFStreamFeature)null, feature.getKey().getKeyString(), - qualifierName.toUpperCase()+ ": ID="+uniquename+" "+qualifierString); - sql.add(tsn); + if(matchFeature == null) + { + logger4j.debug("NO MATCH FEATURE FOUND. DELETE FEATURE_RELATIONSHIP"); + deleteFeatureRelationShip(qualifierName, qualifierString, uniquename, feature); + } + else + { + tsn = new ChadoTransaction(ChadoTransaction.DELETE, + matchFeature, + null, (GFFStreamFeature)null, feature.getKey().getKeyString(), + qualifierName.toUpperCase()+ ": ID="+uniquename+" "+qualifierString); + sql.add(tsn); + } } else logger4j.warn("Ignoring reserved tag missing : "+qualifierName); @@ -1839,7 +1847,7 @@ public class ChadoTransactionManager org.gmod.schema.sequence.Feature matchFeature = ArtemisUtils.getMatchFeatureWithFeatureRelations(uniquename, qualifierName, - qualifierString, feature); + qualifierString, feature, false); if(isDuplicate) { @@ -2373,6 +2381,45 @@ public class ChadoTransactionManager return feature_cvterm; } + private void deleteFeatureRelationShip(final String qualifierName, + final String qualifierString, + final String uniquename, + final GFFStreamFeature feature) + { + FeatureRelationship fr = new FeatureRelationship(); + + // orthologous_to or paralogous_to should be retrieved from sequence ontology !! + CvTerm cvterm = DatabaseDocument.getCvTermByCvAndCvTerm(qualifierName, "sequence"); + + org.gmod.schema.sequence.Feature objectFeature = new org.gmod.schema.sequence.Feature(); + objectFeature.setUniqueName(uniquename); + + int index1 = qualifierString.indexOf("link=")+5; + int index2 = qualifierString.indexOf("type="); + String link = qualifierString.substring(index1, index2).trim(); + org.gmod.schema.sequence.Feature subjectFeature = new org.gmod.schema.sequence.Feature(); + subjectFeature.setUniqueName(link); + + fr.setFeatureByObjectId(objectFeature); + fr.setFeatureBySubjectId(subjectFeature); + fr.setCvTerm(cvterm); + + ChadoTransaction tsn = new ChadoTransaction(ChadoTransaction.DELETE, + fr, + null, (GFFStreamFeature)null, feature.getKey().getKeyString(), + qualifierName.toUpperCase()+ ": ID="+uniquename+" "+qualifierString); + sql.add(tsn); + + + fr.setFeatureByObjectId(subjectFeature); + fr.setFeatureBySubjectId(objectFeature); + tsn = new ChadoTransaction(ChadoTransaction.DELETE, + fr, + null, (GFFStreamFeature)null, feature.getKey().getKeyString(), + qualifierName.toUpperCase()+ ": ID="+uniquename+" "+qualifierString); + sql.add(tsn); + } + public static CvTerm getCvTerm(final String cvTermName, final String cvName, final String definition, final String dbName) diff --git a/uk/ac/sanger/artemis/chado/ClusterLazyQualifierValue.java b/uk/ac/sanger/artemis/chado/ClusterLazyQualifierValue.java index 2dd48b219..5053caaae 100644 --- a/uk/ac/sanger/artemis/chado/ClusterLazyQualifierValue.java +++ b/uk/ac/sanger/artemis/chado/ClusterLazyQualifierValue.java @@ -204,7 +204,9 @@ public class ClusterLazyQualifierValue implements LazyQualifierValue String product = getProduct(matchFeature); if(product != null) - value = value.concat("; product="+product); + value = value.concat(";product="+product); + + value = value.concat(";match_name="+matchFeature.getUniqueName()); } continue; -- GitLab