diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 8000cd6..c328801 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -9,3 +9,283 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
+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=0
+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=0
+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=0
+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=end_of_line
+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_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=2
+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=4
+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_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=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=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_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_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=false
+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=200
+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=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+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
diff --git a/changelog.txt b/changelog.txt
index d501773..7e2109b 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,19 +1,25 @@
-v1.0.0: 01/10/2009
+== 2013-06
+Rename project. Clean files. Update build.
+
+
+== v1.0.0: 01/10/2009
New version for:
- Eclipse integration,
- fr.devinsy.xid package rename.
-V_006: 12/03/2007
+== V_006: 12/03/2007
Version used in DevinsyGes and maitress-admin.
-V_003: 12/03/2006
+== 20061214, cpm, import dans svn sur https://www.ocmland.org/svn/Xid
+
+== V_004: 12/05/2006
+ -
+
+== V_003: 12/03/2006
- add build.xml file
- Vue class rename Presenter
- debug of object tag
- add webappPath capability
-V_004: 12/05/2006
- -
-20061214, cpm, import dans snv sur https://www.ocmland.org/svn/Xid
diff --git a/demo/XidDemo.java b/demo/XidDemo.java
index c514389..668b120 100644
--- a/demo/XidDemo.java
+++ b/demo/XidDemo.java
@@ -2,7 +2,9 @@
* XidDemo
*/
-import fr.devinsy.xid.*;
+import fr.devinsy.xid.Data;
+import fr.devinsy.xid.IdData;
+import fr.devinsy.xid.StringPresenter;
/**
*
@@ -10,297 +12,287 @@ import fr.devinsy.xid.*;
class XidDemo
{
static
- {
- // Initialize logger.
- org.apache.log4j.BasicConfigurator.configure ();
+ {
+ // Initialize logger.
+ org.apache.log4j.BasicConfigurator.configure();
- org.apache.log4j.Logger log = null;
- log = org.apache.log4j.Logger.getRootLogger ();
- log = org.apache.log4j.Logger.getLogger (XidDemo.class);
- }
+ org.apache.log4j.Logger log = null;
+ log = org.apache.log4j.Logger.getRootLogger();
+ log = org.apache.log4j.Logger.getLogger(XidDemo.class);
+ }
-
- /**
+ /**
*
*/
- public static void main (String[] args)
- {
- System.out.println("Hello World!");
-
- //test ();
-
- //
- Data datas;
-
-
-
- // Step #01.
+ public static void main(final String[] args)
{
- System.out.println ("----------------------------");
-
- // Populate attributes.
- datas = new Data ();
- datas.setContent ("name", "Superman");
-
- String htmlSource = "
a name
";
- StringBuffer htmlTarget;
- try
- {
- htmlTarget = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- htmlTarget = null;
- }
- System.out.println ("datas = new Data ();");
- System.out.println ("datas.setContent (\"name\", \"Superman\");");
- System.out.println ("+");
- System.out.println ("a name
");
- System.out.println ("=>");
- System.out.println (htmlTarget);
- System.out.println ("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
- }
-
-
- // Step #02.
- {
- System.out.println ("----------------------------");
- // Populate attributes.
- datas = new Data ();
- datas.setContent ("lastname", "Spiderman");
- datas.appendAttribute ("lastname", "style", "background: blue;");
- datas.appendAttribute ("lastname", "style", "foreground: red;");
- datas.setAttribute ("lastname", "class", "nameClass");
-
- String htmlSource = "a last name
";
- StringBuffer htmlTarget;
- try
- {
- htmlTarget = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- htmlTarget = null;
- }
-
- System.out.println ("datas = new Data ();");
- System.out.println ("datas.setContent (\"lastname\", \"Spiderman\");");
- System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"background: blue;\");");
- System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"foreground: red;\");");
- System.out.println ("datas.setAttribute (\"lastname\", \"class\", \"nameClass\");");
- System.out.println ("+");
- System.out.println ("a last name
");
- System.out.println ("=>");
- System.out.println (htmlTarget);
- System.out.println ("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
- }
-
-
- // Step #03.
- {
- System.out.println ("----------------------------");
- // Populate attributes.
- datas = new Data ();
- datas.setContent ("words", 0, "alpha");
- datas.setContent ("words", 1, "bravo");
- datas.setContent ("words", 2, "charlie");
- datas.setContent ("words", 3, "delta");
- datas.setContent ("words", 4, "echo");
- datas.setContent ("words", 5, "fox");
-
- String htmlSource = "";
- StringBuffer htmlTarget;
- try
- {
- htmlTarget = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- htmlTarget = null;
- }
-
- System.out.println ("datas = new Data ();");
- System.out.println ("datas.setContent (\"words\", 0, \"alpha\");");
- System.out.println ("datas.setContent (\"words\", 1, \"bravo\");");
- System.out.println ("datas.setContent (\"words\", 2, \"charlie\");");
- System.out.println ("datas.setContent (\"words\", 3, \"delta\");");
- System.out.println ("datas.setContent (\"words\", 4, \"echo\");");
- System.out.println ("datas.setContent (\"words\", 5, \"fox\");");
- System.out.println ("+");
- System.out.println ("");
- System.out.println (" - a word
");
- System.out.println ("
");
- System.out.println ("=>");
- System.out.println (htmlTarget);
- System.out.println ("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
- }
-
-
- // Step #04.
- {
- System.out.println ("----------------------------");
- // Populate attributes.
- datas = new Data ();
- datas.setContent ("identity", 0, "last_name", "Jemba");
- datas.setContent ("identity", 0, "first_name", "Epo");
- datas.setContent ("identity", 1, "last_name", "Momon");
- datas.setContent ("identity", 1, "first_name", "Christian");
- datas.setContent ("identity", 2, "last_name", "Tronche");
- datas.setContent ("identity", 2, "first_name", "Christophe");
-
-
- StringBuffer source = new StringBuffer ();
- source.append ("\n");
- source.append (" noid | Jean | Reve |
\n");
- source.append ("
");
-
- String htmlSource = source.toString ();
- StringBuffer htmlTarget;
- try
- {
- htmlTarget = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- htmlTarget = null;
- }
-
- System.out.println ("datas = new Data ();");
- System.out.println ("datas.setContent (\"identity\", 0, \"last_name\", \"Jemba\");");
- System.out.println ("datas.setContent (\"identity\", 0, \"first_name\", \"Epo\");");
- System.out.println ("datas.setContent (\"identity\", 1, \"last_name\", \"Momon\");");
- System.out.println ("datas.setContent (\"identity\", 1, \"first_name\", \"Christian\");");
- System.out.println ("datas.setContent (\"identity\", 2, \"last_name\", \"Tronche\");");
- System.out.println ("datas.setContent (\"identity\", 2, \"first_name\", \"Christophe\");");
-
- System.out.println ("+");
- System.out.println (htmlSource);
- System.out.println ("=>");
- System.out.println (htmlTarget);
- System.out.println ("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
- }
-
-
- // Step #05.
- {
- System.out.println ("----------------------------");
- // Populate attributes.
- datas = new Data ();
- datas.setContent ("identity", 0, "last_name", "Jemba");
- datas.setContent ("identity", 0, "first_name", "Epo");
- datas.setContent ("identity", 1, "last_name", "Momon");
- datas.setContent ("identity", 1, "first_name", "Christian");
- datas.setContent ("identity", 2, "last_name", "Tronche");
- datas.setContent ("identity", 2, "first_name", "Christophe");
- //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID);
- //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID);
- //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ALL_ROWS);
-
- //
- StringBuffer source = new StringBuffer ();
- source.append ("\n");
- source.append (" noid | First Name | Last Name |
\n");
- source.append (" noid | Jean | Reve |
\n");
- source.append (" noid | a first name | a last name |
\n");
- source.append (" noid | a first name more | a last name more |
\n");
- source.append ("
\n");
- String htmlSource = source.toString ();
-
- System.out.println ("datas = new Data ();");
- System.out.println ("datas.setContent (\"identity\", 0, \"first_name\", \"Epo\");");
- System.out.println ("datas.setContent (\"identity\", 0, \"last_name\", \"Jemba\");");
- System.out.println ("datas.setContent (\"identity\", 1, \"first_name\", \"Christian\");");
- System.out.println ("datas.setContent (\"identity\", 1, \"last_name\", \"Momon\");");
- System.out.println ("datas.setContent (\"identity\", 2, \"first_name\", \"Christophe\");");
- System.out.println ("datas.setContent (\"identity\", 2, \"last_name\", \"Tronche\");");
-
- System.out.println ("+");
- System.out.println (htmlSource);
- System.out.println ("=>");
-
-
- // #05.1
- datas.setIterationStrategy ("identities", IdData.IterationStrategy.ONLY_FIRST_ROW);
- System.out.println ("ONLY_FIRST_ROW:");
- StringBuffer html;
- try
- {
- html = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- html = null;
- }
- System.out.println (html);
- System.out.println ("");
-
-
- // #05.2
- datas.setIterationStrategy ("identities", IdData.IterationStrategy.ONLY_FIRST_TWO_ROWS);
- System.out.println ("ONLY_FIRST_TWO_ROWS:");
- try
- {
- html = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- html = null;
- }
- System.out.println (html);
- System.out.println ("");
+ System.out.println("Hello World!");
-
- // #05.3
- datas.setIterationStrategy ("identities", IdData.IterationStrategy.ONLY_ROWS_WITH_ID);
- System.out.println ("ONLY_ROWS_WITH_ID:");
- try
- {
- html = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- html = null;
- }
- System.out.println (html);
- System.out.println ("");
+ // test ();
-
- // #05.4
- datas.setIterationStrategy ("identities", IdData.IterationStrategy.ONLY_ROWS_WITHOUT_ID);
- System.out.println ("ONLY_ROWS_WITHOUT_ID:");
- try
- {
- html = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- html = null;
- }
- System.out.println (html);
- System.out.println ("");
-
-
- // #05.5
- datas.setIterationStrategy ("identities", IdData.IterationStrategy.ALL_ROWS);
- System.out.println ("ALL_ROWS:");
- try
- {
- html = StringPresenter.doXid (htmlSource, datas);
- }
- catch (Exception exception)
- {
- System.out.println(exception.getMessage());
- html = null;
- }
- System.out.println (html);
- }
- }
+ //
+ Data datas;
+
+ // Step #01.
+ {
+ System.out.println("----------------------------");
+
+ // Populate attributes.
+ datas = new Data();
+ datas.setContent("name", "Superman");
+
+ String htmlSource = "a name
";
+ StringBuffer htmlTarget;
+ try
+ {
+ htmlTarget = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ htmlTarget = null;
+ }
+ System.out.println("datas = new Data ();");
+ System.out.println("datas.setContent (\"name\", \"Superman\");");
+ System.out.println("+");
+ System.out.println("a name
");
+ System.out.println("=>");
+ System.out.println(htmlTarget);
+ System.out.println("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
+ }
+
+ // Step #02.
+ {
+ System.out.println("----------------------------");
+ // Populate attributes.
+ datas = new Data();
+ datas.setContent("lastname", "Spiderman");
+ datas.appendAttribute("lastname", "style", "background: blue;");
+ datas.appendAttribute("lastname", "style", "foreground: red;");
+ datas.setAttribute("lastname", "class", "nameClass");
+
+ String htmlSource = "a last name
";
+ StringBuffer htmlTarget;
+ try
+ {
+ htmlTarget = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ htmlTarget = null;
+ }
+
+ System.out.println("datas = new Data ();");
+ System.out.println("datas.setContent (\"lastname\", \"Spiderman\");");
+ System.out.println("datas.appendAttribute (\"lastname\", \"style\", \"background: blue;\");");
+ System.out.println("datas.appendAttribute (\"lastname\", \"style\", \"foreground: red;\");");
+ System.out.println("datas.setAttribute (\"lastname\", \"class\", \"nameClass\");");
+ System.out.println("+");
+ System.out.println("a last name
");
+ System.out.println("=>");
+ System.out.println(htmlTarget);
+ System.out.println("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
+ }
+
+ // Step #03.
+ {
+ System.out.println("----------------------------");
+ // Populate attributes.
+ datas = new Data();
+ datas.setContent("words", 0, "alpha");
+ datas.setContent("words", 1, "bravo");
+ datas.setContent("words", 2, "charlie");
+ datas.setContent("words", 3, "delta");
+ datas.setContent("words", 4, "echo");
+ datas.setContent("words", 5, "fox");
+
+ String htmlSource = "";
+ StringBuffer htmlTarget;
+ try
+ {
+ htmlTarget = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ htmlTarget = null;
+ }
+
+ System.out.println("datas = new Data ();");
+ System.out.println("datas.setContent (\"words\", 0, \"alpha\");");
+ System.out.println("datas.setContent (\"words\", 1, \"bravo\");");
+ System.out.println("datas.setContent (\"words\", 2, \"charlie\");");
+ System.out.println("datas.setContent (\"words\", 3, \"delta\");");
+ System.out.println("datas.setContent (\"words\", 4, \"echo\");");
+ System.out.println("datas.setContent (\"words\", 5, \"fox\");");
+ System.out.println("+");
+ System.out.println("");
+ System.out.println(" - a word
");
+ System.out.println("
");
+ System.out.println("=>");
+ System.out.println(htmlTarget);
+ System.out.println("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
+ }
+
+ // Step #04.
+ {
+ System.out.println("----------------------------");
+ // Populate attributes.
+ datas = new Data();
+ datas.setContent("identity", 0, "last_name", "Jemba");
+ datas.setContent("identity", 0, "first_name", "Epo");
+ datas.setContent("identity", 1, "last_name", "Momon");
+ datas.setContent("identity", 1, "first_name", "Christian");
+ datas.setContent("identity", 2, "last_name", "Tronche");
+ datas.setContent("identity", 2, "first_name", "Christophe");
+
+ StringBuffer source = new StringBuffer();
+ source.append("\n");
+ source.append(" noid | Jean | Reve |
\n");
+ source.append("
");
+
+ String htmlSource = source.toString();
+ StringBuffer htmlTarget;
+ try
+ {
+ htmlTarget = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ htmlTarget = null;
+ }
+
+ System.out.println("datas = new Data ();");
+ System.out.println("datas.setContent (\"identity\", 0, \"last_name\", \"Jemba\");");
+ System.out.println("datas.setContent (\"identity\", 0, \"first_name\", \"Epo\");");
+ System.out.println("datas.setContent (\"identity\", 1, \"last_name\", \"Momon\");");
+ System.out.println("datas.setContent (\"identity\", 1, \"first_name\", \"Christian\");");
+ System.out.println("datas.setContent (\"identity\", 2, \"last_name\", \"Tronche\");");
+ System.out.println("datas.setContent (\"identity\", 2, \"first_name\", \"Christophe\");");
+
+ System.out.println("+");
+ System.out.println(htmlSource);
+ System.out.println("=>");
+ System.out.println(htmlTarget);
+ System.out.println("[" + htmlSource.length() + "] => [" + htmlTarget.length() + "]");
+ }
+
+ // Step #05.
+ {
+ System.out.println("----------------------------");
+ // Populate attributes.
+ datas = new Data();
+ datas.setContent("identity", 0, "last_name", "Jemba");
+ datas.setContent("identity", 0, "first_name", "Epo");
+ datas.setContent("identity", 1, "last_name", "Momon");
+ datas.setContent("identity", 1, "first_name", "Christian");
+ datas.setContent("identity", 2, "last_name", "Tronche");
+ datas.setContent("identity", 2, "first_name", "Christophe");
+ // datas.setIterationStrategy ("identity",
+ // IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID);
+ // datas.setIterationStrategy ("identity",
+ // IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID);
+ // datas.setIterationStrategy ("identity",
+ // IdsDataByIndex.IterationStrategy.ALL_ROWS);
+
+ //
+ StringBuffer source = new StringBuffer();
+ source.append("\n");
+ source.append(" noid | First Name | Last Name |
\n");
+ source.append(" noid | Jean | Reve |
\n");
+ source.append(" noid | a first name | a last name |
\n");
+ source.append(" noid | a first name more | a last name more |
\n");
+ source.append("
\n");
+ String htmlSource = source.toString();
+
+ System.out.println("datas = new Data ();");
+ System.out.println("datas.setContent (\"identity\", 0, \"first_name\", \"Epo\");");
+ System.out.println("datas.setContent (\"identity\", 0, \"last_name\", \"Jemba\");");
+ System.out.println("datas.setContent (\"identity\", 1, \"first_name\", \"Christian\");");
+ System.out.println("datas.setContent (\"identity\", 1, \"last_name\", \"Momon\");");
+ System.out.println("datas.setContent (\"identity\", 2, \"first_name\", \"Christophe\");");
+ System.out.println("datas.setContent (\"identity\", 2, \"last_name\", \"Tronche\");");
+
+ System.out.println("+");
+ System.out.println(htmlSource);
+ System.out.println("=>");
+
+ // #05.1
+ datas.setIterationStrategy("identities", IdData.IterationStrategy.ONLY_FIRST_ROW);
+ System.out.println("ONLY_FIRST_ROW:");
+ StringBuffer html;
+ try
+ {
+ html = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ html = null;
+ }
+ System.out.println(html);
+ System.out.println("");
+
+ // #05.2
+ datas.setIterationStrategy("identities", IdData.IterationStrategy.ONLY_FIRST_TWO_ROWS);
+ System.out.println("ONLY_FIRST_TWO_ROWS:");
+ try
+ {
+ html = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ html = null;
+ }
+ System.out.println(html);
+ System.out.println("");
+
+ // #05.3
+ datas.setIterationStrategy("identities", IdData.IterationStrategy.ONLY_ROWS_WITH_ID);
+ System.out.println("ONLY_ROWS_WITH_ID:");
+ try
+ {
+ html = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ html = null;
+ }
+ System.out.println(html);
+ System.out.println("");
+
+ // #05.4
+ datas.setIterationStrategy("identities", IdData.IterationStrategy.ONLY_ROWS_WITHOUT_ID);
+ System.out.println("ONLY_ROWS_WITHOUT_ID:");
+ try
+ {
+ html = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ html = null;
+ }
+ System.out.println(html);
+ System.out.println("");
+
+ // #05.5
+ datas.setIterationStrategy("identities", IdData.IterationStrategy.ALL_ROWS);
+ System.out.println("ALL_ROWS:");
+ try
+ {
+ html = StringPresenter.doXid(htmlSource, datas);
+ }
+ catch (Exception exception)
+ {
+ System.out.println(exception.getMessage());
+ html = null;
+ }
+ System.out.println(html);
+ }
+ }
}
diff --git a/src/fr/devinsy/xid/Attributes.java b/src/fr/devinsy/xid/Attributes.java
index 98b2caf..5259fe1 100644
--- a/src/fr/devinsy/xid/Attributes.java
+++ b/src/fr/devinsy/xid/Attributes.java
@@ -1,74 +1,59 @@
package fr.devinsy.xid;
-import java.util.*;
-
-
-
+import java.util.HashMap;
/**
- *
- * Note: no more AttrValue as in Brill, because the exception of style is managed
- * in the attribute merging on the "style" string detection.
+ *
+ * Note: no more AttrValue as in Brill, because the exception of style is
+ * managed in the attribute merging on the "style" string detection.
*/
public class Attributes extends HashMap
{
private static final long serialVersionUID = 2802739066295665336L;
-
- /*
- *
+ /**
+ *
*/
- public Attributes ()
+ public Attributes()
{
- super ();
+ super();
}
-
- /*
+ /**
* Useful for the merge attributes.
*/
- public Attributes (Attributes attributes)
+ public Attributes(final Attributes attributes)
{
- super (attributes);
+ super(attributes);
}
-
- /*
- *
+ /**
+ * Add a value to an existing value. This is useful to the 'style'
+ * attribute.
+ *
*/
- public void setAttribute (String label, String value)
+ public void appendAttribute(final String label, final String value)
{
- this.put (label, value);
- }
-
-
- /*
- * Add a value to an existing value. This is useful to the 'style' attribute.
- *
- */
- public void appendAttribute (String label, String value)
- {
- if (this.containsKey (label))
+ if (this.containsKey(label))
{
- this.put (label, this.get (label) + value);
+ this.put(label, this.get(label) + value);
}
else
{
- this.put (label, value);
+ this.put(label, value);
}
}
-
- /*
+ /**
*
*/
- public String getAttribute (String label)
+ public String getAttribute(final String label)
{
String result;
- if (this.containsKey (label))
+ if (this.containsKey(label))
{
- result = this.get (label);
+ result = this.get(label);
}
else
{
@@ -79,4 +64,12 @@ public class Attributes extends HashMap
return (result);
}
+ /**
+ *
+ */
+ public void setAttribute(final String label, final String value)
+ {
+ this.put(label, value);
+ }
+
}
diff --git a/src/fr/devinsy/xid/Data.java b/src/fr/devinsy/xid/Data.java
index 2c28212..893b36a 100644
--- a/src/fr/devinsy/xid/Data.java
+++ b/src/fr/devinsy/xid/Data.java
@@ -1,27 +1,178 @@
package fr.devinsy.xid;
-
/*
*
*/
public class Data
{
- protected IdsDataById idsDataById;
-
+ private IdsDataById idsDataById;
/**
*
*/
- public Data ()
+ public Data()
{
- this.idsDataById = new IdsDataById ();
+ this.idsDataById = new IdsDataById();
}
+ /**
+ *
+ */
+ public void appendAttribute(final String id, final int line, final String column, final String label, final String value)
+ {
+ IdData tag = this.getIdData(id, line, column);
+
+ tag.attributes().appendAttribute(label, value);
+ }
/**
*
*/
- public IdsDataById getIdsDataById ()
+ public void appendAttribute(final String id, final String label, final int value)
+ {
+ appendAttribute(id, label, (new Integer(value)).toString());
+ }
+
+ /**
+ *
+ */
+ public void appendAttribute(final String id, final String label, final String value)
+ {
+ IdData tag = this.getIdData(id);
+
+ tag.attributes().appendAttribute(label, value);
+ }
+
+ /**
+ *
+ */
+ public void appendContent(final String id, final int line, final int value)
+ {
+ appendContent(id, line, (new Integer(value)).toString());
+ }
+
+ /**
+ *
+ */
+ public void appendContent(final String id, final int line, final String value)
+ {
+ IdData tag = this.getIdData(id, line);
+
+ tag.appendContent(value);
+ }
+
+ /**
+ *
+ */
+ public void appendContent(final String id, final int line, final String column, final int value)
+ {
+ appendContent(id, line, column, (new Integer(value)).toString());
+ }
+
+ /**
+ *
+ */
+ public void appendContent(final String id, final int line, final String column, final String value)
+ {
+ IdData tag = this.getIdData(id, line, column);
+
+ tag.appendContent(value);
+ }
+
+ /**
+ *
+ */
+ public IdData getIdData(final String id)
+ {
+ IdData result;
+
+ // Be sure that IdData is existing and get item.
+ result = (IdData) this.idsDataById.getId(id);
+
+ if (result == null)
+ {
+ this.idsDataById.setId(id, new IdData());
+
+ result = (IdData) this.idsDataById.getId(id);
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public IdData getIdData(final String id, final int line)
+ {
+ IdData result;
+
+ // Be sure that IdsData are existing.
+ IdsDataByIndex tags = (IdsDataByIndex) this.idsDataById.getId(id);
+ if (tags == null)
+ {
+ this.idsDataById.setId(id, new IdsDataByIndex());
+
+ tags = (IdsDataByIndex) this.idsDataById.getId(id);
+ }
+
+ // Be sure that lines are existing.
+ int nbLines = tags.size();
+ for (int nLine = nbLines; nLine < line + 1; nLine++)
+ {
+ tags.add(nLine, new IdData());
+ }
+
+ // Get item.
+ result = (IdData) tags.elementAt(line);
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public IdData getIdData(final String id, final int line, final String column)
+ {
+ IdData result;
+
+ // Be sure that IdsData are existing.
+ IdsDataByIndex tags = (IdsDataByIndex) this.idsDataById.getId(id);
+ if (tags == null)
+ {
+ this.idsDataById.setId(id, new IdsDataByIndex());
+
+ tags = (IdsDataByIndex) this.idsDataById.getId(id);
+ }
+
+ // Be sure that lines are existing.
+ int nbLines = tags.size();
+ for (int nLine = nbLines; nLine < line + 1; nLine++)
+ {
+ tags.add(nLine, new IdsDataById());
+ }
+
+ // Get item.
+ IdsDataById lineData = (IdsDataById) tags.elementAt(line);
+
+ result = (IdData) lineData.get(column);
+
+ if (result == null)
+ {
+ lineData.put(column, new IdData());
+
+ result = (IdData) lineData.get(column);
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public IdsDataById getIdsDataById()
{
IdsDataById result;
@@ -31,311 +182,131 @@ public class Data
return (result);
}
+ /**
+ *
+ */
+ public void setAttribute(final String id, final int line, final String label, final int value)
+ {
+ setAttribute(id, line, label, (new Integer(value)).toString());
+ }
/**
*
*/
- public IdData getIdData (String id)
+ public void setAttribute(final String id, final int line, final String label, final String value)
{
- IdData result;
+ IdData tag = this.getIdData(id, line);
- // Be sure that IdData is existing and get item.
- result = (IdData) this.idsDataById.getId (id);
-
- if (result == null)
- {
- this.idsDataById.setId (id, new IdData ());
-
- result = (IdData) this.idsDataById.getId (id);
- }
-
-
- //
- return (result);
+ tag.attributes().setAttribute(label, value);
}
-
/**
*
*/
- public IdData getIdData (String id, int line)
+ public void setAttribute(final String id, final int line, final String column, final String label, final int value)
{
- IdData result;
-
- // Be sure that IdsData are existing.
- IdsDataByIndex tags = (IdsDataByIndex) this.idsDataById.getId (id);
- if (tags == null)
- {
- this.idsDataById.setId (id, new IdsDataByIndex ());
-
- tags = (IdsDataByIndex) this.idsDataById.getId (id);
- }
-
- // Be sure that lines are existing.
- int nbLines = tags.size ();
- for (int nLine = nbLines; nLine < line + 1; nLine++)
- {
- tags.add (nLine, new IdData ());
- }
-
- // Get item.
- result = (IdData) tags.elementAt (line);
-
- //
- return (result);
+ setAttribute(id, line, column, label, (new Integer(value)).toString());
}
-
/**
*
*/
- public IdData getIdData (String id, int line, String column)
+ public void setAttribute(final String id, final int line, final String column, final String label, final String value)
{
- IdData result;
+ IdData tag = this.getIdData(id, line, column);
- // Be sure that IdsData are existing.
- IdsDataByIndex tags = (IdsDataByIndex) this.idsDataById.getId (id);
- if (tags == null)
- {
- this.idsDataById.setId (id, new IdsDataByIndex ());
-
- tags = (IdsDataByIndex) this.idsDataById.getId (id);
- }
-
- // Be sure that lines are existing.
- int nbLines = tags.size ();
- for (int nLine = nbLines; nLine < line + 1; nLine++)
- {
- tags.add (nLine, new IdsDataById ());
- }
-
- // Get item.
- IdsDataById lineData = (IdsDataById) tags.elementAt (line);
-
- result = (IdData) lineData.get (column);
-
- if (result == null)
- {
- lineData.put (column, new IdData ());
-
- result = (IdData) lineData.get (column);
- }
-
- //
- return (result);
+ tag.attributes().setAttribute(label, value);
}
-
/**
*
*/
- public void setIterationStrategy (String id, IdData.IterationStrategy strategy)
+ public void setAttribute(final String id, final String label, final int value)
{
- IdData tag = (IdData) this.getIdData (id);
-
- tag.setIterationStrategy (strategy);
+ setAttribute(id, label, (new Integer(value)).toString());
}
-
-
/**
*
*/
- public void setContent (String id, String content)
+ public void setAttribute(final String id, final String label, final String value)
{
- IdData idData = this.getIdData (id);
+ IdData tag = this.getIdData(id);
- idData.setContent (content);
+ tag.attributes().setAttribute(label, value);
}
-
/**
*
*/
- public void setContent (String id, int content)
+ public void setContent(final String id, final int content)
{
- setContent (id, (new Integer (content)).toString ());
+ setContent(id, (new Integer(content)).toString());
}
-
/**
*
*/
- public void setContent (String id, int line, String content)
+ public void setContent(final String id, final int line, final int content)
{
- IdData tag = this.getIdData (id, line);
-
- tag.setContent (content);
+ setContent(id, line, (new Integer(content)).toString());
}
-
/**
*
*/
- public void setContent (String id, int line, int content)
+ public void setContent(final String id, final int line, final String content)
{
- setContent (id, line, (new Integer (content)).toString ());
- }
+ IdData tag = this.getIdData(id, line);
+ tag.setContent(content);
+ }
/**
*
*/
- public void setContent (String id, int line, String column, String content)
+ public void setContent(final String id, final int line, final String column, final int content)
{
- IdData tag = this.getIdData (id, line, column);
-
- tag.setContent (content);
+ setContent(id, line, column, (new Integer(content)).toString());
}
-
- /**
- *
- */
- public void setContent (String id, int line, String column, int content)
- {
- setContent (id, line, column, (new Integer (content)).toString ());
- }
-
-
/**
* @TODO
*/
- public void setContent (String id, int line, String subId, int subLine, String column, String content)
+ public void setContent(final String id, final int line, final String subId, final int subLine, final String column, final String content)
{
// IdData tag = this.getIdData (id, line, subId, subLine, column);
- //tag.setContent (content);
+ // tag.setContent (content);
}
-
- /**
- *
- */
- public void setAttribute (String id, String label, String value)
- {
- IdData tag = this.getIdData (id);
-
- tag.attributes ().setAttribute (label, value);
- }
-
-
/**
*
*/
- public void setAttribute (String id, String label, int value)
+ public void setContent(final String id, final int line, final String column, final String content)
{
- setAttribute (id, label, (new Integer (value)).toString ());
- }
+ IdData tag = this.getIdData(id, line, column);
+ tag.setContent(content);
+ }
/**
*
*/
- public void setAttribute (String id, int line, String label, String value)
+ public void setContent(final String id, final String content)
{
- IdData tag = this.getIdData (id, line);
+ IdData idData = this.getIdData(id);
- tag.attributes ().setAttribute (label, value);
+ idData.setContent(content);
}
-
/**
*
*/
- public void setAttribute (String id, int line, String label, int value)
+ public void setIterationStrategy(final String id, final IdData.IterationStrategy strategy)
{
- setAttribute (id, line, label, (new Integer (value)).toString ());
- }
+ IdData tag = this.getIdData(id);
-
- /**
- *
- */
- public void setAttribute (String id, int line, String column, String label, String value)
- {
- IdData tag = this.getIdData (id, line, column);
-
- tag.attributes ().setAttribute (label, value);
- }
-
-
- /**
- *
- */
- public void setAttribute (String id, int line, String column, String label, int value)
- {
- setAttribute (id, line, column, label, (new Integer (value)).toString ());
- }
-
-
- /**
- *
- */
- public void appendAttribute (String id, int line, String column, String label, String value)
- {
- IdData tag = this.getIdData (id, line, column);
-
- tag.attributes ().appendAttribute (label, value);
- }
-
-
- /**
- *
- */
- public void appendAttribute (String id, String label, String value)
- {
- IdData tag = this.getIdData (id);
-
- tag.attributes ().appendAttribute (label, value);
- }
-
-
- /**
- *
- */
- public void appendAttribute (String id, String label, int value)
- {
- appendAttribute (id, label, (new Integer (value)).toString ());
- }
-
-
- /**
- *
- */
- public void appendContent (String id, int line, String value)
- {
- IdData tag = this.getIdData (id, line);
-
- tag.appendContent (value);
- }
-
-
- /**
- *
- */
- public void appendContent (String id, int line, int value)
- {
- appendContent (id, line, (new Integer (value)).toString ());
- }
-
-
- /**
- *
- */
- public void appendContent (String id, int line, String column, String value)
- {
- IdData tag = this.getIdData (id, line, column);
-
- tag.appendContent (value);
- }
-
-
- /**
- *
- */
- public void appendContent (String id, int line, String column, int value)
- {
- appendContent (id, line, column, (new Integer (value)).toString ());
+ tag.setIterationStrategy(strategy);
}
}
diff --git a/src/fr/devinsy/xid/DomPresenter.java b/src/fr/devinsy/xid/DomPresenter.java
index f3a2fb1..2cb2e8b 100644
--- a/src/fr/devinsy/xid/DomPresenter.java
+++ b/src/fr/devinsy/xid/DomPresenter.java
@@ -1,8 +1,8 @@
package fr.devinsy.xid;
import java.io.StringWriter;
-import org.w3c.dom.Document;
+import org.w3c.dom.Document;
/**
*
@@ -11,32 +11,29 @@ public class DomPresenter extends Presenter
{
static final public char INDEX_SEPARATOR = '_';
- static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger (DomPresenter.class);
+ static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(DomPresenter.class);
protected Document doc;
- /*
- *
- */
- public DomPresenter ()
- {
- this.doc = null;
- }
-
-
- /*
- *
- */
- public DomPresenter (Document doc)
- {
- this.doc = doc;
- DomPresenter.addMetaTag (this.doc, "generator", "XID 0.0");
- }
-
-
/**
*
*/
- public Document dom ()
+ public DomPresenter()
+ {
+ this.doc = null;
+ }
+
+ /**
+ *
+ */
+ public DomPresenter(final Document doc)
+ {
+ setSource(doc);
+ }
+
+ /**
+ *
+ */
+ public Document dom()
{
Document result;
@@ -46,31 +43,61 @@ public class DomPresenter extends Presenter
return (result);
}
+ /**
+ *
+ */
+ public StringBuffer doXid(final Data datas) throws Exception
+ {
+ return (doXid(datas.getIdsDataById()));
+ }
/**
*
*/
- public void setDom (Document doc)
+ public StringBuffer doXid(final IdsDataById datas) throws Exception
+ {
+ StringBuffer result;
+
+ if (this.doc == null)
+ {
+ String errorMessage = "source not defined";
+ logger.error(errorMessage);
+ result = null;
+ throw new Exception(errorMessage);
+ }
+ else
+ {
+ // Build the web page.
+ StringWriter htmlCode = new StringWriter();
+ Presenter.doXid(htmlCode, this.doc, datas);
+ result = new StringBuffer(htmlCode.toString());
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public void setDom(final Document doc)
{
this.doc = doc;
}
-
/*
*
*/
- public void setSource (Document doc)
+ public void setSource(final Document doc)
{
this.doc = doc;
-
- Presenter.addMetaTag (this.doc, "generator", "XID 0.0");
+ addMetaTag(this.doc, "generator", "XID 0.0");
}
-
- /*
+ /**
*
*/
- public Object source ()
+ public Object source()
{
Object result;
@@ -80,52 +107,15 @@ public class DomPresenter extends Presenter
return (result);
}
-
- /*
- *
- */
- public StringBuffer doXid (Data datas) throws Exception
- {
- return (doXid (datas.getIdsDataById ()));
- }
-
-
- /*
- *
- */
- public StringBuffer doXid (IdsDataById datas) throws Exception
- {
- StringBuffer result;
-
- if (this.doc == null)
- {
- String errorMessage = "source not defined";
- logger.error (errorMessage);
- result = null;
- throw new Exception (errorMessage);
- }
- else
- {
- // Build the web page.
- StringWriter htmlCode = new StringWriter();
- Presenter.doXid (htmlCode, this.doc, datas);
- result = new StringBuffer (htmlCode.toString());
- }
-
- //
- return (result);
- }
-
-
- /*
+ /**
* Xid a file with data.
*/
- static public StringBuffer doXid (Document doc, IdsDataById datas) throws Exception
+ static public StringBuffer doXid(final Document doc, final IdsDataById datas) throws Exception
{
StringBuffer result;
StringWriter htmlCode = new StringWriter();
- Presenter.process (htmlCode, doc, datas);
+ Presenter.process(htmlCode, doc, datas);
result = htmlCode.getBuffer();
//
diff --git a/src/fr/devinsy/xid/FilePresenter.java b/src/fr/devinsy/xid/FilePresenter.java
index 1619bac..6226193 100644
--- a/src/fr/devinsy/xid/FilePresenter.java
+++ b/src/fr/devinsy/xid/FilePresenter.java
@@ -5,22 +5,21 @@ import java.io.File;
import java.io.FileReader;
import java.io.StringWriter;
-
/**
*
*/
public class FilePresenter extends DomPresenter
{
- static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger (FilePresenter.class);
+ static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FilePresenter.class);
- protected String sourceFilePathname;
- protected long sourceFileTime;
- protected String doctype;
+ private String sourceFilePathname;
+ private long sourceFileTime;
+ private String doctype;
- /*
+ /**
*
*/
- public FilePresenter ()
+ public FilePresenter()
{
this.sourceFilePathname = null;
this.sourceFileTime = 0;
@@ -28,11 +27,10 @@ public class FilePresenter extends DomPresenter
this.doctype = "";
}
-
- /*
+ /**
*
*/
- public FilePresenter (String filePathname)
+ public FilePresenter(final String filePathname)
{
this.sourceFilePathname = filePathname;
this.sourceFileTime = 0;
@@ -40,11 +38,62 @@ public class FilePresenter extends DomPresenter
this.doctype = "";
}
-
- /*
+ /**
*
*/
- public void setSource (String filePathname)
+ @Override
+ public StringBuffer doXid(final Data datas) throws Exception
+ {
+ return (doXid(datas.getIdsDataById()));
+ }
+
+ /**
+ * No need to be synchronized.
+ */
+ @Override
+ public StringBuffer doXid(final IdsDataById datas) throws Exception
+ {
+ StringBuffer result;
+
+ logger.info("doXid for file [" + this.sourceFilePathname + "]");
+
+ // Get the good tree.
+ File source = new File(this.sourceFilePathname);
+
+ if (!source.exists())
+ {
+ String errorMessage = "source file defined but not found (" + this.sourceFilePathname + ")";
+ logger.error(errorMessage);
+ result = null;
+ throw new Exception(errorMessage);
+ }
+ else if ((this.doc == null) || (this.sourceFileTime != source.lastModified()))
+ {
+ this.sourceFileTime = source.lastModified();
+ this.doc = Presenter.fileToTree(this.sourceFilePathname);
+ this.doctype = getDoctype(this.sourceFilePathname);
+ if (this.doc != null)
+ {
+ Presenter.addMetaTag(doc, "generator", "XID 0.0");
+ }
+ }
+
+ // Build the web page.
+ StringWriter htmlCode = new StringWriter(Presenter.estimatedTargetLength(source.length()));
+ htmlCode.write(doctype);
+ htmlCode.write('\n');
+
+ Presenter.doXid(htmlCode, doc, datas);
+ result = htmlCode.getBuffer();
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public void setSource(final String filePathname)
{
this.sourceFilePathname = filePathname;
this.sourceFileTime = 0;
@@ -52,11 +101,11 @@ public class FilePresenter extends DomPresenter
this.doctype = "";
}
-
- /*
+ /**
*
*/
- public String source ()
+ @Override
+ public String source()
{
String result;
@@ -66,74 +115,55 @@ public class FilePresenter extends DomPresenter
return (result);
}
-
- /*
- *
+ /**
+ * Xid a file without data.
*/
- public StringBuffer doXid (Data datas) throws Exception
- {
- return (doXid (datas.getIdsDataById ()));
- }
-
-
- /*
- * No need to be synchronized.
- */
- public StringBuffer doXid (IdsDataById datas) throws Exception
+ static public StringBuffer doXid(final String filePathname) throws Exception
{
StringBuffer result;
- logger.info("doXid for file [" + this.sourceFilePathname + "]");
-
- // Get the good tree.
- File source = new File (this.sourceFilePathname);
+ FilePresenter presenter = new FilePresenter(filePathname);
- if (!source.exists ())
- {
- String errorMessage = "source file defined but not found (" + this.sourceFilePathname + ")";
- logger.error (errorMessage);
- result = null;
- throw new Exception (errorMessage);
- }
- else if ((this.doc == null) ||
- (this.sourceFileTime != source.lastModified ()))
- {
- this.sourceFileTime = source.lastModified ();
- this.doc = Presenter.fileToTree (this.sourceFilePathname);
- this.doctype = getDoctype(this.sourceFilePathname);
- if (this.doc != null)
- {
- Presenter.addMetaTag (doc, "generator", "XID 0.0");
- }
- }
-
- // Build the web page.
- StringWriter htmlCode = new StringWriter(Presenter.estimatedTargetLength(source.length()));
- htmlCode.write(doctype);
- htmlCode.write('\n');
-
- Presenter.doXid (htmlCode, doc, datas);
- result = htmlCode.getBuffer();
+ result = presenter.doXid((Data) null);
//
return (result);
}
+ /**
+ * Xid a file.
+ */
+ static public StringBuffer doXid(final String filePathname, final Data datas) throws Exception
+ {
+ StringBuffer result;
- static public String getDoctype (String filePathname) throws Exception
+ FilePresenter presenter = new FilePresenter(filePathname);
+
+ result = presenter.doXid(datas);
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ * @param filePathname
+ * @return
+ * @throws Exception
+ */
+ static public String getDoctype(final String filePathname) throws Exception
{
String result;
//
- BufferedReader in = new BufferedReader (new FileReader (filePathname));
+ BufferedReader in = new BufferedReader(new FileReader(filePathname));
String doctype = in.readLine();
in.close();
-
+
logger.info("doctype=[" + doctype + "]");
-
+
//
- if ((doctype.startsWith ("
{
private static final long serialVersionUID = 7058868685681354293L;
- static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger (FilePresenters.class);
-
+ static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FilePresenters.class);
/**
*
*/
- public FilePresenters ()
+ public FilePresenters()
{
- super ();
+ super();
}
-
/**
*
*/
- public FilePresenters (FilePresenters source)
+ public FilePresenters(final FilePresenters source)
{
- super ();
+ super();
for (FilePresenter presenter : source)
{
this.add(presenter);
}
}
-
/**
*
*/
- public boolean exists (String source)
+ public boolean exists(final String source)
{
boolean result;
-
-
+
if (this.getBySource(source) == null)
{
result = false;
@@ -57,33 +51,31 @@ public class FilePresenters extends Vector
{
result = true;
}
-
+
//
- return(result);
+ return (result);
}
-
/**
*
*/
- public FilePresenter getByIndex (int id)
+ public FilePresenter getByIndex(final int id)
{
FilePresenter result;
result = this.get(id);
-
+
//
- return(result);
+ return (result);
}
-
/**
*
*/
- public FilePresenter getBySource (String source)
+ public FilePresenter getBySource(final String source)
{
FilePresenter result;
-
+
if (source == null)
{
result = null;
@@ -98,7 +90,7 @@ public class FilePresenters extends Vector
if (presenterIndex < this.size())
{
FilePresenter presenter = this.get(presenterIndex);
-
+
if (presenter.source().equals(source))
{
result = presenter;
@@ -116,19 +108,18 @@ public class FilePresenters extends Vector
}
}
}
-
+
//
- return(result);
+ return (result);
}
-
/**
*
*/
- public int getIndexOf (String source)
+ public int getIndexOf(final String source)
{
int result;
-
+
if (source == null)
{
result = -1;
@@ -143,7 +134,7 @@ public class FilePresenters extends Vector
if (presenterIndex < this.size())
{
FilePresenter presenter = this.get(presenterIndex);
-
+
if (presenter.source().equals(source))
{
result = presenterIndex;
@@ -161,23 +152,23 @@ public class FilePresenters extends Vector
}
}
}
-
- //
- return(result);
- }
+ //
+ return (result);
+ }
/**
*
*/
+ @Override
public String toString()
{
String result;
-
+
result = "";
-
+
//
- return(result);
+ return (result);
}
}
diff --git a/src/fr/devinsy/xid/FilePresentersProxy.java b/src/fr/devinsy/xid/FilePresentersProxy.java
index 275acb3..3c9d929 100644
--- a/src/fr/devinsy/xid/FilePresentersProxy.java
+++ b/src/fr/devinsy/xid/FilePresentersProxy.java
@@ -1,52 +1,30 @@
package fr.devinsy.xid;
-
/**
*
*/
public class FilePresentersProxy
{
- static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger (FilePresentersProxy.class);
-
+ static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FilePresentersProxy.class);
private static FilePresentersProxy instance = null;
- protected FilePresenters presenters = null;
+ private FilePresenters presenters = null;
/**
*
*/
- protected FilePresentersProxy () throws Exception
+ protected FilePresentersProxy() throws Exception
{
this.presenters = new FilePresenters();
}
-
/**
*
*/
- public static FilePresentersProxy instance () throws Exception
- {
- FilePresentersProxy result;
-
- if (FilePresentersProxy.instance == null)
- {
- instance = new FilePresentersProxy ();
- }
-
- result = instance;
-
- //
- return (result);
- }
-
-
- /**
- *
- */
- public FilePresenter getBySource(String source) throws Exception
+ public FilePresenter getBySource(final String source) throws Exception
{
FilePresenter result;
-
+
if (source == null)
{
result = null;
@@ -60,7 +38,25 @@ public class FilePresentersProxy
this.presenters.add(result);
}
}
-
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ public static FilePresentersProxy instance() throws Exception
+ {
+ FilePresentersProxy result;
+
+ if (FilePresentersProxy.instance == null)
+ {
+ instance = new FilePresentersProxy();
+ }
+
+ result = instance;
+
//
return (result);
}
diff --git a/src/fr/devinsy/xid/IdData.java b/src/fr/devinsy/xid/IdData.java
index d7fbde8..51d4a91 100644
--- a/src/fr/devinsy/xid/IdData.java
+++ b/src/fr/devinsy/xid/IdData.java
@@ -2,38 +2,42 @@ package fr.devinsy.xid;
import java.io.Serializable;
-
/**
- * IdData class is used to hold application data and
- * the business logic that operates on the data.
- *
- * The only requirement of a IdData class is that it must implement a
- * display method. The display method must return a text representation
- * of the data, suitable for display in a web page.
- *
- * XID provides a User Input IdData, Text IdData and ...
- * application may also implement it's own IdData classes.
- *
+ * IdData class is used to hold application data and the business logic that
+ * operates on the data.
+ *
+ * The only requirement of a IdData class is that it must implement a display
+ * method. The display method must return a text representation of the data,
+ * suitable for display in a web page.
+ *
+ * XID provides a User Input IdData, Text IdData and ... application may also
+ * implement it's own IdData classes.
+ *
*/
public class IdData implements Serializable, IdDataCore
{
- private static final long serialVersionUID = 8976245034682639923L;
+ public enum IterationStrategy
+ {
+ ONLY_FIRST_ROW, ONLY_FIRST_TWO_ROWS, ONLY_ROWS_WITH_ID, ONLY_ROWS_WITHOUT_ID, ALL_ROWS
+ }
+ public enum MODE
+ {
+ REPLACE, APPEND, IGNORE
+ }
- public enum IterationStrategy {ONLY_FIRST_ROW, ONLY_FIRST_TWO_ROWS, ONLY_ROWS_WITH_ID, ONLY_ROWS_WITHOUT_ID, ALL_ROWS}
+ private static final long serialVersionUID = 8976245034682639923L;;
- public enum MODE {REPLACE, APPEND, IGNORE};
+ private IterationStrategy iterationStrategy;
+ private Attributes attributes;
+ private boolean excludeSection;
+ private MODE displayMode = MODE.REPLACE;
+ private String content;
- protected IterationStrategy iterationStrategy;
- protected Attributes attributes;
- protected boolean excludeSection;
- protected MODE displayMode = MODE.REPLACE;
- protected String content;
-
- /*
+ /**
*
*/
- public IdData ()
+ public IdData()
{
this.attributes = null;
this.excludeSection = false;
@@ -42,11 +46,10 @@ public class IdData implements Serializable, IdDataCore
this.iterationStrategy = IterationStrategy.ALL_ROWS;
}
-
- /*
+ /**
*
*/
- public IdData (String text)
+ public IdData(final String text)
{
this.attributes = null;
this.excludeSection = false;
@@ -55,34 +58,10 @@ public class IdData implements Serializable, IdDataCore
this.iterationStrategy = IterationStrategy.ALL_ROWS;
}
-
- /*
+ /**
*
*/
- public String display ()
- {
- String result;
-
- result = this.content;
-
- //
- return (result);
- }
-
-
- /*
- *
- */
- public void setContent (String text)
- {
- this.content = text;
- }
-
-
- /*
- *
- */
- public void appendContent (String text)
+ public void appendContent(final String text)
{
if (this.content == null)
{
@@ -94,17 +73,38 @@ public class IdData implements Serializable, IdDataCore
}
}
-
- /*
+ /**
*
*/
- public void setDisplayMode(MODE displayMode)
+ public Attributes attributes()
{
- this.displayMode = displayMode;
+ Attributes result;
+
+ if (this.attributes == null)
+ {
+ this.attributes = new Attributes();
+ }
+
+ result = this.attributes;
+
+ //
+ return (result);
}
+ /**
+ *
+ */
+ public String display()
+ {
+ String result;
- /*
+ result = this.content;
+
+ //
+ return (result);
+ }
+
+ /**
*
*/
public MODE displayMode()
@@ -116,62 +116,23 @@ public class IdData implements Serializable, IdDataCore
return (result);
}
-
- /*
- *
- */
- public Attributes attributes ()
- {
- Attributes result;
-
- if (this.attributes == null)
- {
- this.attributes = new Attributes ();
- }
-
- result = this.attributes;
-
- //
- return (result);
- }
-
-
- /*
- *
- */
- public void setExcludeSection(boolean excludeSection)
- {
- this.excludeSection = excludeSection;
- }
-
-
- /*
+ /**
*
*/
public boolean excludeSection()
{
boolean result;
-
+
result = excludeSection;
-
+
//
- return(result);
+ return (result);
}
-
/**
*
*/
- public void setIterationStrategy (IterationStrategy strategy)
- {
- this.iterationStrategy = strategy;
- }
-
-
- /**
- *
- */
- public IterationStrategy iterationStrategy ()
+ public IterationStrategy iterationStrategy()
{
IterationStrategy result;
@@ -180,4 +141,36 @@ public class IdData implements Serializable, IdDataCore
//
return (result);
}
+
+ /**
+ *
+ */
+ public void setContent(final String text)
+ {
+ this.content = text;
+ }
+
+ /**
+ *
+ */
+ public void setDisplayMode(final MODE displayMode)
+ {
+ this.displayMode = displayMode;
+ }
+
+ /**
+ *
+ */
+ public void setExcludeSection(final boolean excludeSection)
+ {
+ this.excludeSection = excludeSection;
+ }
+
+ /**
+ *
+ */
+ public void setIterationStrategy(final IterationStrategy strategy)
+ {
+ this.iterationStrategy = strategy;
+ }
}
diff --git a/src/fr/devinsy/xid/IdsDataById.java b/src/fr/devinsy/xid/IdsDataById.java
index e1ec7c4..c0d4193 100644
--- a/src/fr/devinsy/xid/IdsDataById.java
+++ b/src/fr/devinsy/xid/IdsDataById.java
@@ -1,8 +1,8 @@
package fr.devinsy.xid;
-import java.util.*;
+import java.util.HashMap;
-/*
+/**
*
*/
public class IdsDataById extends HashMap implements IdDataCore
@@ -10,33 +10,33 @@ public class IdsDataById extends HashMap implements IdDataCo
private static final long serialVersionUID = -5787252043825503554L;
- /*
+ /**
*
*/
- public IdsDataById ()
+ public IdsDataById()
{
- super ();
+ super();
}
- /*
+ /**
*
*/
- public void setId (String id, IdDataCore data)
- {
- this.put (id, data);
- }
-
- /*
- *
- */
- public IdDataCore getId (String id)
+ public IdDataCore getId(final String id)
{
IdDataCore result;
- result = this.get (id);
+ result = this.get(id);
//
return (result);
}
+ /**
+ *
+ */
+ public void setId(final String id, final IdDataCore data)
+ {
+ this.put(id, data);
+ }
+
}
diff --git a/src/fr/devinsy/xid/IdsDataByIndex.java b/src/fr/devinsy/xid/IdsDataByIndex.java
index c47e1b2..9b0aecf 100644
--- a/src/fr/devinsy/xid/IdsDataByIndex.java
+++ b/src/fr/devinsy/xid/IdsDataByIndex.java
@@ -1,9 +1,8 @@
package fr.devinsy.xid;
-import java.util.*;
+import java.util.Vector;
-
-/*
+/**
*
*/
public class IdsDataByIndex extends Vector implements IdDataCore
@@ -14,8 +13,8 @@ public class IdsDataByIndex extends Vector implements IdDataCore
/**
*
*/
- public IdsDataByIndex ()
+ public IdsDataByIndex()
{
- super ();
+ super();
}
}
diff --git a/src/fr/devinsy/xid/ParserErrorHandler.java b/src/fr/devinsy/xid/ParserErrorHandler.java
index 675def3..70ee36a 100644
--- a/src/fr/devinsy/xid/ParserErrorHandler.java
+++ b/src/fr/devinsy/xid/ParserErrorHandler.java
@@ -1,36 +1,96 @@
package fr.devinsy.xid;
-import org.xml.sax.*;
-import java.util.*;
+import java.util.Vector;
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXParseException;
/**
- * Extract from org.xml.sax Interface ErrorHandler:
- * "If a SAX application needs to implement customized error handling,
- * it must implement this interface and then register an instance with
- * the XML reader using the setErrorHandler method. The parser will
- * then report all errors and warnings through this interface."
- *
+ * Extract from org.xml.sax Interface ErrorHandler: "If a SAX application needs
+ * to implement customized error handling, it must implement this interface and
+ * then register an instance with the XML reader using the setErrorHandler
+ * method. The parser will then report all errors and warnings through this
+ * interface."
+ *
*/
public class ParserErrorHandler implements ErrorHandler
{
- Vector messages;
- int fatalErrorsCount;
- int errorsCount;
- int warningCount;
+ private Vector messages;
+ private int fatalErrorsCount;
+ private int errorsCount;
+ private int warningCount;
- public ParserErrorHandler ()
+ public ParserErrorHandler()
{
fatalErrorsCount = 0;
errorsCount = 0;
warningCount = 0;
- messages = new Vector ();
+ messages = new Vector();
}
-
/**
*
*/
- public int fatalErrorsCount ()
+ public int allErrorsCount()
+ {
+ int result;
+
+ result = fatalErrorsCount() + errorsCount() + warningCount();
+
+ //
+ return (result);
+ }
+
+ /**
+ * Called by the XML parser to handle fatal errors.
+ *
+ * @param ex
+ * Parse Excpetion. Contains the warning text and the line
+ * number.
+ */
+ @Override
+ public void error(final SAXParseException exception)
+ {
+ String message = "Error at line " + exception.getLineNumber() + " : " + exception.getMessage();
+
+ this.errorsCount += 1;
+ this.messages.add(message);
+ }
+
+ /**
+ *
+ */
+ public int errorsCount()
+ {
+ int result;
+
+ result = this.errorsCount;
+
+ //
+ return (result);
+ }
+
+ /**
+ * Called by the XML parser to handle fatal errors.
+ *
+ * @param ex
+ * Parse Excpetion. Contains the error text and the line number.
+ * When a fatal parse error occurs, the parse does not return a
+ * document.
+ */
+ @Override
+ public void fatalError(final SAXParseException exception)
+ {
+ String message = "Fatal error at line " + exception.getLineNumber() + " : " + exception.getMessage();
+
+ this.fatalErrorsCount += 1;
+ this.messages.add(message);
+ }
+
+ /**
+ *
+ */
+ public int fatalErrorsCount()
{
int result;
@@ -43,50 +103,11 @@ public class ParserErrorHandler implements ErrorHandler
/**
*
*/
- public int errorsCount ()
- {
- int result;
-
- result = this.errorsCount;
-
- //
- return (result);
- }
-
- /**
- *
- */
- public int warningCount ()
- {
- int result;
-
- result = this.warningCount;
-
- //
- return (result);
- }
-
- /**
- *
- */
- public int allErrorsCount ()
- {
- int result;
-
- result = fatalErrorsCount () + errorsCount () + warningCount ();
-
- //
- return (result);
- }
-
- /**
- *
- */
- public boolean hasError ()
+ public boolean hasError()
{
boolean result;
- if (allErrorsCount () == 0)
+ if (allErrorsCount() == 0)
{
result = false;
}
@@ -99,61 +120,52 @@ public class ParserErrorHandler implements ErrorHandler
return (result);
}
-
/**
- * Called by the XML parser to handle fatal errors.
- * @param ex Parse Excpetion. Contains the warning text and the line number.
+ *
*/
- public void error (SAXParseException exception)
+ @Override
+ public String toString()
{
- String message = "Error at line " + exception.getLineNumber() + " : " + exception.getMessage();
+ StringBuffer result;
- this.errorsCount += 1;
- this.messages.add (message);
- }
+ result = new StringBuffer();
- /**
- * Called by the XML parser to handle fatal errors.
- * @param ex Parse Excpetion. Contains the error text and the line number.
- * When a fatal parse error occurs, the parse does not return a document.
- */
- public void fatalError (SAXParseException exception)
- {
- String message = "Fatal error at line " + exception.getLineNumber() + " : " + exception.getMessage();
+ for (String message : messages)
+ {
+ result.append(message);
+ result.append('\n');
+ }
- this.fatalErrorsCount += 1;
- this.messages.add (message);
+ //
+ return (result.toString());
}
/**
* Called by the XML parser to handle warnings.
- * @param ex Parse Excpetion. Contains the warning text and the line number.
+ *
+ * @param ex
+ * Parse Excpetion. Contains the warning text and the line
+ * number.
*/
- public void warning(SAXParseException exception)
+ @Override
+ public void warning(final SAXParseException exception)
{
String message = "Warning at line " + exception.getLineNumber() + " : " + exception.getMessage();
this.warningCount += 1;
- this.messages.add (message);
+ this.messages.add(message);
}
-
/**
*
*/
- public String toString ()
+ public int warningCount()
{
- StringBuffer result;
+ int result;
- result = new StringBuffer ();
-
- for (String message : messages)
- {
- result.append (message);
- result.append ('\n');
- }
+ result = this.warningCount;
//
- return (result.toString ());
+ return (result);
}
}
diff --git a/src/fr/devinsy/xid/Presenter.java b/src/fr/devinsy/xid/Presenter.java
index cf22d66..c0b3eec 100644
--- a/src/fr/devinsy/xid/Presenter.java
+++ b/src/fr/devinsy/xid/Presenter.java
@@ -1,6 +1,5 @@
package fr.devinsy.xid;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -9,10 +8,12 @@ import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.validation.Schema;
+
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
@@ -21,7 +22,6 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
-
/**
*
*/
@@ -29,675 +29,22 @@ public class Presenter
{
static final public char INDEX_SEPARATOR = '_';
- static protected org.apache.log4j.Logger logger;
+ static private org.apache.log4j.Logger logger;
static
- {
- logger = org.apache.log4j.Logger.getLogger (Presenter.class);
- }
-
-
- /*
- * Xid a file with data.
- */
- static public void doXid (Writer result, Document doc, IdsDataById datas) throws Exception
{
- Presenter.process (result, doc, datas);
+ logger = org.apache.log4j.Logger.getLogger(Presenter.class);
}
-
- /*
- *
- */
- static public String getClassAttributeValue (Node node)
- {
- String result;
-
- NamedNodeMap attributes = node.getAttributes ();
- if (attributes == null)
- {
- result = null;
- }
- else
- {
- Node nameAttribute = attributes.getNamedItem ("class");
-
- if (nameAttribute == null)
- {
- result = null;
- }
- else
- {
- result = nameAttribute.getNodeValue ();
- }
- }
-
- //
- return (result);
- }
-
-
/**
*
*/
- static public Attributes mergeAttributes (Attributes target, Attributes source)
- {
- Attributes result;
-
- //
- if (target == null)
- {
- result = source;
- }
- else if (source == null)
- {
- result = target;
- }
- else
- {
- result = new Attributes (target);
-
- Iterator> iterator = source.entrySet().iterator();
-
- while (iterator.hasNext())
- {
- Map.Entry attribute = iterator.next();
-
- String currentValue = target.get (attribute.getKey ());
-
- if (currentValue == null)
- {
- result.put (attribute.getKey (), attribute.getValue ());
- }
- else if (attribute.getKey ().equals ("style"))
- {
- result.put (attribute.getKey (), currentValue + attribute.getValue ());
- }
- else
- {
- result.put (attribute.getKey (), attribute.getValue ());
- }
- }
- }
-
- //
- return (result);
- }
-
-
- /*
- *
- */
- static protected void processChildren (Writer result, Node node, IdsDataById datas) throws Exception
- {
- processChildren (result, node, datas, "");
- }
-
-
- /*
- *
- */
- static protected void processChildren (Writer result, Node node, IdsDataById datas, String suffix) throws Exception
- {
- // Get the iteration strategy.
- IdData.IterationStrategy strategy;
-
- NamedNodeMap attributes = node.getAttributes ();
- if (attributes == null)
- {
- strategy = IdData.IterationStrategy.ALL_ROWS;
- }
- else
- {
- Node id = attributes.getNamedItem ("id");
-
- if (id == null)
- {
- strategy = IdData.IterationStrategy.ALL_ROWS;
- }
- else
- {
- IdDataCore dataCore = datas.getId (id.getNodeValue ());
- if (dataCore == null)
- {
- strategy = IdData.IterationStrategy.ALL_ROWS;
- }
- else if (dataCore instanceof IdData)
- {
- IdData data = (IdData) dataCore;
- strategy = data.iterationStrategy ();
- }
- else
- {
- strategy = IdData.IterationStrategy.ALL_ROWS;
- }
- }
- }
-
-
- // Iterate.
- NodeList children = node.getChildNodes();
- int childrenCount = children.getLength ();
-
- switch (strategy)
- {
- case ONLY_FIRST_ROW:
- int lineCounter = 0;
- for (int childIndex = 0; childIndex < childrenCount; childIndex++)
- {
- if (children.item (childIndex).getNodeType () == Node.ELEMENT_NODE)
- {
- lineCounter += 1;
- if (lineCounter == 1)
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- else
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- break;
-
- case ONLY_FIRST_TWO_ROWS:
- lineCounter = 0;
- for (int childIndex = 0; childIndex < childrenCount; childIndex++)
- {
- if (children.item (childIndex).getNodeType () == Node.ELEMENT_NODE)
- {
- lineCounter += 1;
-
- if ((lineCounter == 1) || (lineCounter == 2))
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- else
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- break;
-
- case ONLY_ROWS_WITH_ID:
- for (int childIndex = 0; childIndex < childrenCount; childIndex++)
- {
- if (children.item (childIndex).getNodeType () == Node.ELEMENT_NODE)
- {
- NamedNodeMap attrs2 = children.item (childIndex).getAttributes ();
-
- if ((attrs2 != null) &&
- (attrs2.getNamedItem ("id") != null))
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- else
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- break;
-
- case ONLY_ROWS_WITHOUT_ID:
- for (int childIndex = 0; childIndex < childrenCount; childIndex++)
- {
- if (children.item (childIndex).getNodeType () == Node.ELEMENT_NODE)
- {
- NamedNodeMap attrs2 = children.item (childIndex).getAttributes ();
- if ((attrs2 == null) ||
- (attrs2.getNamedItem ("id") == null))
- {
- process (result, children.item(childIndex), datas, suffix);
- }
- }
- else
- {
- process (result, children.item (childIndex), datas, suffix);
- }
- }
- break;
-
- case ALL_ROWS:
- for (int childIndex = 0; childIndex < childrenCount; childIndex++)
- {
- process (result, children.item(childIndex), datas, suffix);
- }
- break;
- }
- }
-
-
- /**
- * Processes a node that has dynamic content. Calls the appropriate code
- * generator method, depending on the tag.
- *
- * @param node
- * Current node.
- * @param attrs
- * The tag attributes.
- * @param idAttr
- * The ID.
- */
- static protected void processElementWithId (Writer result, Node node, NamedNodeMap attrs, Node idAttr, IdsDataById datas) throws Exception
-
- {
- processElementWithId (result, node, attrs, idAttr, datas, "");
- }
-
-
- /**
- * Processes a node that has dynamic content. Calls the appropriate code
- * generator method, depending on the tag.
- *
- * @param node
- * Current node.
- * @param attrs
- * The tag attributes.
- * @param idAttr
- * The ID.
- */
- static protected void processElementWithId (Writer result, Node node, NamedNodeMap attrs, Node idAttr, IdsDataById datas, String suffix) throws Exception
- {
- String tag = node.getNodeName();
-
- // String idValue = idAttr.getNodeValue();
-
- logger.debug ("tag=" + tag);
-
- // Get data of this id.
- IdDataCore dataCore = datas.get (idAttr.getNodeValue ());
-
- if (dataCore == null)
- {
- Presenter.processElementBasically (result, node, datas, suffix);
- }
- else if (dataCore instanceof IdData)
- {
- IdData data = (IdData) dataCore;
-
- String theClass = data.attributes ().getAttribute ("class");
-
- if ((theClass == null) ||
- (!theClass.equals ("xid:nodisplay")))
- {
- // Open the tag.
- result.append ("<");
- result.append (node.getNodeName());
-
- // Build attributes.
- result.append (processAttributes (attrs, data.attributes (), suffix));
-
- if ((node.getChildNodes () == null) &&
- ((data == null) || (data.display () == null)))
- {
- // Close the tag.
- result.append (" />");
- }
- else
- {
- result.append ('>');
-
- // CHANGED, cpm:
-
- // Insert data.
- if ((data == null) ||
- (data.display () == null))
- {
- processChildren (result, node, datas, suffix);
- }
- else
- {
- result.append (data.display ());
- }
-
- // Close the tag.
- result.append ("");
- result.append (node.getNodeName());
- result.append ('>');
- }
- }
- }
- else if (dataCore instanceof IdsDataByIndex)
- {
- IdsDataByIndex tags = (IdsDataByIndex) dataCore;
-
- int nbLines = tags.size ();
- for (int nLine = 0; nLine < nbLines; nLine++)
- {
- if (tags.elementAt (nLine) instanceof IdData)
- {
- IdData data = (IdData) tags.elementAt (nLine);
-
- // Open the tag.
- result.append ("<");
- result.append (node.getNodeName());
-
- result.append (processAttributes (attrs, data.attributes (), Integer.toString (nLine)));
-
- if ((node.getChildNodes () == null) &&
- ((data == null) || (data.display () == null)))
- {
- // Close the tag.
- result.append (" />\n");
- }
- else
- {
- result.append ('>');
-
-
- // CHANGED, cpm
-
- // Insert data.
- if ((data == null) || (data.display () == null))
- {
- processChildren (result, node, datas, suffix);
- }
- else
- {
- result.append (data.display ());
- }
-
- // Close the tag.
- result.append ("");
- result.append (node.getNodeName());
- result.append (">\n");
- }
- }
- else
- {
- // Manage a Hashmap.
- IdsDataById data = (IdsDataById) tags.elementAt (nLine);
-
- Presenter.processElementWithId (result, node, attrs, idAttr, data, Integer.toString (nLine));
- result.append ('\n');
- }
- }
- }
- else
- {
- logger.warn ("Unknow type of IdDataId");
- }
-
- //
- logger.debug ("Exit");
- }
-
-
-
- /**
- *
- */
- static protected void process (Writer result, Node node, IdsDataById datas) throws Exception
- {
- Presenter.process (result, node, datas, "");
- }
-
-
- /**
- * Recursive method that processes a node and any child nodes.
- *
- */
- static protected void process (Writer result, Node node, IdsDataById datas, String suffix) throws Exception
- {
- logger.debug ("process - started");
- String TRANSITIONAL_DTD = "xhtml1-transitional.dtd";
- String TRANSITIONAL_DOCTYPE = "\n";
-
- // Is there anything to do?
- if (node != null)
- {
- logger.debug ("nodeName=" + node.getNodeName ());
- // Find the name attribute value.
- String name;
- name = getClassAttributeValue (node);
-
- if ((name == null) ||
- ((name != null) &&
- (!name.equals ("xid:nodisplay"))))
- {
- int type = node.getNodeType();
- switch (type)
- {
- case Node.DOCUMENT_NODE:
- {
- logger.debug ("case Node.DOCUMENT_NODE");
- DocumentType dt = ((Document) node).getDoctype();
-
- if (dt != null)
- {
- // String publicId = dt.getPublicId();
- String systemId = dt.getSystemId();
-
- if (systemId.equals(TRANSITIONAL_DTD))
- {
- result.append(TRANSITIONAL_DOCTYPE);
- }
-
- // Log.write(Log.TRACE,"publicId = " + publicId);
- // Log.write(Log.TRACE,"systemId = " + systemId);
- }
-
- Presenter.process (result, ((Document) node).getDocumentElement(), datas, suffix);
-
- break;
- }
-
- case Node.ELEMENT_NODE:
- {
- logger.debug ("case Node.ELEMENT_NODE");
-
- NamedNodeMap attrs = node.getAttributes ();
- Node idAttr = attrs.getNamedItem ("id");
-
- if (idAttr != null)
- {
- Presenter.processElementWithId (result, node, attrs, idAttr, datas, suffix);
- }
- else
- {
- Presenter.processElementBasically (result, node, datas, suffix);
- }
-
- break;
- }
-
- // handle entity reference nodes
- case Node.ENTITY_REFERENCE_NODE:
- {
- logger.debug ("case Node.ENTITY_REFERENCE_NODE");
-
- result.append ('&');
- result.append (node.getNodeName());
- result.append (';');
- break;
- }
-
- // print cdata sections
- case Node.CDATA_SECTION_NODE:
- {
- logger.debug ("case Node.CDATA_SECTION_NODE");
-
- result.append ("");
-
- break;
- }
-
- // print text
- case Node.TEXT_NODE:
- {
- logger.debug ("case Node.TEXTE_NODE");
- result.append (restoreEntities (new StringBuffer(node.getNodeValue())));
- break;
- }
-
- // print processing instruction
- case Node.PROCESSING_INSTRUCTION_NODE:
- {
- logger.debug ("Node.PROCESSING_INSTRUCTION_NODE");
-
- result.append ("");
- result.append (node.getNodeName());
- String data = node.getNodeValue();
- if ((data != null) && (data.length () > 0))
- {
- result.append (' ');
- result.append (data);
- }
- result.append ("?>");
- break;
- }
- }
- }
- }
-
- //
- //logger.info ("result=" + result);
- logger.debug ("process - ended");
- }
-
-
- /*
- *
- */
- static void processElementBasically (Writer result, Node node, IdsDataById datas) throws Exception
- {
- processElementBasically (result, node, datas, "");
- }
-
-
- /*
- *
- */
- static void processElementBasically (Writer result, Node node, IdsDataById datas, String suffix) throws Exception
- {
- logger.debug("processElementBasically - started");
-
- // Open the tag.
- result.append ('<');
- result.append (node.getNodeName());
-
-
- // Build the tag attributes.
- //Attributes tagAttributes;
-
- result.append (processAttributes (node.getAttributes (),
- null,
- suffix));
-
- //
- if (node.getChildNodes () == null)
- {
- result.append(" />");
- }
- else
- {
- result.append('>');
-
- processChildren (result, node, datas, suffix);
-
- result.append("");
- result.append(node.getNodeName());
- result.append('>');
- }
-
- logger.debug("processElementBasically - ended");
- }
-
-
-
- /*
- *
- */
- static protected Document buildTree (InputStream source) throws Exception
- {
- Document result;
-
- try
- {
- // Create a DocumentBuilderFactory and configure it.
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ();
-
- // Set various configuration options.
- dbf.setValidating (true);
- dbf.setIgnoringComments (true);
- dbf.setIgnoringElementContentWhitespace (false);
- dbf.setCoalescing (false);
-
- // Keep entity references as they are.
- dbf.setExpandEntityReferences(false);
-
- // Create a DocumentBuilder that satisfies the constraints
- // specified by the DocumentBuilderFactory.
- DocumentBuilder db = dbf.newDocumentBuilder ();
-
- ParserErrorHandler errorHandler;
- errorHandler = new ParserErrorHandler();
-
- // Set the error handler.
- db.setErrorHandler (errorHandler);
-
- Schema schema = db.getSchema ();
-
- logger.debug ("schema=" + schema);
-
- // Parse the input file.
- result = db.parse (source);
-
- if (errorHandler.hasError ())
- {
- // Most time, error is (with StringPresenter):
- // "Error at line 1 : Document root element "html", must match DOCTYPE root "null".
- // Error at line 1 : Document is invalid: no grammar found.
- // We ignore it. STU
- logger.debug(errorHandler.toString ());
- }
- else
- {
- DomPresenter.addMetaTag (result, "generator", "XID 0.0");
- }
- }
- catch (ParserConfigurationException exception)
- {
- String errorMessage = "Parser configuration exception: " + exception.getMessage ();
- logger.error (errorMessage);
- result = null;
- throw new Exception (errorMessage, exception);
- }
- catch (SAXException exception)
- {
- String errorMessage = "Error during SAX parsing: " + exception.getMessage ();
- logger.error (errorMessage);
- result = null;
- throw new Exception (errorMessage, exception);
- }
- catch (IOException exception)
- {
- String errorMessage = "IOError during parsing." + exception.getMessage ();
- logger.error (errorMessage);
- result = null;
- throw new Exception (errorMessage, exception);
- }
-
- //
- return (result);
- }
-
-
-
- /*
- *
- */
- static protected void addMetaTag (Document doc, String name, String content)
+ static protected void addMetaTag(final Document doc, final String name, final String content)
{
// Find head tag.
- Node headNode = Presenter.findHeadNode (doc);
+ Node headNode = Presenter.findHeadNode(doc);
- Node metaNode = doc.createElement ("meta");
+ Node metaNode = doc.createElement("meta");
NamedNodeMap attrMap = metaNode.getAttributes();
Node attrNode = doc.createAttribute("name");
@@ -710,6 +57,169 @@ public class Presenter
headNode.insertBefore(metaNode, headNode.getFirstChild());
}
+ /**
+ *
+ */
+ static protected Document buildTree(final InputStream source) throws Exception
+ {
+ Document result;
+
+ try
+ {
+ // Create a DocumentBuilderFactory and configure it.
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+
+ // Set various configuration options.
+ dbf.setValidating(true);
+ dbf.setIgnoringComments(true);
+ dbf.setIgnoringElementContentWhitespace(false);
+ dbf.setCoalescing(false);
+
+ // Keep entity references as they are.
+ dbf.setExpandEntityReferences(false);
+
+ // Create a DocumentBuilder that satisfies the constraints
+ // specified by the DocumentBuilderFactory.
+ DocumentBuilder db = dbf.newDocumentBuilder();
+
+ ParserErrorHandler errorHandler;
+ errorHandler = new ParserErrorHandler();
+
+ // Set the error handler.
+ db.setErrorHandler(errorHandler);
+
+ Schema schema = db.getSchema();
+
+ logger.debug("schema=" + schema);
+
+ // Parse the input file.
+ result = db.parse(source);
+
+ if (errorHandler.hasError())
+ {
+ // Most time, error is (with StringPresenter):
+ // "Error at line 1 : Document root element "html", must match DOCTYPE root "null".
+ // Error at line 1 : Document is invalid: no grammar found.
+ // We ignore it. STU
+ logger.debug(errorHandler.toString());
+ }
+ else
+ {
+ DomPresenter.addMetaTag(result, "generator", "XID 0.0");
+ }
+ }
+ catch (ParserConfigurationException exception)
+ {
+ String errorMessage = "Parser configuration exception: " + exception.getMessage();
+ logger.error(errorMessage);
+ result = null;
+ throw new Exception(errorMessage, exception);
+ }
+ catch (SAXException exception)
+ {
+ String errorMessage = "Error during SAX parsing: " + exception.getMessage();
+ logger.error(errorMessage);
+ result = null;
+ throw new Exception(errorMessage, exception);
+ }
+ catch (IOException exception)
+ {
+ String errorMessage = "IOError during parsing." + exception.getMessage();
+ logger.error(errorMessage);
+ result = null;
+ throw new Exception(errorMessage, exception);
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ * Xid a file with data.
+ */
+ static public void doXid(final Writer result, final Document doc, final IdsDataById datas) throws Exception
+ {
+ Presenter.process(result, doc, datas);
+ }
+
+ /**
+ * Good estimation of the target length able to optimize performance.
+ */
+ static int estimatedTargetLength(final long sourceLength)
+ {
+ int result;
+
+ if (sourceLength < 1000)
+ {
+ result = (int) (sourceLength * 5);
+ }
+ else if (sourceLength < 50000)
+ {
+ result = (int) (sourceLength * 2);
+ }
+ else if (sourceLength < 800000)
+ {
+ result = (100000);
+ }
+ else
+ {
+ result = (int) (sourceLength + 30000);
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ static public String extractBodyContent(final StringBuffer data)
+ {
+ String result = null;
+
+ // Extract the body content.
+ String dataLowerCase = data.toString().toLowerCase();
+
+ int startBody = dataLowerCase.indexOf("");
+ int endBody = dataLowerCase.indexOf("");
+
+ // Note: as failed search is improbable, no care about complexity
+ // in failed search case.
+ if ((startBody == -1) || (endBody == -1))
+ {
+ result = null;
+ }
+ else
+ {
+ result = data.substring(startBody + 6, endBody).trim();
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ * Define in Presenter cause