X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fproject%2FJalview2XML.java;h=d80fd86abd19705526623106ded1522d55ef4873;hb=21fcce633c77a700ee488806f60b5e4dc8f6895b;hp=59275cdfa6e23fa476ce852bbb026bfd7d1a423d;hpb=b5889c572976c81f068d9743363695ca84e7d413;p=jalview.git diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index 59275cd..d80fd86 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -4034,9 +4034,17 @@ public class Jalview2XML if (isnewview) { - af = loadViewport(file, jseqs, hiddenSeqs, al, jalviewModel, view, - uniqueSeqSetId, viewId); - // TODO restore autocalc preferences if overridden earlier? + Map originalPreferences = null; + try + { + originalPreferences = setAutocalcPreferences(jalviewModel); + af = loadViewport(file, jseqs, hiddenSeqs, al, jalviewModel, view, + uniqueSeqSetId, viewId); + } finally + { + restoreAutocalcPreferences(originalPreferences); + } + /* * resort annotations to their order in the project * (also sets height and visibility for autocalc'd annotation) @@ -4064,6 +4072,93 @@ public class Jalview2XML } /** + * Restores previously captured preferences (or deletes the preference if the + * map entry value is null) + * + * @param originalPreferences + */ + private void restoreAutocalcPreferences( + Map originalPreferences) + { + for (Entry entry : originalPreferences.entrySet()) + { + String key = entry.getKey(); + String value = entry.getValue(); + if (value == null) + { + Cache.removeProperty(key); + } + else + { + Cache.setProperty(key, value); + } + } + } + + /** + * Inspects saved annotations and temporarily sets preferences for whether + * autocalculated annotations should be created for Conservation, Consensus, + * Quality, Occupancy. Returns a map containing the original values (which may + * be null if property is not set, or is set to null). + * + * @param jalviewModel + * @return + */ + private Map setAutocalcPreferences( + JalviewModel jalviewModel) + { + Map original = Cache.getProperties( + AutoAnnotation.OCCUPANCY.preferenceKey, + AutoAnnotation.CONSERVATION.preferenceKey, + AutoAnnotation.QUALITY.preferenceKey, + AutoAnnotation.CONSENSUS.preferenceKey); + + Cache.setProperty(AutoAnnotation.OCCUPANCY.preferenceKey, FALSE); + Cache.setProperty(AutoAnnotation.CONSERVATION.preferenceKey, FALSE); + Cache.setProperty(AutoAnnotation.QUALITY.preferenceKey, FALSE); + Cache.setProperty(AutoAnnotation.CONSENSUS.preferenceKey, FALSE); + + List sequenceSet = jalviewModel.getVamsasModel() + .getSequenceSet(); + + /* + * expect sequenceSet to have just one entry + */ + if (sequenceSet.size() != 1) + { + System.err.println( + "Unexpected sequenceSet size: " + sequenceSet.size()); + return original; + } + List anns = sequenceSet.get(0).getAnnotation(); + for (Annotation ann : anns) + { + if (ann.isAutoCalculated()) + { + String label = ann.getLabel(); + if (AutoAnnotation.CONSERVATION.label.equals(label)) + { + Cache.setProperty(AutoAnnotation.CONSERVATION.preferenceKey, + TRUE); + } + else if (AutoAnnotation.QUALITY.label.equals(label)) + { + Cache.setProperty(AutoAnnotation.QUALITY.preferenceKey, TRUE); + } + else if (AutoAnnotation.CONSENSUS.label.equals(label)) + { + Cache.setProperty(AutoAnnotation.CONSENSUS.preferenceKey, TRUE); + } + else if (AutoAnnotation.OCCUPANCY.label.equals(label)) + { + Cache.setProperty(AutoAnnotation.OCCUPANCY.preferenceKey, TRUE); + } + } + } + return original; + } + + /** * Instantiate and link any saved RNA (Varna) viewers. The state of the Varna * panel is restored from separate jar entries, two (gapped and trimmed) per * sequence and secondary structure.