diff --git a/uk/ac/sanger/artemis/chado/ArtemisUtils.java b/uk/ac/sanger/artemis/chado/ArtemisUtils.java index 82e76f48647d6d58dff890c731eb10b9681c309a..8fb15c6424b7436ab00ea23f760449fc1c6864f3 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 4f5617230fdb5b551173993f6a2c053ee5660526..d168e20820d6951065170e6a08155d9f425128ad 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 2dd48b219a0581955df22bd90ca48e89bb66e8e5..5053caaae2c82cedda361fa559f51adcf8ed31c5 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;