import javax.swing.JInternalFrame;
import jalview.bin.Cache;
+import jalview.io.VamsasDatastore;
import org.vamsas.client.UserHandle;
import org.vamsas.client.simpleclient.FileWatcher;
import org.vamsas.client.simpleclient.VamsasArchive;
import org.vamsas.client.simpleclient.VamsasFile;
+import org.vamsas.objects.core.Entry;
import org.vamsas.objects.core.VamsasDocument;
import org.vamsas.test.simpleclient.ArchiveClient;
import org.vamsas.test.simpleclient.ClientDoc;
*
*/
public class VamsasClient extends ArchiveClient {
- Desktop us;
// Cache.preferences for vamsas client session arena
// preferences for check for default session at startup.
// user and organisation stuff.
File sessionPath) {
super(System.getProperty("user.name"),System.getProperty("host.name"), "jalview","2.7",
sessionPath);
- us=jdesktop;
}
public void initial_update() {
Cache.log.info("Jalview loading the Vamsas Session.");
// load in the vamsas archive for the first time
ClientDoc cdoc = this.getUpdateable();
updateJalview(cdoc);
-
- }
- /**
+ JInternalFrame[] frames = Desktop.desktop.getAllFrames();
+
+ if (frames == null)
+ {
+ return;
+ }
+
+ try
+ {
+ //REVERSE ORDER
+ for (int i = frames.length - 1; i > -1; i--)
+ {
+ if (frames[i] instanceof AlignFrame)
+ {
+ AlignFrame af = (AlignFrame) frames[i];
+ af.alignmentChanged();
+ }
+ }
+ } catch (Exception e) {
+ Cache.log.warn("Exception whilst refreshing jalview windows after a vamsas document update.", e);
+ }
+ doUpdate(cdoc);
+ cdoc.closeDoc();
+ }
+ /**
* this will close all windows currently in Jalview.
*
- */
+
protected void closeWindows() {
JInternalFrame[] frames = Desktop.desktop.getAllFrames();
}
}
+
public void get_update(VamsasArchive doc) {
// Close windows - load update.
Cache.log.info("Jalview updating from Vamsas Session.");
}
+ */
+ VamsasClientWatcher watcher=null;
public void push_update() {
+ watchForChange=false;
+ try {
+ Thread.sleep(WATCH_SLEEP);
+ } catch (Exception e) {
+
+ };
+ ClientDoc cdoc = getUpdateable();
+ updateVamsasDocument(cdoc);
+ doUpdate(cdoc);
+ cdoc.closeDoc();
+ cdoc=null;
+ watchForChange=true;
+ if (watcher!=null) {
+ Thread wthread = new Thread() {
+ public void run() {
+ watcher.run();
+ }
+ };
+ wthread.start();
+
+ }
// collect all uncached alignments and put them into the vamsas dataset.
// store them.
Cache.log.info("Jalview updating the Vamsas Session.");
}
public void end_session() {
- // stop any update/watcher thread.
- Cache.log.info("Jalview disconnecting from the Vamsas Session.");
+ // stop any update/watcher thread.
+ watchForChange=false; // this makes any watch(long) loops return.
+ // we should also wait arount for this.WATCH_SLEEP to really make sure the watcher thread has stopped.
+ try {
+ Thread.sleep(WATCH_SLEEP);
+ } catch (Exception e) {
+
+ };
+ Cache.log.info("Jalview disconnecting from the Vamsas Session.");
}
public void updateJalview(ClientDoc cdoc) {
-
+ ensureJvVamsas();
+ VamsasDatastore vds = new VamsasDatastore(cdoc, vobj2jv, jv2vobj, baseProvEntry());
+ vds.updateToJalview();
}
- protected void _updateAlignFrame(ClientDoc cdoc, AlignFrame av) {
-
+ private void ensureJvVamsas() {
+ if (jv2vobj==null) {
+ jv2vobj = new IdentityHashMap();
+ vobj2jv = new Hashtable();
+ }
}
/**
* jalview object binding to VorbaIds
IdentityHashMap jv2vobj = null;
Hashtable vobj2jv = null;
public void updateVamsasDocument(ClientDoc doc) {
- if (jv2vobj==null) {
- jv2vobj = new IdentityHashMap();
- vobj2jv = new Hashtable();
- }
- // wander through frames
+ ensureJvVamsas();
+ VamsasDatastore vds = new VamsasDatastore(doc, vobj2jv, jv2vobj, baseProvEntry());
+ // wander through frames
JInternalFrame[] frames = Desktop.desktop.getAllFrames();
if (frames == null)
try
{
- // Mapping
- // Alignframe.alignment (non-null dataset)==alignment
- // alignframe .alignment (dataset==null) = VAMAS[]
- // Tree.alignment = vamsas[].tree (vamsas[] given by dataset, alignment given by local ref]
-
- Vector shortNames = new Vector();
-
//REVERSE ORDER
for (int i = frames.length - 1; i > -1; i--)
{
{
AlignFrame af = (AlignFrame) frames[i];
- // check if this frame has an associated alignment object ?
-
// update alignment and root from frame.
-
+ vds.storeVAMSAS(af.getViewport());
}
}
}
Cache.log.error("Vamsas Document store exception",e);
}
}
- protected class VamsasClientWatcher extends Thread implements Runnable {
+ private Entry baseProvEntry() {
+ org.vamsas.objects.core.Entry pentry = new org.vamsas.objects.core.Entry();
+ pentry.setUser(this.getProvenanceUser());
+ pentry.setApp(this.getClientHandle().getClientName());
+ pentry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
+ pentry.setAction("created");
+ return pentry;
+ }
+ protected class VamsasClientWatcher extends Thread implements Runnable {
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
VamsasClientWatcher(VamsasClient client) {
this.client = client;
}
+ boolean running=false;
public void run() {
- ClientDoc docio = client.watch(0);
-
+ running=true;
+ while (client.watchForChange) {
+ ClientDoc docio = client.watch(0);
+ if (docio!=null) {
+ client.disableGui(true);
+ Cache.log.debug("Updating jalview from changed vamsas document.");
+ client.updateJalview(docio);
+ Cache.log.debug("Finished updating from document change.");
+ docio.closeDoc();
+ docio=null;
+ client.disableGui(false);
+ }
+ }
+ running=false;
+
}
}
// TODO Auto-generated method stub
}
+ public void disableGui(boolean b) {
+ Desktop.instance.setVamsasUpdate(b);
+ }
+ public void startWatcher() {
+ if (watcher==null)
+ watcher=new VamsasClientWatcher(this);
+ Thread thr = new Thread() {
+ public void run() {
+ watcher.start();
+ }
+ };
+ thr.start();
+ }
}
Hashtable vobj2jv;
- Hashtable root2jv;
-
IdentityHashMap jv2vobj;
- IdentityHashMap jv2root;
-
public VamsasDatastore(ClientDoc cdoc, Hashtable vobj2jv,
IdentityHashMap jv2vobj, Entry provEntry) {
- this(cdoc, vobj2jv, jv2vobj, provEntry, new Hashtable(),
- new IdentityHashMap());
- }
-
- public VamsasDatastore(ClientDoc cdoc, Hashtable vobj2jv,
- IdentityHashMap jv2vobj, Entry provEntry, Hashtable root2jv,
- IdentityHashMap jv2root) {
- this.cdoc = cdoc;
+ this.cdoc = cdoc;
this.vobj2jv = vobj2jv;
this.jv2vobj = jv2vobj;
- this.root2jv = root2jv;
- this.jv2root = jv2root;
this.provEntry = provEntry;
}
*/
protected Vobject getjv2vObj(Object jvobj) {
if (jv2vobj.containsKey(jvobj))
- return cdoc.getObject(((VorbaId) jv2vobj.get(jvobj)));
+ return cdoc.getObject((VorbaId) jv2vobj.get(jvobj));
return null;
}
return null;
}
if (vobj2jv.containsKey(vobj.getVorbaId()))
- return vobj2jv.get(id);
+ return vobj2jv.get(vobj.getVorbaId());
return null;
}
if (id == null)
{
id = cdoc.registerObject(vobj);
+ if (id==null || vobj.getVorbaId()==null)
+ Cache.log.error("Failed to get id for "+(vobj.isRegisterable() ? "registerable" : "unregisterable") +" object "+vobj);
}
if (vobj2jv.containsKey(vobj.getVorbaId()) || jv2vobj.containsKey(jvobj))
{
- Cache.log.error("Duplicate object binding!");
+ Cache.log.error("Duplicate object binding! "+vobj+" id " +vobj.getVorbaId().getId()+" to "+jvobj);
}
else
{
if (alignment == null)
{
alignment = new Alignment();
- bindjvvobj(jal, alignment);
+ bindjvvobj(av, alignment);
if (alignment.getProvenance() == null)
alignment.setProvenance(new Provenance());
addProvenance(alignment.getProvenance(), "added"); // TODO: insert some
if (an == null)
{
an = new org.vamsas.objects.core.AlignmentSequenceAnnotation();
+ Seg vSeg = new Seg();
+ vSeg.setStart(1);
+ vSeg.setInclusive(true);
+ vSeg.setEnd(gapMap.length);
+ an.addSeg(vSeg);
+ an.setType("jalview:SecondaryStructurePrediction");// TODO: better fix this rough guess ;)
alsref.addAlignmentSequenceAnnotation(an);
+ bindjvvobj(aa[i],an);
// LATER: much of this is verbatim from the alignmentAnnotation
// method below. suggests refactoring to make rangeAnnotation the
// base class
an.setDescription(aa[i].description);
if (aa[i].graph > 0)
an.setGraph(true); // aa[i].graph);
+ else
+ an.setGraph(false);
an.setLabel(aa[i].label);
an.setProvenance(dummyProvenance()); // get provenance as user
// created, or jnet, or
// utf8
// translation
ae.addValue(aa[i].annotations[a].value);
- ae.setPosition(gapMap[a]); // position w.r.t. AlignmentSequence
+ ae.setPosition(gapMap[a]+1); // position w.r.t. AlignmentSequence
// symbols
if (aa[i].annotations[a].secondaryStructure != ' ')
{
if (an == null)
{
an = new org.vamsas.objects.core.AlignmentAnnotation();
+ an.setType("jalview:AnnotationRow");
an.setDescription(aa[i].description);
alignment.addAlignmentAnnotation(an);
+ Seg vSeg = new Seg();
+ vSeg.setStart(1);
+ vSeg.setInclusive(true);
+ vSeg.setEnd(jal.getWidth());
+ an.addSeg(vSeg);
if (aa[i].graph > 0)
an.setGraph(true); // aa[i].graph);
an.setLabel(aa[i].label);
an.setProvenance(dummyProvenance());
- an.setGroup(Integer.toString(aa[i].graphGroup)); // // JBPNote -
- // originally we
+ if (aa[i].graph!=aa[i].NO_GRAPH) {
+ an.setGroup(Integer.toString(aa[i].graphGroup)); // // JBPNote -
+ // originally we
// were going to
// store
// graphGroup in
// the Jalview
// specific
// bits.
-
+ an.setGraph(true);
+ } else {
+ an.setGraph(false);
+ }
AnnotationElement ae;
for (int a = 0; a < aa[i].annotations.length; a++)
// utf8
// translation
ae.addValue(aa[i].annotations[a].value);
- ae.setPosition(a);
+ ae.setPosition(a+1);
if (aa[i].annotations[a].secondaryStructure != ' ')
{
Glyph ss = new Glyph();
if (tp.getAlignment() == jal)
{
- // LATER: can recover alignment and Vamsas Alignment for an
- // associated tree using the getjv2vObj() so we could pass through
- // the tree list just once rather than many times
-
Tree tree = (Tree) getjv2vObj(tp);
if (tree == null)
{
Seg vSeg = new Seg();
vSeg.setStart(feature.getBegin());
vSeg.setEnd(feature.getEnd());
+ vSeg.setInclusive(true);
dsa.addSeg(vSeg);
dsa.setDescription(feature.getDescription());
dsa.setStatus(feature.getStatus());
* @return
*/
private Provenance makeTreeProvenance(AlignmentI jal, TreePanel tp) {
- Input vInput = new Input();
- // LATER: check to see if tree input data is contained in this alignment -
- // or just correctly resolve the tree's seqData to the correct alignment in
- // the document.
- vInput.setObjRef(getjv2vObj(jal));
- Provenance prov = dummyProvenance();
+ Provenance prov = new Provenance();
+ prov.addEntry(new Entry());
+ prov.getEntry(0).setAction("imported "+tp.getTitle());
+ prov.getEntry(0).setUser(provEntry.getUser());
+ prov.getEntry(0).setApp(provEntry.getApp());
+ prov.getEntry(0).setDate(provEntry.getDate());
if (tp.getTree().hasOriginalSequenceData())
{
+ Input vInput = new Input();
+ // LATER: check to see if tree input data is contained in this alignment -
+ // or just correctly resolve the tree's seqData to the correct alignment in
+ // the document.
+ vInput.setObjRef(getjv2vObj(jal));
+ prov.getEntry(0).setAction("created "+tp.getTitle());
prov.getEntry(0).addInput(vInput);
+ vInput.setName("jalview:seqdist");
+ prov.getEntry(0).addParam(new Param());
+ prov.getEntry(0).getParam(0).setName("treeType");
+ prov.getEntry(0).getParam(0).setType("utf8");
+ prov.getEntry(0).getParam(0).setContent("NJ");
+
int ranges[] = tp.getTree().seqData.getVisibleContigs();
for (int r = 0; r < ranges.length; r += 2)
{
vInput.addSeg(visSeg);
}
}
- return null;
+ return prov;
}
/**
int pol = (visSeg.getStart() <= visSeg.getEnd()) ? 1 : -1; // polarity of
// region.
int start = visSeg.getStart() + (incl ? 0 : pol);
- int end = visSeg.getEnd() + (incl ? -pol : 0);
+ int end = visSeg.getEnd() + (incl ? 0 : -pol);
if (ensureDirection && pol==-1)
{
// jalview doesn't deal with inverted ranges, yet.
{
if (frames[t] instanceof AlignFrame) {
if (((AlignFrame) frames[t]).getViewport()==av)
- return (AlignFrame) frames[t];
+ return (AlignFrame) frames[t];
}
}
}
if (asa==null) {
int se[] = getBounds(vasannot[a]);
asa = getjAlignmentAnnotation(jal, vasannot[a]);
- asa.createSequenceMapping(alseq, se[0], false); // TODO: verify that positions in alseqAnnotation correspond to ungapped residue positions.
+ asa.sequenceRef=alseq;
+ asa.createSequenceMapping(alseq, alseq.getStart()+se[0], false); // TODO: verify that positions in alseqAnnotation correspond to ungapped residue positions.
bindjvvobj(asa, vasannot[a]);
newasAnnots.add(asa);
} else {
// int se[] = getBounds(vasannot[a]);
// asa.update(getjAlignmentAnnotation(jal, vasannot[a])); // update from another annotation object in place.
// asa.createSequenceMapping(alseq, se[0], false);
-
+
}
}
}
}
jal = new jalview.datamodel.Alignment(seqs);
Cache.log.debug("New vamsas alignment imported into jalview "+alignment.getVorbaId().getId());
- bindjvvobj(jal, alignment);
jal.setDataset(jdataset);
}
if (newasAnnots!=null && newasAnnots.size()>0) {
// TODO: should at least replace with a new one - otherwise things will break
// basically do this:
// jan.update(getjAlignmentAnnotation(jal, an[a])); // update from another annotation object in place.
-
+
Cache.log.debug("update from vamsas alignment annotation to existing jalview alignment annotation.");
if (an[i].getModifiable()) {
// TODO: user defined annotation is totally mutable... - so load it up or throw away if locally edited.
}
AlignFrame alignFrame;
if (av==null) {
- // ///////////////////////////////
+ Cache.log.debug("New alignframe for alignment "+alignment.getVorbaId());
+ // ///////////////////////////////
// construct alignment view
alignFrame = new AlignFrame(jal);
av=alignFrame.getViewport();
// TODO: automatically create meaningful title for a vamsas alignment using its provenance.
- jalview.gui.Desktop.addInternalFrame(alignFrame, alignment.getProvenance().getEntry(alignment.getProvenance().getEntryCount()-1).toString(),
+ jalview.gui.Desktop.addInternalFrame(alignFrame, alignment.getProvenance().getEntry(alignment.getProvenance().getEntryCount()-1).getAction(),
AlignFrame.NEW_WINDOW_WIDTH,
AlignFrame.NEW_WINDOW_HEIGHT);
+ bindjvvobj(av, alignment);
} else {
// find the alignFrame for jal.
// TODO: fix this so we retrieve the alignFrame handing av *directly*
// /////////////////////////////////////
if (alignment.getTreeCount() > 0)
{
-
+
for (int t = 0; t < alignment.getTreeCount(); t++)
{
Tree tree = alignment.getTree(t);
// make a new tree
Object[] idata = this.recoverInputData(tree.getProvenance());
try {
-
+ AlignmentView inputData=null;
+ if (idata!=null && idata[0]!=null)
+ inputData = (AlignmentView) idata[0];
tp = alignFrame.ShowNewickTree(
new jalview.io.NewickFile(tree.getNewick(0).getContent()),
- tree.getNewick(0).getTitle(),
+ tree.getNewick(0).getTitle(),inputData,
600, 500,
t * 20 + 50, t * 20 + 50);
bindjvvobj(tp, tree);
- if (idata!=null) {
- // add it to tp.
- check jalview_2xml that it isn't an out of date version.
- }
-
} catch (Exception e) {
Cache.log.warn("Problems parsing treefile '"+tree.getNewick(0).getContent()+"'",e);
}
new jalview.datamodel.Annotation[rangeMap.length]
};
boolean mergeable=true; //false if 'after positions cant be placed on same annotation row as positions.
-
+
if (annotation.getAnnotationElementCount()>0) {
AnnotationElement ae[] = annotation.getAnnotationElement();
for (int aa = 0; aa < ae.length; aa++)
{
- int pos = ae[aa].getPosition();
- if (pos>=0 && pos<anot.length) {
+ int pos = ae[aa].getPosition()-1;// pos counts from 1 to (|seg.start-seg.end|+1)
+ if (pos>=0 && pos<rangeMap.length) {
int row=ae[aa].getAfter()?1:0;
if (anot[row][pos]!=null) {
// only time this should happen is if the After flag is set.
if (ae[aa].getGlyphCount()>0) {
Glyph[] glyphs = ae[aa].getGlyph();
for (int g=0; g<glyphs.length; g++) {
- if (glyphs[g].getDict()==org.vamsas.objects.utils.GlyphDictionary.PROTEIN_SS_3STATE) {
+ if (glyphs[g].getDict().equals(org.vamsas.objects.utils.GlyphDictionary.PROTEIN_SS_3STATE)) {
ss=glyphs[g].getContent();
AeContent[HASSECSTR]=true;
- } else if (glyphs[g].getDict()==org.vamsas.objects.utils.GlyphDictionary.PROTEIN_HD_HYDRO) {
+ } else if (glyphs[g].getDict().equals(org.vamsas.objects.utils.GlyphDictionary.PROTEIN_HD_HYDRO)) {
Cache.log.debug("ignoring hydrophobicity glyph marker.");
AeContent[HASHPHOB]=true;
char c=(dc=glyphs[g].getContent()).charAt(0);
// dc may get overwritten - but we still set the colour.
colour = new java.awt.Color(c=='+'?255:0,c=='.'?255:0,c=='-'?255:0);
- } else if (glyphs[g].getDict()==org.vamsas.objects.utils.GlyphDictionary.DEFAULT) {
+ } else if (glyphs[g].getDict().equals(org.vamsas.objects.utils.GlyphDictionary.DEFAULT)) {
dc = glyphs[g].getContent();
AeContent[HASDC]=true;
} else {
}
val = ae[aa].getValue(0);
}
- if (colour!=null) {
- anot[row][pos]=new jalview.datamodel.Annotation(desc, (dc!=null) ? dc : "", (ss!=null)?ss.charAt(0):' ', val);
+ if (colour==null) {
+ anot[row][pos]=new jalview.datamodel.Annotation((dc!=null) ? dc : "", desc, (ss!=null)?ss.charAt(0):' ', val);
} else {
- anot[row][pos]=new jalview.datamodel.Annotation(desc, (dc!=null) ? dc : "", (ss!=null)?ss.charAt(0):' ', val, colour);
+ anot[row][pos]=new jalview.datamodel.Annotation((dc!=null) ? dc : "", desc, (ss!=null)?ss.charAt(0):' ', val, colour);
}
} else {
Cache.log.warn("Ignoring out of bound annotation element "+aa+" in "+annotation.getVorbaId().getId());
jalview.datamodel.AlignmentAnnotation jan =null;
if (annotation==null)
return null;
+ // boolean hasSequenceRef=annotation.getClass().equals(org.vamsas.objects.core.AlignmentSequenceAnnotation.class);
+ //boolean hasProvenance=hasSequenceRef || (annotation.getClass().equals(org.vamsas.objects.core.AlignmentAnnotation.class));
/*int se[] = getBounds(annotation);
if (se==null)
se=new int[] {0,jal.getWidth()-1};
*/
Object[] parsedRangeAnnotation = parseRangeAnnotation(annotation);
-
+ String a_label=annotation.getLabel();
+ String a_descr=annotation.getDescription();
+ if (a_label==null || a_label.length()==0) {
+ a_label = annotation.getType();
+ if (a_label.length()==0)
+ a_label = "Unamed annotation";
+ }
+ if (a_descr==null || a_descr.length()==0) {
+ a_descr = "Annotation of type '"+annotation.getType()+"'";
+ }
if (parsedRangeAnnotation!=null) {
if (parsedRangeAnnotation[3]!=null) {
Cache.log.warn("Ignoring 'After' annotation row in "+annotation.getVorbaId());
jalview.datamodel.Annotation[] arow = (jalview.datamodel.Annotation[]) parsedRangeAnnotation[2];
boolean[] has=(boolean[])parsedRangeAnnotation[0];
// VAMSAS: getGraph is only on derived annotation for alignments - in this way its 'odd' - there is already an existing TODO about removing this flag as being redundant
- if ((annotation.getClass().equals(org.vamsas.objects.core.AlignmentAnnotation.class) && ((org.vamsas.objects.core.AlignmentAnnotation)annotation).getGraph())
- || (annotation.getClass().equals(AlignmentSequenceAnnotation.class) && ((org.vamsas.objects.core.AlignmentAnnotation)annotation).getGraph())) {
+ /*if ((annotation.getClass().equals(org.vamsas.objects.core.AlignmentAnnotation.class) && ((org.vamsas.objects.core.AlignmentAnnotation)annotation).getGraph())
+ || (hasSequenceRef=true && ((org.vamsas.objects.core.AlignmentSequenceAnnotation)annotation).getGraph())) {
+ */
+ if (has[HASVALS]) {
// make bounds and automatic description strings for jalview user's benefit (these shouldn't be written back to vamsas document)
boolean first=true;
float min=0,max=1;
-
for (int i=0;i<arow.length; i++) {
if (arow[i]!=null) {
// check range - shouldn't we have a min and max property in the annotation object ?
if (has[HASHPHOB]) {
type = jalview.datamodel.AlignmentAnnotation.BAR_GRAPH;
}
- jan = new jalview.datamodel.AlignmentAnnotation(annotation.getLabel(), annotation.getDescription(), arow, min, max, type);
+ jan = new jalview.datamodel.AlignmentAnnotation(a_label, a_descr, arow, min, max, type);
} else {
- jan = new jalview.datamodel.AlignmentAnnotation(annotation.getLabel(), annotation.getDescription(), arow);
+ jan = new jalview.datamodel.AlignmentAnnotation(a_label, a_descr, arow);
}
if (annotation.getLinkCount()>0) {
Cache.log.warn("Ignoring "+annotation.getLinkCount()+"links added to AlignmentAnnotation.");
for (int s = 0, sSize = dseta.getSegCount(); s < sSize; s++)
{
se = getSegRange(dseta.getSeg(s), false);
- for (int p=se[se[2]]; p!=se[1-se[2]]; p+=se[2]==0 ? 1 : -1 ) {
+ int se_end=se[1-se[2]]+(se[2]==0 ? 1 : -1);
+ for (int p=se[se[2]]; p!=se_end; p+=se[2]==0 ? 1 : -1 ) {
posList.add(Integer.valueOf(p));
}
}
}
return null;
}
-/* not needed now.
- * Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov) {
+ /* not needed now.
+ * Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov) {
jalview.datamodel.ProvenanceEntry[] entries = null;
// TODO: fix App and Action here.
Provenance prov = new Provenance();
return prov;
}
- */
+ */
jalview.datamodel.Provenance getJalviewProvenance(Provenance prov) {
// TODO: fix App and Action entries and check use of provenance in jalview.
jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
Entry dummyPEntry(String action) {
Entry entry = new Entry();
- entry.setApp("Jalview");
+ entry.setApp(this.provEntry.getApp());
if (action != null)
entry.setAction(action);
else
entry.setAction("created.");
entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
- entry.setUser(System.getProperty("user.name"));
+ entry.setUser(this.provEntry.getUser());
return entry;
}