X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=08deba4b501cff24acebca5c6f13452b09817875;hb=4be05f596362591c5758f2f7a6552956f692ca3b;hp=52f66e84d7025a518fa47650ce75635a19b77951;hpb=b81d4d7d46ea8b1c89df086fb847baab6b69d427;p=jalview.git diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 52f66e8..08deba4 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -1,18 +1,18 @@ /* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle - * + * * This file is part of Jalview. - * + * * Jalview is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License + * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * Jalview 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 + * + * Jalview 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 Jalview. If not, see . */ package jalview.gui; @@ -29,7 +29,6 @@ import javax.swing.*; import org.exolab.castor.xml.*; -import uk.ac.vamsas.objects.utils.MapList; import jalview.bin.Cache; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; @@ -37,17 +36,23 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.schemabinding.version2.*; import jalview.schemes.*; -import jalview.structure.StructureSelectionManager; import jalview.util.Platform; import jalview.util.jarInputStreamProvider; +import jalview.ws.jws2.AAConsClient; +import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.jws2.dm.AAConsSettings; +import jalview.ws.jws2.jabaws2.Jws2Instance; +import jalview.ws.params.ArgumentI; +import jalview.ws.params.AutoCalcSetting; +import jalview.ws.params.WsParamSetI; /** * Write out the current jalview desktop state as a Jalview XML stream. - * + * * Note: the vamsas objects referred to here are primitive versions of the * VAMSAS project schema elements - they are not the same and most likely never * will be :) - * + * * @author $author$ * @version $Revision: 1.134 $ */ @@ -55,7 +60,7 @@ public class Jalview2XML { /** * create/return unique hash string for sq - * + * * @param sq * @return new or existing unique string for sq */ @@ -261,7 +266,7 @@ public class Jalview2XML /** * Writes a jalview project archive to the given Jar output stream. - * + * * @param jout */ public void SaveState(JarOutputStream jout) @@ -402,7 +407,7 @@ public class Jalview2XML /** * create a JalviewModel from an algnment view and marshall it to a * JarOutputStream - * + * * @param ap * panel to create jalview model for * @param fileName @@ -459,6 +464,7 @@ public class Jalview2XML } JSeq jseq; + Set calcIdSet=new HashSet(); // SAVE SEQUENCES String id = ""; @@ -792,7 +798,6 @@ public class Jalview2XML } } } - // SAVE ANNOTATIONS /** * store forward refs from an annotationRow to any groups @@ -842,6 +847,7 @@ public class Jalview2XML an.setCentreColLabels(aa[i].centreColLabels); an.setScaleColLabels(aa[i].scaleColLabel); an.setShowAllColLabels(aa[i].showAllColLabels); + an.setBelowAlignment(aa[i].belowAlignment); if (aa[i].graph > 0) { @@ -874,6 +880,13 @@ public class Jalview2XML { an.setScore(aa[i].getScore()); } + + if (aa[i].getCalcId()!=null) + { + calcIdSet.add(aa[i].getCalcId()); + an.setCalcId(aa[i].getCalcId()); + } + AnnotationElement ae; if (aa[i].annotations != null) { @@ -1157,11 +1170,11 @@ public class Jalview2XML } // Make sure we save none displayed feature settings - Enumeration en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours - .keys(); - while (en.hasMoreElements()) + Iterator en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours + .keySet().iterator(); + while (en.hasNext()) { - String key = en.nextElement().toString(); + String key = en.next().toString(); if (settingsAdded.contains(key)) { continue; @@ -1182,11 +1195,11 @@ public class Jalview2XML fs.addSetting(setting); settingsAdded.addElement(key); } - en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keys(); + en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keySet().iterator(); Vector groupsAdded = new Vector(); - while (en.hasMoreElements()) + while (en.hasNext()) { - String grp = en.nextElement().toString(); + String grp = en.next().toString(); if (groupsAdded.contains(grp)) { continue; @@ -1223,6 +1236,15 @@ public class Jalview2XML } } } + if (calcIdSet.size()>0) + { + for (String calcId:calcIdSet) + { + if (calcId.trim().length()>0) { + view.addCalcIdParam(createCalcIdParam(calcId, av)); + } + } + } jms.addViewport(view); @@ -1254,6 +1276,85 @@ public class Jalview2XML return object; } + private CalcIdParam createCalcIdParam(String calcId, AlignViewport av) + { + AutoCalcSetting settings = av.getCalcIdSettingsFor(calcId); + if (settings != null) + { + CalcIdParam vCalcIdParam = new CalcIdParam(); + vCalcIdParam.setCalcId(calcId); + vCalcIdParam.addServiceURL(settings.getServiceURI()); + // generic URI allowing a third party to resolve another instance of the + // service used for this calculation + for (String urls:settings.getServiceURLs()) + { + vCalcIdParam.addServiceURL(urls); + } + vCalcIdParam.setVersion("1.0"); + if (settings.getPreset() != null) + { + WsParamSetI setting = settings.getPreset(); + vCalcIdParam.setName(setting.getName()); + vCalcIdParam.setDescription(setting.getDescription()); + } + else + { + vCalcIdParam.setName(""); + vCalcIdParam.setDescription("Last used parameters"); + } + // need to be able to recover 1) settings 2) user-defined presets or + // recreate settings from preset 3) predefined settings provided by + // service - or settings that can be transferred (or discarded) + vCalcIdParam.setParameters(settings + .getWsParamFile().replace("\n", "|\\n|")); + vCalcIdParam.setAutoUpdate(settings.isAutoUpdate()); + // todo - decide if updateImmediately is needed for any projects. + + return vCalcIdParam; + } + return null; + } + + private boolean recoverCalcIdParam(CalcIdParam calcIdParam, + AlignViewport av) + { + if (calcIdParam.getVersion().equals("1.0")) + { + Jws2Instance service=Jws2Discoverer.getDiscoverer().getPreferredServiceFor(calcIdParam.getServiceURL()); + if (service!=null) + { + WsParamSetI parmSet=null; + try { + parmSet = service.getParamStore().parseServiceParameterFile(calcIdParam.getName(), calcIdParam.getDescription(), calcIdParam.getServiceURL(), calcIdParam.getParameters().replace("|\\n|", "\n")); + } catch (IOException x) + { + warn("Couldn't parse parameter data for "+calcIdParam.getCalcId(), x); + return false; + } + List argList=null; + if (calcIdParam.getName().length()>0) { + parmSet = service.getParamStore().getPreset(calcIdParam.getName()); + if (parmSet!=null) + { + // TODO : check we have a good match with settings in AACons - otherwise we'll need to create a new preset + } + } + else { + argList = parmSet.getArguments(); + parmSet=null; + } + AAConsSettings settings = new AAConsSettings(calcIdParam.isAutoUpdate(), service, parmSet, argList); + av.setCalcIdSettingsFor(calcIdParam.getCalcId(), settings, calcIdParam.isNeedsUpdate()); + } else { + warn("Cannot resolve a service for the parameters used in this project. Try configuring a JABAWS server."); + return false; + } + } + else + throw new Error("Unsupported Version for calcIdparam " + + calcIdParam.toString()); + return false; + } /** * External mapping between jalview objects and objects yielding a valid and * unique object ID string. This is null for normal Jalview project IO, but @@ -1265,7 +1366,7 @@ public class Jalview2XML /** * Construct a unique ID for jvobj using either existing bindings or if none * exist, the result of the hashcode call for the object. - * + * * @param jvobj * jalview data object * @return unique ID for referring to jvobj @@ -1296,7 +1397,7 @@ public class Jalview2XML /** * return local jalview object mapped to ID, if it exists - * + * * @param idcode * (may be null) * @return null or object bound to idcode @@ -1532,7 +1633,7 @@ public class Jalview2XML /** * Load a jalview project archive from a jar file - * + * * @param file * - HTTP URL or filename */ @@ -1576,6 +1677,7 @@ public class Jalview2XML return new jarInputStreamProvider() { + @Override public JarInputStream getJarInputStream() throws IOException { if (_url != null) @@ -1588,6 +1690,7 @@ public class Jalview2XML } } + @Override public String getFilename() { return file; @@ -1600,7 +1703,7 @@ public class Jalview2XML * initialise uniqueSetSuffix, seqRefIds, viewportsAdded and frefedSequence * themselves. Any null fields will be initialised with default values, * non-null fields are left alone. - * + * * @param jprovider * @return */ @@ -1752,6 +1855,7 @@ public class Jalview2XML { javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -1776,7 +1880,7 @@ public class Jalview2XML * Currently (28th Sep 2008) things will go horribly wrong in vamsas document * sync if this is set to true. */ - private boolean updateLocalViews = false; + private final boolean updateLocalViews = false; String loadPDBFile(jarInputStreamProvider jprovider, String pdbId) { @@ -1857,7 +1961,7 @@ public class Jalview2XML /** * Load alignment frame from jalview XML DOM object - * + * * @param object * DOM * @param file @@ -1895,7 +1999,7 @@ public class Jalview2XML if (seqRefIds.get(seqId) != null) { - tmpseqs.add((jalview.datamodel.Sequence) seqRefIds.get(seqId)); + tmpseqs.add(seqRefIds.get(seqId)); multipleView = true; } else @@ -1918,7 +2022,7 @@ public class Jalview2XML hiddenSeqs = new Vector(); } - hiddenSeqs.addElement((jalview.datamodel.Sequence) seqRefIds + hiddenSeqs.addElement(seqRefIds .get(seqId)); } @@ -2261,6 +2365,12 @@ public class Jalview2XML { jaa.graphHeight = an[i].getGraphHeight(); } + if (an[i].hasBelowAlignment()) + { + jaa.belowAlignment=an[i].isBelowAlignment(); + } + jaa.setCalcId(an[i].getCalcId()); + if (jaa.autoCalculated) { autoAlan.add(new JvAnnotRow(i, jaa)); @@ -2601,7 +2711,7 @@ public class Jalview2XML // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, { // seqs_file 2}, boolean[] { // linkAlignPanel,superposeWithAlignpanel}} from hash - Object[] jmoldat = (Object[]) jmolViewIds.get(sviewid); + Object[] jmoldat = jmolViewIds.get(sviewid); ((boolean[]) jmoldat[3])[0] |= ids[p].getStructureState(s) .hasAlignwithAlignPanel() ? ids[p].getStructureState( s).getAlignwithAlignPanel() : false; @@ -2740,7 +2850,7 @@ public class Jalview2XML newFileLoc.append(Platform.escapeString((String) filedat[0])); pdbfilenames.addElement((String) filedat[0]); pdbids.addElement((String) filedat[1]); - seqmaps.addElement((SequenceI[]) ((Vector) filedat[2]) + seqmaps.addElement(((Vector) filedat[2]) .toArray(new SequenceI[0])); newFileLoc.append("\""); cp = ecp + 1; // advance beyond last \" and set cursor so we can @@ -2767,7 +2877,7 @@ public class Jalview2XML newFileLoc.append(((String) filedat[0])); pdbfilenames.addElement((String) filedat[0]); pdbids.addElement((String) filedat[1]); - seqmaps.addElement((SequenceI[]) ((Vector) filedat[2]) + seqmaps.addElement(((Vector) filedat[2]) .toArray(new SequenceI[0])); newFileLoc.append(" \""); newFileLoc.append((String) filedat[0]); @@ -2803,10 +2913,10 @@ public class Jalview2XML // TODO: assemble String[] { pdb files }, String[] { id for each // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, { // seqs_file 2}} from hash - final String[] pdbf = (String[]) pdbfilenames - .toArray(new String[pdbfilenames.size()]), id = (String[]) pdbids + final String[] pdbf = pdbfilenames + .toArray(new String[pdbfilenames.size()]), id = pdbids .toArray(new String[pdbids.size()]); - final SequenceI[][] sq = (SequenceI[][]) seqmaps + final SequenceI[][] sq = seqmaps .toArray(new SequenceI[seqmaps.size()][]); final String fileloc = newFileLoc.toString(), vid = sviewid; final AlignFrame alf = af; @@ -2816,6 +2926,7 @@ public class Jalview2XML { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { AppJmol sview = null; @@ -2862,30 +2973,30 @@ public class Jalview2XML // viewer Object[] filedat = oldFiles.get(id); String pdbFile = (String) filedat[0]; - SequenceI[] seq = (SequenceI[]) ((Vector) filedat[2]) + SequenceI[] seq = ((Vector) filedat[2]) .toArray(new SequenceI[0]); - ((AppJmol) comp).jmb.ssm.setMapping(seq, null, pdbFile, + comp.jmb.ssm.setMapping(seq, null, pdbFile, jalview.io.AppletFormatAdapter.FILE); - ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq); + comp.jmb.addSequenceForStructFile(pdbFile, seq); } // and add the AlignmentPanel's reference to the Jmol view - ((AppJmol) comp).addAlignmentPanel(ap); + comp.addAlignmentPanel(ap); if (useinJmolsuperpos) { - ((AppJmol) comp).useAlignmentPanelForSuperposition(ap); + comp.useAlignmentPanelForSuperposition(ap); } else { - ((AppJmol) comp).excludeAlignmentPanelForSuperposition(ap); + comp.excludeAlignmentPanelForSuperposition(ap); } if (usetoColourbyseq) { - ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap, + comp.useAlignmentPanelForColourbyseq(ap, !jmolColouring); } else { - ((AppJmol) comp).excludeAlignmentPanelForColourbyseq(ap); + comp.excludeAlignmentPanelForColourbyseq(ap); } } } @@ -3061,8 +3172,8 @@ public class Jalview2XML { for (int g = 0; g < al.getGroups().size(); g++) { - jalview.datamodel.SequenceGroup sg = (jalview.datamodel.SequenceGroup) al - .getGroups().elementAt(g); + jalview.datamodel.SequenceGroup sg = al + .getGroups().get(g); if (sg.cs == null) { @@ -3345,7 +3456,7 @@ public class Jalview2XML /** * TODO remove this method - * + * * @param view * @return AlignFrame bound to sequenceSetId from view, if one exists. private * AlignFrame getSkippedFrame(Viewport view) { if (skipList==null) { @@ -3356,7 +3467,7 @@ public class Jalview2XML /** * Check if the Jalview view contained in object should be skipped or not. - * + * * @param object * @return true if view's sequenceSetId is a key in skipList */ @@ -3429,7 +3540,7 @@ public class Jalview2XML } /** - * + * * @param vamsasSeq * sequence definition to create/merge dataset sequence for * @param ds @@ -3447,7 +3558,7 @@ public class Jalview2XML jalview.datamodel.SequenceI dsq = null; if (sq != null && sq.getDatasetSequence() != null) { - dsq = (jalview.datamodel.SequenceI) sq.getDatasetSequence(); + dsq = sq.getDatasetSequence(); } String sqid = vamsasSeq.getDsseqid(); @@ -3553,7 +3664,7 @@ public class Jalview2XML /** * make a new dataset ID for this jalview dataset alignment - * + * * @param dataset * @return */ @@ -3734,15 +3845,16 @@ public class Jalview2XML * flag indicating if hashtables should be cleared on finalization TODO this * flag may not be necessary */ - private boolean _cleartables = true; + private final boolean _cleartables = true; private Hashtable jvids2vobj; /* * (non-Javadoc) - * + * * @see java.lang.Object#finalize() */ + @Override protected void finalize() throws Throwable { // really make sure we have no buried refs left. @@ -3817,13 +3929,13 @@ public class Jalview2XML * finalize and clearSeqRefs will not clear the tables when the Jalview2XML * object goes out of scope. - also populates the datasetIds hashtable with * alignment objects containing dataset sequences - * + * * @param vobj2jv * Map from ID strings to jalview datamodel * @param jv2vobj * Map from jalview datamodel to ID strings - * - * + * + * */ public void setObjectMappingTables(Hashtable vobj2jv, IdentityHashMap jv2vobj) @@ -3895,7 +4007,7 @@ public class Jalview2XML * set the uniqueSetSuffix used to prefix/suffix object IDs for jalview * objects created from the project archive. If string is null (default for * construction) then suffix will be set automatically. - * + * * @param string */ public void setUniqueSetSuffix(String string) @@ -3907,7 +4019,7 @@ public class Jalview2XML /** * uses skipList2 as the skipList for skipping views on sequence sets * associated with keys in the skipList - * + * * @param skipList2 */ public void setSkipList(Hashtable skipList2)