diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java b/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java index 973a779d7078bac185831fd34d2292ed6ad6a107..2daccd386066abe3e3c31b5802303494787feb11 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java +++ b/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java @@ -1151,22 +1151,33 @@ public class GeneUtils return 0; } + public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene) + { + checkGeneBoundary(chado_gene, true); + } + + protected static Range checkTranscriptBoundary( + final uk.ac.sanger.artemis.Feature transcript, + final ChadoCanonicalGene chado_gene) + { + return checkTranscriptBoundary(transcript, chado_gene, true); + } + /** * Adjust transcript and gene boundaries * @param chado_gene */ - public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene) + public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene, final boolean changeEmblFeature) { - final List transcripts = chado_gene.getTranscripts(); + final List<Feature> transcripts = chado_gene.getTranscripts(); int gene_start = Integer.MAX_VALUE; int gene_end = -1; Range range; - for(int i=0; i<transcripts.size(); i++) + for(Feature transcript: transcripts) { - final Feature transcript = (Feature)transcripts.get(i); range = checkTranscriptBoundary( - (uk.ac.sanger.artemis.Feature)transcript.getUserData(), chado_gene); + (uk.ac.sanger.artemis.Feature)transcript.getUserData(), chado_gene, changeEmblFeature); if(range != null && range.getStart() < gene_start) gene_start = range.getStart(); if(range != null && range.getEnd() > gene_end) @@ -1176,24 +1187,26 @@ public class GeneUtils if(gene_end == -1 && gene_start == Integer.MAX_VALUE) return; - setLocation(chado_gene.getGene(), gene_start, gene_end); + setLocation(chado_gene.getGene(), gene_start, gene_end, changeEmblFeature); } - /** * Check and adjust transcript boundary * @param transcript * @param chado_gene + * @param changeEmblFeature + * @return */ - public static Range checkTranscriptBoundary( + protected static Range checkTranscriptBoundary( final uk.ac.sanger.artemis.Feature transcript, - final ChadoCanonicalGene chado_gene) + final ChadoCanonicalGene chado_gene, + final boolean changeEmblFeature) { final List transcripts = chado_gene.getTranscripts(); if(transcripts.contains(transcript.getEmblFeature())) { - checkProteinBoundary(transcript.getEmblFeature(), chado_gene); + checkProteinBoundary(transcript.getEmblFeature(), chado_gene, changeEmblFeature); final Set children = chado_gene.getChildren(transcript.getEmblFeature()); int transcript_start = Integer.MAX_VALUE; @@ -1215,7 +1228,7 @@ public class GeneUtils return null; return setLocation(transcript.getEmblFeature(), - transcript_start, transcript_end); + transcript_start, transcript_end, changeEmblFeature); } else JOptionPane.showMessageDialog(null, @@ -1230,7 +1243,8 @@ public class GeneUtils * @param chado_gene */ private static void checkProteinBoundary(final Feature transcript, - final ChadoCanonicalGene chado_gene) + final ChadoCanonicalGene chado_gene, + final boolean changeEmblFeature) { final String transcriptName = getUniqueName(transcript); final Feature protein = chado_gene.getProteinOfTranscript(transcriptName); @@ -1269,7 +1283,8 @@ public class GeneUtils if(pp_start == Integer.MAX_VALUE || pp_end == -1) return; - setLocation(protein, pp_start, pp_end); + + setLocation(protein, pp_start, pp_end, changeEmblFeature); } /** @@ -1436,9 +1451,11 @@ public class GeneUtils } } } - + private static Range setLocation(final Feature f, - final int start, final int end) + final int start, + final int end, + final boolean changeEmblFeature) { try { @@ -1447,23 +1464,27 @@ public class GeneUtils ranges.add(range); final Location new_location = new Location(ranges, - f.getLocation().isComplement()); - f.setLocation(new_location); + f.getLocation().isComplement()); + + if(changeEmblFeature) + f.setLocation(new_location); + else + ((uk.ac.sanger.artemis.Feature)f.getUserData()).setLocation(new_location); return range; } - catch(OutOfRangeException e) + catch (OutOfRangeException e) { // TODO Auto-generated catch block e.printStackTrace(); } - catch(ReadOnlyException e) + catch (ReadOnlyException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } - + public static String getUniqueName(final Feature feature) { try