Merge branch 'Jalview-BH/JAL-3026-JAL-3063-JAXB' into trialMerge feature/JAL-3144noJTree
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 31 Oct 2018 16:30:24 +0000 (16:30 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 31 Oct 2018 16:30:24 +0000 (16:30 +0000)
Conflicts:
src/jalview/ext/ensembl/EnsemblRestClient.java
swingjs/timestamp

22 files changed:
.project
.settings/org.eclipse.jdt.core.prefs
.settings/org.eclipse.jdt.ui.prefs
src/jalview/ext/ensembl/EnsemblRestClient.java
src/jalview/fts/core/GFTSPanel.java
src/jalview/fts/service/pdb/PDBFTSPanel.java
src/jalview/fts/service/pdb/PDBFTSRestClient.java
src/jalview/fts/service/uniprot/UniProtFTSRestClient.java
src/jalview/fts/service/uniprot/UniprotFTSPanel.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/SequenceFetcher.java
src/jalview/io/cache/JvCacheableInputBox.java
src/jalview/jbgui/GAlignFrame.java
src/jalview/ws/DBRefFetcher.java
src/jalview/ws/SequenceFetcher.java
src/jalview/xml/binding/jalviewBH/JalviewModel.java [new file with mode: 0644]
src/jalview/xml/binding/jalviewBH/SequenceSet.java [new file with mode: 0644]
src/jalview/xml/binding/jalviewBH/VAMSAS.java [new file with mode: 0644]
swingjs/timestamp
test/jalview/io/CrossRef2xmlTests.java
utils/eclipse/JalviewCodeStyle.xml
utils/test/JalviewJSTest.java

index d0dfc7e..6c40472 100644 (file)
--- a/.project
+++ b/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-       <name>Jalview Release 2.7</name>
+       <name>Jalview Release 2.7-old</name>
        <comment></comment>
        <projects>
        </projects>
index 50912cd..2d3c802 100644 (file)
@@ -105,287 +105,4 @@ org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=52
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=1
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line_on_wrap
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=4
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=8
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=76
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
index 2de9ab9..2b24877 100644 (file)
@@ -1,67 +1,7 @@
 eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Jalview
-formatter_settings_version=12
+formatter_settings_version=14
 org.eclipse.jdt.ui.ignorelowercasenames=true
 org.eclipse.jdt.ui.importorder=jalview;java;javax;org;com;
 org.eclipse.jdt.ui.ondemandthreshold=99
 org.eclipse.jdt.ui.staticondemandthreshold=99
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_modifiers=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
 sp_cleanup.use_type_arguments=false
index 9e01cc4..97172fa 100644 (file)
@@ -20,6 +20,9 @@
  */
 package jalview.ext.ensembl;
 
+import jalview.bin.Jalview;
+import jalview.io.DataSourceType;
+import jalview.io.FileParse;
 import jalview.util.StringUtils;
 
 import java.io.BufferedReader;
@@ -334,12 +337,15 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher
     connection.setRequestProperty("Content-Type", getRequestMimeType());
     connection.setRequestProperty("Accept", getResponseMimeType());
 
-    connection.setUseCaches(false);
     connection.setDoInput(true);
     connection.setDoOutput(multipleIds);
 
-    connection.setConnectTimeout(CONNECT_TIMEOUT_MS);
-    connection.setReadTimeout(readTimeout);
+    if (!Jalview.isJS()) 
+    {
+      connection.setUseCaches(false);
+      connection.setConnectTimeout(CONNECT_TIMEOUT_MS);
+      connection.setReadTimeout(readTimeout);
+    }
 
     if (multipleIds)
     {
index 38ea958..4771601 100644 (file)
@@ -131,7 +131,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
 
   protected JLabel lbl_blank = new JLabel(balnkPlaceholderImage);
 
-  private JTabbedPane tabbedPane = jalview.jbgui.GDesktop.createTabbedPane();
+  JTabbedPane tabbedPane = jalview.jbgui.GDesktop.createTabbedPane();
 
   private JPanel pnl_actions = new JPanel();
 
@@ -259,8 +259,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
       {
         tabs.addTab(MessageManager.getString("label.retrieve_ids"),
                 fetcher);
-        fetcher.setDatabaseChooserVisible(false);
-        fetcher.embedWithFTSPanel(this);
+        fetcher.embedIn(this);
       }
       mainFrame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
       final JPanel ftsPanel = this;
@@ -593,7 +592,6 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
 
     txt_search.addActionListener(new ActionListener()
     {
-
       @Override
       public void actionPerformed(ActionEvent e)
       {
@@ -842,6 +840,10 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
     }
   }
 
+  /**
+   * Action on Back button is to close this panel and open a new Sequence
+   * Fetcher panel
+   */
   public void btn_back_ActionPerformed()
   {
     closeAction();
@@ -893,7 +895,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
 
   public void transferToSequenceFetcher(String ids)
   {
-    seqFetcher.getTextArea().setText(ids);
+    seqFetcher.setQuery(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
   }
@@ -918,7 +920,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
     lbl_blank.setVisible(true);
     btn_ok.setEnabled(false);
     mainFrame.setTitle(getFTSFrameTitle());
-    referesh();
+    refresh();
     tbl_summary.setModel(new DefaultTableModel());
     tbl_summary.setVisible(false);
   }
@@ -1055,9 +1057,11 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
     }
   }
 
-  public void referesh()
+  public void refresh()
   {
     mainFrame.setTitle(getFTSFrameTitle());
   }
 
+  @Override
+  public abstract void okAction();
 }
index 053d91b..90b6d06 100644 (file)
@@ -121,16 +121,14 @@ public class PDBFTSPanel extends GFTSPanel
 
           if (isPaginationEnabled() && resultSetCount > 0)
           {
+            String f1 = totalNumberformatter.format(Integer.valueOf(offSet + 1));
+            String f2 = totalNumberformatter
+                    .format(Integer.valueOf(offSet + resultSetCount));
+            String f3 = totalNumberformatter
+                    .format(Integer.valueOf(totalResultSetCount));
             updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
-                    + " "
-                    + totalNumberformatter.format((Number) (offSet + 1))
-                    + " to "
-                    + totalNumberformatter
-                            .format((Number) (offSet + resultSetCount))
-                    + " of "
-                    + totalNumberformatter
-                            .format((Number) totalResultSetCount)
-                    + " " + " (" + (endTime - startTime) + " milli secs)");
+                    + " " + f1 + " to " + f2 + " of " + f3 + " " + " ("
+                    + (endTime - startTime) + " milli secs)");
           }
           else
           {
@@ -220,8 +218,7 @@ public class PDBFTSPanel extends GFTSPanel
     }
 
     String ids = selectedIds.toString();
-    // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
-    seqFetcher.getTextArea().setText(ids);
+    seqFetcher.setQuery(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
     delayAndEnableActionButtons();
index a5b441f..301cb16 100644 (file)
@@ -43,26 +43,15 @@ import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
 
-//import jalview.javascript.web.Client;
-//import jalview.javascript.web.ClientResponse;
-//import jalview.javascript.web.WebResource;
-
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
-
-import com.sun.jersey.api.client.config.ClientConfig;
 import com.sun.jersey.api.client.config.DefaultClientConfig;
 
 /**
  * A rest client for querying the Search endpoint of the PDB API
  * 
- * BH 2018: just a tiny tweak here - for SwingJS, we coerce the classes to be
- * from jalview.javascript.web instead of com.sun.jersey.api.client
- * 
- * 
  * @author tcnofoegbu
- *
  */
 public class PDBFTSRestClient extends FTSRestClient
 {
@@ -90,9 +79,6 @@ public class PDBFTSRestClient extends FTSRestClient
   {
     try
     {
-      Client client;
-      WebResource webResource;
-
       String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(
               pdbRestRequest.getWantedFields());
       int responseSize = (pdbRestRequest.getResponseSize() == 0)
@@ -137,6 +123,7 @@ public class PDBFTSRestClient extends FTSRestClient
 
       // BH 2018 the trick here is to coerce the classes in Javascript to be 
       // different from the ones in Java yet still allow this to be correct for Java
+      Client client;
       Class<ClientResponse> clientResponseClass;
       if (/** @j2sNative true || */
       false)
@@ -152,6 +139,7 @@ public class PDBFTSRestClient extends FTSRestClient
         clientResponseClass = ClientResponse.class;
       }
 
+      WebResource webResource;
       if (pdbRestRequest.isFacet())
       {
         webResource = client.resource(PDB_SEARCH_ENDPOINT)
index 262ed86..6a54aa1 100644 (file)
@@ -22,6 +22,7 @@
 package jalview.fts.service.uniprot;
 
 import jalview.bin.Cache;
+import jalview.bin.Jalview;
 import jalview.fts.api.FTSData;
 import jalview.fts.api.FTSDataColumnI;
 import jalview.fts.api.FTSRestClientI;
@@ -40,7 +41,6 @@ import javax.ws.rs.core.MediaType;
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
 import com.sun.jersey.api.client.config.DefaultClientConfig;
 
 public class UniProtFTSRestClient extends FTSRestClient
@@ -55,7 +55,7 @@ public class UniProtFTSRestClient extends FTSRestClient
   {
     super();
     uniprotSearchEndpoint = Cache.getDefault("UNIPROT_DOMAIN",
-            DEFAULT_UNIPROT_DOMAIN) + "/uniprot/?";
+            DEFAULT_UNIPROT_DOMAIN) + "/uniprot/";
   }
 
   @Override
@@ -64,9 +64,6 @@ public class UniProtFTSRestClient extends FTSRestClient
   {
     try
     {
-      ClientConfig clientConfig = new DefaultClientConfig();
-      Client client = Client.create(clientConfig);
-
       String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(
               uniportRestRequest.getWantedFields());
       int responseSize = (uniportRestRequest.getResponseSize() == 0)
@@ -90,6 +87,25 @@ public class UniProtFTSRestClient extends FTSRestClient
                                 + uniportRestRequest.getSearchTerm();
       }
 
+      // BH 2018 the trick here is to coerce the classes in Javascript to be
+      // different from the ones in Java yet still allow this to be correct for
+      // Java
+      Client client;
+      Class<ClientResponse> clientResponseClass;
+      if (/** @j2sNative true || */
+      false)
+      {
+        // JavaScript only -- coerce types to Java types for Java
+        client = (Client) (Object) new jalview.javascript.web.Client();
+        clientResponseClass = (Class<ClientResponse>) (Object) jalview.javascript.web.ClientResponse.class;
+      }
+      else
+      {
+        // Java only
+        client = Client.create(new DefaultClientConfig());
+        clientResponseClass = ClientResponse.class;
+      }
+
       WebResource webResource = null;
       webResource = client.resource(uniprotSearchEndpoint)
               .queryParam("format", "tab")
@@ -99,7 +115,7 @@ public class UniProtFTSRestClient extends FTSRestClient
               .queryParam("sort", "score").queryParam("query", query);
       // Execute the REST request
       ClientResponse clientResponse = webResource
-              .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+              .accept(MediaType.TEXT_PLAIN).get(clientResponseClass);
       String uniProtTabDelimittedResponseString = clientResponse
               .getEntity(String.class);
       // Make redundant objects eligible for garbage collection to conserve
@@ -113,8 +129,9 @@ public class UniProtFTSRestClient extends FTSRestClient
         throw new Exception(errorMessage);
 
       }
-      int xTotalResults = Integer.valueOf(
-              clientResponse.getHeaders().get("X-Total-Results").get(0));
+      int xTotalResults = Jalview.isJS() ? 1
+              : Integer.valueOf(clientResponse.getHeaders()
+                      .get("X-Total-Results").get(0));
       clientResponse = null;
       client = null;
       return parseUniprotResponse(uniProtTabDelimittedResponseString,
index df54dea..09c6ab8 100644 (file)
@@ -46,6 +46,12 @@ public class UniprotFTSPanel extends GFTSPanel
 
   private static final String UNIPROT_AUTOSEARCH = "FTS.UNIPROT.AUTOSEARCH";
 
+  /**
+   * Constructor given an (optional) sequence fetcher panel to revert to on
+   * clicking the 'Back' button
+   * 
+   * @param fetcher
+   */
   public UniprotFTSPanel(SequenceFetcher fetcher)
   {
     super(fetcher);
@@ -122,13 +128,15 @@ public class UniprotFTSPanel extends GFTSPanel
           {
             updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
                     + " "
-                    + totalNumberformatter.format((Number) (offSet + 1))
+                    + totalNumberformatter
+                            .format(Integer.valueOf(offSet + 1))
                     + " to "
                     + totalNumberformatter
-                            .format((Number) (offSet + resultSetCount))
+                            .format(Integer
+                                    .valueOf(offSet + resultSetCount))
                     + " of "
                     + totalNumberformatter
-                            .format((Number) totalResultSetCount)
+                            .format(Integer.valueOf(totalResultSetCount))
                     + " " + " (" + (endTime - startTime) + " milli secs)");
           }
           else
@@ -209,8 +217,7 @@ public class UniprotFTSPanel extends GFTSPanel
     }
 
     String ids = selectedIds.toString();
-    // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
-    seqFetcher.getTextArea().setText(ids);
+    seqFetcher.setQuery(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
     delayAndEnableActionButtons();
index 6b3e5d8..56ef63b 100644 (file)
@@ -1010,9 +1010,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   @Override
-  public void fetchSequence_actionPerformed(ActionEvent e)
+  public void fetchSequence_actionPerformed()
   {
-    new jalview.gui.SequenceFetcher(this);
+    new SequenceFetcher(this);
   }
 
   @Override
@@ -5019,22 +5019,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     });
     rfetch.add(fetchr);
-    final AlignFrame me = this;
     new Thread(new Runnable()
     {
       @Override
       public void run()
       {
         final jalview.ws.SequenceFetcher sf = jalview.gui.SequenceFetcher
-                .getSequenceFetcherSingleton(me);
+                .getSequenceFetcherSingleton();
         javax.swing.SwingUtilities.invokeLater(new Runnable()
         {
           @Override
           public void run()
           {
-            String[] dbclasses = sf.getOrderedSupportedSources();
-            // sf.getDbInstances(jalview.ws.dbsources.DasSequenceSource.class);
-            // jalview.util.QuickSort.sort(otherdb, otherdb);
+            String[] dbclasses = sf.getNonAlignmentSources();
             List<DbSourceProxy> otherdb;
             JMenu dfetch = new JMenu();
             JMenu ifetch = new JMenu();
@@ -5051,12 +5048,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               {
                 continue;
               }
-              // List<DbSourceProxy> dbs=otherdb;
-              // otherdb=new ArrayList<DbSourceProxy>();
-              // for (DbSourceProxy db:dbs)
-              // {
-              // if (!db.isA(DBRefSource.ALIGNMENTDB)
-              // }
               if (mname == null)
               {
                 mname = "From " + dbclass;
index 118d877..51be630 100755 (executable)
@@ -43,59 +43,46 @@ import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import javax.swing.JInternalFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.SwingConstants;
-import javax.swing.tree.DefaultMutableTreeNode;
 
+/**
+ * A panel where the use may choose a database source, and enter one or more
+ * accessions, to retrieve entries from the database.
+ * <p>
+ * If the selected source is Uniprot or PDB, a free text search panel is opened
+ * instead to perform the search and selection.
+ */
 public class SequenceFetcher extends JPanel implements Runnable
 {
-  JLabel dbeg = new JLabel();
-
-  JDatabaseTree database;
-
-  JButton databaseButt;
-
-  JLabel jLabel1 = new JLabel();
-
-  JCheckBox replacePunctuation = new JCheckBox();
-
-  JButton ok = new JButton();
-
-  JButton clear = new JButton();
-
-  JButton example = new JButton();
-
-  JButton close = new JButton();
-
-  JButton back = new JButton();
-
-  JPanel jPanel1 = new JPanel();
+  private static jalview.ws.SequenceFetcher sfetch = null;
 
-  JTextArea textArea = new JTextArea();
+  JLabel exampleAccession;
 
-  JScrollPane jScrollPane1 = new JScrollPane();
+  JComboBox<String> database;
 
-  JPanel jPanel2 = new JPanel();
+  JCheckBox replacePunctuation;
 
-  JPanel jPanel3 = new JPanel();
+  JButton okBtn;
 
-  JPanel jPanel4 = new JPanel();
+  JButton exampleBtn;
 
-  BorderLayout borderLayout1 = new BorderLayout();
+  JButton closeBtn;
 
-  BorderLayout borderLayout2 = new BorderLayout();
+  JButton backBtn;
 
-  BorderLayout borderLayout3 = new BorderLayout();
+  JTextArea textArea;
 
   JInternalFrame frame;
 
@@ -103,265 +90,63 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   AlignFrame alignFrame;
 
-  StringBuffer result;
+  GFTSPanel parentSearchPanel;
 
-  final String noDbSelected = "-- Select Database --";
+  IProgressIndicator progressIndicator;
 
-  private static jalview.ws.SequenceFetcher sfetch = null;
-
-  private static boolean _initingFetcher = false;
-
-  private static Thread initingThread = null;
-
-  public JTextArea getTextArea()
-  {
-    return textArea;
-  }
+  volatile boolean _isConstructing = false;
 
   /**
-   * Blocking method that initialises and returns the shared instance of the
-   * SequenceFetcher client
+   * Returns the shared instance of the SequenceFetcher client
    * 
-   * @param guiWindow
-   *          - where the initialisation delay message should be shown
-   * @return the singleton instance of the sequence fetcher client
+   * @return
    */
-  public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton(
-          final IProgressIndicator guiWindow)
+  public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton()
   {
-    if (_initingFetcher && initingThread != null && initingThread.isAlive())
-    {
-      if (guiWindow != null)
-      {
-        guiWindow.setProgressBar(
-                MessageManager.getString(
-                        "status.waiting_sequence_database_fetchers_init"),
-                Thread.currentThread().hashCode());
-      }
-      // initting happening on another thread - so wait around to see if it
-      // finishes.
-      while (_initingFetcher && initingThread != null
-              && initingThread.isAlive())
-      {
-        try
-        {
-          Thread.sleep(10);
-        } catch (Exception e)
-        {
-        }
-        ;
-      }
-      if (guiWindow != null)
-      {
-        guiWindow.setProgressBar(
-                MessageManager.getString(
-                        "status.waiting_sequence_database_fetchers_init"),
-                Thread.currentThread().hashCode());
-      }
-    }
     if (sfetch == null)
     {
-      _initingFetcher = true;
-      initingThread = Thread.currentThread();
-      /**
-       * give a visual indication that sequence fetcher construction is occuring
-       */
-      if (guiWindow != null)
-      {
-        guiWindow.setProgressBar(
-                MessageManager.getString(
-                        "status.init_sequence_database_fetchers"),
-                Thread.currentThread().hashCode());
-      }
-
-      jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
-      if (guiWindow != null)
-      {
-        guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
-      }
-      sfetch = sf;
-      _initingFetcher = false;
-      initingThread = null;
+      sfetch = new jalview.ws.SequenceFetcher();
     }
     return sfetch;
   }
 
-  private IProgressIndicator progressIndicator;
-
-  private volatile boolean _isConstructing = false;
-
-  private List<AlignFrame> newAlframes = null;
-
-  public SequenceFetcher(IProgressIndicator guiIndic)
-  {
-    this(guiIndic, null, null);
-  }
-
-  public SequenceFetcher(IProgressIndicator guiIndic,
-          final String selectedDb, final String queryString)
-  {
-    this._isConstructing = true;
-    this.progressIndicator = guiIndic;
-    final SequenceFetcher us = this;
-    // launch initialiser thread
-    Thread sf = new Thread(new Runnable()
-    {
-
-      @Override
-      public void run()
-      {
-        if (getSequenceFetcherSingleton(progressIndicator) != null)
-        {
-          us.initGui(progressIndicator, selectedDb, queryString);
-          us._isConstructing = false;
-        }
-        else
-        {
-          javax.swing.SwingUtilities.invokeLater(new Runnable()
-          {
-            @Override
-            public void run()
-            {
-              JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-                      MessageManager.getString(
-                              "warn.couldnt_create_sequence_fetcher_client"),
-                      MessageManager.getString(
-                              "label.couldnt_create_sequence_fetcher"),
-                      JvOptionPane.ERROR_MESSAGE);
-            }
-          });
-
-          // raise warning dialog
-        }
-      }
-    });
-    sf.start();
-  }
-
   /**
-   * blocking call which creates a new sequence fetcher panel, configures it and
-   * presses the OK button with the given database and query.
+   * Constructor given a client to receive any status or progress messages
+   * (currently either the Desktop, or an AlignFrame panel)
    * 
-   * @param database
-   * @param query
+   * @param guiIndic
    */
-  public static List<AlignFrame> fetchAndShow(String database, String query)
+  public SequenceFetcher(IProgressIndicator guiIndic)
   {
-    final SequenceFetcher sf = new SequenceFetcher(Desktop.instance,
-            database, query);
-    while (sf._isConstructing)
-    {
-      try
-      {
-        Thread.sleep(50);
-      } catch (Exception q)
-      {
-        return Collections.emptyList();
-      }
-    }
-    sf.newAlframes = new ArrayList<>();
-    sf.run();
-    return sf.newAlframes;
+    this(guiIndic, null, null);
   }
 
-  private class DatabaseAuthority extends DefaultMutableTreeNode
-  {
-
-  };
-
-  private class DatabaseSource extends DefaultMutableTreeNode
-  {
-
-  };
-
   /**
-   * initialise the database and query for this fetcher panel
+   * Constructor with specified database and accession(s) to retrieve
    * 
+   * @param guiIndic
    * @param selectedDb
-   *          - string that should correspond to a sequence fetcher
    * @param queryString
-   *          - string that will be entered in the query dialog
-   * @return true if UI was configured with valid database and query string
    */
-  protected boolean setInitialQuery(String selectedDb, String queryString)
+  public SequenceFetcher(IProgressIndicator guiIndic,
+          final String selectedDb, final String queryString)
   {
-    if (selectedDb == null || selectedDb.trim().length() == 0)
-    {
-      return false;
-    }
-    try
-    {
-      List<DbSourceProxy> sp = sfetch.getSourceProxy(selectedDb);
-      for (DbSourceProxy sourcep : sp)
-      {
-        if (sourcep.getTier() == 0)
-        {
-          database.selection = Arrays
-                  .asList(new DbSourceProxy[]
-                  { sourcep });
-          break;
-        }
-      }
-      if (database.selection == null || database.selection.size() == 0)
-      {
-        System.err.println(
-                "Ignoring fetch parameter db='" + selectedDb + "'");
-        return false;
-      }
-      textArea.setText(queryString);
-    } catch (Exception q)
-    {
-      System.err.println("Ignoring fetch parameter db='" + selectedDb
-              + "' and query='" + queryString + "'");
-      return false;
-    }
-    return true;
-  }
+    this.progressIndicator = guiIndic;
+    getSequenceFetcherSingleton();
+    this.guiWindow = progressIndicator;
 
-  /**
-   * called by thread spawned by constructor
-   * 
-   * @param guiWindow
-   * @param queryString
-   * @param selectedDb
-   */
-  private void initGui(IProgressIndicator guiWindow, String selectedDb,
-          String queryString)
-  {
-    this.guiWindow = guiWindow;
-    if (guiWindow instanceof AlignFrame)
-    {
-      alignFrame = (AlignFrame) guiWindow;
-    }
-    database = new JDatabaseTree(sfetch);
-    try
-    {
-      jbInit();
-      /*
-       * configure the UI with any query parameters we were called with
-       */
-      if (!setInitialQuery(selectedDb, queryString))
-      {
-        /*
-         * none provided, so show the database chooser
-         */
-        database.waitForInput();
-      }
-    } catch (Exception ex)
+    if (progressIndicator instanceof AlignFrame)
     {
-      ex.printStackTrace();
+      alignFrame = (AlignFrame) progressIndicator;
     }
 
+    jbInit(selectedDb);
+    textArea.setText(queryString);
+
     frame = new JInternalFrame();
     frame.setContentPane(this);
-    if (Platform.isAMac())
-    {
-      Desktop.addInternalFrame(frame, getFrameTitle(), false, 400, 240);
-    }
-    else
-    {
-      Desktop.addInternalFrame(frame, getFrameTitle(), false, 400, 180);
-    }
+    int height = Platform.isAMac() ? 240 : 180;
+    Desktop.addInternalFrame(frame, getFrameTitle(), true, 400, height);
   }
 
   private String getFrameTitle()
@@ -372,33 +157,64 @@ public class SequenceFetcher extends JPanel implements Runnable
                     .getString("label.additional_sequence_fetcher"));
   }
 
-  GFTSPanel parentFTSframe = null;
-  /**
-   * change the buttons so they fit with the FTS panel.
-   */
-  public void embedWithFTSPanel(GFTSPanel toClose)
-  {
-    back.setVisible(true);
-    parentFTSframe = toClose;
-  }
-  private void jbInit() throws Exception
+  private void jbInit(String selectedDb)
   {
-    this.setLayout(borderLayout2);
+    this.setLayout(new BorderLayout());
 
+    database = new JComboBox<>();
     database.setFont(JvSwingUtils.getLabelFont());
-    dbeg.setFont(new java.awt.Font("Verdana", Font.BOLD, 11));
-    jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
-    jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
-    jLabel1.setText(MessageManager
+    database.setPrototypeDisplayValue("ENSEMBLGENOMES   ");
+    String[] sources = new jalview.ws.SequenceFetcher().getSupportedDb();
+    Arrays.sort(sources, String.CASE_INSENSITIVE_ORDER);
+    database.addItem(MessageManager.getString("action.select_ddbb"));
+    for (String source : sources)
+    {
+      database.addItem(source);
+    }
+    database.setSelectedItem(selectedDb);
+    if (database.getSelectedIndex() == -1)
+    {
+      database.setSelectedIndex(0);
+    }
+    database.setMaximumRowCount(database.getItemCount());
+    database.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        String currentSelection = (String) database.getSelectedItem();
+        updateExampleQuery(currentSelection);
+
+        if ("pdb".equalsIgnoreCase(currentSelection))
+        {
+          frame.dispose();
+          new PDBFTSPanel(SequenceFetcher.this);
+        }
+        else if ("uniprot".equalsIgnoreCase(currentSelection))
+        {
+          frame.dispose();
+          new UniprotFTSPanel(SequenceFetcher.this);
+        }
+        else
+        {
+          otherSourceAction();
+        }
+      }
+    });
+
+    exampleAccession = new JLabel("");
+    exampleAccession.setFont(new Font("Verdana", Font.BOLD, 11));
+    JLabel jLabel1 = new JLabel(MessageManager
             .getString("label.separate_multiple_accession_ids"));
+    jLabel1.setFont(new Font("Verdana", Font.ITALIC, 11));
+    jLabel1.setHorizontalAlignment(SwingConstants.LEFT);
 
-    replacePunctuation.setHorizontalAlignment(SwingConstants.CENTER);
-    replacePunctuation
-            .setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
-    replacePunctuation.setText(
+    replacePunctuation = new JCheckBox(
             MessageManager.getString("label.replace_commas_semicolons"));
-    ok.setText(MessageManager.getString("action.ok"));
-    ok.addActionListener(new ActionListener()
+    replacePunctuation.setHorizontalAlignment(SwingConstants.LEFT);
+    replacePunctuation.setFont(new Font("Verdana", Font.ITALIC, 11));
+    okBtn = new JButton(MessageManager.getString("action.ok"));
+    okBtn.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
@@ -406,7 +222,7 @@ public class SequenceFetcher extends JPanel implements Runnable
         ok_actionPerformed();
       }
     });
-    clear.setText(MessageManager.getString("action.clear"));
+    JButton clear = new JButton(MessageManager.getString("action.clear"));
     clear.addActionListener(new ActionListener()
     {
       @Override
@@ -416,8 +232,8 @@ public class SequenceFetcher extends JPanel implements Runnable
       }
     });
 
-    example.setText(MessageManager.getString("label.example"));
-    example.addActionListener(new ActionListener()
+    exampleBtn = new JButton(MessageManager.getString("label.example"));
+    exampleBtn.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
@@ -425,8 +241,8 @@ public class SequenceFetcher extends JPanel implements Runnable
         example_actionPerformed();
       }
     });
-    close.setText(MessageManager.getString("action.cancel"));
-    close.addActionListener(new ActionListener()
+    closeBtn = new JButton(MessageManager.getString("action.cancel"));
+    closeBtn.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
@@ -434,17 +250,19 @@ public class SequenceFetcher extends JPanel implements Runnable
         close_actionPerformed(e);
       }
     });
-    back.setText(MessageManager.getString("action.back"));
-    back.addActionListener(new ActionListener()
+    backBtn = new JButton(MessageManager.getString("action.back"));
+    backBtn.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        parentFTSframe.btn_back_ActionPerformed();
+        parentSearchPanel.btn_back_ActionPerformed();
       }
     });
     // back not visible unless embedded
-    back.setVisible(false);
+    backBtn.setVisible(false);
+
+    textArea = new JTextArea();
     textArea.setFont(JvSwingUtils.getLabelFont());
     textArea.setLineWrap(true);
     textArea.addKeyListener(new KeyAdapter()
@@ -458,209 +276,192 @@ public class SequenceFetcher extends JPanel implements Runnable
         }
       }
     });
-    jPanel3.setLayout(borderLayout1);
-    borderLayout1.setVgap(5);
-    jPanel1.add(back);
-    jPanel1.add(example);
-    jPanel1.add(clear);
-    jPanel1.add(ok);
-    jPanel1.add(close);
-    jPanel2.setLayout(borderLayout3);
-    databaseButt = /*database.getDatabaseSelectorButton();
-                   final JButton viewdbs =*/new JButton(
-            MessageManager.getString("action.select_ddbb"));
-    databaseButt.addActionListener(new ActionListener()
-    {
-
-      @Override
-      public void actionPerformed(ActionEvent arg0)
-      {
-        hidePanel();
-        database.showDialog();
-      }
-    });
-    databaseButt.setFont(JvSwingUtils.getLabelFont());
-    database.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        String currentSelection = database.getSelectedItem();
-        if (currentSelection == null)
-        {
-          close_actionPerformed(null);
-        }
-
-        showPanel();
-
-        if ("pdb".equalsIgnoreCase(currentSelection))
-        {
-          pdbSourceAction();
-        }
-        else if ("uniprot".equalsIgnoreCase(currentSelection))
-        {
-          uniprotSourceAction();
-        }
-        else
-        {
-          otherSourceAction();
-        }
-        database.action = -1;
-      }
-    });
 
-    dbeg.setText("");
-    jPanel2.add(databaseButt, java.awt.BorderLayout.NORTH);
-    jPanel2.add(dbeg, java.awt.BorderLayout.CENTER);
+    JPanel actionPanel = new JPanel();
+    actionPanel.add(backBtn);
+    actionPanel.add(exampleBtn);
+    actionPanel.add(clear);
+    actionPanel.add(okBtn);
+    actionPanel.add(closeBtn);
+
+    JPanel databasePanel = new JPanel();
+    databasePanel.setLayout(new BorderLayout());
+    databasePanel.add(database, BorderLayout.NORTH);
+    databasePanel.add(exampleAccession, BorderLayout.CENTER);
     JPanel jPanel2a = new JPanel(new BorderLayout());
-    jPanel2a.add(jLabel1, java.awt.BorderLayout.NORTH);
-    jPanel2a.add(replacePunctuation, java.awt.BorderLayout.SOUTH);
-    jPanel2.add(jPanel2a, java.awt.BorderLayout.SOUTH);
-    // jPanel2.setPreferredSize(new Dimension())
-    jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER);
-    this.add(jPanel1, java.awt.BorderLayout.SOUTH);
-    this.add(jPanel3, java.awt.BorderLayout.CENTER);
-    this.add(jPanel2, java.awt.BorderLayout.NORTH);
+    jPanel2a.add(jLabel1, BorderLayout.NORTH);
+    jPanel2a.add(replacePunctuation, BorderLayout.SOUTH);
+    databasePanel.add(jPanel2a, BorderLayout.SOUTH);
+
+    JPanel idsPanel = new JPanel();
+    idsPanel.setLayout(new BorderLayout(0, 5));
+    JScrollPane jScrollPane1 = new JScrollPane();
     jScrollPane1.getViewport().add(textArea);
-  }
+    idsPanel.add(jScrollPane1, BorderLayout.CENTER);
 
-  private void pdbSourceAction()
-  {
-    databaseButt.setText(database.getSelectedItem());
-    new PDBFTSPanel(this);
-    frame.dispose();
+    this.add(actionPanel, BorderLayout.SOUTH);
+    this.add(idsPanel, BorderLayout.CENTER);
+    this.add(databasePanel, BorderLayout.NORTH);
   }
 
-  private void uniprotSourceAction()
+  /**
+   * Answers a semi-colon-delimited string with the example query or queries for
+   * the selected database
+   * 
+   * @param db
+   * @return
+   */
+  protected String getExampleQueries(String db)
   {
-    databaseButt.setText(database.getSelectedItem());
-    new UniprotFTSPanel(this);
-    frame.dispose();
+    StringBuilder sb = new StringBuilder();
+    HashSet<String> hs = new HashSet<>();
+    for (DbSourceProxy dbs : sfetch.getSourceProxy(db))
+    {
+      String tq = dbs.getTestQuery();
+      if (hs.add(tq)) // not a duplicate source
+      {
+        if (sb.length() > 0)
+        {
+          sb.append(";");
+        }
+        sb.append(tq);
+      }
+    }
+    return sb.toString();
   }
 
-  private void otherSourceAction()
+  /**
+   * Action on selecting a database other than Uniprot or PDB is to enable or
+   * disable 'Replace commas', and await input in the query field
+   */
+  protected void otherSourceAction()
   {
     try
     {
-      databaseButt.setText(database.getSelectedItem()
-              + (database.getSelectedSources().size() > 1 ? " (and "
-                      + database.getSelectedSources().size() + " others)"
-                      : ""));
-      String eq = database.getExampleQueries();
-      dbeg.setText(MessageManager.formatMessage("label.example_query_param",
-              new String[]
-              { eq }));
-      // TODO this should be a property of the SequenceFetcher whether commas are and
-      // colons are allowed in the IDs...
+      String eq = exampleAccession.getText();
+      // TODO this should be a property of the SequenceFetcher whether commas
+      // are allowed in the IDs...
 
       boolean enablePunct = !(eq != null && eq.indexOf(",") > -1);
       replacePunctuation.setEnabled(enablePunct);
 
     } catch (Exception ex)
     {
-      dbeg.setText("");
+      exampleAccession.setText("");
       replacePunctuation.setEnabled(true);
     }
-    jPanel2.repaint();
+    repaint();
   }
 
+  /**
+   * Sets the text of the example query to incorporate the example accession
+   * provided by the selected database source
+   * 
+   * @param selectedDatabase
+   * @return
+   */
+  protected String updateExampleQuery(String selectedDatabase)
+  {
+    String eq = getExampleQueries(selectedDatabase);
+    exampleAccession.setText(MessageManager
+            .formatMessage("label.example_query_param", new String[]
+            { eq }));
+    return eq;
+  }
+
+  /**
+   * Action on clicking the 'Example' button is to write the example accession
+   * as the query text field value
+   */
   protected void example_actionPerformed()
   {
-    DbSourceProxy db = null;
-    try
-    {
-      textArea.setText(database.getExampleQueries());
-    } catch (Exception ex)
-    {
-    }
-    jPanel3.repaint();
+    String eq = getExampleQueries((String) database.getSelectedItem());
+    textArea.setText(eq);
+    repaint();
   }
 
+  /**
+   * Clears the query input field
+   */
   protected void clear_actionPerformed()
   {
     textArea.setText("");
-    jPanel3.repaint();
+    repaint();
   }
 
-  public void close_actionPerformed(ActionEvent e)
+  /**
+   * Action on Close button is to close this frame, and also (if it is embedded
+   * in a search panel) to close the search panel
+   * 
+   * @param e
+   */
+  protected void close_actionPerformed(ActionEvent e)
   {
     try
     {
       frame.setClosed(true);
-      if (parentFTSframe!=null)
+      if (parentSearchPanel != null)
       {
-        parentFTSframe.btn_cancel_ActionPerformed();
+        parentSearchPanel.btn_cancel_ActionPerformed();
       }
     } catch (Exception ex)
     {
     }
   }
 
+  /**
+   * Action on OK is to start the fetch for entered accession(s)
+   */
   public void ok_actionPerformed()
   {
-    databaseButt.setEnabled(false);
-    example.setEnabled(false);
+    /*
+     * tidy inputs and check there is something to search for
+     */
+    String text = textArea.getText();
+    if (replacePunctuation.isEnabled() && replacePunctuation.isSelected())
+    {
+      text = text.replace(",", ";");
+    }
+    text = text.replaceAll("(\\s|[,; ])+", ";");
+    textArea.setText(text);
+    if (text.isEmpty())
+    {
+      // todo i18n
+      showErrorMessage(
+              "Please enter a (semi-colon separated list of) database id(s)");
+      resetDialog();
+      return;
+    }
+    exampleBtn.setEnabled(false);
     textArea.setEnabled(false);
-    ok.setEnabled(false);
-    close.setEnabled(false);
-    back.setEnabled(false);
+    okBtn.setEnabled(false);
+    closeBtn.setEnabled(false);
+    backBtn.setEnabled(false);
+
     Thread worker = new Thread(this);
     worker.start();
   }
 
   private void resetDialog()
   {
-    databaseButt.setEnabled(true);
-    example.setEnabled(true);
+    exampleBtn.setEnabled(true);
     textArea.setEnabled(true);
-    ok.setEnabled(true);
-    close.setEnabled(true);
-    back.setEnabled(parentFTSframe != null);
+    okBtn.setEnabled(true);
+    closeBtn.setEnabled(true);
+    backBtn.setEnabled(parentSearchPanel != null);
   }
 
   @Override
   public void run()
   {
-    String error = "";
-    if (!database.hasSelection())
-    {
-      error += "Please select the source database\n";
-    }
-    // TODO: make this transformation more configurable
-    com.stevesoft.pat.Regex empty;
-    if (replacePunctuation.isEnabled() && replacePunctuation.isSelected())
-    {
-      empty = new com.stevesoft.pat.Regex(
-              // replace commas and spaces with a semicolon
-              "(\\s|[,; ])+", ";");
-    }
-    else
-    {
-      // just turn spaces and semicolons into single semicolons
-      empty = new com.stevesoft.pat.Regex("(\\s|[; ])+", ";");
-    }
-    textArea.setText(empty.replaceAll(textArea.getText()));
-    // see if there's anthing to search with
-    if (!new com.stevesoft.pat.Regex("[A-Za-z0-9_.]")
-            .search(textArea.getText()))
-    {
-      error += "Please enter a (semi-colon separated list of) database id(s)";
-    }
-    if (error.length() > 0)
-    {
-      showErrorMessage(error);
-      resetDialog();
-      return;
-    }
-    // TODO: Refactor to GUI independent code and write tests.
-    // indicate if successive sources should be merged into one alignment.
     boolean addToLast = false;
     List<String> aresultq = new ArrayList<>();
     List<String> presultTitle = new ArrayList<>();
     List<AlignmentI> presult = new ArrayList<>();
     List<AlignmentI> aresult = new ArrayList<>();
-    Iterator<DbSourceProxy> proxies = database.getSelectedSources()
-            .iterator();
+    List<DbSourceProxy> sources = sfetch
+            .getSourceProxy((String) database.getSelectedItem());
+    Iterator<DbSourceProxy> proxies = sources.iterator();
     String[] qries;
     List<String> nextFetch = Arrays
             .asList(qries = textArea.getText().split(";"));
@@ -1002,10 +803,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                 AlignFrame.DEFAULT_HEIGHT);
         if (currentFileFormat != null)
         {
-          af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT
-          // FORMAT FOR
-          // NON-FormatAdapter Sourced
-          // Alignments?
+          af.currentFileFormat = currentFileFormat;
         }
 
         List<SequenceI> alsqs = al.getSequences();
@@ -1029,10 +827,6 @@ public class SequenceFetcher extends JPanel implements Runnable
         {
           af.hideFeatureColumns(SequenceOntologyI.EXON, false);
         }
-        if (newAlframes != null)
-        {
-          newAlframes.add(af);
-        }
         Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);
 
@@ -1080,15 +874,6 @@ public class SequenceFetcher extends JPanel implements Runnable
   }
 
   /**
-   * Make this panel visible (after a selection has been made in the database
-   * chooser)
-   */
-  void showPanel()
-  {
-    frame.setVisible(true);
-  }
-
-  /**
    * Hide this panel (on clicking the database button to open the database
    * chooser)
    */
@@ -1097,8 +882,23 @@ public class SequenceFetcher extends JPanel implements Runnable
     frame.setVisible(false);
   }
 
-  public void setDatabaseChooserVisible(boolean b)
+  public void setQuery(String ids)
+  {
+    textArea.setText(ids);
+  }
+
+  /**
+   * Called to modify the search panel for embedding as an alternative tab of a
+   * free text search panel. The database choice list is hidden (since the
+   * choice has been made), and a Back button is made visible (which reopens the
+   * Sequence Fetcher panel).
+   * 
+   * @param parentPanel
+   */
+  public void embedIn(GFTSPanel parentPanel)
   {
-    databaseButt.setVisible(b);
+    database.setVisible(false);
+    backBtn.setVisible(true);
+    parentSearchPanel = parentPanel;
   }
 }
index d2ad8de..b1b7ac5 100644 (file)
@@ -306,7 +306,11 @@ public class JvCacheableInputBox<E>
 
   public void addActionListener(ActionListener actionListener)
   {
-    if (!Jalview.isJS())
+    if (Jalview.isJS())
+    {
+      textField.addActionListener(actionListener);
+    }
+    else
     {
       comboBox.addActionListener(actionListener);
     }
@@ -323,7 +327,11 @@ public class JvCacheableInputBox<E>
 
   public void addFocusListener(FocusListener focusListener)
   {
-    if (!Jalview.isJS())
+    if (Jalview.isJS())
+    {
+      textField.addFocusListener(focusListener);
+    }
+    else
     {
       comboBox.addFocusListener(focusListener);
     }
index 342d95a..4fb5a44 100755 (executable)
@@ -1292,6 +1292,10 @@ public class GAlignFrame extends JInternalFrame
         featureSettings_actionPerformed(e);
       }
     });
+
+    /*
+     * add sub-menu of database we can fetch from
+     */
     JMenuItem fetchSequence = new JMenuItem(
             MessageManager.getString("label.fetch_sequences"));
     fetchSequence.addActionListener(new ActionListener()
@@ -1299,7 +1303,7 @@ public class GAlignFrame extends JInternalFrame
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        fetchSequence_actionPerformed(e);
+        fetchSequence_actionPerformed();
       }
     });
 
@@ -2468,7 +2472,7 @@ public class GAlignFrame extends JInternalFrame
 
   }
 
-  public void fetchSequence_actionPerformed(ActionEvent e)
+  public void fetchSequence_actionPerformed()
   {
 
   }
index 061e70c..3543204 100644 (file)
@@ -134,8 +134,7 @@ public class DBRefFetcher implements Runnable
     }
     this.dataset = ds;
     // TODO Jalview 2.5 lots of this code should be in the gui package!
-    sfetcher = jalview.gui.SequenceFetcher
-            .getSequenceFetcherSingleton(progressIndicatorFrame);
+    sfetcher = jalview.gui.SequenceFetcher.getSequenceFetcherSingleton();
     // set default behaviour for transferring excess sequence data to the
     // dataset
     trimDsSeqs = Cache.getDefault(TRIM_RETRIEVED_SEQUENCES, true);
index 29d4ec7..4526b26 100644 (file)
@@ -33,6 +33,8 @@ import jalview.ws.seqfetcher.ASequenceFetcher;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * This implements the run-time discovery of sequence database clients.
@@ -62,44 +64,30 @@ public class SequenceFetcher extends ASequenceFetcher
   /**
    * return an ordered list of database sources excluding alignment only databases
    */
-  public String[] getOrderedSupportedSources()
+  public String[] getNonAlignmentSources()
   {
     String[] srcs = this.getSupportedDb();
-    ArrayList<String> src = new ArrayList<>();
+    List<String> src = new ArrayList<>();
 
     for (int i = 0; i < srcs.length; i++)
     {
-      boolean skip = false;
+      boolean accept = true;
       for (DbSourceProxy dbs : getSourceProxy(srcs[i]))
       {
         // Skip the alignment databases for the moment - they're not useful for
         // verifying a single sequence against its reference source
         if (dbs.isAlignmentSource())
         {
-          skip = true;
+          accept = false;
+          break;
         }
       }
-      if (skip)
-      {
-        continue;
-      }
+      if (accept)
       {
         src.add(srcs[i]);
       }
     }
-    String[] tosort = src.toArray(new String[0]),
-            sorted = src.toArray(new String[0]);
-    for (int j = 0, jSize = sorted.length; j < jSize; j++)
-    {
-      tosort[j] = tosort[j].toLowerCase();
-    }
-    jalview.util.QuickSort.sort(tosort, sorted);
-    // construct array with all sources listed
-    int i = 0;
-    for (int j = sorted.length - 1; j >= 0; j--, i++)
-    {
-      srcs[i] = sorted[j];
-    }
-    return srcs;
+    Collections.sort(src, String.CASE_INSENSITIVE_ORDER);
+    return src.toArray(new String[src.size()]);
   }
 }
diff --git a/src/jalview/xml/binding/jalviewBH/JalviewModel.java b/src/jalview/xml/binding/jalviewBH/JalviewModel.java
new file mode 100644 (file)
index 0000000..413c3dd
--- /dev/null
@@ -0,0 +1,5241 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.09.18 at 04:36:20 PM BST 
+//
+
+package jalview.xml.binding.jalviewBH;
+
+import jalview.schemabinding.version2.AnnotationColourScheme;
+import jalview.schemabinding.version2.WebServiceParameterSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlID;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+/**
+ * <p>
+ * Java class for JalviewModel complex type.
+ * 
+ * <p>
+ * The following schema fragment specifies the expected content contained within
+ * this class.
+ * 
+ * <pre>
+ * &lt;complexType name="JalviewModel">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="creationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
+ *         &lt;element name="version" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="vamsasModel" type="{www.vamsas.ac.uk/jalview/version2}VAMSAS"/>
+ *         &lt;sequence>
+ *           &lt;element name="JSeq" maxOccurs="unbounded" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence>
+ *                     &lt;element name="features" type="{www.jalview.org}feature" maxOccurs="unbounded" minOccurs="0"/>
+ *                     &lt;element name="pdbids" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;extension base="{www.jalview.org}pdbentry">
+ *                             &lt;sequence>
+ *                               &lt;element name="structureState" maxOccurs="unbounded" minOccurs="0">
+ *                                 &lt;complexType>
+ *                                   &lt;simpleContent>
+ *                                     &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+ *                                       &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+ *                                       &lt;attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                                       &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                                       &lt;attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                                       &lt;attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                                       &lt;attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                                       &lt;attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                                     &lt;/extension>
+ *                                   &lt;/simpleContent>
+ *                                 &lt;/complexType>
+ *                               &lt;/element>
+ *                             &lt;/sequence>
+ *                           &lt;/extension>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                     &lt;element name="hiddenSequences" type="{http://www.w3.org/2001/XMLSchema}int" maxOccurs="unbounded" minOccurs="0"/>
+ *                     &lt;element name="rnaViewer" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                             &lt;sequence>
+ *                               &lt;element name="secondaryStructure" maxOccurs="unbounded">
+ *                                 &lt;complexType>
+ *                                   &lt;complexContent>
+ *                                     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                                       &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                                       &lt;attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                                       &lt;attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                                       &lt;attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                                     &lt;/restriction>
+ *                                   &lt;/complexContent>
+ *                                 &lt;/complexType>
+ *                               &lt;/element>
+ *                             &lt;/sequence>
+ *                             &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+ *                             &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                             &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                             &lt;attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                             &lt;attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                           &lt;/restriction>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                   &lt;/sequence>
+ *                   &lt;attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="hidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="viewreference" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *           &lt;element name="JGroup" maxOccurs="unbounded" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence>
+ *                     &lt;element name="seq" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+ *                     &lt;element name="annotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+ *                   &lt;/sequence>
+ *                   &lt;attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="outlineColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="displayBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="displayText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="colourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *           &lt;element name="Viewport" maxOccurs="unbounded" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence>
+ *                     &lt;element name="AnnotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+ *                     &lt;element name="hiddenColumns" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                             &lt;attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                             &lt;attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                           &lt;/restriction>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                     &lt;element name="calcIdParam" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
+ *                             &lt;attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                             &lt;attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                             &lt;attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                           &lt;/extension>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                   &lt;/sequence>
+ *                   &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+ *                   &lt;attribute name="conservationSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="pidSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="showFullId" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="rightAlignIds" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showColourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="showBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="wrapAlignment" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="renderGaps" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showSequenceFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showNPfeatureTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showDbRefTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="followHighlight" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="followSelection" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="showAnnotation" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="centreColumnLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="showGroupConservation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="showGroupConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+ *                   &lt;attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="startRes" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="startSeq" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="scaleProteinAsCdna" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ *                   &lt;attribute name="viewName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="sequenceSetId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="gatheredViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *                   &lt;attribute name="complementId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *           &lt;element name="UserColours" maxOccurs="unbounded" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence>
+ *                     &lt;element name="UserColourScheme" type="{www.jalview.org/colours}JalviewUserColours"/>
+ *                   &lt;/sequence>
+ *                   &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *           &lt;element name="tree" maxOccurs="unbounded" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence minOccurs="0">
+ *                     &lt;element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *                     &lt;element name="newick" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *                   &lt;/sequence>
+ *                   &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+ *                   &lt;attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                   &lt;attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                   &lt;attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+ *                   &lt;attribute name="showBootstrap" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="showDistances" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="markUnlinked" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="fitToWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="currentTree" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                   &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *           &lt;element name="FeatureSettings" minOccurs="0">
+ *             &lt;complexType>
+ *               &lt;complexContent>
+ *                 &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                   &lt;sequence>
+ *                     &lt;element name="setting" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                             &lt;sequence>
+ *                               &lt;element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+ *                               &lt;element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
+ *                             &lt;/sequence>
+ *                             &lt;attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                             &lt;attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                             &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                             &lt;attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
+ *                             &lt;attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                             &lt;attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+ *                             &lt;attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+ *                             &lt;attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *                             &lt;attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+ *                             &lt;attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+ *                             &lt;attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                             &lt;attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                           &lt;/restriction>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                     &lt;element name="group" maxOccurs="unbounded" minOccurs="0">
+ *                       &lt;complexType>
+ *                         &lt;complexContent>
+ *                           &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                             &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                             &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *                           &lt;/restriction>
+ *                         &lt;/complexContent>
+ *                       &lt;/complexType>
+ *                     &lt;/element>
+ *                   &lt;/sequence>
+ *                 &lt;/restriction>
+ *               &lt;/complexContent>
+ *             &lt;/complexType>
+ *           &lt;/element>
+ *         &lt;/sequence>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(
+  name = "JalviewModel",
+  namespace = "www.jalview.org",
+  propOrder =
+  { "creationDate", "version", "vamsasModel", "jSeq", "jGroup", "viewport",
+      "userColours", "tree", "featureSettings" })
+public class JalviewModel
+{
+
+  @XmlElement(required = true)
+  @XmlSchemaType(name = "dateTime")
+  protected XMLGregorianCalendar creationDate;
+
+  @XmlElement(required = true)
+  protected String version;
+
+  @XmlElement(required = true)
+  protected VAMSAS vamsasModel;
+
+  @XmlElement(name = "JSeq")
+  protected List<JalviewModel.JSeq> jSeq;
+
+  @XmlElement(name = "JGroup")
+  protected List<JalviewModel.JGroup> jGroup;
+
+  @XmlElement(name = "Viewport")
+  protected List<JalviewModel.Viewport> viewport;
+
+  @XmlElement(name = "UserColours")
+  protected List<JalviewModel.UserColours> userColours;
+
+  protected List<JalviewModel.Tree> tree;
+
+
+  @XmlElement(nillable=true)
+  protected String bhTest = "bhtest";
+
+  @XmlElement(name = "FeatureSettings")
+  protected JalviewModel.FeatureSettings featureSettings;
+
+  /**
+   * Gets the value of the creationDate property.
+   * 
+   * @return possible object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public XMLGregorianCalendar getCreationDate()
+  {
+    return creationDate;
+  }
+
+  /**
+   * Sets the value of the creationDate property.
+   * 
+   * @param value
+   *          allowed object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public void setCreationDate(XMLGregorianCalendar value)
+  {
+    this.creationDate = value;
+  }
+
+  /**
+   * Gets the value of the version property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getVersion()
+  {
+    return version;
+  }
+
+  /**
+   * Sets the value of the version property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setVersion(String value)
+  {
+    this.version = value;
+  }
+
+  /**
+   * Gets the value of the vamsasModel property.
+   * 
+   * @return possible object is {@link VAMSAS }
+   * 
+   */
+  public VAMSAS getVamsasModel()
+  {
+    return vamsasModel;
+  }
+
+  /**
+   * Sets the value of the vamsasModel property.
+   * 
+   * @param value
+   *          allowed object is {@link VAMSAS }
+   * 
+   */
+  public void setVamsasModel(VAMSAS value)
+  {
+    this.vamsasModel = value;
+  }
+
+  /**
+   * Gets the value of the jSeq property.
+   * 
+   * <p>
+   * This accessor method returns a reference to the live list, not a snapshot.
+   * Therefore any modification you make to the returned list will be present
+   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
+   * for the jSeq property.
+   * 
+   * <p>
+   * For example, to add a new item, do as follows:
+   * 
+   * <pre>
+   * getJSeq().add(newItem);
+   * </pre>
+   * 
+   * 
+   * <p>
+   * Objects of the following type(s) are allowed in the list
+   * {@link JalviewModel.JSeq }
+   * 
+   * 
+   */
+  public List<JalviewModel.JSeq> getJSeq()
+  {
+    if (jSeq == null)
+    {
+      jSeq = new ArrayList<JalviewModel.JSeq>();
+    }
+    return this.jSeq;
+  }
+
+  /**
+   * Gets the value of the jGroup property.
+   * 
+   * <p>
+   * This accessor method returns a reference to the live list, not a snapshot.
+   * Therefore any modification you make to the returned list will be present
+   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
+   * for the jGroup property.
+   * 
+   * <p>
+   * For example, to add a new item, do as follows:
+   * 
+   * <pre>
+   * getJGroup().add(newItem);
+   * </pre>
+   * 
+   * 
+   * <p>
+   * Objects of the following type(s) are allowed in the list
+   * {@link JalviewModel.JGroup }
+   * 
+   * 
+   */
+  public List<JalviewModel.JGroup> getJGroup()
+  {
+    if (jGroup == null)
+    {
+      jGroup = new ArrayList<JalviewModel.JGroup>();
+    }
+    return this.jGroup;
+  }
+
+  /**
+   * Gets the value of the viewport property.
+   * 
+   * <p>
+   * This accessor method returns a reference to the live list, not a snapshot.
+   * Therefore any modification you make to the returned list will be present
+   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
+   * for the viewport property.
+   * 
+   * <p>
+   * For example, to add a new item, do as follows:
+   * 
+   * <pre>
+   * getViewport().add(newItem);
+   * </pre>
+   * 
+   * 
+   * <p>
+   * Objects of the following type(s) are allowed in the list
+   * {@link JalviewModel.Viewport }
+   * 
+   * 
+   */
+  public List<JalviewModel.Viewport> getViewport()
+  {
+    if (viewport == null)
+    {
+      viewport = new ArrayList<JalviewModel.Viewport>();
+    }
+    return this.viewport;
+  }
+
+  /**
+   * Gets the value of the userColours property.
+   * 
+   * <p>
+   * This accessor method returns a reference to the live list, not a snapshot.
+   * Therefore any modification you make to the returned list will be present
+   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
+   * for the userColours property.
+   * 
+   * <p>
+   * For example, to add a new item, do as follows:
+   * 
+   * <pre>
+   * getUserColours().add(newItem);
+   * </pre>
+   * 
+   * 
+   * <p>
+   * Objects of the following type(s) are allowed in the list
+   * {@link JalviewModel.UserColours }
+   * 
+   * 
+   */
+  public List<JalviewModel.UserColours> getUserColours()
+  {
+    if (userColours == null)
+    {
+      userColours = new ArrayList<JalviewModel.UserColours>();
+    }
+    return this.userColours;
+  }
+
+  /**
+   * Gets the value of the tree property.
+   * 
+   * <p>
+   * This accessor method returns a reference to the live list, not a snapshot.
+   * Therefore any modification you make to the returned list will be present
+   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
+   * for the tree property.
+   * 
+   * <p>
+   * For example, to add a new item, do as follows:
+   * 
+   * <pre>
+   * getTree().add(newItem);
+   * </pre>
+   * 
+   * 
+   * <p>
+   * Objects of the following type(s) are allowed in the list
+   * {@link JalviewModel.Tree }
+   * 
+   * 
+   */
+  public List<JalviewModel.Tree> getTree()
+  {
+    if (tree == null)
+    {
+      tree = new ArrayList<JalviewModel.Tree>();
+    }
+    return this.tree;
+  }
+
+  /**
+   * Gets the value of the featureSettings property.
+   * 
+   * @return possible object is {@link JalviewModel.FeatureSettings }
+   * 
+   */
+  public JalviewModel.FeatureSettings getFeatureSettings()
+  {
+    return featureSettings;
+  }
+
+  /**
+   * Sets the value of the featureSettings property.
+   * 
+   * @param value
+   *          allowed object is {@link JalviewModel.FeatureSettings }
+   * 
+   */
+  public void setFeatureSettings(JalviewModel.FeatureSettings value)
+  {
+    this.featureSettings = value;
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence>
+   *         &lt;element name="setting" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 &lt;sequence>
+   *                   &lt;element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+   *                   &lt;element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
+   *                 &lt;/sequence>
+   *                 &lt;attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 &lt;attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                 &lt;attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 &lt;attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 &lt;attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+   *                 &lt;attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 &lt;attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 &lt;attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 &lt;attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 &lt;attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                 &lt;attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               &lt;/restriction>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *         &lt;element name="group" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               &lt;/restriction>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *       &lt;/sequence>
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(name = "", propOrder = { "setting", "group" })
+  public static class FeatureSettings
+  {
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.FeatureSettings.Setting> setting;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.FeatureSettings.Group> group;
+
+    /**
+     * Gets the value of the setting property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the setting property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getSetting().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.FeatureSettings.Setting }
+     * 
+     * 
+     */
+    public List<JalviewModel.FeatureSettings.Setting> getSetting()
+    {
+      if (setting == null)
+      {
+        setting = new ArrayList<JalviewModel.FeatureSettings.Setting>();
+      }
+      return this.setting;
+    }
+
+    /**
+     * Gets the value of the group property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the group property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getGroup().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.FeatureSettings.Group }
+     * 
+     * 
+     */
+    public List<JalviewModel.FeatureSettings.Group> getGroup()
+    {
+      if (group == null)
+      {
+        group = new ArrayList<JalviewModel.FeatureSettings.Group>();
+      }
+      return this.group;
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "")
+    public static class Group
+    {
+
+      @XmlAttribute(name = "name", required = true)
+      protected String name;
+
+      @XmlAttribute(name = "display", required = true)
+      protected boolean display;
+
+      /**
+       * Gets the value of the name property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getName()
+      {
+        return name;
+      }
+
+      /**
+       * Sets the value of the name property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setName(String value)
+      {
+        this.name = value;
+      }
+
+      /**
+       * Gets the value of the display property.
+       * 
+       */
+      public boolean isDisplay()
+      {
+        return display;
+      }
+
+      /**
+       * Sets the value of the display property.
+       * 
+       */
+      public void setDisplay(boolean value)
+      {
+        this.display = value;
+      }
+
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;sequence>
+     *         &lt;element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+     *         &lt;element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
+     *       &lt;/sequence>
+     *       &lt;attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       &lt;attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       &lt;attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       &lt;attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       &lt;attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+     *       &lt;attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       &lt;attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       &lt;attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       &lt;attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       &lt;attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       &lt;attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = { "attributeName", "matcherSet" })
+    public static class Setting
+    {
+
+      @XmlElement(namespace = "www.jalview.org")
+      protected List<String> attributeName;
+
+      @XmlElement(namespace = "www.jalview.org")
+      protected Object/*FeatureMatcherSet*/ matcherSet;
+
+      @XmlAttribute(name = "type", required = true)
+      protected String type;
+
+      @XmlAttribute(name = "colour", required = true)
+      protected int colour;
+
+      @XmlAttribute(name = "display", required = true)
+      protected boolean display;
+
+      @XmlAttribute(name = "order")
+      protected Float order;
+
+      @XmlAttribute(name = "mincolour")
+      protected Integer mincolour;
+
+      @XmlAttribute(name = "noValueColour")
+      protected Object/*NoValueColour*/ noValueColour;
+
+      @XmlAttribute(name = "threshold")
+      protected Float threshold;
+
+      @XmlAttribute(name = "threshstate")
+      protected Integer threshstate;
+
+      @XmlAttribute(name = "max")
+      protected Float max;
+
+      @XmlAttribute(name = "min")
+      protected Float min;
+
+      @XmlAttribute(name = "colourByLabel")
+      protected Boolean colourByLabel;
+
+      @XmlAttribute(name = "autoScale")
+      protected Boolean autoScale;
+
+      /**
+       * Gets the value of the attributeName property.
+       * 
+       * <p>
+       * This accessor method returns a reference to the live list, not a
+       * snapshot. Therefore any modification you make to the returned list will
+       * be present inside the JAXB object. This is why there is not a
+       * <CODE>set</CODE> method for the attributeName property.
+       * 
+       * <p>
+       * For example, to add a new item, do as follows:
+       * 
+       * <pre>
+       * getAttributeName().add(newItem);
+       * </pre>
+       * 
+       * 
+       * <p>
+       * Objects of the following type(s) are allowed in the list {@link String
+       * }
+       * 
+       * 
+       */
+      public List<String> getAttributeName()
+      {
+        if (attributeName == null)
+        {
+          attributeName = new ArrayList<String>();
+        }
+        return this.attributeName;
+      }
+
+      /**
+       * Gets the value of the matcherSet property.
+       * 
+       * @return possible object is {@link FeatureMatcherSet }
+       * 
+       */
+      public Object/*FeatureMatcherSet*/ getMatcherSet()
+      {
+        return matcherSet;
+      }
+
+      /**
+       * Sets the value of the matcherSet property.
+       * 
+       * @param value
+       *          allowed object is {@link FeatureMatcherSet }
+       * 
+       */
+      public void setMatcherSet(Object/*FeatureMatcherSet*/ value)
+      {
+        this.matcherSet = value;
+      }
+
+      /**
+       * Gets the value of the type property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getType()
+      {
+        return type;
+      }
+
+      /**
+       * Sets the value of the type property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setType(String value)
+      {
+        this.type = value;
+      }
+
+      /**
+       * Gets the value of the colour property.
+       * 
+       */
+      public int getColour()
+      {
+        return colour;
+      }
+
+      /**
+       * Sets the value of the colour property.
+       * 
+       */
+      public void setColour(int value)
+      {
+        this.colour = value;
+      }
+
+      /**
+       * Gets the value of the display property.
+       * 
+       */
+      public boolean isDisplay()
+      {
+        return display;
+      }
+
+      /**
+       * Sets the value of the display property.
+       * 
+       */
+      public void setDisplay(boolean value)
+      {
+        this.display = value;
+      }
+
+      /**
+       * Gets the value of the order property.
+       * 
+       * @return possible object is {@link Float }
+       * 
+       */
+      public Float getOrder()
+      {
+        return order;
+      }
+
+      /**
+       * Sets the value of the order property.
+       * 
+       * @param value
+       *          allowed object is {@link Float }
+       * 
+       */
+      public void setOrder(Float value)
+      {
+        this.order = value;
+      }
+
+      /**
+       * Gets the value of the mincolour property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getMincolour()
+      {
+        return mincolour;
+      }
+
+      /**
+       * Sets the value of the mincolour property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setMincolour(Integer value)
+      {
+        this.mincolour = value;
+      }
+
+      /**
+       * Gets the value of the noValueColour property.
+       * 
+       * @return possible object is {@link NoValueColour }
+       * 
+       */
+      public Object/*NoValueColour*/  getNoValueColour()
+      {
+        if (noValueColour == null)
+        {
+                                       return null/* NoValueColour */;// NoValueColour.MIN;
+        }
+        else
+        {
+          return noValueColour;
+        }
+      }
+
+      /**
+       * Sets the value of the noValueColour property.
+       * 
+       * @param value
+       *          allowed object is {@link NoValueColour }
+       * 
+       */
+      public void setNoValueColour(Object/*NoValueColour*/ value)
+      {
+        this.noValueColour = value;
+      }
+
+      /**
+       * Gets the value of the threshold property.
+       * 
+       * @return possible object is {@link Float }
+       * 
+       */
+      public Float getThreshold()
+      {
+        return threshold;
+      }
+
+      /**
+       * Sets the value of the threshold property.
+       * 
+       * @param value
+       *          allowed object is {@link Float }
+       * 
+       */
+      public void setThreshold(Float value)
+      {
+        this.threshold = value;
+      }
+
+      /**
+       * Gets the value of the threshstate property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getThreshstate()
+      {
+        return threshstate;
+      }
+
+      /**
+       * Sets the value of the threshstate property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setThreshstate(Integer value)
+      {
+        this.threshstate = value;
+      }
+
+      /**
+       * Gets the value of the max property.
+       * 
+       * @return possible object is {@link Float }
+       * 
+       */
+      public Float getMax()
+      {
+        return max;
+      }
+
+      /**
+       * Sets the value of the max property.
+       * 
+       * @param value
+       *          allowed object is {@link Float }
+       * 
+       */
+      public void setMax(Float value)
+      {
+        this.max = value;
+      }
+
+      /**
+       * Gets the value of the min property.
+       * 
+       * @return possible object is {@link Float }
+       * 
+       */
+      public Float getMin()
+      {
+        return min;
+      }
+
+      /**
+       * Sets the value of the min property.
+       * 
+       * @param value
+       *          allowed object is {@link Float }
+       * 
+       */
+      public void setMin(Float value)
+      {
+        this.min = value;
+      }
+
+      /**
+       * Gets the value of the colourByLabel property.
+       * 
+       * @return possible object is {@link Boolean }
+       * 
+       */
+      public Boolean isColourByLabel()
+      {
+        return colourByLabel;
+      }
+
+      /**
+       * Sets the value of the colourByLabel property.
+       * 
+       * @param value
+       *          allowed object is {@link Boolean }
+       * 
+       */
+      public void setColourByLabel(Boolean value)
+      {
+        this.colourByLabel = value;
+      }
+
+      /**
+       * Gets the value of the autoScale property.
+       * 
+       * @return possible object is {@link Boolean }
+       * 
+       */
+      public Boolean isAutoScale()
+      {
+        return autoScale;
+      }
+
+      /**
+       * Sets the value of the autoScale property.
+       * 
+       * @param value
+       *          allowed object is {@link Boolean }
+       * 
+       */
+      public void setAutoScale(Boolean value)
+      {
+        this.autoScale = value;
+      }
+
+    }
+
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence>
+   *         &lt;element name="seq" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+   *         &lt;element name="annotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+   *       &lt;/sequence>
+   *       &lt;attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="outlineColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="displayBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="displayText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="colourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(name = "", propOrder = { "seq", "annotationColours" })
+  public static class JGroup
+  {
+
+    @XmlElement(namespace = "www.jalview.org", required = true)
+    protected List<String> seq;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected AnnotationColourScheme annotationColours;
+
+    @XmlAttribute(name = "start")
+    protected Integer start;
+
+    @XmlAttribute(name = "end")
+    protected Integer end;
+
+    @XmlAttribute(name = "name")
+    protected String name;
+
+    @XmlAttribute(name = "colour")
+    protected String colour;
+
+    @XmlAttribute(name = "consThreshold")
+    protected Integer consThreshold;
+
+    @XmlAttribute(name = "pidThreshold")
+    protected Integer pidThreshold;
+
+    @XmlAttribute(name = "outlineColour")
+    protected Integer outlineColour;
+
+    @XmlAttribute(name = "displayBoxes")
+    protected Boolean displayBoxes;
+
+    @XmlAttribute(name = "displayText")
+    protected Boolean displayText;
+
+    @XmlAttribute(name = "colourText")
+    protected Boolean colourText;
+
+    @XmlAttribute(name = "textCol1")
+    protected Integer textCol1;
+
+    @XmlAttribute(name = "textCol2")
+    protected Integer textCol2;
+
+    @XmlAttribute(name = "textColThreshold")
+    protected Integer textColThreshold;
+
+    @XmlAttribute(name = "showUnconserved")
+    protected Boolean showUnconserved;
+
+    @XmlAttribute(name = "ignoreGapsinConsensus")
+    protected Boolean ignoreGapsinConsensus;
+
+    @XmlAttribute(name = "showConsensusHistogram")
+    protected Boolean showConsensusHistogram;
+
+    @XmlAttribute(name = "showSequenceLogo")
+    protected Boolean showSequenceLogo;
+
+    @XmlAttribute(name = "normaliseSequenceLogo")
+    protected Boolean normaliseSequenceLogo;
+
+    @XmlAttribute(name = "id")
+    protected String id;
+
+    /**
+     * Gets the value of the seq property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the seq property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getSeq().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link String }
+     * 
+     * 
+     */
+    public List<String> getSeq()
+    {
+      if (seq == null)
+      {
+        seq = new ArrayList<String>();
+      }
+      return this.seq;
+    }
+
+    /**
+     * Gets the value of the annotationColours property.
+     * 
+     * @return possible object is {@link AnnotationColourScheme }
+     * 
+     */
+    public AnnotationColourScheme getAnnotationColours()
+    {
+      return annotationColours;
+    }
+
+    /**
+     * Sets the value of the annotationColours property.
+     * 
+     * @param value
+     *          allowed object is {@link AnnotationColourScheme }
+     * 
+     */
+    public void setAnnotationColours(AnnotationColourScheme value)
+    {
+      this.annotationColours = value;
+    }
+
+    /**
+     * Gets the value of the start property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getStart()
+    {
+      return start;
+    }
+
+    /**
+     * Sets the value of the start property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setStart(Integer value)
+    {
+      this.start = value;
+    }
+
+    /**
+     * Gets the value of the end property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getEnd()
+    {
+      return end;
+    }
+
+    /**
+     * Sets the value of the end property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setEnd(Integer value)
+    {
+      this.end = value;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getName()
+    {
+      return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setName(String value)
+    {
+      this.name = value;
+    }
+
+    /**
+     * Gets the value of the colour property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getColour()
+    {
+      return colour;
+    }
+
+    /**
+     * Sets the value of the colour property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setColour(String value)
+    {
+      this.colour = value;
+    }
+
+    /**
+     * Gets the value of the consThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getConsThreshold()
+    {
+      return consThreshold;
+    }
+
+    /**
+     * Sets the value of the consThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setConsThreshold(Integer value)
+    {
+      this.consThreshold = value;
+    }
+
+    /**
+     * Gets the value of the pidThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getPidThreshold()
+    {
+      return pidThreshold;
+    }
+
+    /**
+     * Sets the value of the pidThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setPidThreshold(Integer value)
+    {
+      this.pidThreshold = value;
+    }
+
+    /**
+     * Gets the value of the outlineColour property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getOutlineColour()
+    {
+      return outlineColour;
+    }
+
+    /**
+     * Sets the value of the outlineColour property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setOutlineColour(Integer value)
+    {
+      this.outlineColour = value;
+    }
+
+    /**
+     * Gets the value of the displayBoxes property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isDisplayBoxes()
+    {
+      return displayBoxes;
+    }
+
+    /**
+     * Sets the value of the displayBoxes property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setDisplayBoxes(Boolean value)
+    {
+      this.displayBoxes = value;
+    }
+
+    /**
+     * Gets the value of the displayText property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isDisplayText()
+    {
+      return displayText;
+    }
+
+    /**
+     * Sets the value of the displayText property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setDisplayText(Boolean value)
+    {
+      this.displayText = value;
+    }
+
+    /**
+     * Gets the value of the colourText property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isColourText()
+    {
+      return colourText;
+    }
+
+    /**
+     * Sets the value of the colourText property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setColourText(Boolean value)
+    {
+      this.colourText = value;
+    }
+
+    /**
+     * Gets the value of the textCol1 property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextCol1()
+    {
+      return textCol1;
+    }
+
+    /**
+     * Sets the value of the textCol1 property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextCol1(Integer value)
+    {
+      this.textCol1 = value;
+    }
+
+    /**
+     * Gets the value of the textCol2 property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextCol2()
+    {
+      return textCol2;
+    }
+
+    /**
+     * Sets the value of the textCol2 property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextCol2(Integer value)
+    {
+      this.textCol2 = value;
+    }
+
+    /**
+     * Gets the value of the textColThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextColThreshold()
+    {
+      return textColThreshold;
+    }
+
+    /**
+     * Sets the value of the textColThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextColThreshold(Integer value)
+    {
+      this.textColThreshold = value;
+    }
+
+    /**
+     * Gets the value of the showUnconserved property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowUnconserved()
+    {
+      return showUnconserved;
+    }
+
+    /**
+     * Sets the value of the showUnconserved property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowUnconserved(Boolean value)
+    {
+      this.showUnconserved = value;
+    }
+
+    /**
+     * Gets the value of the ignoreGapsinConsensus property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isIgnoreGapsinConsensus()
+    {
+      if (ignoreGapsinConsensus == null)
+      {
+        return true;
+      }
+      else
+      {
+        return ignoreGapsinConsensus;
+      }
+    }
+
+    /**
+     * Sets the value of the ignoreGapsinConsensus property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setIgnoreGapsinConsensus(Boolean value)
+    {
+      this.ignoreGapsinConsensus = value;
+    }
+
+    /**
+     * Gets the value of the showConsensusHistogram property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowConsensusHistogram()
+    {
+      if (showConsensusHistogram == null)
+      {
+        return true;
+      }
+      else
+      {
+        return showConsensusHistogram;
+      }
+    }
+
+    /**
+     * Sets the value of the showConsensusHistogram property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowConsensusHistogram(Boolean value)
+    {
+      this.showConsensusHistogram = value;
+    }
+
+    /**
+     * Gets the value of the showSequenceLogo property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowSequenceLogo()
+    {
+      if (showSequenceLogo == null)
+      {
+        return false;
+      }
+      else
+      {
+        return showSequenceLogo;
+      }
+    }
+
+    /**
+     * Sets the value of the showSequenceLogo property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowSequenceLogo(Boolean value)
+    {
+      this.showSequenceLogo = value;
+    }
+
+    /**
+     * Gets the value of the normaliseSequenceLogo property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isNormaliseSequenceLogo()
+    {
+      if (normaliseSequenceLogo == null)
+      {
+        return false;
+      }
+      else
+      {
+        return normaliseSequenceLogo;
+      }
+    }
+
+    /**
+     * Sets the value of the normaliseSequenceLogo property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setNormaliseSequenceLogo(Boolean value)
+    {
+      this.normaliseSequenceLogo = value;
+    }
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getId()
+    {
+      return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setId(String value)
+    {
+      this.id = value;
+    }
+
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence>
+   *         &lt;element name="features" type="{www.jalview.org}feature" maxOccurs="unbounded" minOccurs="0"/>
+   *         &lt;element name="pdbids" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;extension base="{www.jalview.org}pdbentry">
+   *                 &lt;sequence>
+   *                   &lt;element name="structureState" maxOccurs="unbounded" minOccurs="0">
+   *                     &lt;complexType>
+   *                       &lt;simpleContent>
+   *                         &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+   *                           &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+   *                           &lt;attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                           &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           &lt;attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *                           &lt;attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                           &lt;attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *                           &lt;attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                         &lt;/extension>
+   *                       &lt;/simpleContent>
+   *                     &lt;/complexType>
+   *                   &lt;/element>
+   *                 &lt;/sequence>
+   *               &lt;/extension>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *         &lt;element name="hiddenSequences" type="{http://www.w3.org/2001/XMLSchema}int" maxOccurs="unbounded" minOccurs="0"/>
+   *         &lt;element name="rnaViewer" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 &lt;sequence>
+   *                   &lt;element name="secondaryStructure" maxOccurs="unbounded">
+   *                     &lt;complexType>
+   *                       &lt;complexContent>
+   *                         &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                           &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           &lt;attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           &lt;attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                           &lt;attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                         &lt;/restriction>
+   *                       &lt;/complexContent>
+   *                     &lt;/complexType>
+   *                   &lt;/element>
+   *                 &lt;/sequence>
+   *                 &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+   *                 &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 &lt;attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 &lt;attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *               &lt;/restriction>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *       &lt;/sequence>
+   *       &lt;attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="hidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="viewreference" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(
+    name = "",
+    propOrder =
+    { "features", "pdbids", "hiddenSequences", "rnaViewer" })
+  public static class JSeq
+  {
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<Object/*Feature*/> features;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.JSeq.Pdbids> pdbids;
+
+    @XmlElement(namespace = "www.jalview.org", type = Integer.class)
+    protected List<Integer> hiddenSequences;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.JSeq.RnaViewer> rnaViewer;
+
+    @XmlAttribute(name = "colour")
+    protected Integer colour;
+
+    @XmlAttribute(name = "start", required = true)
+    protected int start;
+
+    @XmlAttribute(name = "end", required = true)
+    protected int end;
+
+    @XmlAttribute(name = "id", required = true)
+    protected String id;
+
+    @XmlAttribute(name = "hidden")
+    protected Boolean hidden;
+
+    @XmlAttribute(name = "viewreference")
+    protected Boolean viewreference;
+
+    /**
+     * Gets the value of the features property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the features property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getFeatures().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link Feature }
+     * 
+     * 
+     */
+    public List<Object/*Feature*/> getFeatures()
+    {
+      if (features == null)
+      {
+        features = new ArrayList<Object/*Feature*/>();
+      }
+      return this.features;
+    }
+
+    /**
+     * Gets the value of the pdbids property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the pdbids property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getPdbids().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.JSeq.Pdbids }
+     * 
+     * 
+     */
+    public List<JalviewModel.JSeq.Pdbids> getPdbids()
+    {
+      if (pdbids == null)
+      {
+        pdbids = new ArrayList<JalviewModel.JSeq.Pdbids>();
+      }
+      return this.pdbids;
+    }
+
+    /**
+     * Gets the value of the hiddenSequences property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the hiddenSequences property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getHiddenSequences().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link Integer }
+     * 
+     * 
+     */
+    public List<Integer> getHiddenSequences()
+    {
+      if (hiddenSequences == null)
+      {
+        hiddenSequences = new ArrayList<Integer>();
+      }
+      return this.hiddenSequences;
+    }
+
+    /**
+     * Gets the value of the rnaViewer property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the rnaViewer property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getRnaViewer().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.JSeq.RnaViewer }
+     * 
+     * 
+     */
+    public List<JalviewModel.JSeq.RnaViewer> getRnaViewer()
+    {
+      if (rnaViewer == null)
+      {
+        rnaViewer = new ArrayList<JalviewModel.JSeq.RnaViewer>();
+      }
+      return this.rnaViewer;
+    }
+
+    /**
+     * Gets the value of the colour property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getColour()
+    {
+      return colour;
+    }
+
+    /**
+     * Sets the value of the colour property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setColour(Integer value)
+    {
+      this.colour = value;
+    }
+
+    /**
+     * Gets the value of the start property.
+     * 
+     */
+    public int getStart()
+    {
+      return start;
+    }
+
+    /**
+     * Sets the value of the start property.
+     * 
+     */
+    public void setStart(int value)
+    {
+      this.start = value;
+    }
+
+    /**
+     * Gets the value of the end property.
+     * 
+     */
+    public int getEnd()
+    {
+      return end;
+    }
+
+    /**
+     * Sets the value of the end property.
+     * 
+     */
+    public void setEnd(int value)
+    {
+      this.end = value;
+    }
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getId()
+    {
+      return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setId(String value)
+    {
+      this.id = value;
+    }
+
+    /**
+     * Gets the value of the hidden property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isHidden()
+    {
+      return hidden;
+    }
+
+    /**
+     * Sets the value of the hidden property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setHidden(Boolean value)
+    {
+      this.hidden = value;
+    }
+
+    /**
+     * Gets the value of the viewreference property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isViewreference()
+    {
+      return viewreference;
+    }
+
+    /**
+     * Sets the value of the viewreference property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setViewreference(Boolean value)
+    {
+      this.viewreference = value;
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;extension base="{www.jalview.org}pdbentry">
+     *       &lt;sequence>
+     *         &lt;element name="structureState" maxOccurs="unbounded" minOccurs="0">
+     *           &lt;complexType>
+     *             &lt;simpleContent>
+     *               &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+     *                 &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+     *                 &lt;attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *                 &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 &lt;attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+     *                 &lt;attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *                 &lt;attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+     *                 &lt;attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *               &lt;/extension>
+     *             &lt;/simpleContent>
+     *           &lt;/complexType>
+     *         &lt;/element>
+     *       &lt;/sequence>
+     *     &lt;/extension>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = { "structureState" })
+    public static class Pdbids //extends Pdbentry
+    {
+
+      @XmlElement(namespace = "www.jalview.org")
+      protected List<JalviewModel.JSeq.Pdbids.StructureState> structureState;
+
+      /**
+       * Gets the value of the structureState property.
+       * 
+       * <p>
+       * This accessor method returns a reference to the live list, not a
+       * snapshot. Therefore any modification you make to the returned list will
+       * be present inside the JAXB object. This is why there is not a
+       * <CODE>set</CODE> method for the structureState property.
+       * 
+       * <p>
+       * For example, to add a new item, do as follows:
+       * 
+       * <pre>
+       * getStructureState().add(newItem);
+       * </pre>
+       * 
+       * 
+       * <p>
+       * Objects of the following type(s) are allowed in the list
+       * {@link JalviewModel.JSeq.Pdbids.StructureState }
+       * 
+       * 
+       */
+      public List<JalviewModel.JSeq.Pdbids.StructureState> getStructureState()
+      {
+        if (structureState == null)
+        {
+          structureState = new ArrayList<JalviewModel.JSeq.Pdbids.StructureState>();
+        }
+        return this.structureState;
+      }
+
+      /**
+       * <p>
+       * Java class for anonymous complex type.
+       * 
+       * <p>
+       * The following schema fragment specifies the expected content contained
+       * within this class.
+       * 
+       * <pre>
+       * &lt;complexType>
+       *   &lt;simpleContent>
+       *     &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+       *       &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+       *       &lt;attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+       *       &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       &lt;attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+       *       &lt;attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+       *       &lt;attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+       *       &lt;attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *     &lt;/extension>
+       *   &lt;/simpleContent>
+       * &lt;/complexType>
+       * </pre>
+       * 
+       * 
+       */
+      @XmlAccessorType(XmlAccessType.FIELD)
+      @XmlType(name = "", propOrder = { "value" })
+      public static class StructureState
+      {
+
+        @XmlValue
+        protected String value;
+
+        @XmlAttribute(name = "visible")
+        protected Boolean visible;
+
+        @XmlAttribute(name = "viewId")
+        protected String viewId;
+
+        @XmlAttribute(name = "alignwithAlignPanel")
+        protected Boolean alignwithAlignPanel;
+
+        @XmlAttribute(name = "colourwithAlignPanel")
+        protected Boolean colourwithAlignPanel;
+
+        @XmlAttribute(name = "colourByJmol")
+        protected Boolean colourByJmol;
+
+        @XmlAttribute(name = "type")
+        protected String type;
+
+        @XmlAttribute(name = "width")
+        protected Integer width;
+
+        @XmlAttribute(name = "height")
+        protected Integer height;
+
+        @XmlAttribute(name = "xpos")
+        protected Integer xpos;
+
+        @XmlAttribute(name = "ypos")
+        protected Integer ypos;
+
+        /**
+         * Gets the value of the value property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getValue()
+        {
+          return value;
+        }
+
+        /**
+         * Sets the value of the value property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setValue(String value)
+        {
+          this.value = value;
+        }
+
+        /**
+         * Gets the value of the visible property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public Boolean isVisible()
+        {
+          return visible;
+        }
+
+        /**
+         * Sets the value of the visible property.
+         * 
+         * @param value
+         *          allowed object is {@link Boolean }
+         * 
+         */
+        public void setVisible(Boolean value)
+        {
+          this.visible = value;
+        }
+
+        /**
+         * Gets the value of the viewId property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getViewId()
+        {
+          return viewId;
+        }
+
+        /**
+         * Sets the value of the viewId property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setViewId(String value)
+        {
+          this.viewId = value;
+        }
+
+        /**
+         * Gets the value of the alignwithAlignPanel property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public boolean isAlignwithAlignPanel()
+        {
+          if (alignwithAlignPanel == null)
+          {
+            return true;
+          }
+          else
+          {
+            return alignwithAlignPanel;
+          }
+        }
+
+        /**
+         * Sets the value of the alignwithAlignPanel property.
+         * 
+         * @param value
+         *          allowed object is {@link Boolean }
+         * 
+         */
+        public void setAlignwithAlignPanel(Boolean value)
+        {
+          this.alignwithAlignPanel = value;
+        }
+
+        /**
+         * Gets the value of the colourwithAlignPanel property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public boolean isColourwithAlignPanel()
+        {
+          if (colourwithAlignPanel == null)
+          {
+            return false;
+          }
+          else
+          {
+            return colourwithAlignPanel;
+          }
+        }
+
+        /**
+         * Sets the value of the colourwithAlignPanel property.
+         * 
+         * @param value
+         *          allowed object is {@link Boolean }
+         * 
+         */
+        public void setColourwithAlignPanel(Boolean value)
+        {
+          this.colourwithAlignPanel = value;
+        }
+
+        /**
+         * Gets the value of the colourByJmol property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public boolean isColourByJmol()
+        {
+          if (colourByJmol == null)
+          {
+            return true;
+          }
+          else
+          {
+            return colourByJmol;
+          }
+        }
+
+        /**
+         * Sets the value of the colourByJmol property.
+         * 
+         * @param value
+         *          allowed object is {@link Boolean }
+         * 
+         */
+        public void setColourByJmol(Boolean value)
+        {
+          this.colourByJmol = value;
+        }
+
+        /**
+         * Gets the value of the type property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getType()
+        {
+          return type;
+        }
+
+        /**
+         * Sets the value of the type property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setType(String value)
+        {
+          this.type = value;
+        }
+
+        /**
+         * Gets the value of the width property.
+         * 
+         * @return possible object is {@link Integer }
+         * 
+         */
+        public Integer getWidth()
+        {
+          return width;
+        }
+
+        /**
+         * Sets the value of the width property.
+         * 
+         * @param value
+         *          allowed object is {@link Integer }
+         * 
+         */
+        public void setWidth(Integer value)
+        {
+          this.width = value;
+        }
+
+        /**
+         * Gets the value of the height property.
+         * 
+         * @return possible object is {@link Integer }
+         * 
+         */
+        public Integer getHeight()
+        {
+          return height;
+        }
+
+        /**
+         * Sets the value of the height property.
+         * 
+         * @param value
+         *          allowed object is {@link Integer }
+         * 
+         */
+        public void setHeight(Integer value)
+        {
+          this.height = value;
+        }
+
+        /**
+         * Gets the value of the xpos property.
+         * 
+         * @return possible object is {@link Integer }
+         * 
+         */
+        public Integer getXpos()
+        {
+          return xpos;
+        }
+
+        /**
+         * Sets the value of the xpos property.
+         * 
+         * @param value
+         *          allowed object is {@link Integer }
+         * 
+         */
+        public void setXpos(Integer value)
+        {
+          this.xpos = value;
+        }
+
+        /**
+         * Gets the value of the ypos property.
+         * 
+         * @return possible object is {@link Integer }
+         * 
+         */
+        public Integer getYpos()
+        {
+          return ypos;
+        }
+
+        /**
+         * Sets the value of the ypos property.
+         * 
+         * @param value
+         *          allowed object is {@link Integer }
+         * 
+         */
+        public void setYpos(Integer value)
+        {
+          this.ypos = value;
+        }
+
+      }
+
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;sequence>
+     *         &lt;element name="secondaryStructure" maxOccurs="unbounded">
+     *           &lt;complexType>
+     *             &lt;complexContent>
+     *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *                 &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 &lt;attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 &lt;attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *                 &lt;attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *               &lt;/restriction>
+     *             &lt;/complexContent>
+     *           &lt;/complexType>
+     *         &lt;/element>
+     *       &lt;/sequence>
+     *       &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+     *       &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       &lt;attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = { "secondaryStructure" })
+    public static class RnaViewer
+    {
+
+      @XmlElement(namespace = "www.jalview.org", required = true)
+      protected List<JalviewModel.JSeq.RnaViewer.SecondaryStructure> secondaryStructure;
+
+      @XmlAttribute(name = "title")
+      protected String title;
+
+      @XmlAttribute(name = "viewId")
+      protected String viewId;
+
+      @XmlAttribute(name = "dividerLocation")
+      protected Integer dividerLocation;
+
+      @XmlAttribute(name = "selectedRna")
+      protected Integer selectedRna;
+
+      @XmlAttribute(name = "width")
+      protected Integer width;
+
+      @XmlAttribute(name = "height")
+      protected Integer height;
+
+      @XmlAttribute(name = "xpos")
+      protected Integer xpos;
+
+      @XmlAttribute(name = "ypos")
+      protected Integer ypos;
+
+      /**
+       * Gets the value of the secondaryStructure property.
+       * 
+       * <p>
+       * This accessor method returns a reference to the live list, not a
+       * snapshot. Therefore any modification you make to the returned list will
+       * be present inside the JAXB object. This is why there is not a
+       * <CODE>set</CODE> method for the secondaryStructure property.
+       * 
+       * <p>
+       * For example, to add a new item, do as follows:
+       * 
+       * <pre>
+       * getSecondaryStructure().add(newItem);
+       * </pre>
+       * 
+       * 
+       * <p>
+       * Objects of the following type(s) are allowed in the list
+       * {@link JalviewModel.JSeq.RnaViewer.SecondaryStructure }
+       * 
+       * 
+       */
+      public List<JalviewModel.JSeq.RnaViewer.SecondaryStructure> getSecondaryStructure()
+      {
+        if (secondaryStructure == null)
+        {
+          secondaryStructure = new ArrayList<JalviewModel.JSeq.RnaViewer.SecondaryStructure>();
+        }
+        return this.secondaryStructure;
+      }
+
+      /**
+       * Gets the value of the title property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getTitle()
+      {
+        return title;
+      }
+
+      /**
+       * Sets the value of the title property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setTitle(String value)
+      {
+        this.title = value;
+      }
+
+      /**
+       * Gets the value of the viewId property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getViewId()
+      {
+        return viewId;
+      }
+
+      /**
+       * Sets the value of the viewId property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setViewId(String value)
+      {
+        this.viewId = value;
+      }
+
+      /**
+       * Gets the value of the dividerLocation property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getDividerLocation()
+      {
+        return dividerLocation;
+      }
+
+      /**
+       * Sets the value of the dividerLocation property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setDividerLocation(Integer value)
+      {
+        this.dividerLocation = value;
+      }
+
+      /**
+       * Gets the value of the selectedRna property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getSelectedRna()
+      {
+        return selectedRna;
+      }
+
+      /**
+       * Sets the value of the selectedRna property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setSelectedRna(Integer value)
+      {
+        this.selectedRna = value;
+      }
+
+      /**
+       * Gets the value of the width property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getWidth()
+      {
+        return width;
+      }
+
+      /**
+       * Sets the value of the width property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setWidth(Integer value)
+      {
+        this.width = value;
+      }
+
+      /**
+       * Gets the value of the height property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getHeight()
+      {
+        return height;
+      }
+
+      /**
+       * Sets the value of the height property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setHeight(Integer value)
+      {
+        this.height = value;
+      }
+
+      /**
+       * Gets the value of the xpos property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getXpos()
+      {
+        return xpos;
+      }
+
+      /**
+       * Sets the value of the xpos property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setXpos(Integer value)
+      {
+        this.xpos = value;
+      }
+
+      /**
+       * Gets the value of the ypos property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getYpos()
+      {
+        return ypos;
+      }
+
+      /**
+       * Sets the value of the ypos property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setYpos(Integer value)
+      {
+        this.ypos = value;
+      }
+
+      /**
+       * <p>
+       * Java class for anonymous complex type.
+       * 
+       * <p>
+       * The following schema fragment specifies the expected content contained
+       * within this class.
+       * 
+       * <pre>
+       * &lt;complexType>
+       *   &lt;complexContent>
+       *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+       *       &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       &lt;attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       &lt;attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+       *       &lt;attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *     &lt;/restriction>
+       *   &lt;/complexContent>
+       * &lt;/complexType>
+       * </pre>
+       * 
+       * 
+       */
+      @XmlAccessorType(XmlAccessType.FIELD)
+      @XmlType(name = "")
+      public static class SecondaryStructure
+      {
+
+        @XmlAttribute(name = "title")
+        protected String title;
+
+        @XmlAttribute(name = "annotationId", required = true)
+        protected String annotationId;
+
+        @XmlAttribute(name = "gapped")
+        protected Boolean gapped;
+
+        @XmlAttribute(name = "viewerState")
+        protected String viewerState;
+
+        /**
+         * Gets the value of the title property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getTitle()
+        {
+          return title;
+        }
+
+        /**
+         * Sets the value of the title property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setTitle(String value)
+        {
+          this.title = value;
+        }
+
+        /**
+         * Gets the value of the annotationId property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getAnnotationId()
+        {
+          return annotationId;
+        }
+
+        /**
+         * Sets the value of the annotationId property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setAnnotationId(String value)
+        {
+          this.annotationId = value;
+        }
+
+        /**
+         * Gets the value of the gapped property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public Boolean isGapped()
+        {
+          return gapped;
+        }
+
+        /**
+         * Sets the value of the gapped property.
+         * 
+         * @param value
+         *          allowed object is {@link Boolean }
+         * 
+         */
+        public void setGapped(Boolean value)
+        {
+          this.gapped = value;
+        }
+
+        /**
+         * Gets the value of the viewerState property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getViewerState()
+        {
+          return viewerState;
+        }
+
+        /**
+         * Sets the value of the viewerState property.
+         * 
+         * @param value
+         *          allowed object is {@link String }
+         * 
+         */
+        public void setViewerState(String value)
+        {
+          this.viewerState = value;
+        }
+
+      }
+
+    }
+
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence minOccurs="0">
+   *         &lt;element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *         &lt;element name="newick" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *       &lt;/sequence>
+   *       &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+   *       &lt;attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       &lt;attribute name="showBootstrap" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showDistances" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="markUnlinked" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="fitToWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="currentTree" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(name = "", propOrder = { "title", "newick" })
+  public static class Tree
+  {
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected String title;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected String newick;
+
+    @XmlAttribute(name = "fontName")
+    protected String fontName;
+
+    @XmlAttribute(name = "fontSize")
+    protected Integer fontSize;
+
+    @XmlAttribute(name = "fontStyle")
+    protected Integer fontStyle;
+
+    @XmlAttribute(name = "threshold")
+    protected Float threshold;
+
+    @XmlAttribute(name = "showBootstrap")
+    protected Boolean showBootstrap;
+
+    @XmlAttribute(name = "showDistances")
+    protected Boolean showDistances;
+
+    @XmlAttribute(name = "markUnlinked")
+    protected Boolean markUnlinked;
+
+    @XmlAttribute(name = "fitToWindow")
+    protected Boolean fitToWindow;
+
+    @XmlAttribute(name = "currentTree")
+    protected Boolean currentTree;
+
+    @XmlAttribute(name = "id")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    @XmlID
+    @XmlSchemaType(name = "ID")
+    protected String id;
+
+    @XmlAttribute(name = "width")
+    protected Integer width;
+
+    @XmlAttribute(name = "height")
+    protected Integer height;
+
+    @XmlAttribute(name = "xpos")
+    protected Integer xpos;
+
+    @XmlAttribute(name = "ypos")
+    protected Integer ypos;
+
+    /**
+     * Gets the value of the title property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getTitle()
+    {
+      return title;
+    }
+
+    /**
+     * Sets the value of the title property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setTitle(String value)
+    {
+      this.title = value;
+    }
+
+    /**
+     * Gets the value of the newick property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getNewick()
+    {
+      return newick;
+    }
+
+    /**
+     * Sets the value of the newick property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setNewick(String value)
+    {
+      this.newick = value;
+    }
+
+    /**
+     * Gets the value of the fontName property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getFontName()
+    {
+      return fontName;
+    }
+
+    /**
+     * Sets the value of the fontName property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setFontName(String value)
+    {
+      this.fontName = value;
+    }
+
+    /**
+     * Gets the value of the fontSize property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getFontSize()
+    {
+      return fontSize;
+    }
+
+    /**
+     * Sets the value of the fontSize property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setFontSize(Integer value)
+    {
+      this.fontSize = value;
+    }
+
+    /**
+     * Gets the value of the fontStyle property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getFontStyle()
+    {
+      return fontStyle;
+    }
+
+    /**
+     * Sets the value of the fontStyle property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setFontStyle(Integer value)
+    {
+      this.fontStyle = value;
+    }
+
+    /**
+     * Gets the value of the threshold property.
+     * 
+     * @return possible object is {@link Float }
+     * 
+     */
+    public Float getThreshold()
+    {
+      return threshold;
+    }
+
+    /**
+     * Sets the value of the threshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Float }
+     * 
+     */
+    public void setThreshold(Float value)
+    {
+      this.threshold = value;
+    }
+
+    /**
+     * Gets the value of the showBootstrap property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowBootstrap()
+    {
+      return showBootstrap;
+    }
+
+    /**
+     * Sets the value of the showBootstrap property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowBootstrap(Boolean value)
+    {
+      this.showBootstrap = value;
+    }
+
+    /**
+     * Gets the value of the showDistances property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowDistances()
+    {
+      return showDistances;
+    }
+
+    /**
+     * Sets the value of the showDistances property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowDistances(Boolean value)
+    {
+      this.showDistances = value;
+    }
+
+    /**
+     * Gets the value of the markUnlinked property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isMarkUnlinked()
+    {
+      return markUnlinked;
+    }
+
+    /**
+     * Sets the value of the markUnlinked property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setMarkUnlinked(Boolean value)
+    {
+      this.markUnlinked = value;
+    }
+
+    /**
+     * Gets the value of the fitToWindow property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isFitToWindow()
+    {
+      return fitToWindow;
+    }
+
+    /**
+     * Sets the value of the fitToWindow property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setFitToWindow(Boolean value)
+    {
+      this.fitToWindow = value;
+    }
+
+    /**
+     * Gets the value of the currentTree property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isCurrentTree()
+    {
+      return currentTree;
+    }
+
+    /**
+     * Sets the value of the currentTree property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setCurrentTree(Boolean value)
+    {
+      this.currentTree = value;
+    }
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getId()
+    {
+      return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setId(String value)
+    {
+      this.id = value;
+    }
+
+    /**
+     * Gets the value of the width property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getWidth()
+    {
+      return width;
+    }
+
+    /**
+     * Sets the value of the width property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setWidth(Integer value)
+    {
+      this.width = value;
+    }
+
+    /**
+     * Gets the value of the height property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getHeight()
+    {
+      return height;
+    }
+
+    /**
+     * Sets the value of the height property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setHeight(Integer value)
+    {
+      this.height = value;
+    }
+
+    /**
+     * Gets the value of the xpos property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getXpos()
+    {
+      return xpos;
+    }
+
+    /**
+     * Sets the value of the xpos property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setXpos(Integer value)
+    {
+      this.xpos = value;
+    }
+
+    /**
+     * Gets the value of the ypos property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getYpos()
+    {
+      return ypos;
+    }
+
+    /**
+     * Sets the value of the ypos property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setYpos(Integer value)
+    {
+      this.ypos = value;
+    }
+
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence>
+   *         &lt;element name="UserColourScheme" type="{www.jalview.org/colours}JalviewUserColours"/>
+   *       &lt;/sequence>
+   *       &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(name = "", propOrder = { "userColourScheme" })
+  public static class UserColours
+  {
+
+    @XmlElement(
+      name = "UserColourScheme",
+      namespace = "www.jalview.org",
+      required = true)
+    protected Object/*JalviewUserColours*/ userColourScheme;
+
+    @XmlAttribute(name = "id")
+    protected String id;
+
+    /**
+     * Gets the value of the userColourScheme property.
+     * 
+     * @return possible object is {@link JalviewUserColours }
+     * 
+     */
+    public Object/*JalviewUserColours*/ getUserColourScheme()
+    {
+      return userColourScheme;
+    }
+
+    /**
+     * Sets the value of the userColourScheme property.
+     * 
+     * @param value
+     *          allowed object is {@link JalviewUserColours }
+     * 
+     */
+    public void setUserColourScheme(Object/*JalviewUserColours*/ value)
+    {
+      this.userColourScheme = value;
+    }
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getId()
+    {
+      return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setId(String value)
+    {
+      this.id = value;
+    }
+
+  }
+
+  /**
+   * <p>
+   * Java class for anonymous complex type.
+   * 
+   * <p>
+   * The following schema fragment specifies the expected content contained
+   * within this class.
+   * 
+   * <pre>
+   * &lt;complexType>
+   *   &lt;complexContent>
+   *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       &lt;sequence>
+   *         &lt;element name="AnnotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+   *         &lt;element name="hiddenColumns" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 &lt;attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 &lt;attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *               &lt;/restriction>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *         &lt;element name="calcIdParam" maxOccurs="unbounded" minOccurs="0">
+   *           &lt;complexType>
+   *             &lt;complexContent>
+   *               &lt;extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
+   *                 &lt;attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 &lt;attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                 &lt;attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               &lt;/extension>
+   *             &lt;/complexContent>
+   *           &lt;/complexType>
+   *         &lt;/element>
+   *       &lt;/sequence>
+   *       &lt;attGroup ref="{www.jalview.org}swingwindow"/>
+   *       &lt;attribute name="conservationSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="pidSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="showFullId" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="rightAlignIds" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showColourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="showBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="wrapAlignment" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="renderGaps" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showSequenceFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showNPfeatureTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="showDbRefTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="followHighlight" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="followSelection" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="showAnnotation" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="centreColumnLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="showGroupConservation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="showGroupConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       &lt;attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="startRes" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="startSeq" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="scaleProteinAsCdna" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       &lt;attribute name="viewName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="sequenceSetId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       &lt;attribute name="gatheredViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       &lt;attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+   *       &lt;attribute name="complementId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     &lt;/restriction>
+   *   &lt;/complexContent>
+   * &lt;/complexType>
+   * </pre>
+   * 
+   * 
+   */
+  @XmlAccessorType(XmlAccessType.FIELD)
+  @XmlType(
+    name = "",
+    propOrder =
+    { "annotationColours", "hiddenColumns", "calcIdParam" })
+  public static class Viewport
+  {
+
+    @XmlElement(name = "AnnotationColours", namespace = "www.jalview.org")
+    protected AnnotationColourScheme annotationColours;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.Viewport.HiddenColumns> hiddenColumns;
+
+    @XmlElement(namespace = "www.jalview.org")
+    protected List<JalviewModel.Viewport.CalcIdParam> calcIdParam;
+
+    @XmlAttribute(name = "conservationSelected")
+    protected Boolean conservationSelected;
+
+    @XmlAttribute(name = "pidSelected")
+    protected Boolean pidSelected;
+
+    @XmlAttribute(name = "bgColour")
+    protected String bgColour;
+
+    @XmlAttribute(name = "consThreshold")
+    protected Integer consThreshold;
+
+    @XmlAttribute(name = "pidThreshold")
+    protected Integer pidThreshold;
+
+    @XmlAttribute(name = "title")
+    protected String title;
+
+    @XmlAttribute(name = "showFullId")
+    protected Boolean showFullId;
+
+    @XmlAttribute(name = "rightAlignIds")
+    protected Boolean rightAlignIds;
+
+    @XmlAttribute(name = "showText")
+    protected Boolean showText;
+
+    @XmlAttribute(name = "showColourText")
+    protected Boolean showColourText;
+
+    @XmlAttribute(name = "showUnconserved")
+    protected Boolean showUnconserved;
+
+    @XmlAttribute(name = "showBoxes")
+    protected Boolean showBoxes;
+
+    @XmlAttribute(name = "wrapAlignment")
+    protected Boolean wrapAlignment;
+
+    @XmlAttribute(name = "renderGaps")
+    protected Boolean renderGaps;
+
+    @XmlAttribute(name = "showSequenceFeatures")
+    protected Boolean showSequenceFeatures;
+
+    @XmlAttribute(name = "showNPfeatureTooltip")
+    protected Boolean showNPfeatureTooltip;
+
+    @XmlAttribute(name = "showDbRefTooltip")
+    protected Boolean showDbRefTooltip;
+
+    @XmlAttribute(name = "followHighlight")
+    protected Boolean followHighlight;
+
+    @XmlAttribute(name = "followSelection")
+    protected Boolean followSelection;
+
+    @XmlAttribute(name = "showAnnotation")
+    protected Boolean showAnnotation;
+
+    @XmlAttribute(name = "centreColumnLabels")
+    protected Boolean centreColumnLabels;
+
+    @XmlAttribute(name = "showGroupConservation")
+    protected Boolean showGroupConservation;
+
+    @XmlAttribute(name = "showGroupConsensus")
+    protected Boolean showGroupConsensus;
+
+    @XmlAttribute(name = "showConsensusHistogram")
+    protected Boolean showConsensusHistogram;
+
+    @XmlAttribute(name = "showSequenceLogo")
+    protected Boolean showSequenceLogo;
+
+    @XmlAttribute(name = "normaliseSequenceLogo")
+    protected Boolean normaliseSequenceLogo;
+
+    @XmlAttribute(name = "ignoreGapsinConsensus")
+    protected Boolean ignoreGapsinConsensus;
+
+    @XmlAttribute(name = "startRes")
+    protected Integer startRes;
+
+    @XmlAttribute(name = "startSeq")
+    protected Integer startSeq;
+
+    @XmlAttribute(name = "fontName")
+    protected String fontName;
+
+    @XmlAttribute(name = "fontSize")
+    protected Integer fontSize;
+
+    @XmlAttribute(name = "fontStyle")
+    protected Integer fontStyle;
+
+    @XmlAttribute(name = "scaleProteinAsCdna")
+    protected Boolean scaleProteinAsCdna;
+
+    @XmlAttribute(name = "viewName")
+    protected String viewName;
+
+    @XmlAttribute(name = "sequenceSetId")
+    protected String sequenceSetId;
+
+    @XmlAttribute(name = "gatheredViews")
+    protected Boolean gatheredViews;
+
+    @XmlAttribute(name = "textCol1")
+    protected Integer textCol1;
+
+    @XmlAttribute(name = "textCol2")
+    protected Integer textCol2;
+
+    @XmlAttribute(name = "textColThreshold")
+    protected Integer textColThreshold;
+
+    @XmlAttribute(name = "id")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    @XmlID
+    @XmlSchemaType(name = "ID")
+    protected String id;
+
+    @XmlAttribute(name = "complementId")
+    protected String complementId;
+
+    @XmlAttribute(name = "width")
+    protected Integer width;
+
+    @XmlAttribute(name = "height")
+    protected Integer height;
+
+    @XmlAttribute(name = "xpos")
+    protected Integer xpos;
+
+    @XmlAttribute(name = "ypos")
+    protected Integer ypos;
+
+    /**
+     * Gets the value of the annotationColours property.
+     * 
+     * @return possible object is {@link AnnotationColourScheme }
+     * 
+     */
+    public AnnotationColourScheme getAnnotationColours()
+    {
+      return annotationColours;
+    }
+
+    /**
+     * Sets the value of the annotationColours property.
+     * 
+     * @param value
+     *          allowed object is {@link AnnotationColourScheme }
+     * 
+     */
+    public void setAnnotationColours(AnnotationColourScheme value)
+    {
+      this.annotationColours = value;
+    }
+
+    /**
+     * Gets the value of the hiddenColumns property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the hiddenColumns property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getHiddenColumns().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.Viewport.HiddenColumns }
+     * 
+     * 
+     */
+    public List<JalviewModel.Viewport.HiddenColumns> getHiddenColumns()
+    {
+      if (hiddenColumns == null)
+      {
+        hiddenColumns = new ArrayList<JalviewModel.Viewport.HiddenColumns>();
+      }
+      return this.hiddenColumns;
+    }
+
+    /**
+     * Gets the value of the calcIdParam property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a
+     * snapshot. Therefore any modification you make to the returned list will
+     * be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the calcIdParam property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getCalcIdParam().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JalviewModel.Viewport.CalcIdParam }
+     * 
+     * 
+     */
+    public List<JalviewModel.Viewport.CalcIdParam> getCalcIdParam()
+    {
+      if (calcIdParam == null)
+      {
+        calcIdParam = new ArrayList<JalviewModel.Viewport.CalcIdParam>();
+      }
+      return this.calcIdParam;
+    }
+
+    /**
+     * Gets the value of the conservationSelected property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isConservationSelected()
+    {
+      return conservationSelected;
+    }
+
+    /**
+     * Sets the value of the conservationSelected property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setConservationSelected(Boolean value)
+    {
+      this.conservationSelected = value;
+    }
+
+    /**
+     * Gets the value of the pidSelected property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isPidSelected()
+    {
+      return pidSelected;
+    }
+
+    /**
+     * Sets the value of the pidSelected property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setPidSelected(Boolean value)
+    {
+      this.pidSelected = value;
+    }
+
+    /**
+     * Gets the value of the bgColour property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getBgColour()
+    {
+      return bgColour;
+    }
+
+    /**
+     * Sets the value of the bgColour property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setBgColour(String value)
+    {
+      this.bgColour = value;
+    }
+
+    /**
+     * Gets the value of the consThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getConsThreshold()
+    {
+      return consThreshold;
+    }
+
+    /**
+     * Sets the value of the consThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setConsThreshold(Integer value)
+    {
+      this.consThreshold = value;
+    }
+
+    /**
+     * Gets the value of the pidThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getPidThreshold()
+    {
+      return pidThreshold;
+    }
+
+    /**
+     * Sets the value of the pidThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setPidThreshold(Integer value)
+    {
+      this.pidThreshold = value;
+    }
+
+    /**
+     * Gets the value of the title property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getTitle()
+    {
+      return title;
+    }
+
+    /**
+     * Sets the value of the title property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setTitle(String value)
+    {
+      this.title = value;
+    }
+
+    /**
+     * Gets the value of the showFullId property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowFullId()
+    {
+      return showFullId;
+    }
+
+    /**
+     * Sets the value of the showFullId property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowFullId(Boolean value)
+    {
+      this.showFullId = value;
+    }
+
+    /**
+     * Gets the value of the rightAlignIds property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isRightAlignIds()
+    {
+      return rightAlignIds;
+    }
+
+    /**
+     * Sets the value of the rightAlignIds property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setRightAlignIds(Boolean value)
+    {
+      this.rightAlignIds = value;
+    }
+
+    /**
+     * Gets the value of the showText property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowText()
+    {
+      return showText;
+    }
+
+    /**
+     * Sets the value of the showText property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowText(Boolean value)
+    {
+      this.showText = value;
+    }
+
+    /**
+     * Gets the value of the showColourText property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowColourText()
+    {
+      return showColourText;
+    }
+
+    /**
+     * Sets the value of the showColourText property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowColourText(Boolean value)
+    {
+      this.showColourText = value;
+    }
+
+    /**
+     * Gets the value of the showUnconserved property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowUnconserved()
+    {
+      if (showUnconserved == null)
+      {
+        return false;
+      }
+      else
+      {
+        return showUnconserved;
+      }
+    }
+
+    /**
+     * Sets the value of the showUnconserved property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowUnconserved(Boolean value)
+    {
+      this.showUnconserved = value;
+    }
+
+    /**
+     * Gets the value of the showBoxes property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowBoxes()
+    {
+      return showBoxes;
+    }
+
+    /**
+     * Sets the value of the showBoxes property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowBoxes(Boolean value)
+    {
+      this.showBoxes = value;
+    }
+
+    /**
+     * Gets the value of the wrapAlignment property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isWrapAlignment()
+    {
+      return wrapAlignment;
+    }
+
+    /**
+     * Sets the value of the wrapAlignment property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setWrapAlignment(Boolean value)
+    {
+      this.wrapAlignment = value;
+    }
+
+    /**
+     * Gets the value of the renderGaps property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isRenderGaps()
+    {
+      return renderGaps;
+    }
+
+    /**
+     * Sets the value of the renderGaps property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setRenderGaps(Boolean value)
+    {
+      this.renderGaps = value;
+    }
+
+    /**
+     * Gets the value of the showSequenceFeatures property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowSequenceFeatures()
+    {
+      return showSequenceFeatures;
+    }
+
+    /**
+     * Sets the value of the showSequenceFeatures property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowSequenceFeatures(Boolean value)
+    {
+      this.showSequenceFeatures = value;
+    }
+
+    /**
+     * Gets the value of the showNPfeatureTooltip property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowNPfeatureTooltip()
+    {
+      return showNPfeatureTooltip;
+    }
+
+    /**
+     * Sets the value of the showNPfeatureTooltip property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowNPfeatureTooltip(Boolean value)
+    {
+      this.showNPfeatureTooltip = value;
+    }
+
+    /**
+     * Gets the value of the showDbRefTooltip property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowDbRefTooltip()
+    {
+      return showDbRefTooltip;
+    }
+
+    /**
+     * Sets the value of the showDbRefTooltip property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowDbRefTooltip(Boolean value)
+    {
+      this.showDbRefTooltip = value;
+    }
+
+    /**
+     * Gets the value of the followHighlight property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isFollowHighlight()
+    {
+      if (followHighlight == null)
+      {
+        return true;
+      }
+      else
+      {
+        return followHighlight;
+      }
+    }
+
+    /**
+     * Sets the value of the followHighlight property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setFollowHighlight(Boolean value)
+    {
+      this.followHighlight = value;
+    }
+
+    /**
+     * Gets the value of the followSelection property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isFollowSelection()
+    {
+      if (followSelection == null)
+      {
+        return true;
+      }
+      else
+      {
+        return followSelection;
+      }
+    }
+
+    /**
+     * Sets the value of the followSelection property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setFollowSelection(Boolean value)
+    {
+      this.followSelection = value;
+    }
+
+    /**
+     * Gets the value of the showAnnotation property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isShowAnnotation()
+    {
+      return showAnnotation;
+    }
+
+    /**
+     * Sets the value of the showAnnotation property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowAnnotation(Boolean value)
+    {
+      this.showAnnotation = value;
+    }
+
+    /**
+     * Gets the value of the centreColumnLabels property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isCentreColumnLabels()
+    {
+      if (centreColumnLabels == null)
+      {
+        return false;
+      }
+      else
+      {
+        return centreColumnLabels;
+      }
+    }
+
+    /**
+     * Sets the value of the centreColumnLabels property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setCentreColumnLabels(Boolean value)
+    {
+      this.centreColumnLabels = value;
+    }
+
+    /**
+     * Gets the value of the showGroupConservation property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowGroupConservation()
+    {
+      if (showGroupConservation == null)
+      {
+        return false;
+      }
+      else
+      {
+        return showGroupConservation;
+      }
+    }
+
+    /**
+     * Sets the value of the showGroupConservation property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowGroupConservation(Boolean value)
+    {
+      this.showGroupConservation = value;
+    }
+
+    /**
+     * Gets the value of the showGroupConsensus property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowGroupConsensus()
+    {
+      if (showGroupConsensus == null)
+      {
+        return false;
+      }
+      else
+      {
+        return showGroupConsensus;
+      }
+    }
+
+    /**
+     * Sets the value of the showGroupConsensus property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowGroupConsensus(Boolean value)
+    {
+      this.showGroupConsensus = value;
+    }
+
+    /**
+     * Gets the value of the showConsensusHistogram property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowConsensusHistogram()
+    {
+      if (showConsensusHistogram == null)
+      {
+        return true;
+      }
+      else
+      {
+        return showConsensusHistogram;
+      }
+    }
+
+    /**
+     * Sets the value of the showConsensusHistogram property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowConsensusHistogram(Boolean value)
+    {
+      this.showConsensusHistogram = value;
+    }
+
+    /**
+     * Gets the value of the showSequenceLogo property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isShowSequenceLogo()
+    {
+      if (showSequenceLogo == null)
+      {
+        return false;
+      }
+      else
+      {
+        return showSequenceLogo;
+      }
+    }
+
+    /**
+     * Sets the value of the showSequenceLogo property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setShowSequenceLogo(Boolean value)
+    {
+      this.showSequenceLogo = value;
+    }
+
+    /**
+     * Gets the value of the normaliseSequenceLogo property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isNormaliseSequenceLogo()
+    {
+      if (normaliseSequenceLogo == null)
+      {
+        return false;
+      }
+      else
+      {
+        return normaliseSequenceLogo;
+      }
+    }
+
+    /**
+     * Sets the value of the normaliseSequenceLogo property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setNormaliseSequenceLogo(Boolean value)
+    {
+      this.normaliseSequenceLogo = value;
+    }
+
+    /**
+     * Gets the value of the ignoreGapsinConsensus property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isIgnoreGapsinConsensus()
+    {
+      if (ignoreGapsinConsensus == null)
+      {
+        return true;
+      }
+      else
+      {
+        return ignoreGapsinConsensus;
+      }
+    }
+
+    /**
+     * Sets the value of the ignoreGapsinConsensus property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setIgnoreGapsinConsensus(Boolean value)
+    {
+      this.ignoreGapsinConsensus = value;
+    }
+
+    /**
+     * Gets the value of the startRes property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getStartRes()
+    {
+      return startRes;
+    }
+
+    /**
+     * Sets the value of the startRes property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setStartRes(Integer value)
+    {
+      this.startRes = value;
+    }
+
+    /**
+     * Gets the value of the startSeq property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getStartSeq()
+    {
+      return startSeq;
+    }
+
+    /**
+     * Sets the value of the startSeq property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setStartSeq(Integer value)
+    {
+      this.startSeq = value;
+    }
+
+    /**
+     * Gets the value of the fontName property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getFontName()
+    {
+      return fontName;
+    }
+
+    /**
+     * Sets the value of the fontName property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setFontName(String value)
+    {
+      this.fontName = value;
+    }
+
+    /**
+     * Gets the value of the fontSize property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getFontSize()
+    {
+      return fontSize;
+    }
+
+    /**
+     * Sets the value of the fontSize property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setFontSize(Integer value)
+    {
+      this.fontSize = value;
+    }
+
+    /**
+     * Gets the value of the fontStyle property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getFontStyle()
+    {
+      return fontStyle;
+    }
+
+    /**
+     * Sets the value of the fontStyle property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setFontStyle(Integer value)
+    {
+      this.fontStyle = value;
+    }
+
+    /**
+     * Gets the value of the scaleProteinAsCdna property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isScaleProteinAsCdna()
+    {
+      if (scaleProteinAsCdna == null)
+      {
+        return true;
+      }
+      else
+      {
+        return scaleProteinAsCdna;
+      }
+    }
+
+    /**
+     * Sets the value of the scaleProteinAsCdna property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setScaleProteinAsCdna(Boolean value)
+    {
+      this.scaleProteinAsCdna = value;
+    }
+
+    /**
+     * Gets the value of the viewName property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getViewName()
+    {
+      return viewName;
+    }
+
+    /**
+     * Sets the value of the viewName property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setViewName(String value)
+    {
+      this.viewName = value;
+    }
+
+    /**
+     * Gets the value of the sequenceSetId property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getSequenceSetId()
+    {
+      return sequenceSetId;
+    }
+
+    /**
+     * Sets the value of the sequenceSetId property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setSequenceSetId(String value)
+    {
+      this.sequenceSetId = value;
+    }
+
+    /**
+     * Gets the value of the gatheredViews property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public Boolean isGatheredViews()
+    {
+      return gatheredViews;
+    }
+
+    /**
+     * Sets the value of the gatheredViews property.
+     * 
+     * @param value
+     *          allowed object is {@link Boolean }
+     * 
+     */
+    public void setGatheredViews(Boolean value)
+    {
+      this.gatheredViews = value;
+    }
+
+    /**
+     * Gets the value of the textCol1 property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextCol1()
+    {
+      return textCol1;
+    }
+
+    /**
+     * Sets the value of the textCol1 property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextCol1(Integer value)
+    {
+      this.textCol1 = value;
+    }
+
+    /**
+     * Gets the value of the textCol2 property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextCol2()
+    {
+      return textCol2;
+    }
+
+    /**
+     * Sets the value of the textCol2 property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextCol2(Integer value)
+    {
+      this.textCol2 = value;
+    }
+
+    /**
+     * Gets the value of the textColThreshold property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getTextColThreshold()
+    {
+      return textColThreshold;
+    }
+
+    /**
+     * Sets the value of the textColThreshold property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setTextColThreshold(Integer value)
+    {
+      this.textColThreshold = value;
+    }
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getId()
+    {
+      return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setId(String value)
+    {
+      this.id = value;
+    }
+
+    /**
+     * Gets the value of the complementId property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getComplementId()
+    {
+      return complementId;
+    }
+
+    /**
+     * Sets the value of the complementId property.
+     * 
+     * @param value
+     *          allowed object is {@link String }
+     * 
+     */
+    public void setComplementId(String value)
+    {
+      this.complementId = value;
+    }
+
+    /**
+     * Gets the value of the width property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getWidth()
+    {
+      return width;
+    }
+
+    /**
+     * Sets the value of the width property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setWidth(Integer value)
+    {
+      this.width = value;
+    }
+
+    /**
+     * Gets the value of the height property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getHeight()
+    {
+      return height;
+    }
+
+    /**
+     * Sets the value of the height property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setHeight(Integer value)
+    {
+      this.height = value;
+    }
+
+    /**
+     * Gets the value of the xpos property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getXpos()
+    {
+      return xpos;
+    }
+
+    /**
+     * Sets the value of the xpos property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setXpos(Integer value)
+    {
+      this.xpos = value;
+    }
+
+    /**
+     * Gets the value of the ypos property.
+     * 
+     * @return possible object is {@link Integer }
+     * 
+     */
+    public Integer getYpos()
+    {
+      return ypos;
+    }
+
+    /**
+     * Sets the value of the ypos property.
+     * 
+     * @param value
+     *          allowed object is {@link Integer }
+     * 
+     */
+    public void setYpos(Integer value)
+    {
+      this.ypos = value;
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
+     *       &lt;attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *       &lt;attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     &lt;/extension>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "")
+    public static class CalcIdParam extends WebServiceParameterSet
+    {
+
+      @XmlAttribute(name = "calcId", required = true)
+      protected String calcId;
+
+      @XmlAttribute(name = "needsUpdate")
+      protected Boolean needsUpdate;
+
+      @XmlAttribute(name = "autoUpdate", required = true)
+      protected boolean autoUpdate;
+
+      /**
+       * Gets the value of the calcId property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getCalcId()
+      {
+        return calcId;
+      }
+
+      /**
+       * Sets the value of the calcId property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setCalcId(String value)
+      {
+        this.calcId = value;
+      }
+
+      /**
+       * Gets the value of the needsUpdate property.
+       * 
+       * @return possible object is {@link Boolean }
+       * 
+       */
+      public boolean isNeedsUpdate()
+      {
+        if (needsUpdate == null)
+        {
+          return false;
+        }
+        else
+        {
+          return needsUpdate;
+        }
+      }
+
+      /**
+       * Sets the value of the needsUpdate property.
+       * 
+       * @param value
+       *          allowed object is {@link Boolean }
+       * 
+       */
+      public void setNeedsUpdate(Boolean value)
+      {
+        this.needsUpdate = value;
+      }
+
+      /**
+       * Gets the value of the autoUpdate property.
+       * 
+       */
+      public boolean isAutoUpdate()
+      {
+        return autoUpdate;
+      }
+
+      /**
+       * Sets the value of the autoUpdate property.
+       * 
+       */
+      public void setAutoUpdate(boolean value)
+      {
+        this.autoUpdate = value;
+      }
+
+    }
+
+    /**
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained
+     * within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       &lt;attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "")
+    public static class HiddenColumns
+    {
+
+      @XmlAttribute(name = "start")
+      protected Integer start;
+
+      @XmlAttribute(name = "end")
+      protected Integer end;
+
+      /**
+       * Gets the value of the start property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getStart()
+      {
+        return start;
+      }
+
+      /**
+       * Sets the value of the start property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setStart(Integer value)
+      {
+        this.start = value;
+      }
+
+      /**
+       * Gets the value of the end property.
+       * 
+       * @return possible object is {@link Integer }
+       * 
+       */
+      public Integer getEnd()
+      {
+        return end;
+      }
+
+      /**
+       * Sets the value of the end property.
+       * 
+       * @param value
+       *          allowed object is {@link Integer }
+       * 
+       */
+      public void setEnd(Integer value)
+      {
+        this.end = value;
+      }
+
+    }
+
+  }
+
+}
diff --git a/src/jalview/xml/binding/jalviewBH/SequenceSet.java b/src/jalview/xml/binding/jalviewBH/SequenceSet.java
new file mode 100644 (file)
index 0000000..d78c585
--- /dev/null
@@ -0,0 +1,324 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.09.18 at 04:36:20 PM BST 
+//
+
+
+package jalview.xml.binding.jalviewBH;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element ref="{www.vamsas.ac.uk/jalview/version2}Sequence" maxOccurs="unbounded" minOccurs="0"/>
+ *         &lt;element ref="{www.vamsas.ac.uk/jalview/version2}Annotation" maxOccurs="unbounded" minOccurs="0"/>
+ *         &lt;element name="sequenceSetProperties" maxOccurs="unbounded" minOccurs="0">
+ *           &lt;complexType>
+ *             &lt;complexContent>
+ *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 &lt;attribute name="key" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *                 &lt;attribute name="value" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *               &lt;/restriction>
+ *             &lt;/complexContent>
+ *           &lt;/complexType>
+ *         &lt;/element>
+ *         &lt;element ref="{www.vamsas.ac.uk/jalview/version2}AlcodonFrame" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *       &lt;attribute name="gapChar" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       &lt;attribute name="datasetId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "sequence",
+    "annotation",
+    "sequenceSetProperties",
+    "alcodonFrame"
+})
+@XmlRootElement(name = "SequenceSet")
+public class SequenceSet {
+
+       // BH testing here
+       private class Sequence {}
+       private class Annotation {}
+       private class AlcodonFrame {}
+       //
+       
+    @XmlElement(name = "Sequence")
+    protected List<Sequence> sequence;
+    @XmlElement(name = "Annotation")
+    protected List<Annotation> annotation;
+    protected List<SequenceSet.SequenceSetProperties> sequenceSetProperties;
+    @XmlElement(name = "AlcodonFrame")
+    protected List<AlcodonFrame> alcodonFrame;
+    @XmlAttribute(name = "gapChar", required = true)
+    protected String gapChar;
+    @XmlAttribute(name = "datasetId")
+    protected String datasetId;
+
+    /**
+     * Gets the value of the sequence property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the sequence property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getSequence().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link Sequence }
+     * 
+     * 
+     */
+    public List<Sequence> getSequence() {
+        if (sequence == null) {
+            sequence = new ArrayList<Sequence>();
+        }
+        return this.sequence;
+    }
+
+    /**
+     * Gets the value of the annotation property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the annotation property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAnnotation().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link Annotation }
+     * 
+     * 
+     */
+    public List<Annotation> getAnnotation() {
+        if (annotation == null) {
+            annotation = new ArrayList<Annotation>();
+        }
+        return this.annotation;
+    }
+
+    /**
+     * Gets the value of the sequenceSetProperties property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the sequenceSetProperties property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getSequenceSetProperties().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link SequenceSet.SequenceSetProperties }
+     * 
+     * 
+     */
+    public List<SequenceSet.SequenceSetProperties> getSequenceSetProperties() {
+        if (sequenceSetProperties == null) {
+            sequenceSetProperties = new ArrayList<SequenceSet.SequenceSetProperties>();
+        }
+        return this.sequenceSetProperties;
+    }
+
+    /**
+     * Gets the value of the alcodonFrame property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the alcodonFrame property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAlcodonFrame().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link AlcodonFrame }
+     * 
+     * 
+     */
+    public List<AlcodonFrame> getAlcodonFrame() {
+        if (alcodonFrame == null) {
+            alcodonFrame = new ArrayList<AlcodonFrame>();
+        }
+        return this.alcodonFrame;
+    }
+
+    /**
+     * Gets the value of the gapChar property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGapChar() {
+        return gapChar;
+    }
+
+    /**
+     * Sets the value of the gapChar property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGapChar(String value) {
+        this.gapChar = value;
+    }
+
+    /**
+     * Gets the value of the datasetId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDatasetId() {
+        return datasetId;
+    }
+
+    /**
+     * Sets the value of the datasetId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDatasetId(String value) {
+        this.datasetId = value;
+    }
+
+
+    /**
+     * <p>Java class for anonymous complex type.
+     * 
+     * <p>The following schema fragment specifies the expected content contained within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;attribute name="key" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       &lt;attribute name="value" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "")
+    public static class SequenceSetProperties {
+
+        @XmlAttribute(name = "key")
+        protected String key;
+        @XmlAttribute(name = "value")
+        protected String value;
+
+        /**
+         * Gets the value of the key property.
+         * 
+         * @return
+         *     possible object is
+         *     {@link String }
+         *     
+         */
+        public String getKey() {
+            return key;
+        }
+
+        /**
+         * Sets the value of the key property.
+         * 
+         * @param value
+         *     allowed object is
+         *     {@link String }
+         *     
+         */
+        public void setKey(String value) {
+            this.key = value;
+        }
+
+        /**
+         * Gets the value of the value property.
+         * 
+         * @return
+         *     possible object is
+         *     {@link String }
+         *     
+         */
+        public String getValue() {
+            return value;
+        }
+
+        /**
+         * Sets the value of the value property.
+         * 
+         * @param value
+         *     allowed object is
+         *     {@link String }
+         *     
+         */
+        public void setValue(String value) {
+            this.value = value;
+        }
+
+    }
+
+}
diff --git a/src/jalview/xml/binding/jalviewBH/VAMSAS.java b/src/jalview/xml/binding/jalviewBH/VAMSAS.java
new file mode 100644 (file)
index 0000000..c10f7df
--- /dev/null
@@ -0,0 +1,109 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.09.18 at 04:36:20 PM BST 
+//
+
+
+package jalview.xml.binding.jalviewBH;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for VAMSAS complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="VAMSAS">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="Tree" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
+ *         &lt;element ref="{www.vamsas.ac.uk/jalview/version2}SequenceSet" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "VAMSAS", propOrder = {
+    "tree",
+    "sequenceSet"
+})
+public class VAMSAS {
+
+    @XmlElement(name = "Tree")
+    protected List<String> tree;
+    @XmlElement(name = "SequenceSet")
+    protected List<SequenceSet> sequenceSet;
+
+    /**
+     * Gets the value of the tree property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the tree property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getTree().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link String }
+     * 
+     * 
+     */
+    public List<String> getTree() {
+        if (tree == null) {
+            tree = new ArrayList<String>();
+        }
+        return this.tree;
+    }
+
+    /**
+     * Gets the value of the sequenceSet property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the sequenceSet property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getSequenceSet().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link SequenceSet }
+     * 
+     * 
+     */
+    public List<SequenceSet> getSequenceSet() {
+        if (sequenceSet == null) {
+            sequenceSet = new ArrayList<SequenceSet>();
+        }
+        return this.sequenceSet;
+    }
+
+}
index d6f548b..854d7fa 100644 (file)
@@ -1 +1 @@
-20181030183630 
+20181030183630
\ No newline at end of file
index 2b8a62f..f8157ec 100644 (file)
@@ -31,6 +31,7 @@ import jalview.gui.CrossRefAction;
 import jalview.gui.Desktop;
 import jalview.gui.Jalview2XML;
 import jalview.gui.JvOptionPane;
+import jalview.gui.SequenceFetcher;
 import jalview.util.DBRefUtils;
 
 import java.io.File;
@@ -41,13 +42,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import junit.extensions.PA;
-
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import junit.extensions.PA;
+
 @Test(singleThreaded = true)
 public class CrossRef2xmlTests extends Jalview2xmlBase
 {
@@ -88,9 +89,10 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
     List<String> failedXrefMenuItems = new ArrayList<>();
     List<String> failedProjectRecoveries = new ArrayList<>();
     // only search for ensembl or Uniprot crossrefs
-    List<String> limit=Arrays.asList(new String[] {
-        DBRefUtils.getCanonicalName("ENSEMBL"), 
-        DBRefUtils.getCanonicalName("Uniprot")});
+    List<String> limit = Arrays
+            .asList(new String[]
+            { DBRefUtils.getCanonicalName("ENSEMBL"),
+                DBRefUtils.getCanonicalName("Uniprot") });
     // for every set of db queries
     // retrieve db query
     // verify presence of expected xrefs
@@ -111,326 +113,328 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
     List<String> keyseq = new ArrayList<>();
     Map<String, File> savedProjects = new HashMap<>();
 
-//    for (String[] did : new String[][] { { "UNIPROT", "P00338" } })
-//    {
-      // pass counters - 0 - first pass, 1 means retrieve project rather than
-      // perform action
-      int pass1 = 0, pass2 = 0, pass3 = 0;
-      // each do loop performs two iterations in the first outer loop pass, but
-      // only performs one iteration on the second outer loop
-      // ie. pass 1 = 0 {pass 2= 0 { pass 3 = 0,1 }, pass 2=1 { pass 3 = 0 }}, 1
-      // { pass 2 = 0 { pass 3 = 0 } }
-      do
+    // for (String[] did : new String[][] { { "UNIPROT", "P00338" } })
+    // {
+    // pass counters - 0 - first pass, 1 means retrieve project rather than
+    // perform action
+    int pass1 = 0, pass2 = 0, pass3 = 0;
+    // each do loop performs two iterations in the first outer loop pass, but
+    // only performs one iteration on the second outer loop
+    // ie. pass 1 = 0 {pass 2= 0 { pass 3 = 0,1 }, pass 2=1 { pass 3 = 0 }}, 1
+    // { pass 2 = 0 { pass 3 = 0 } }
+    do
+    {
+      String first = forSource + " " + forAccession;// did[0] + " " + did[1];
+      AlignFrame af = null;
+      boolean dna;
+      AlignmentI retral;
+      AlignmentI dataset;
+      SequenceI[] seqs;
+      List<String> ptypes = null;
+      if (pass1 == 0)
       {
-        String first = forSource + " " + forAccession;//did[0] + " " + did[1];
-        AlignFrame af = null;
-        boolean dna;
-        AlignmentI retral;
-        AlignmentI dataset;
-        SequenceI[] seqs;
-        List<String> ptypes = null;
-        if (pass1 == 0)
-        {
-          // retrieve dbref
+        // retrieve dbref
 
-          List<AlignFrame> afs = jalview.gui.SequenceFetcher.fetchAndShow(
+        SequenceFetcher sf = new SequenceFetcher(Desktop.instance,
                 forSource, forAccession);
-        // did[0], did[1]);
-          if (afs.size() == 0)
-          {
-            failedDBRetr.add("Didn't retrieve " + first);
-            break;
-          }
-          keyseq.add(first);
-          af = afs.get(0);
-
-          // verify references for retrieved data
-          AlignmentTest.assertAlignmentDatasetRefs(af.getViewport()
-                  .getAlignment(), "Pass (" + pass1 + "," + pass2 + ","
-                  + pass3 + "): Fetch " + first + ":");
-          assertDatasetIsNormalisedKnownDefect(af.getViewport()
-                  .getAlignment(), "Pass (" + pass1 + "," + pass2 + ","
-                  + pass3 + "): Fetch " + first + ":");
-          dna = af.getViewport().getAlignment().isNucleotide();
-          retral = af.getViewport().getAlignment();
-          dataset = retral.getDataset();
-          seqs = retral.getSequencesArray();
-
-        }
-        else
+        sf.run();
+        AlignFrame[] afs = Desktop.getAlignFrames();
+        if (afs.length == 0)
         {
-          Desktop.instance.closeAll_actionPerformed(null);
-          // recover stored project
-          af = new FileLoader(false).LoadFileWaitTillLoaded(savedProjects
-                  .get(first).toString(), DataSourceType.FILE);
-          System.out.println("Recovered view for '" + first + "' from '"
-                  + savedProjects.get(first).toString() + "'");
-          dna = af.getViewport().getAlignment().isNucleotide();
-          retral = af.getViewport().getAlignment();
-          dataset = retral.getDataset();
-          seqs = retral.getSequencesArray();
-
-          // verify references for recovered data
-          AlignmentTest.assertAlignmentDatasetRefs(af.getViewport()
-                  .getAlignment(), "Pass (" + pass1 + "," + pass2 + ","
-                  + pass3 + "): Recover " + first + ":");
-          assertDatasetIsNormalisedKnownDefect(af.getViewport()
-                  .getAlignment(), "Pass (" + pass1 + "," + pass2 + ","
-                  + pass3 + "): Recover " + first + ":");
-
+          failedDBRetr.add("Didn't retrieve " + first);
+          break;
         }
+        keyseq.add(first);
+        af = afs[0];
+
+        // verify references for retrieved data
+        AlignmentTest.assertAlignmentDatasetRefs(
+                af.getViewport().getAlignment(), "Pass (" + pass1 + ","
+                        + pass2 + "," + pass3 + "): Fetch " + first + ":");
+        assertDatasetIsNormalisedKnownDefect(
+                af.getViewport().getAlignment(), "Pass (" + pass1 + ","
+                        + pass2 + "," + pass3 + "): Fetch " + first + ":");
+        dna = af.getViewport().getAlignment().isNucleotide();
+        retral = af.getViewport().getAlignment();
+        dataset = retral.getDataset();
+        seqs = retral.getSequencesArray();
 
-        // store project on first pass, compare next pass
-        stringify(dbtoviewBit, savedProjects, first, af.alignPanel);
+      }
+      else
+      {
+        Desktop.instance.closeAll_actionPerformed(null);
+        // recover stored project
+        af = new FileLoader(false).LoadFileWaitTillLoaded(
+                savedProjects.get(first).toString(), DataSourceType.FILE);
+        System.out.println("Recovered view for '" + first + "' from '"
+                + savedProjects.get(first).toString() + "'");
+        dna = af.getViewport().getAlignment().isNucleotide();
+        retral = af.getViewport().getAlignment();
+        dataset = retral.getDataset();
+        seqs = retral.getSequencesArray();
+
+        // verify references for recovered data
+        AlignmentTest.assertAlignmentDatasetRefs(
+                af.getViewport().getAlignment(),
+                "Pass (" + pass1 + "," + pass2 + "," + pass3 + "): Recover "
+                        + first + ":");
+        assertDatasetIsNormalisedKnownDefect(
+                af.getViewport().getAlignment(),
+                "Pass (" + pass1 + "," + pass2 + "," + pass3 + "): Recover "
+                        + first + ":");
 
-        ptypes = (seqs == null || seqs.length == 0) ? null : new CrossRef(
-                seqs, dataset).findXrefSourcesForSequences(dna);
-        filterDbRefs(ptypes, limit);
-        
-        // start of pass2: retrieve each cross-ref for fetched or restored
-        // project.
-        do // first cross ref and recover crossref loop
-        {
+      }
+
+      // store project on first pass, compare next pass
+      stringify(dbtoviewBit, savedProjects, first, af.alignPanel);
+
+      ptypes = (seqs == null || seqs.length == 0) ? null
+              : new CrossRef(seqs, dataset)
+                      .findXrefSourcesForSequences(dna);
+      filterDbRefs(ptypes, limit);
+
+      // start of pass2: retrieve each cross-ref for fetched or restored
+      // project.
+      do // first cross ref and recover crossref loop
+      {
 
-          for (String db : ptypes)
+        for (String db : ptypes)
+        {
+          // counter for splitframe views retrieved via crossref
+          int firstcr_ap = 0;
+          // build next key so we an retrieve all views
+          String nextxref = first + " -> " + db + "{" + firstcr_ap + "}";
+          // perform crossref action, or retrieve stored project
+          List<AlignmentViewPanel> cra_views = new ArrayList<>();
+          CrossRefAction cra = null;
+
+          if (pass2 == 0)
+          { // retrieve and show cross-refs in this thread
+            cra = CrossRefAction.getHandlerFor(seqs, dna, db, af);
+            cra.run();
+            cra_views = (List<AlignmentViewPanel>) PA.getValue(cra,
+                    "xrefViews");
+            if (cra_views.size() == 0)
+            {
+              failedXrefMenuItems.add(
+                      "No crossrefs retrieved for " + first + " -> " + db);
+              continue;
+            }
+            assertNucleotide(cra_views.get(0),
+                    "Nucleotide panel included proteins for " + first
+                            + " -> " + db);
+            assertProtein(cra_views.get(1),
+                    "Protein panel included nucleotides for " + first
+                            + " -> " + db);
+          }
+          else
           {
-            // counter for splitframe views retrieved via crossref
-            int firstcr_ap = 0;
-            // build next key so we an retrieve all views
-            String nextxref = first + " -> " + db + "{" + firstcr_ap + "}";
-            // perform crossref action, or retrieve stored project
-            List<AlignmentViewPanel> cra_views = new ArrayList<>();
-            CrossRefAction cra = null;
-
-            if (pass2 == 0)
-            { // retrieve and show cross-refs in this thread
-              cra = CrossRefAction.getHandlerFor(seqs, dna, db, af);
-              cra.run();
-              cra_views = (List<AlignmentViewPanel>) PA.getValue(cra,
-                      "xrefViews");
-              if (cra_views.size() == 0)
-              {
-                failedXrefMenuItems.add("No crossrefs retrieved for "
-                        + first + " -> " + db);
-                continue;
-              }
-              assertNucleotide(cra_views.get(0),
-                      "Nucleotide panel included proteins for " + first
-                              + " -> " + db);
-              assertProtein(cra_views.get(1),
-                      "Protein panel included nucleotides for " + first
-                              + " -> " + db);
+            Desktop.instance.closeAll_actionPerformed(null);
+            pass3 = 0;
+            // recover stored project
+            File storedProject = savedProjects.get(nextxref);
+            if (storedProject == null)
+            {
+              failedProjectRecoveries
+                      .add("Failed to store a view for '" + nextxref + "'");
+              continue;
             }
-            else
+
+            // recover stored project
+            AlignFrame af2 = new FileLoader(false).LoadFileWaitTillLoaded(
+                    savedProjects.get(nextxref).toString(),
+                    DataSourceType.FILE);
+            System.out
+                    .println("Recovered view for '" + nextxref + "' from '"
+                            + savedProjects.get(nextxref).toString() + "'");
+            // gymnastics to recover the alignPanel/Complementary alignPanel
+            if (af2.getViewport().isNucleotide())
             {
-              Desktop.instance.closeAll_actionPerformed(null);
-              pass3 = 0;
-              // recover stored project
-              File storedProject = savedProjects.get(nextxref);
-              if (storedProject == null)
-              {
-                failedProjectRecoveries.add("Failed to store a view for '"
-                        + nextxref + "'");
-                continue;
-              }
-
-              // recover stored project
-              AlignFrame af2 = new FileLoader(false)
-                      .LoadFileWaitTillLoaded(savedProjects.get(nextxref)
-                              .toString(), DataSourceType.FILE);
-              System.out.println("Recovered view for '" + nextxref
-                      + "' from '" + savedProjects.get(nextxref).toString()
-                      + "'");
-              // gymnastics to recover the alignPanel/Complementary alignPanel
-              if (af2.getViewport().isNucleotide())
-              {
-                // top view, then bottom
-                cra_views.add(af2.getViewport().getAlignPanel());
-                cra_views.add(((jalview.gui.AlignViewport) af2
-                        .getViewport().getCodingComplement())
-                        .getAlignPanel());
-
-              }
-              else
-              {
-                // bottom view, then top
-                cra_views.add(((jalview.gui.AlignViewport) af2
-                        .getViewport().getCodingComplement())
-                        .getAlignPanel());
-                cra_views.add(af2.getViewport().getAlignPanel());
+              // top view, then bottom
+              cra_views.add(af2.getViewport().getAlignPanel());
+              cra_views.add(((jalview.gui.AlignViewport) af2.getViewport()
+                      .getCodingComplement()).getAlignPanel());
 
-              }
             }
-            HashMap<String, List<String>> xrptypes = new HashMap<>();
-            // first save/verify views.
-            for (AlignmentViewPanel avp : cra_views)
+            else
             {
-              nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}";
-              // verify references for this panel
-              AlignmentTest.assertAlignmentDatasetRefs(avp.getAlignment(),
-                      "Pass (" + pass1 + "," + pass2 + "," + pass3
-                              + "): before start of pass3: " + nextxref
-                              + ":");
-              assertDatasetIsNormalisedKnownDefect(avp.getAlignment(),
-                      "Pass (" + pass1 + "," + pass2 + "," + pass3
-                              + "): before start of pass3: " + nextxref
-                              + ":");
-
-              SequenceI[] xrseqs = avp.getAlignment().getSequencesArray();
-
-              List<String> _xrptypes = (seqs == null || seqs.length == 0) ? null
-                      : new CrossRef(xrseqs, dataset)
-                              .findXrefSourcesForSequences(avp
-                                      .getAlignViewport().isNucleotide());
-
-              stringify(dbtoviewBit, savedProjects, nextxref, avp);
-              xrptypes.put(nextxref, _xrptypes);
+              // bottom view, then top
+              cra_views.add(((jalview.gui.AlignViewport) af2.getViewport()
+                      .getCodingComplement()).getAlignPanel());
+              cra_views.add(af2.getViewport().getAlignPanel());
 
             }
+          }
+          HashMap<String, List<String>> xrptypes = new HashMap<>();
+          // first save/verify views.
+          for (AlignmentViewPanel avp : cra_views)
+          {
+            nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}";
+            // verify references for this panel
+            AlignmentTest.assertAlignmentDatasetRefs(avp.getAlignment(),
+                    "Pass (" + pass1 + "," + pass2 + "," + pass3
+                            + "): before start of pass3: " + nextxref
+                            + ":");
+            assertDatasetIsNormalisedKnownDefect(avp.getAlignment(),
+                    "Pass (" + pass1 + "," + pass2 + "," + pass3
+                            + "): before start of pass3: " + nextxref
+                            + ":");
+
+            SequenceI[] xrseqs = avp.getAlignment().getSequencesArray();
+
+            List<String> _xrptypes = (seqs == null || seqs.length == 0)
+                    ? null
+                    : new CrossRef(xrseqs, dataset)
+                            .findXrefSourcesForSequences(
+                                    avp.getAlignViewport().isNucleotide());
+
+            stringify(dbtoviewBit, savedProjects, nextxref, avp);
+            xrptypes.put(nextxref, _xrptypes);
+
+          }
 
-            // now do the second xref pass starting from either saved or just
-            // recovered split pane, in sequence
-            do // retrieve second set of cross refs or recover and verify
+          // now do the second xref pass starting from either saved or just
+          // recovered split pane, in sequence
+          do // retrieve second set of cross refs or recover and verify
+          {
+            firstcr_ap = 0;
+            for (AlignmentViewPanel avp : cra_views)
             {
-              firstcr_ap = 0;
-              for (AlignmentViewPanel avp : cra_views)
+              nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}";
+              for (String xrefdb : xrptypes.get(nextxref))
               {
-                nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}";
-                for (String xrefdb : xrptypes.get(nextxref))
-                {
-                  List<AlignmentViewPanel> cra_views2 = new ArrayList<>();
-                  int q = 0;
-                  String nextnextxref = nextxref + " -> " + xrefdb + "{"
-                          + q + "}";
+                List<AlignmentViewPanel> cra_views2 = new ArrayList<>();
+                int q = 0;
+                String nextnextxref = nextxref + " -> " + xrefdb + "{" + q
+                        + "}";
 
-                  if (pass3 == 0)
+                if (pass3 == 0)
+                {
+                  SequenceI[] xrseqs = avp.getAlignment()
+                          .getSequencesArray();
+                  AlignFrame nextaf = Desktop
+                          .getAlignFrameFor(avp.getAlignViewport());
+
+                  cra = CrossRefAction.getHandlerFor(xrseqs,
+                          avp.getAlignViewport().isNucleotide(), xrefdb,
+                          nextaf);
+                  cra.run();
+                  cra_views2 = (List<AlignmentViewPanel>) PA.getValue(cra,
+                          "xrefViews");
+                  if (cra_views2.size() == 0)
                   {
-                    SequenceI[] xrseqs = avp.getAlignment()
-                            .getSequencesArray();
-                    AlignFrame nextaf = Desktop.getAlignFrameFor(avp
-                            .getAlignViewport());
-
-                    cra = CrossRefAction.getHandlerFor(xrseqs, avp
-                            .getAlignViewport().isNucleotide(), xrefdb,
-                            nextaf);
-                    cra.run();
-                    cra_views2 = (List<AlignmentViewPanel>) PA.getValue(
-                            cra, "xrefViews");
-                    if (cra_views2.size() == 0)
-                    {
-                      failedXrefMenuItems
-                              .add("No crossrefs retrieved for '"
-                                      + nextxref + "' to " + xrefdb
-                                      + " via '" + nextaf.getTitle() + "'");
-                      continue;
-                    }
-                    assertNucleotide(cra_views2.get(0),
-                            "Nucleotide panel included proteins for '"
-                                    + nextxref + "' to " + xrefdb
-                                    + " via '" + nextaf.getTitle() + "'");
-                    assertProtein(cra_views2.get(1),
-                            "Protein panel included nucleotides for '"
-                                    + nextxref + "' to " + xrefdb
-                                    + " via '" + nextaf.getTitle() + "'");
-
+                    failedXrefMenuItems.add("No crossrefs retrieved for '"
+                            + nextxref + "' to " + xrefdb + " via '"
+                            + nextaf.getTitle() + "'");
+                    continue;
                   }
-                  else
+                  assertNucleotide(cra_views2.get(0),
+                          "Nucleotide panel included proteins for '"
+                                  + nextxref + "' to " + xrefdb + " via '"
+                                  + nextaf.getTitle() + "'");
+                  assertProtein(cra_views2.get(1),
+                          "Protein panel included nucleotides for '"
+                                  + nextxref + "' to " + xrefdb + " via '"
+                                  + nextaf.getTitle() + "'");
+
+                }
+                else
+                {
+                  Desktop.instance.closeAll_actionPerformed(null);
+                  // recover stored project
+                  File storedProject = savedProjects.get(nextnextxref);
+                  if (storedProject == null)
                   {
-                    Desktop.instance.closeAll_actionPerformed(null);
-                    // recover stored project
-                    File storedProject = savedProjects.get(nextnextxref);
-                    if (storedProject == null)
-                    {
-                      failedProjectRecoveries
-                              .add("Failed to store a view for '"
-                                      + nextnextxref + "'");
-                      continue;
-                    }
-                    AlignFrame af2 = new FileLoader(false)
-                            .LoadFileWaitTillLoaded(
-                                    savedProjects.get(nextnextxref)
-                                            .toString(),
-                                    DataSourceType.FILE);
-                    System.out.println("Recovered view for '"
-                            + nextnextxref + "' from '"
-                            + savedProjects.get(nextnextxref).toString()
-                            + "'");
-                    // gymnastics to recover the alignPanel/Complementary
-                    // alignPanel
-                    if (af2.getViewport().isNucleotide())
-                    {
-                      // top view, then bottom
-                      cra_views2.add(af2.getViewport().getAlignPanel());
-                      cra_views2.add(((jalview.gui.AlignViewport) af2
-                              .getViewport().getCodingComplement())
-                              .getAlignPanel());
-
-                    }
-                    else
-                    {
-                      // bottom view, then top
-                      cra_views2.add(((jalview.gui.AlignViewport) af2
-                              .getViewport().getCodingComplement())
-                              .getAlignPanel());
-                      cra_views2.add(af2.getViewport().getAlignPanel());
-                    }
-                    Assert.assertEquals(cra_views2.size(), 2);
-                    Assert.assertNotNull(cra_views2.get(0));
-                    Assert.assertNotNull(cra_views2.get(1));
+                    failedProjectRecoveries
+                            .add("Failed to store a view for '"
+                                    + nextnextxref + "'");
+                    continue;
                   }
+                  AlignFrame af2 = new FileLoader(false)
+                          .LoadFileWaitTillLoaded(savedProjects
+                                  .get(nextnextxref).toString(),
+                                  DataSourceType.FILE);
+                  System.out
+                          .println("Recovered view for '" + nextnextxref
+                                  + "' from '" + savedProjects
+                                          .get(nextnextxref).toString()
+                                  + "'");
+                  // gymnastics to recover the alignPanel/Complementary
+                  // alignPanel
+                  if (af2.getViewport().isNucleotide())
+                  {
+                    // top view, then bottom
+                    cra_views2.add(af2.getViewport().getAlignPanel());
+                    cra_views2.add(((jalview.gui.AlignViewport) af2
+                            .getViewport().getCodingComplement())
+                                    .getAlignPanel());
 
-                  for (AlignmentViewPanel nextavp : cra_views2)
+                  }
+                  else
                   {
-                    nextnextxref = nextxref + " -> " + xrefdb + "{" + q++
-                            + "}";
-
-                    // verify references for this panel
-                    AlignmentTest.assertAlignmentDatasetRefs(
-                            nextavp.getAlignment(), "" + "Pass (" + pass1
-                                    + "," + pass2 + "): For "
-                                    + nextnextxref + ":");
-                    assertDatasetIsNormalisedKnownDefect(
-                            nextavp.getAlignment(), "" + "Pass (" + pass1
-                                    + "," + pass2 + "): For "
-                                    + nextnextxref + ":");
-
-                    stringify(dbtoviewBit, savedProjects, nextnextxref,
-                            nextavp);
-                    keyseq.add(nextnextxref);
+                    // bottom view, then top
+                    cra_views2.add(((jalview.gui.AlignViewport) af2
+                            .getViewport().getCodingComplement())
+                                    .getAlignPanel());
+                    cra_views2.add(af2.getViewport().getAlignPanel());
                   }
-                } // end of loop around showing all xrefdb for crossrf2
-
-              } // end of loop around all viewpanels from crossrf1
-            } while (pass2 == 2 && pass3++ < 2);
-            // fetchdb->crossref1->crossref-2->verify for xrefs we
-            // either loop twice when pass2=0, or just once when pass2=1
-            // (recovered project from previous crossref)
-
-          } // end of loop over db-xrefs for crossref-2
-
-          // fetchdb-->crossref1
-          // for each xref we try to retrieve xref, store and verify when
-          // pass1=0, or just retrieve and verify when pass1=1
-        } while (pass1 == 1 && pass2++ < 2);
-        // fetchdb
-        // for each ref we
-        // loop twice: first, do the retrieve, second recover from saved project
-
-        // increment pass counters, so we repeat traversal starting from the
-        // oldest saved project first.
-        if (pass1 == 0)
-        {
-          // verify stored projects for first set of cross references
-          pass1 = 1;
-          // and verify cross-references retrieved from stored projects
-          pass2 = 0;
-          pass3 = 0;
-        }
-        else
-        {
-          pass1++;
-        }
-      } while (pass1 < 3);
+                  Assert.assertEquals(cra_views2.size(), 2);
+                  Assert.assertNotNull(cra_views2.get(0));
+                  Assert.assertNotNull(cra_views2.get(1));
+                }
+
+                for (AlignmentViewPanel nextavp : cra_views2)
+                {
+                  nextnextxref = nextxref + " -> " + xrefdb + "{" + q++
+                          + "}";
+
+                  // verify references for this panel
+                  AlignmentTest.assertAlignmentDatasetRefs(
+                          nextavp.getAlignment(),
+                          "" + "Pass (" + pass1 + "," + pass2 + "): For "
+                                  + nextnextxref + ":");
+                  assertDatasetIsNormalisedKnownDefect(
+                          nextavp.getAlignment(),
+                          "" + "Pass (" + pass1 + "," + pass2 + "): For "
+                                  + nextnextxref + ":");
+
+                  stringify(dbtoviewBit, savedProjects, nextnextxref,
+                          nextavp);
+                  keyseq.add(nextnextxref);
+                }
+              } // end of loop around showing all xrefdb for crossrf2
+
+            } // end of loop around all viewpanels from crossrf1
+          } while (pass2 == 2 && pass3++ < 2);
+          // fetchdb->crossref1->crossref-2->verify for xrefs we
+          // either loop twice when pass2=0, or just once when pass2=1
+          // (recovered project from previous crossref)
+
+        } // end of loop over db-xrefs for crossref-2
+
+        // fetchdb-->crossref1
+        // for each xref we try to retrieve xref, store and verify when
+        // pass1=0, or just retrieve and verify when pass1=1
+      } while (pass1 == 1 && pass2++ < 2);
+      // fetchdb
+      // for each ref we
+      // loop twice: first, do the retrieve, second recover from saved project
+
+      // increment pass counters, so we repeat traversal starting from the
+      // oldest saved project first.
+      if (pass1 == 0)
+      {
+        // verify stored projects for first set of cross references
+        pass1 = 1;
+        // and verify cross-references retrieved from stored projects
+        pass2 = 0;
+        pass3 = 0;
+      }
+      else
+      {
+        pass1++;
+      }
+    } while (pass1 < 3);
 
     if (failedXrefMenuItems.size() > 0)
     {
@@ -448,8 +452,9 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
       {
         System.err.println(s);
       }
-      Assert.fail("Didn't recover projects for some retrievals (did they retrieve ?) ("
-              + failedProjectRecoveries.size() + " counts)");
+      Assert.fail(
+              "Didn't recover projects for some retrievals (did they retrieve ?) ("
+                      + failedProjectRecoveries.size() + " counts)");
     }
     if (failedDBRetr.size() > 0)
     {
@@ -501,9 +506,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
       }
       else
       {
-        System.out
-                .println("Ignored exception for known defect: JAL-2179 : "
-                        + message);
+        System.out.println("Ignored exception for known defect: JAL-2179 : "
+                + message);
       }
 
     }
@@ -525,8 +529,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
           AlignmentViewPanel alignmentViewPanel, String message)
   {
     List<SequenceI> nonType = new ArrayList<>();
-    for (SequenceI sq : alignmentViewPanel.getAlignViewport()
-            .getAlignment().getSequences())
+    for (SequenceI sq : alignmentViewPanel.getAlignViewport().getAlignment()
+            .getSequences())
     {
       if (sq.isProtein() != expectProtein)
       {
@@ -621,8 +625,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
     }
     else
     {
-      Assert.assertEquals(sbr.toString(), dbt, "stringify mismatch for "
-              + xrefpath);
+      Assert.assertEquals(sbr.toString(), dbt,
+              "stringify mismatch for " + xrefpath);
     }
   }
 }
index 7b93801..3150eca 100644 (file)
 <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
 <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
 <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="8"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="2"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
index d8fb401..989d13d 100644 (file)
@@ -6,7 +6,7 @@ import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridLayout;
 import java.awt.MediaTracker;
-import java.awt.MenuItem;
+import java.text.DecimalFormat;
 
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
@@ -40,6 +40,7 @@ public class JalviewJSTest extends JPanel
    */
   void doTest()
   {
+    new DecimalFormat("###,###").format((Integer) 1);
     JFrame main = new JFrame();
     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     JMenu menu = new JMenu("testing");