package jalview.io;
+import jalview.api.AlignViewportI;
+import jalview.api.FeatureRenderer;
import jalview.api.FeaturesDisplayedI;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
import jalview.json.binding.v1.AlignmentAnnotationPojo;
import jalview.json.binding.v1.AlignmentPojo;
import jalview.json.binding.v1.AnnotationPojo;
import jalview.json.binding.v1.SequencePojo;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ColourSchemeProperty;
-import jalview.viewmodel.AlignmentViewport;
+import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
public class JSONFile extends AlignFile
{
- private static ColourSchemeI colourScheme;
+ private ColourSchemeI colourScheme;
- private static boolean seqFeaturesEnabled;
+ // private static boolean seqFeaturesEnabled;
private String jalviewVersion;
- private String webStartLaunchServletUrl = "http://www.jalview.org/services/launchApp";
+ private String webStartLaunchServletUrl;
public static final String FILE_EXT = "json";
private FeaturesDisplayedI displayedFeatures;
- private AlignmentViewport av;
+ // private AlignViewportI viewport;
- private jalview.api.FeatureRenderer fr;
+ private FeatureRenderer fr;
+
+ private JSONExportSettings jsonExportSettings;
public JSONFile()
{
{
try
{
- JSONExportSettings exportSettings = new JSONExportSettings();
- exportSettings.setExportAnnotations(true);
- exportSettings.setExportGroups(true);
- exportSettings.setExportJalviewSettings(true);
- exportSettings.setExportSequenceFeatures(true);
+ if (getJsonExportSettings() == null)
+ {
+ jsonExportSettings = new JSONExportSettings();
+ jsonExportSettings.setExportAnnotations(true);
+ jsonExportSettings.setExportGroups(true);
+ jsonExportSettings.setExportJalviewSettings(true);
+ jsonExportSettings.setExportSequenceFeatures(true);
+ }
AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
- if (Desktop.getCurrentAlignFrame() != null)
+ if (getViewport() != null)
{
- globalColorScheme = ColourSchemeProperty.getColourName(Desktop
- .getCurrentAlignFrame().getViewport()
+ globalColorScheme = ColourSchemeProperty
+ .getColourName(getViewport()
.getGlobalColourScheme());
- this.av = Desktop.getCurrentAlignFrame().getCurrentView();
- this.fr = Desktop.getCurrentAlignFrame().alignPanel
- .cloneFeatureRenderer();
- displayedFeatures = av.getFeaturesDisplayed();
- showSeqFeatures = Desktop.getCurrentAlignFrame().showSeqFeatures
- .isSelected();
+ setDisplayedFeatures(getViewport().getFeaturesDisplayed());
+ showSeqFeatures = getViewport().isShowSequenceFeatures();
+ fr = getViewport().getFeatureRenderer();
+ // setSeqFeaturesEnabled(viewport.isShowSequenceFeatures());
}
int count = 0;
jsonAlignmentPojo.getSeqs().add(jsonSeqPojo);
}
- if (exportSettings.isExportJalviewSettings())
+ if (jsonExportSettings.isExportJalviewSettings())
{
+ jalviewVersion = jalview.bin.Cache.getProperty("VERSION");
+ webStartLaunchServletUrl = jalview.bin.Cache.getDefault(
+ "www.jalview.org", "http://www.jalview.org")
+ + "/services/launchApp";
+
JalviewSettingsPojo jvSettings = new JalviewSettingsPojo();
jvSettings.setGlobalColorScheme(globalColorScheme);
jvSettings.setJalviewVersion(jalviewVersion);
jsonAlignmentPojo.setJalviewSettings(jvSettings);
}
- if (exportSettings.isExportAnnotations())
+ if (jsonExportSettings.isExportAnnotations())
{
jsonAlignmentPojo
.setAlignAnnotation(annotationToJsonPojo(annotations));
}
- if (exportSettings.isExportSequenceFeatures())
+ if (jsonExportSettings.isExportSequenceFeatures())
{
- jsonAlignmentPojo.setSeqFeatures(sequenceFeatureToJsonPojo(seqs,
- displayedFeatures));
+ jsonAlignmentPojo
+ .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
}
- if (exportSettings.isExportGroups() && seqGroups.size() > 0)
+ if (jsonExportSettings.isExportGroups() && seqGroups != null
+ && seqGroups.size() > 0)
{
- ArrayList<SequenceGrpPojo> sequenceGroupsPojo = new ArrayList<SequenceGrpPojo>();
for (SequenceGroup seqGrp : seqGroups)
{
SequenceGrpPojo seqGrpPojo = new SequenceGrpPojo();
}
public static List<SequenceFeaturesPojo> sequenceFeatureToJsonPojo(
- List<SequenceI> seqs, FeaturesDisplayedI displayedFeatures)
+ List<SequenceI> seqs, FeatureRenderer fr)
{
+ FeaturesDisplayedI displayedFeatures = (fr == null) ? null : fr
+ .getFeaturesDisplayed();
List<SequenceFeaturesPojo> sequenceFeaturesPojo = new ArrayList<SequenceFeaturesPojo>();
for (SequenceI seq : seqs)
{
SequenceI dataSetSequence = seq.getDatasetSequence();
SequenceFeature[] seqFeatures = (dataSetSequence == null) ? null
: seq.getDatasetSequence().getSequenceFeatures();
+
+ if (seqFeatures == null)
+ {
+ continue;
+ }
+
for (SequenceFeature sf : seqFeatures)
{
if (displayedFeatures != null
&& displayedFeatures.isVisible(sf.getType()))
{
- // String fillColor = ((fr != null) ? jalview.util.Format
- // .getHexString(fr.findFeatureColour(Color.white, seq,
- // seq.findIndex(sf.getBegin()))) : null);
SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo(
seq.getName() + "_" + seq.hashCode());
+ String featureColour = (fr == null) ? null : jalview.util.Format
+ .getHexString(fr
+ .findFeatureColour(Color.white, seq,
+ seq.findIndex(sf.getBegin())));
jsonFeature.setXstart(seq.findIndex(sf.getBegin()) - 1);
jsonFeature.setXend(seq.findIndex(sf.getEnd()));
jsonFeature.setType(sf.getType());
jsonFeature.setLinks(sf.links);
jsonFeature.setOtherDetails(sf.otherDetails);
jsonFeature.setScore(sf.getScore());
- // jsonFeature.setFillColor(fillColor);
+ jsonFeature.setFillColor(featureColour);
jsonFeature.setFeatureGroup(sf.getFeatureGroup());
sequenceFeaturesPojo.add(jsonFeature);
}
Vector<AlignmentAnnotation> annotations)
{
List<AlignmentAnnotationPojo> jsonAnnotations = new ArrayList<AlignmentAnnotationPojo>();
+ if (annotations == null)
+ {
+ return jsonAnnotations;
+ }
for (AlignmentAnnotation annot : annotations)
{
AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo();
return jsonAnnotations;
}
- public void parse(String jsonAlignmentString)
+ @SuppressWarnings("unchecked")
+ public JSONFile parse(String jsonAlignmentString)
{
try
{
Boolean showFeatures = Boolean.valueOf(jvSettingsJsonObj.get(
"showSeqFeatures").toString());
setColourScheme(getJalviewColorScheme(jsColourScheme));
- JSONFile.setSeqFeaturesEnabled(showFeatures);
- // Desktop.setCurrentSeqFeaturesVisible(showFeatures);
+ // JSONFile.setSeqFeaturesEnabled(showFeatures);
+ setShowSeqFeatures(showFeatures);
}
seqMap = new Hashtable<String, Sequence>();
- // Desktop.setCurrentGlobalColourScheme(cs);
for (Iterator<JSONObject> sequenceIter = seqJsonArray.iterator(); sequenceIter
.hasNext();)
{
{
e.printStackTrace();
}
+ return this;
}
+ @SuppressWarnings("unchecked")
private void parseFeatures(JSONArray jsonSeqFeatures)
{
if (jsonSeqFeatures != null)
{
- for (@SuppressWarnings("unchecked")
- Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr
+ for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr
.hasNext();)
{
JSONObject jsonFeature = seqFeatureItr.next();
Long begin = (Long) jsonFeature.get("xStart");
Long end = (Long) jsonFeature.get("xEnd");
String type = (String) jsonFeature.get("type");
- String color = (String) jsonFeature.get("fillColor");
String featureGrp = (String) jsonFeature.get("featureGroup");
String descripiton = (String) jsonFeature.get("description");
String seqRef = (String) jsonFeature.get("sequenceRef");
}
}
- private ColourSchemeI getJalviewColorScheme(String bioJsColourSchemeName)
+ public static ColourSchemeI getJalviewColorScheme(
+ String bioJsColourSchemeName)
{
ColourSchemeI jalviewColor = null;
for (JalviewBioJsColorSchemeMapper cs : JalviewBioJsColorSchemeMapper
public void LoadAlignmentFeatures(AlignFrame af)
{
- af.setShowSeqFeatures(JSONFile.isSeqFeaturesEnabled());
+ af.setShowSeqFeatures(isShowSeqFeatures());
af.changeColour(getColourScheme());
af.setMenusForViewport();
}
this.globalColorScheme = globalColorScheme;
}
- public static ColourSchemeI getColourScheme()
+ public ColourSchemeI getColourScheme()
{
return colourScheme;
}
- public static void setColourScheme(ColourSchemeI colourScheme)
+ public void setColourScheme(ColourSchemeI colourScheme)
+ {
+ this.colourScheme = colourScheme;
+ }
+
+ public FeaturesDisplayedI getDisplayedFeatures()
{
- JSONFile.colourScheme = colourScheme;
+ return displayedFeatures;
+ }
+
+ public void setDisplayedFeatures(FeaturesDisplayedI displayedFeatures)
+ {
+ this.displayedFeatures = displayedFeatures;
+ }
+
+ public JSONExportSettings getJsonExportSettings()
+ {
+ return jsonExportSettings;
+ }
+
+ public void setJsonExportSettings(JSONExportSettings jsonExportSettings)
+ {
+ this.jsonExportSettings = jsonExportSettings;
+ }
+
+ public static String getJSONData(AlignViewportI av)
+ {
+ JSONFile jsonFile = new JSONFile();
+ jsonFile.setViewport(av);
+ jsonFile.seqGroups = av.getAlignment().getGroups();
+ jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed());
+
+ for (SequenceI seq : av.getAlignment().getSequences())
+ {
+ jsonFile.seqs.add(seq);
+ }
+
+ // Add non auto calculated annotation to AlignFile
+ for (AlignmentAnnotation annot : av.getAlignment()
+ .getAlignmentAnnotation())
+ {
+ if (annot != null && !annot.autoCalculated)
+ {
+ if (annot.label.equals("PDB.CATempFactor"))
+ {
+ continue;
+ }
+ jsonFile.annotations.add(annot);
+ }
+ }
+ String jsonString = jsonFile.print();
+ return jsonString;
}
- public static boolean isSeqFeaturesEnabled()
+ public boolean isShowSeqFeatures()
{
- return seqFeaturesEnabled;
+ return showSeqFeatures;
}
- public static void setSeqFeaturesEnabled(boolean seqFeaturesEnabled)
+ public void setShowSeqFeatures(boolean showSeqFeatures)
{
- JSONFile.seqFeaturesEnabled = seqFeaturesEnabled;
+ this.showSeqFeatures = showSeqFeatures;
}
public class JSONExportSettings