parseArguments(aparser, true);
}
- private Object parseArguments(ArgsParser aparser,
- boolean isStartup)
+ private Object parseArguments(ArgsParser aparser, boolean isStartup)
{
boolean isJS = Platform.isJS();
JalviewApp app = new JalviewApp()
{
+ // TODO BH 2019
+ //
+ // These are methods that are in JalviewLite that various classes call
+ // but are not in JalviewLiteJsApi. Or, even if they are, other classes
+ // call
+ // them to JalviewLite directly. Some may not be necessary, but they have
+ // to
+ // be at least mentioned here, or the classes calling them should
+ // reference
+ // JalviewLite itself.
+
private boolean alignPDBStructures; // From JalviewLite; not implemented
private Hashtable<String, Hashtable<String, String[]>> jsmessages;
@Override
public StructureSelectionManagerProvider getStructureSelectionManagerProvider()
{
- // TODO Auto-generated method stub
+ // TODO Q: what exactly is this? BH
return null;
}
ColumnSelection colsel, HiddenColumns hidden,
SelectionSource source, Object alignFrame)
{
- // TODO Auto-generated method stub
- return null;
+ return appLoader.getSelectionForListener(getCurrentAlignFrame(),
+ seqsel, colsel, hidden, source, alignFrame);
}
@Override
@Override
public Hashtable<String, int[]> getJSHashes()
{
- return (jshashes == null
- ? (jshashes = new Hashtable<>())
+ return (jshashes == null ? (jshashes = new Hashtable<>())
: jshashes);
}
@Override
public Hashtable<String, Hashtable<String, String[]>> getJSMessages()
{
- return (jsmessages == null
- ? (jsmessages = new Hashtable<>())
+ return (jsmessages == null ? (jsmessages = new Hashtable<>())
: jsmessages);
}
}
@Override
- public void highlightIn(AlignFrameI alf,
- String sequenceId, String position, String alignedPosition)
+ public void highlightIn(AlignFrameI alf, String sequenceId,
+ String position, String alignedPosition)
{
- appLoader.highlightIn(alf, sequenceId, position,
- alignedPosition);
+ appLoader.highlightIn(alf, sequenceId, position, alignedPosition);
}
@Override
}
@Override
- public void selectIn(AlignFrameI alf, String sequenceIds,
- String columns)
+ public void selectIn(AlignFrameI alf, String sequenceIds, String columns)
{
selectIn(alf, sequenceIds, columns, null);
}
@Override
- public void selectIn(AlignFrameI alf, String sequenceIds,
- String columns, String sep)
+ public void selectIn(AlignFrameI alf, String sequenceIds, String columns,
+ String sep)
{
appLoader.selectIn(alf, sequenceIds, columns, sep);
}
}
@Override
- public String getSelectedSequencesAsAlignmentFrom(
- AlignFrameI alf, String format, String sep)
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+ String format, String sep)
{
return appLoader.getSelectedSequencesAsAlignmentFrom(alf, format, sep);
}
}
@Override
- public String getAlignmentOrderFrom(AlignFrameI alf,
- String sep)
+ public String getAlignmentOrderFrom(AlignFrameI alf, String sep)
{
return appLoader.getAlignmentOrderFrom(alf, sep);
}
}
@Override
- public String orderAlignmentBy(AlignFrameI alf,
- String order, String undoName, String sep)
+ public String orderAlignmentBy(AlignFrameI alf, String order,
+ String undoName, String sep)
{
return appLoader.orderAlignmentBy(alf, order, undoName, sep);
}
}
@Override
- public String getAlignmentFrom(AlignFrameI alf,
- String format)
+ public String getAlignmentFrom(AlignFrameI alf, String format)
{
return getAlignmentFrom(alf, format, null);
}
}
@Override
- public String getAlignmentFrom(AlignFrameI alf,
- String format, String suffix)
+ public String getAlignmentFrom(AlignFrameI alf, String format,
+ String suffix)
{
return appLoader.getAlignmentFrom(alf, format, suffix);
}
@Override
public void loadAnnotation(String annotation)
{
- // TODO Auto-generated method stub
-
+ loadAnnotationFrom(getCurrentAlignFrame(), annotation);
}
@Override
- public void loadAnnotationFrom(AlignFrameI alf,
- String annotation)
+ public void loadAnnotationFrom(AlignFrameI alf, String annotation)
{
- // TODO Auto-generated method stub
-
+ appLoader.loadAnnotationFrom(alf, annotation);
}
@Override
public void loadFeatures(String features, boolean autoenabledisplay)
{
- // TODO Auto-generated method stub
-
+ loadFeaturesFrom(currentAlignFrame, features, autoenabledisplay);
}
@Override
- public boolean loadFeaturesFrom(AlignFrameI alf,
- String features, boolean autoenabledisplay)
+ public boolean loadFeaturesFrom(AlignFrameI alf, String features,
+ boolean autoenabledisplay)
{
- // TODO Auto-generated method stub
- return false;
+ return appLoader.loadFeaturesFrom(alf, features, autoenabledisplay);
}
@Override
public String getFeatures(String format)
{
- // TODO Auto-generated method stub
- return null;
+ return getFeaturesFrom(getCurrentAlignFrame(), format);
}
@Override
- public String getFeaturesFrom(AlignFrameI alf,
- String format)
+ public String getFeaturesFrom(AlignFrameI alf, String format)
{
- // TODO Auto-generated method stub
- return null;
+ return appLoader.getFeaturesFrom(alf, format);
}
@Override
public String getAnnotation()
{
- // TODO Auto-generated method stub
- return null;
+ return getAnnotationFrom(getCurrentAlignFrame());
}
@Override
public String getAnnotationFrom(AlignFrameI alf)
{
- // TODO Auto-generated method stub
- return null;
+ return appLoader.getAnnotationFrom(alf);
}
@Override
public AlignFrameI newView()
{
- // TODO Auto-generated method stub
- return null;
+ return newViewFrom(getCurrentAlignFrame(), null);
}
@Override
public AlignFrameI newView(String name)
{
- // TODO Auto-generated method stub
- return null;
+ return newViewFrom(getCurrentAlignFrame(), name);
}
@Override
public AlignFrameI newViewFrom(AlignFrameI alf)
{
- // TODO Auto-generated method stub
- return null;
+ return newViewFrom(alf, null);
}
@Override
public AlignFrameI newViewFrom(AlignFrameI alf, String name)
{
- // TODO Auto-generated method stub
- return null;
+ return appLoader.newViewFrom(alf, name);
}
@Override
- public AlignFrameI loadAlignment(String text,
- String title)
+ public AlignFrameI loadAlignment(String text, String title)
{
return appLoader.loadAlignment(text, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT, title);
}
@Override
- public void setMouseoverListener(String listener)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setMouseoverListener(AlignFrameI af,
- String listener)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setSelectionListener(String listener)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setSelectionListener(AlignFrameI af,
- String listener)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setStructureListener(String listener, String modelSet)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void removeJavascriptListener(AlignFrameI af,
- String listener)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mouseOverStructure(String pdbResNum, String chain,
- String pdbfile)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public boolean addPdbFile(AlignFrameI alFrame,
- String sequenceId, String pdbEntryString, String pdbFile)
+ public boolean addPdbFile(AlignFrameI alFrame, String sequenceId,
+ String pdbEntryString, String pdbFile)
{
return appLoader.addPdbFile(alFrame, sequenceId, pdbEntryString,
pdbFile);
}
@Override
- public void scrollViewToIn(AlignFrameI alf,
- String topRow, String leftHandColumn)
+ public void scrollViewToIn(AlignFrameI alf, String topRow,
+ String leftHandColumn)
{
appLoader.scrollViewToIn(alf, topRow, leftHandColumn);
}
@Override
- public void scrollViewToRowIn(AlignFrameI alf,
- String topRow)
+ public void scrollViewToRowIn(AlignFrameI alf, String topRow)
{
appLoader.scrollViewToRowIn(alf, topRow);
}
@Override
- public void scrollViewToColumnIn(AlignFrameI alf,
- String leftHandColumn)
+ public void scrollViewToColumnIn(AlignFrameI alf, String leftHandColumn)
{
appLoader.scrollViewToColumnIn(alf, leftHandColumn);
}
}
@Override
- public String getFeatureGroupsOfStateOn(AlignFrameI alf,
- boolean visible)
+ public String getFeatureGroupsOfStateOn(AlignFrameI alf, boolean visible)
{
return appLoader.getFeatureGroupsOfStateOn(alf, visible);
}
@Override
- public void setFeatureGroupStateOn(AlignFrameI alf,
- String groups, boolean state)
+ public void setFeatureGroupStateOn(AlignFrameI alf, String groups,
+ boolean state)
{
setFeatureGroupStateOn(alf, groups, state);
}
return CalculationChooser.openPcaPanel(af, modelName, null);
}
+ @Override
+ public String getSelectedSequencesAsAlignment(String format,
+ boolean suffix)
+ {
+ return getSelectedSequencesAsAlignmentFrom(getCurrentAlignFrame(),
+ format, suffix);
+ }
+
+ @Override
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+ String format, boolean suffix)
+ {
+ return appLoader.getSelectedSequencesAsAlignmentFrom(alf, format,
+ "" + suffix);
+ }
+
+ @Override
+ public String arrayToSeparatorList(String[] array)
+ {
+ return appLoader.arrayToSeparatorList(array);
+ }
+
+ @Override
+ public String[] separatorListToArray(String list)
+ {
+ return appLoader.separatorListToArray(list);
+ }
+
+ //// probably not needed in JalviewJS -- From when Jmol and Jalview did not
+ //// have a direct connection?
+
+ @Override
+ public void setMouseoverListener(String listener)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setMouseoverListener(AlignFrameI af, String listener)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setSelectionListener(String listener)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setSelectionListener(AlignFrameI af, String listener)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setStructureListener(String listener, String modelSet)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void removeJavascriptListener(AlignFrameI af, String listener)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mouseOverStructure(String pdbResNum, String chain,
+ String pdbfile)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.AlignmentOrder;
import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceGroup;
import jalview.io.AnnotationFile;
import jalview.io.AppletFormatAdapter;
import jalview.io.DataSourceType;
+import jalview.io.FeaturesFile;
import jalview.io.FileFormat;
import jalview.io.FileFormatI;
import jalview.io.FileFormats;
import jalview.io.JPredFile;
import jalview.io.JnetAnnotationMaker;
import jalview.io.NewickFile;
+import jalview.structure.SelectionSource;
import jalview.structure.StructureSelectionManager;
import jalview.util.HttpUtils;
import jalview.util.MessageManager;
}
}
+ public void loadAnnotationFrom(AlignFrameI alf, String annotation)
+ {
+ if (new AnnotationFile().annotateAlignmentView(
+ ((AlignFrame) alf).getViewport(), annotation,
+ DataSourceType.PASTE))
+ {
+ ((AlignFrame) alf).alignPanel.fontChanged();
+ ((AlignFrame) alf).alignPanel.setScrollValues(0, 0);
+ }
+ else
+ {
+ ((AlignFrame) alf).parseFeaturesFile(annotation,
+ DataSourceType.PASTE);
+ }
+ }
+
+ public boolean loadFeaturesFrom(AlignFrameI alf, String features,
+ boolean autoenabledisplay)
+ {
+ boolean ret = ((AlignFrame) alf).parseFeaturesFile(features,
+ DataSourceType.PASTE);
+ if (!ret)
+ {
+ return false;
+ }
+ if (autoenabledisplay)
+ {
+ ((AlignFrame) alf).getViewport().setShowSequenceFeatures(true);
+ // this next was for a checkbox in JalviewLite
+ // ((AlignFrame) alf).getViewport().sequenceFeatures.setState(true);
+ }
+ return true;
+ }
+
+ public String getFeaturesFrom(AlignFrameI alf, String format)
+ {
+ AlignFrame f = ((AlignFrame) alf);
+
+ String features;
+ FeaturesFile formatter = new FeaturesFile();
+ if (format.equalsIgnoreCase("Jalview"))
+ {
+ features = formatter.printJalviewFormat(
+ f.getViewport().getAlignment().getSequencesArray(),
+ f.alignPanel.getFeatureRenderer(), true);
+ }
+ else
+ {
+ features = formatter.printGffFormat(
+ f.getViewport().getAlignment().getSequencesArray(),
+ f.alignPanel.getFeatureRenderer(), true);
+ }
+
+ if (features == null)
+ {
+ features = "";
+ }
+ return features;
+
+ }
+
+ public String getAnnotationFrom(AlignFrameI alf)
+ {
+ AlignFrame f = (AlignFrame) alf;
+ String annotation = new AnnotationFile()
+ .printAnnotationsForView(f.getViewport());
+ return annotation;
+ }
+
+ public AlignFrameI newViewFrom(AlignFrameI alf, String name)
+ {
+ return (AlignFrameI) ((AlignFrame) alf).newView(name, true);
+ }
+
+ public String[] separatorListToArray(String list)
+ {
+ return separatorListToArray(list, separator);
+ }
+
+ public Object[] getSelectionForListener(AlignFrameI currentFrame,
+ SequenceGroup seqsel, ColumnSelection colsel,
+ HiddenColumns hidden, SelectionSource source, Object alignFrame)
+ {
+ // System.err.println("Testing selection event relay to
+ // jsfunction:"+_listener);
+ String setid = "";
+ AlignFrame src = (AlignFrame) alignFrame;
+ if (source != null)
+ {
+ if (source instanceof AlignViewport
+ && ((AlignFrame) currentFrame).getViewport() == source)
+ {
+ // should be valid if it just generated an event!
+ src = (AlignFrame) currentFrame;
+
+ }
+ }
+ String[] seqs = new String[] {};
+ String[] cols = new String[] {};
+ int strt = 0, end = (src == null) ? -1
+ : src.alignPanel.av.getAlignment().getWidth();
+ if (seqsel != null && seqsel.getSize() > 0)
+ {
+ seqs = new String[seqsel.getSize()];
+ for (int i = 0; i < seqs.length; i++)
+ {
+ seqs[i] = seqsel.getSequenceAt(i).getName();
+ }
+ if (strt < seqsel.getStartRes())
+ {
+ strt = seqsel.getStartRes();
+ }
+ if (end == -1 || end > seqsel.getEndRes())
+ {
+ end = seqsel.getEndRes();
+ }
+ }
+ if (colsel != null && !colsel.isEmpty())
+ {
+ if (end == -1)
+ {
+ end = colsel.getMax() + 1;
+ }
+ cols = new String[colsel.getSelected().size()];
+ for (int i = 0; i < cols.length; i++)
+ {
+ cols[i] = "" + (1 + colsel.getSelected().get(i).intValue());
+ }
+ }
+ else
+ {
+ if (seqsel != null && seqsel.getSize() > 0)
+ {
+ // send a valid range, otherwise we send the empty selection
+ cols = new String[2];
+ cols[0] = "" + (1 + strt) + "-" + (1 + end);
+ }
+ }
+ return new Object[] { src, setid, arrayToSeparatorList(seqs),
+ arrayToSeparatorList(cols) };
+ }
+
}
\ No newline at end of file
* @param list
* @return elements separated by separator
*/
+ @Override
public String[] separatorListToArray(String list)
{
return JalviewAppLoader.separatorListToArray(list, separator);
return new jalview.appletgui.FeatureRenderer((AlignmentViewport) vp);
}
- /**
- * bind structures in a viewer to any matching sequences in an alignFrame (use
- * sequenceIds to limit scope of search to specific sequences)
- *
- * @param alFrame
- * @param viewer
- * @param sequenceIds
- * @return TODO: consider making an exception structure for indicating when
- * binding fails public SequenceStructureBinding
- * addStructureViewInstance( AlignFrame alFrame, Object viewer, String
- * sequenceIds) {
- *
- * if (sequenceIds != null && sequenceIds.length() > 0) { return
- * alFrame.addStructureViewInstance(viewer,
- * separatorListToArray(sequenceIds)); } else { return
- * alFrame.addStructureViewInstance(viewer, null); } // return null; }
- */
+ @Override
+ public String getSelectedSequencesAsAlignment(String format,
+ boolean suffix)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+ String format, boolean suffix)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // /**
+ // * bind structures in a viewer to any matching sequences in an alignFrame
+ // (use
+ // * sequenceIds to limit scope of search to specific sequences)
+ // *
+ // * @param alFrame
+ // * @param viewer
+ // * @param sequenceIds
+ // * @return TODO: consider making an exception structure for indicating when
+ // * binding fails public SequenceStructureBinding
+ // * addStructureViewInstance( AlignFrame alFrame, Object viewer, String
+ // * sequenceIds) {
+ // *
+ // * if (sequenceIds != null && sequenceIds.length() > 0) { return
+ // * alFrame.addStructureViewInstance(viewer,
+ // * separatorListToArray(sequenceIds)); } else { return
+ // * alFrame.addStructureViewInstance(viewer, null); } // return null; }
+ // */
}
/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$);
+ * Copyright (C); $$Year-Rel$$ The Jalview Authors
*
* 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
* as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
+ * 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
/**
* @return String list of selected sequence IDs, each terminated by the
- * 'boolean not' character (""+0x00AC) or (¬)
+ * 'boolean not' character (""+0x00AC); or (¬);
*/
public abstract String getSelectedSequences();
* - separator to use
* @return
*/
- public abstract String getAlignmentOrderFrom(AlignFrameI alf, String sep);
+ public abstract String getAlignmentOrderFrom(AlignFrameI alf,
+ String sep);
/**
* re-order the current alignment using the given list of sequence IDs
* @return 'true' if alignment was actually reordered. empty string if
* alignment did not contain sequences.
*/
- public abstract String orderBy(String order, String undoName, String sep);
+ public abstract String orderBy(String order, String undoName,
+ String sep);
/**
* re-order the given alignment using the given list of sequence IDs separated
/**
* get alignment as format (format names FASTA, BLC, CLUSTAL, MSF, PILEUP,
- * PFAM - see jalview.io.AppletFormatAdapter for full list)
+ * PFAM - see jalview.io.AppletFormatAdapter for full list);
*
* @param format
* @return
boolean autoenabledisplay);
/**
- * get the sequence features in the given format (Jalview or GFF)
+ * get the sequence features in the given format (Jalview or GFF);
*
* @param format
* @return
public abstract String getFeatures(String format);
/**
- * get the sequence features in alf in the given format (Jalview or GFF)
+ * get the sequence features in alf in the given format (Jalview or GFF);
*
* @param alf
* @param format
*
* @param listener
* name of javascript function (called with arguments
- * [jalview.appletgui.AlignFrameI,String(sequence id),String(column
- * in alignment), String(position in sequence)]
+ * [jalview.appletgui.AlignFrameI,String(sequence id);,String(column
+ * in alignment);, String(position in sequence);]
*/
public abstract void setMouseoverListener(String listener);
*
* @param af
* (null or specific AlignFrameI for which events are to be listened
- * for)
+ * for);
* @param listener
* name of javascript function
*/
*
* @param listener
* name of javascript function (called with arguments
- * [jalview.appletgui.AlignFrameI, String(sequence set id),
- * String(separator separated list of sequences which were selected),
- * String(separator separated list of column ranges (i.e. single
- * number or hyphenated range) that were selected)]
+ * [jalview.appletgui.AlignFrameI, String(sequence set id);,
+ * String(separator separated list of sequences which were
+ * selected);, String(separator separated list of column ranges (i.e.
+ * single number or hyphenated range); that were selected);]
*/
public abstract void setSelectionListener(String listener);
*
* @param listener
* - javascript function (arguments are variable, see
- * jalview.javascript.MouseOverStructureListener for full details)
+ * jalview.javascript.MouseOverStructureListener for full details);
* @param modelSet
* - separator separated list of PDB file URIs that this viewer is
* handling. These files must be in the same order they appear in
- * Jmol (e.g. first one is frame 1, second is frame 2, etc).
+ * Jmol (e.g. first one is frame 1, second is frame 2, etc);.
* @see jalview.javascript.MouseOverStructureListener
*/
public abstract void setStructureListener(String listener,
/**
* remove any callback using the given listener function and associated with
- * the given AlignFrameI (or null for all callbacks)
+ * the given AlignFrameI (or null for all callbacks);
*
* @param af
- * (may be null)
+ * (may be null);
* @param listener
- * (may be null)
+ * (may be null);
*/
public abstract void removeJavascriptListener(AlignFrameI af,
String listener);
/**
*
* @return
- * @see jalview.appletgui.AlignFrameI#getFeatureGroups()
+ * @see jalview.appletgui.AlignFrameI#getFeatureGroups();
*/
public abstract String getFeatureGroups();
* @param alf
* AlignFrameI to get feature groups on
* @return
- * @see jalview.appletgui.AlignFrameI#getFeatureGroups()
+ * @see jalview.appletgui.AlignFrameI#getFeatureGroups();
*/
public abstract String getFeatureGroupsOn(AlignFrameI alf);
/**
* @param visible
* @return
- * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean)
+ * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean);
*/
public abstract String getFeatureGroupsOfState(boolean visible);
* align frame to get groups of state visible
* @param visible
* @return
- * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean)
+ * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean);
*/
public abstract String getFeatureGroupsOfStateOn(AlignFrameI alf,
boolean visible);
* @param state
* true or false
* @see jalview.appletgui.AlignFrameI#setFeatureGroupState(java.lang.String[],
- * boolean)
+ * boolean);
*/
public abstract void setFeatureGroupStateOn(AlignFrameI alf,
String groups,
*/
public abstract String getJsMessage(String messageclass, String viewId);
+ /// in http://www.jalview.org/examples/jalviewLiteJs.html but missing here
+
+ // get selected sequences as alignment as format with or without start-end
+ // suffix
+ public String getSelectedSequencesAsAlignment(String format,
+ boolean suffix);
+
+ // get selected sequences as alignment from given view as format with or
+ // without start-end suffix
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+ String format, boolean suffix);
+
+ public String arrayToSeparatorList(String[] array);
+
+ // get a string array from a list
+ public String[] separatorListToArray(String list);
+
+ // debug flag - controls output to standard out
+ public static boolean debug = false;
+
}