From 562e1e737075035e279c9bce91ea663e04a7568a Mon Sep 17 00:00:00 2001 From: jprocter Date: Sun, 8 Jul 2012 15:24:05 +0100 Subject: [PATCH] a209409239 (JAL-976 - add support for storing service parameter sets in project) --- src/jalview/gui/Jalview2XML.java | 98 +++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 45bab7c..d9aca36 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -38,6 +38,13 @@ import jalview.schemabinding.version2.*; import jalview.schemes.*; 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. @@ -457,6 +464,7 @@ public class Jalview2XML } JSeq jseq; + Set calcIdSet=new HashSet(); // SAVE SEQUENCES String id = ""; @@ -790,7 +798,6 @@ public class Jalview2XML } } } - // SAVE ANNOTATIONS /** * store forward refs from an annotationRow to any groups @@ -876,6 +883,7 @@ public class Jalview2XML if (aa[i].getCalcId()!=null) { + calcIdSet.add(aa[i].getCalcId()); an.setCalcId(aa[i].getCalcId()); } @@ -1228,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); @@ -1259,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()); + 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 { + service.getParamStore().parseServiceParameterFile(calcIdParam.getName(), calcIdParam.getDescription(), calcIdParam.getServiceURL(), calcIdParam.getParameters()); + } 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 -- 1.7.10.2