diff --git a/spring-webflow-samples /swf-booking-jsf/.classpath b/spring-webflow-samples /swf-booking-jsf/.classpath new file mode 100755 index 00000000..91938774 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/.m7project b/spring-webflow-samples /swf-booking-jsf/.m7project new file mode 100755 index 00000000..d7fcf628 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.m7project @@ -0,0 +1,16 @@ + + + + src/webapp + com.m7.webapp.java + + + + + + + + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/.project b/spring-webflow-samples /swf-booking-jsf/.project new file mode 100755 index 00000000..e3243de9 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.project @@ -0,0 +1,42 @@ + + + swf-booking-jsf + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.hibernate.eclipse.console.hibernateBuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.hibernate.eclipse.console.hibernateNature + + diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.core.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.core.prefs new file mode 100755 index 00000000..63c85b13 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,262 @@ +#Tue Jul 31 15:11:23 EDT 2007 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 +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_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_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_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.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=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_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=true +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=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +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.format_guardian_clause_on_one_line=false +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=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=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_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_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_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_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_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_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.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=120 +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=mixed +org.eclipse.jdt.core.formatter.tabulation.size=8 +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.ui.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.ui.prefs new file mode 100755 index 00000000..64363ef0 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,52 @@ +#Tue Jul 31 15:09:12 EDT 2007 +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_Spring Java Conventions +formatter_settings_version=11 +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.format_source_code=true +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_variable_declarations_final=true +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=false +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jpt.core.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jpt.core.prefs new file mode 100755 index 00000000..95837dae --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jpt.core.prefs @@ -0,0 +1,4 @@ +#Fri Aug 03 12:43:55 EDT 2007 +eclipse.preferences.version=1 +org.eclipse.jpt.core.discoverAnnotatedClasses=true +org.eclipse.jpt.core.platform=generic diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jst.common.project.facet.core.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jst.common.project.facet.core.prefs new file mode 100755 index 00000000..1973f017 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.jst.common.project.facet.core.prefs @@ -0,0 +1,4 @@ +#Mon Nov 13 17:23:47 PST 2006 +classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER/owners=jst.java\:5.0 +classpath.helper/org.eclipse.jst.server.core.container\:\:org.eclipse.jst.server.tomcat.runtimeTarget\:\:Apache\ Tomcat\ v5.5/owners=jst.web\:2.4 +eclipse.preferences.version=1 diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.component b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.component new file mode 100755 index 00000000..e35f8033 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100755 index 00000000..cddf50bf --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.validation.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.validation.prefs new file mode 100755 index 00000000..1c7d6317 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,6 @@ +#Mon Nov 13 17:29:33 PST 2006 +DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator; +USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.jst.jsp.core.internal.validation.JSPELValidator;org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator;org.eclipse.jst.jsp.core.internal.validation.JSPDirectiveValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator; +USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.jst.jsp.core.internal.validation.JSPELValidator;org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator;org.eclipse.jst.jsp.core.internal.validation.JSPDirectiveValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator; +USER_PREFERENCE=overrideGlobalPreferencesfalse +eclipse.preferences.version=1 diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.hibernate.eclipse.console.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.hibernate.eclipse.console.prefs new file mode 100755 index 00000000..f979d2ef --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.hibernate.eclipse.console.prefs @@ -0,0 +1,4 @@ +#Fri Aug 03 13:03:09 EDT 2007 +default.configuration=swf-booking-jsf +eclipse.preferences.version=1 +hibernate3.enabled=true diff --git a/spring-webflow-samples /swf-booking-jsf/.settings/org.springframework.ide.eclipse.core.prefs b/spring-webflow-samples /swf-booking-jsf/.settings/org.springframework.ide.eclipse.core.prefs new file mode 100755 index 00000000..a2e2974e --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.settings/org.springframework.ide.eclipse.core.prefs @@ -0,0 +1,33 @@ +#Thu Aug 02 15:26:32 EDT 2007 +eclipse.preferences.version=1 +org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true diff --git a/spring-webflow-samples /swf-booking-jsf/.springBeans b/spring-webflow-samples /swf-booking-jsf/.springBeans new file mode 100755 index 00000000..a291fcdf --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.springBeans @@ -0,0 +1,19 @@ + + + + xml + + + src/main/webapp/WEB-INF/webflow-config.xml + + + + + true + false + + src/main/webapp/WEB-INF/webflow-config.xml + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/.springWebflow b/spring-webflow-samples /swf-booking-jsf/.springWebflow new file mode 100755 index 00000000..5f10b668 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/.springWebflow @@ -0,0 +1,9 @@ + + + + + src/main/webapp/WEB-INF/flows/booking-flow.xml + + + + diff --git a/spring-webflow-samples /swf-booking-jsf/build.xml b/spring-webflow-samples /swf-booking-jsf/build.xml new file mode 100755 index 00000000..9b9e1520 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/build.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/hibernate.cfg.xml b/spring-webflow-samples /swf-booking-jsf/hibernate.cfg.xml new file mode 100755 index 00000000..3d1b6a6d --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/hibernate.cfg.xml @@ -0,0 +1,9 @@ + + + + + org.hibernate.dialect.HSQLDialect + + diff --git a/spring-webflow-samples /swf-booking-jsf/ivy.xml b/spring-webflow-samples /swf-booking-jsf/ivy.xml new file mode 100755 index 00000000..39d08464 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/ivy.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/project.properties b/spring-webflow-samples /swf-booking-jsf/project.properties new file mode 100755 index 00000000..55ed07f5 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/project.properties @@ -0,0 +1,10 @@ +# properties defined in this file are overridable by a local build.properties in this project dir + +# The location of the common build system +common.build.dir=${basedir}/../common-build + +javac.source=1.5 +javac.target=1.5 + +# Do not publish built artifacts to the integration repository +do.publish=false \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/etc/filter.properties b/spring-webflow-samples /swf-booking-jsf/src/etc/filter.properties new file mode 100755 index 00000000..c54e5880 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/etc/filter.properties @@ -0,0 +1,33 @@ +# $Header$ + +# Contains filterable project settings. Setting placeholders in filterable project text +# files will be replaced with these values when the 'statics' build target is run. +# +# You may add static settings directly to this source file in the format: +# setting=value e.g MY_SETTING=myvalue +# This is appropriate usage if you know the setting value will never change. +# +# At build time this source file is copied to the ${target.dir} where additional +# dynamic settings may be appended using the task. Use this approach +# when a setting value depends on the build or the local user's environment. +# +# An example of this approach is shown below: +# +# build.xml +# +# +# +# +# +# +# +# +# This allows for dynamic replacement values that are sourced from local properties files to facilitate +# local user settings. +# +# To refer to filterable settings within project source files like config files, JSPs, or +# other text files use the standard ant placeholder format: +# @SETTING_NAME@ e.g, @MY_SETTING@ and @MY_LOCAL_SETTING@ +# +# Your settings: diff --git a/spring-webflow-samples /swf-booking-jsf/src/etc/test-resources/log4j.properties b/spring-webflow-samples /swf-booking-jsf/src/etc/test-resources/log4j.properties new file mode 100755 index 00000000..59974077 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/etc/test-resources/log4j.properties @@ -0,0 +1,20 @@ +log4j.rootCategory=WARN, stdout, logfile + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n + +log4j.appender.logfile=org.apache.log4j.RollingFileAppender +log4j.appender.logfile.File=${@PROJECT_WEBAPP_NAME@.root}/@PROJECT_WEBAPP_NAME@.log +log4j.appender.logfile.MaxFileSize=512KB + +# Keep three backup files +log4j.appender.logfile.MaxBackupIndex=3 +log4j.appender.logfile.layout=org.apache.log4j.PatternLayout + +#Pattern to output : date priority [category] - line_separator +log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n + +#Enable webflow debug logging +log4j.category.org.springframework.webflow=DEBUG +log4j.category.org.springframework.binding=DEBUG diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/META-INF/persistence.xml b/spring-webflow-samples /swf-booking-jsf/src/main/java/META-INF/persistence.xml new file mode 100755 index 00000000..f4e3d6a7 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + org.hibernate.ejb.HibernatePersistence + org.springframework.webflow.samples.booking.User + org.springframework.webflow.samples.booking.Booking + org.springframework.webflow.samples.booking.Hotel + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/import.sql b/spring-webflow-samples /swf-booking-jsf/src/main/java/import.sql new file mode 100755 index 00000000..180265a4 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/import.sql @@ -0,0 +1,22 @@ +insert into Customer (username, password, name) values ('jeremy', 'barfoo', 'Jeremy Grelle') +insert into Customer (username, password, name) values ('demo', 'demo', 'Demo User') +insert into Hotel (id, price, name, address, city, state, zip, country) values (1, 120, 'Marriott Courtyard', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (2, 180, 'Doubletree', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (3, 450, 'W Hotel', 'Union Square, Manhattan', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (4, 450, 'W Hotel', 'Lexington Ave, Manhattan', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (5, 250, 'Hotel Rouge', '1315 16th Street NW', 'Washington', 'DC', '20036', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (6, 300, '70 Park Avenue Hotel', '70 Park Avenue', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (8, 300, 'Conrad Miami', '1395 Brickell Ave', 'Miami', 'FL', '33131', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (9, 80, 'Sea Horse Inn', '2106 N Clairemont Ave', 'Eau Claire', 'WI', '54703', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (10, 90, 'Super 8 Eau Claire Campus Area', '1151 W Macarthur Ave', 'Eau Claire', 'WI', '54701', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (11, 160, 'Marriot Downtown', '55 Fourth Street', 'San Francisco', 'CA', '94103', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (12, 200, 'Hilton Diagonal Mar', 'Passeig del Taulat 262-264', 'Barcelona', 'Catalunya', '08019', 'Spain') +insert into Hotel (id, price, name, address, city, state, zip, country) values (13, 210, 'Hilton Tel Aviv', 'Independence Park', 'Tel Aviv', '', '63405', 'Israel') +insert into Hotel (id, price, name, address, city, state, zip, country) values (14, 240, 'InterContinental Tokyo Bay', 'Takeshiba Pier', 'Tokyo', '', '105', 'Japan') +insert into Hotel (id, price, name, address, city, state, zip, country) values (15, 130, 'Hotel Beaulac', ' Esplanade Léopold-Robert 2', 'Neuchatel', '', '2000', 'Switzerland') +insert into Hotel (id, price, name, address, city, state, zip, country) values (16, 140, 'Conrad Treasury Place', 'William & George Streets', 'Brisbane', 'QLD', '4001', 'Australia') +insert into Hotel (id, price, name, address, city, state, zip, country) values (17, 230, 'Ritz Carlton', '1228 Sherbrooke St', 'West Montreal', 'Quebec', 'H3G1H6', 'Canada') +insert into Hotel (id, price, name, address, city, state, zip, country) values (18, 460, 'Ritz Carlton', 'Peachtree Rd, Buckhead', 'Atlanta', 'GA', '30326', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (19, 220, 'Swissotel', '68 Market Street', 'Sydney', 'NSW', '2000', 'Australia') +insert into Hotel (id, price, name, address, city, state, zip, country) values (20, 250, 'Meliá White House', 'Albany Street', 'Regents Park London', '', 'NW13UP', 'Great Britain') +insert into Hotel (id, price, name, address, city, state, zip, country) values (21, 210, 'Hotel Allegro', '171 West Randolph Street', 'Chicago', 'IL', '60601', 'USA') diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Booking.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Booking.java new file mode 100755 index 00000000..1fd33b69 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Booking.java @@ -0,0 +1,176 @@ +package org.springframework.webflow.samples.booking; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Date; + +import javax.persistence.Basic; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +//import org.hibernate.validator.Length; +//import org.hibernate.validator.NotNull; +//import org.hibernate.validator.Pattern; + +@Entity +public class Booking implements Serializable { + private Long id; + private User user; + private Hotel hotel; + private Date checkinDate; + private Date checkoutDate; + private String creditCard; + private String creditCardName; + private int creditCardExpiryMonth; + private int creditCardExpiryYear; + private boolean smoking; + private int beds; + + public Booking() { + } + + public Booking(Hotel hotel, User user) { + this.hotel = hotel; + this.user = user; + + Calendar calendar = Calendar.getInstance(); + setCheckinDate(calendar.getTime()); + calendar.add(Calendar.DAY_OF_MONTH, 1); + setCheckoutDate(calendar.getTime()); + } + + @Transient + public BigDecimal getTotal() { + return hotel.getPrice().multiply(new BigDecimal(getNights())); + } + + @Transient + public int getNights() { + return (int) (checkoutDate.getTime() - checkinDate.getTime()) / 1000 / 60 / 60 / 24; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + // @NotNull + @Basic + @Temporal(TemporalType.DATE) + public Date getCheckinDate() { + return checkinDate; + } + + public void setCheckinDate(Date datetime) { + this.checkinDate = datetime; + } + + @ManyToOne + // @NotNull + public Hotel getHotel() { + return hotel; + } + + public void setHotel(Hotel hotel) { + this.hotel = hotel; + } + + @ManyToOne + // @NotNull + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + @Basic + @Temporal(TemporalType.DATE) + // @NotNull + public Date getCheckoutDate() { + return checkoutDate; + } + + public void setCheckoutDate(Date checkoutDate) { + this.checkoutDate = checkoutDate; + } + + // @NotNull(message="Credit card number is required") + // @Length(min=16, max=16, message="Credit card number must 16 digits long") + // @Pattern(regex="^\\d*$", message="Credit card number must be numeric") + public String getCreditCard() { + return creditCard; + } + + public void setCreditCard(String creditCard) { + this.creditCard = creditCard; + } + + @Transient + public String getDescription() { + DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); + return hotel == null ? null : hotel.getName() + ", " + df.format(getCheckinDate()) + " to " + + df.format(getCheckoutDate()); + } + + public boolean isSmoking() { + return smoking; + } + + public void setSmoking(boolean smoking) { + this.smoking = smoking; + } + + public int getBeds() { + return beds; + } + + public void setBeds(int beds) { + this.beds = beds; + } + + // @NotNull(message="Credit card name is required") + // @Length(min=3, max=70, message="Credit card name is required") + public String getCreditCardName() { + return creditCardName; + } + + public void setCreditCardName(String creditCardName) { + this.creditCardName = creditCardName; + } + + public int getCreditCardExpiryMonth() { + return creditCardExpiryMonth; + } + + public void setCreditCardExpiryMonth(int creditCardExpiryMonth) { + this.creditCardExpiryMonth = creditCardExpiryMonth; + } + + public int getCreditCardExpiryYear() { + return creditCardExpiryYear; + } + + public void setCreditCardExpiryYear(int creditCardExpiryYear) { + this.creditCardExpiryYear = creditCardExpiryYear; + } + + @Override + public String toString() { + return "Booking(" + user + "," + hotel + ")"; + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/BookingService.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/BookingService.java new file mode 100755 index 00000000..363182ec --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/BookingService.java @@ -0,0 +1,14 @@ +package org.springframework.webflow.samples.booking; + +import java.util.List; + +public interface BookingService { + + public List findBookings(User user); + + public List findHotels(String searchString, int pageSize, int page); + + public Hotel readHotelById(Long id); + + public Booking bookHotel(Hotel hotel, User user); +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/DebuggingPhaseListener.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/DebuggingPhaseListener.java new file mode 100644 index 00000000..8274d5ff --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/DebuggingPhaseListener.java @@ -0,0 +1,32 @@ +package org.springframework.webflow.samples.booking; + +import javax.faces.event.PhaseEvent; +import javax.faces.event.PhaseId; +import javax.faces.event.PhaseListener; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class DebuggingPhaseListener implements PhaseListener { + + private static final long serialVersionUID = 1L; + + Log logger = LogFactory.getLog(DebuggingPhaseListener.class); + + public void afterPhase(PhaseEvent event) { + // No-op + + } + + public void beforePhase(PhaseEvent event) { + if (logger.isDebugEnabled()) { + logger.debug("Entering JSF Phase: " + event.getPhaseId()); + } + + } + + public PhaseId getPhaseId() { + return PhaseId.ANY_PHASE; + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Hotel.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Hotel.java new file mode 100755 index 00000000..0cd4afad --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/Hotel.java @@ -0,0 +1,102 @@ +package org.springframework.webflow.samples.booking; + +import java.io.Serializable; +import java.math.BigDecimal; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +//import org.hibernate.validator.Length; +//import org.hibernate.validator.NotNull; + +@Entity +public class Hotel implements Serializable { + private Long id; + private String name; + private String address; + private String city; + private String state; + private String zip; + private String country; + private BigDecimal price; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + // @Length(max=50) @NotNull + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + // @Length(max=100) @NotNull + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + // @Length(max=40) @NotNull + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + // @Length(min=4, max=6) @NotNull + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + // @Length(min=2, max=10) @NotNull + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + // @Length(min=2, max=40) @NotNull + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + @Column(precision = 6, scale = 2) + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + @Override + public String toString() { + return "Hotel(" + name + "," + address + "," + city + "," + zip + ")"; + } +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/HotelSearch.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/HotelSearch.java new file mode 100755 index 00000000..19a1f65a --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/HotelSearch.java @@ -0,0 +1,62 @@ +package org.springframework.webflow.samples.booking; + +import java.io.Serializable; + +import javax.faces.event.ActionEvent; + +public class HotelSearch implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * The user-provided search criteria for finding Hotels. + */ + private String searchString; + + /** + * The maximum page size of the Hotel result list + */ + private int pageSize; + + /** + * The current page of the Hotel result list. + */ + private int page; + + public void nextPageListener(ActionEvent event) { + page++; + } + + public void prevPageListener(ActionEvent event) { + page--; + } + + public void findHotelsListener(ActionEvent event) { + page = 0; + } + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/JpaBookingService.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/JpaBookingService.java new file mode 100755 index 00000000..eb59943b --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/JpaBookingService.java @@ -0,0 +1,51 @@ +package org.springframework.webflow.samples.booking; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +@Repository +public class JpaBookingService implements BookingService { + + private EntityManager em; + + @Transactional(readOnly = true) + @SuppressWarnings("unchecked") + public List findBookings(User user) { + return em.createQuery("select b from Booking b where b.user.username = :username order by b.checkinDate") + .setParameter("username", user.getUsername()).getResultList(); + } + + @Transactional(readOnly = true) + @SuppressWarnings("unchecked") + public List findHotels(String searchString, int pageSize, int page) { + String pattern = !StringUtils.hasText(searchString) ? "'%'" : "'%" + + searchString.toLowerCase().replace('*', '%') + "%'"; + return em.createQuery( + "select h from Hotel h where lower(h.name) like " + pattern + " or lower(h.city) like " + pattern + + " or lower(h.zip) like " + pattern + " or lower(h.address) like " + pattern).setMaxResults( + pageSize).setFirstResult(page * pageSize).getResultList(); + } + + @Transactional(readOnly = true) + public Hotel readHotelById(Long id) { + return em.find(Hotel.class, id); + } + + @Transactional(readOnly = true) + public Booking bookHotel(Hotel hotel, User user) { + Booking booking = new Booking(hotel, user); + return booking; + } + + @PersistenceContext + public void setEntityManager(EntityManager em) { + this.em = em; + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SearchAction.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SearchAction.java new file mode 100644 index 00000000..f83007b4 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SearchAction.java @@ -0,0 +1,53 @@ +package org.springframework.webflow.samples.booking; + +import java.util.List; + +import javax.faces.context.FacesContext; + +import org.springframework.webflow.action.MultiAction; +import org.springframework.webflow.execution.Event; +import org.springframework.webflow.execution.RequestContext; + +public class SearchAction extends MultiAction { + + BookingService bookingService; + + public Event findHotels(RequestContext context) { + HotelSearch search = (HotelSearch) context.getFlowScope().get("hotelSearch"); + List hotels = bookingService + .findHotels(search.getSearchString(), search.getPageSize(), search.getPage()); + if (hotels != null) { + SerializableListDataModel model = new SerializableListDataModel(hotels); + int test = model.getRowCount(); + context.getFlowScope().put("hotels", new SerializableListDataModel(hotels)); + } else { + context.getFlowScope().put("hotels", null); + } + return success(); + } + + public Event findBookings(RequestContext context) { + User user = (User) context.getConversationScope().get("user"); + List bookings = bookingService.findBookings(user); + if (bookings != null) { + context.getFlowScope().put("bookings", new SerializableListDataModel(bookings)); + } else { + context.getFlowScope().put("bookings", null); + } + return success(); + } + + public String nextPage() { + HotelSearch search = (HotelSearch) FacesContext.getCurrentInstance().getApplication().getVariableResolver() + .resolveVariable(FacesContext.getCurrentInstance(), "hotelSearch"); + + search.setPage(search.getPage() + 1); + + return "findHotels"; + } + + public void setBookingService(BookingService bookingService) { + this.bookingService = bookingService; + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SerializableListDataModel.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SerializableListDataModel.java new file mode 100644 index 00000000..00956ed2 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/SerializableListDataModel.java @@ -0,0 +1,82 @@ +package org.springframework.webflow.samples.booking; + +import java.io.Serializable; +import java.util.List; + +import javax.faces.model.DataModel; +import javax.faces.model.DataModelEvent; +import javax.faces.model.DataModelListener; + +public class SerializableListDataModel extends DataModel implements Serializable { + + private static final long serialVersionUID = 1L; + + private int _rowIndex = -1; + + private List _data; + + public SerializableListDataModel() { + super(); + } + + public SerializableListDataModel(List list) { + if (list == null) + throw new NullPointerException("list"); + setWrappedData(list); + } + + public int getRowCount() { + if (_data == null) { + return -1; + } + return _data.size(); + } + + public Object getRowData() { + if (_data == null) { + return null; + } + if (!isRowAvailable()) { + throw new IllegalArgumentException("row is unavailable"); + } + return _data.get(_rowIndex); + } + + public int getRowIndex() { + return _rowIndex; + } + + public Object getWrappedData() { + return _data; + } + + public boolean isRowAvailable() { + if (_data == null) { + return false; + } + return _rowIndex >= 0 && _rowIndex < _data.size(); + } + + public void setRowIndex(int rowIndex) { + if (rowIndex < -1) { + throw new IllegalArgumentException("illegal rowIndex " + rowIndex); + } + int oldRowIndex = _rowIndex; + _rowIndex = rowIndex; + if (_data != null && oldRowIndex != _rowIndex) { + Object data = isRowAvailable() ? getRowData() : null; + DataModelEvent event = new DataModelEvent(this, _rowIndex, data); + DataModelListener[] listeners = getDataModelListeners(); + for (int i = 0; i < listeners.length; i++) { + listeners[i].rowSelected(event); + } + } + } + + public void setWrappedData(Object data) { + _data = (List) data; + int rowIndex = _data != null ? 0 : -1; + setRowIndex(rowIndex); + } + +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/User.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/User.java new file mode 100755 index 00000000..4a11fd90 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/User.java @@ -0,0 +1,64 @@ +package org.springframework.webflow.samples.booking; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +//import org.hibernate.validator.Length; +//import org.hibernate.validator.NotNull; +//import org.hibernate.validator.Pattern; + +@Entity +@Table(name = "Customer") +public class User implements Serializable { + private String username; + private String password; + private String name; + + public User(String name, String password, String username) { + this.name = name; + this.password = password; + this.username = username; + } + + public User() { + } + + // @NotNull + // @Length(max = 100) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + // @NotNull + // @Length(min = 5, max = 15) + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Id + // @Length(min = 5, max = 15) + // @Pattern(regex = "^\\w*$", message = "not a valid username") + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @Override + public String toString() { + return "User(" + username + ")"; + } +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/ValidateBookingAction.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/ValidateBookingAction.java new file mode 100644 index 00000000..5b3973ab --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/ValidateBookingAction.java @@ -0,0 +1,33 @@ +package org.springframework.webflow.samples.booking; + +import java.util.Calendar; + +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; + +import org.springframework.webflow.action.AbstractAction; +import org.springframework.webflow.execution.Event; +import org.springframework.webflow.execution.RequestContext; + +public class ValidateBookingAction extends AbstractAction { + + @Override + protected Event doExecute(RequestContext context) throws Exception { + Booking booking = (Booking) context.getFlowScope().get("booking"); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -1); + if (booking.getCheckinDate().before(calendar.getTime())) { + FacesContext.getCurrentInstance().addMessage("checkinDate", + new FacesMessage(FacesMessage.SEVERITY_ERROR, "Check in date must be a future date", "")); + return error(); + } else if (!booking.getCheckinDate().before(booking.getCheckoutDate())) { + FacesContext.getCurrentInstance() + .addMessage( + "checkoutDate", + new FacesMessage(FacesMessage.SEVERITY_ERROR, + "Check out date must be later than check in date", "")); + return error(); + } + return success(); + } +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/services-config-jpa.xml b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/services-config-jpa.xml new file mode 100755 index 00000000..5559dd37 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/services-config-jpa.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/testdb/TestDataSourceFactory.java b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/testdb/TestDataSourceFactory.java new file mode 100755 index 00000000..055d6c0d --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/java/org/springframework/webflow/samples/booking/testdb/TestDataSourceFactory.java @@ -0,0 +1,276 @@ +package org.springframework.webflow.samples.booking.testdb; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +import javax.sql.DataSource; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.io.Resource; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +/** + * A factory that creates a data source fit for use in a system test environment. Creates a simple data source that + * connects to an in-memory database pre-loaded with test data. + * + * This factory returns a fully-initialized DataSource implementation. When the DataSource is returned, callers are + * guaranteed that the database schema and test data will have been loaded by that time. + * + * Is a FactoryBean, for exposing the fully-initialized test DataSource as a Spring bean. See {@link #getObject()}. + * + * Is an InitializingBean, for receiving an initialization callback when deployed as a Spring bean. See + * {@link #afterPropertiesSet()}. + */ +public class TestDataSourceFactory implements FactoryBean, InitializingBean { + + private static Log logger = LogFactory.getLog(TestDataSourceFactory.class); + + // configurable properties + + private String testDatabaseName; + + private Resource schemaLocation; + + private Resource testDataLocation; + + /** + * The object created by this factory. + */ + private DataSource dataSource; + + /** + * Creates a new TestDataSourceFactory for use in "bean" style. "Bean" style means the default constructor is called + * and then properties are set to configure this object. "Bean" style usage is nice when this object is defined as a + * Spring bean, as setter-injection can be more descriptive than constructor-injection from the point of view of a + * bean definition author. + * @see {@link #setTestDatabaseName(String)} + * @see {@link #setSchemaLocation(Resource)} + * @see {@link #setTestDataLocation(Resource)} + */ + public TestDataSourceFactory() { + } + + /** + * Creates a new TestDataSourceFactory fully-initialized with what it needs to work. Fully-formed constructors are + * nice in a programmatic environment, as they result in more concise code and allow for a class to enforce its + * required properties. + * @param testDatabaseName the name of the test database to create + * @param schemaLocation the location of the file containing the schema DDL to export to the database + * @param testDataLocation the location of the file containing the test data to load into the database + */ + public TestDataSourceFactory(String testDatabaseName, Resource schemaLocation, Resource testDataLocation) { + setTestDatabaseName(testDatabaseName); + setSchemaLocation(schemaLocation); + setTestDataLocation(testDataLocation); + } + + /** + * Sets the name of the test database to create. + * @param testDatabaseName the name of the test database, i.e. "rewards" + */ + public void setTestDatabaseName(String testDatabaseName) { + this.testDatabaseName = testDatabaseName; + } + + /** + * Sets the location of the file containing the schema DDL to export to the test database. + * @param schemaLocation the location of the database schema DDL + */ + public void setSchemaLocation(Resource schemaLocation) { + this.schemaLocation = schemaLocation; + } + + /** + * Sets the location of the file containing the test data to load into the database. + * @param testDataLocation the location of the test data file + */ + public void setTestDataLocation(Resource testDataLocation) { + this.testDataLocation = testDataLocation; + } + + // implementing InitializingBean + + // this method is automatically called by Spring after configuration to perform a dependency check and init + public void afterPropertiesSet() { + if (testDatabaseName == null) { + throw new IllegalArgumentException("The name of the test database to create is required"); + } + if (schemaLocation == null) { + throw new IllegalArgumentException("The path to the database schema DDL is required"); + } + if (testDataLocation == null) { + throw new IllegalArgumentException("The path to the test data set is required"); + } + initDataSource(); + } + + // implementing FactoryBean + + // this method is automatically called by Spring to expose the DataSource as a bean + public Object getObject() throws Exception { + return getDataSource(); + } + + public Class getObjectType() { + return DataSource.class; + } + + public boolean isSingleton() { + return true; + } + + // other methods + + /** + * Factory method that returns the fully-initialized test data source. Useful when this class is used + * programatically instead of deployed as a Spring bean. + * @return the data source + */ + public DataSource getDataSource() { + if (dataSource == null) { + initDataSource(); + } + return dataSource; + } + + // static factory methods + + /** + * Static factory method that creates a DataSource that connects to a test database populated with test data. + * @param testDatabaseName the name of the test database to create + * @param schemaLocation the database schema to export + * @param testDataLocation the database test data to load + * @return the data source + */ + public static DataSource createDataSource(String testDatabaseName, Resource schemaLocation, + Resource testDataLocation) { + return new TestDataSourceFactory(testDatabaseName, schemaLocation, testDataLocation).getDataSource(); + } + + // internal helper methods + + // encapsulates the steps involved in initializing the data source: creating it, and populating it + private void initDataSource() { + // create the in-memory database source first + this.dataSource = createDataSource(); + if (logger.isDebugEnabled()) { + logger.debug("Created in-memory test database '" + testDatabaseName + "'"); + } + // now populate the database by loading the schema and test data + populateDataSource(); + if (logger.isDebugEnabled()) { + logger.debug("Exported schema in " + schemaLocation); + } + if (logger.isDebugEnabled()) { + logger.debug("Loaded test data in " + testDataLocation); + } + } + + private DataSource createDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + // use the HsqlDB JDBC driver + dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); + // have it create an in-memory database + dataSource.setUrl("jdbc:hsqldb:mem:" + testDatabaseName); + dataSource.setUsername("sa"); + dataSource.setPassword(""); + return dataSource; + } + + private void populateDataSource() { + TestDatabasePopulator populator = new TestDatabasePopulator(dataSource); + populator.populate(); + } + + /** + * Populates a in memory data source with test data. + */ + private class TestDatabasePopulator { + + private DataSource dataSource; + + /** + * Creates a new test database populator. + * @param dataSource the test data source that will be populated. + */ + public TestDatabasePopulator(DataSource dataSource) { + this.dataSource = dataSource; + } + + /** + * Populate the test database by creating the database schema from 'schema.sql' and inserting the test data in + * 'testdata.sql'. + */ + public void populate() { + Connection connection = null; + try { + connection = dataSource.getConnection(); + createDatabaseSchema(connection); + insertTestData(connection); + } catch (SQLException e) { + throw new RuntimeException("SQL exception occurred acquiring connection", e); + } finally { + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + } + } + } + } + + // create the application's database schema (tables, indexes, etc.) + private void createDatabaseSchema(Connection connection) { + try { + String sql = parseSqlIn(schemaLocation); + executeSql(sql, connection); + } catch (IOException e) { + throw new RuntimeException("I/O exception occurred accessing the database schema file", e); + } catch (SQLException e) { + throw new RuntimeException("SQL exception occurred exporting database schema", e); + } + } + + // populate the tables with test data + private void insertTestData(Connection connection) { + try { + String sql = parseSqlIn(testDataLocation); + executeSql(sql, connection); + } catch (IOException e) { + throw new RuntimeException("I/O exception occurred accessing the test data file", e); + } catch (SQLException e) { + throw new RuntimeException("SQL exception occurred loading test data", e); + } + } + + // utility method to read a .sql txt input stream + private String parseSqlIn(Resource resource) throws IOException { + InputStream is = null; + try { + is = resource.getInputStream(); + Reader reader = new InputStreamReader(is); + char[] cbuf = new char[4096]; + reader.read(cbuf); + return new String(cbuf).trim(); + } finally { + if (is != null) { + is.close(); + } + } + } + + // utility method to run the parsed sql + private void executeSql(String sql, Connection connection) throws SQLException { + Statement statement = connection.createStatement(); + statement.execute(sql); + } + } +} \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/classes/log4j.properties b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/classes/log4j.properties new file mode 100755 index 00000000..2eac6639 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/classes/log4j.properties @@ -0,0 +1,9 @@ +log4j.rootCategory=INFO, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n + +# Enable web flow logging +log4j.category.org.springframework.webflow=DEBUG +log4j.category.org.springframework.binding=DEBUG \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/faces-config.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/faces-config.xml new file mode 100755 index 00000000..36489e62 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,24 @@ + + + + + + org.springframework.webflow.executor.jsf.FlowNavigationHandler + org.springframework.webflow.executor.jsf.DelegatingFlowVariableResolver + org.springframework.web.jsf.DelegatingVariableResolver + com.sun.facelets.FaceletViewHandler + + + + org.springframework.webflow.samples.booking.DebuggingPhaseListener + org.springframework.webflow.executor.jsf.FlowPhaseListener + + + + jsfSearchAction + org.springframework.webflow.samples.booking.SearchAction + request + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/bookHotel-flow.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/bookHotel-flow.xml new file mode 100755 index 00000000..4a456246 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/bookHotel-flow.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/login-flow.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/login-flow.xml new file mode 100755 index 00000000..a658e268 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/login-flow.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/main-flow.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/main-flow.xml new file mode 100755 index 00000000..dfd76217 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/flows/main-flow.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/web.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/web.xml new file mode 100755 index 00000000..2b142616 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,73 @@ + + + + + contextConfigLocation + + classpath:org/springframework/webflow/samples/booking/services-config-jpa.xml + /WEB-INF/webflow-config.xml + + + + + + javax.faces.DEFAULT_SUFFIX + .xhtml + + + + + facelets.DEVELOPMENT + true + + + + + + org.springframework.web.context.ContextLoaderListener + + + + + + + org.springframework.web.context.request.RequestContextListener + + + + + + Flow System Cleanup Filter + + org.springframework.webflow.executor.jsf.FlowSystemCleanupFilter + + + + + + Flow System Cleanup Filter + *.swf + + + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.swf + + + + + + index.html + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/webflow-config.xml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/webflow-config.xml new file mode 100755 index 00000000..42b66fad --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/WEB-INF/webflow-config.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /WEB-INF/flows/login-flow.xml + /WEB-INF/flows/main-flow.xml + /WEB-INF/flows/bookHotel-flow.xml + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/book.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/book.xhtml new file mode 100755 index 00000000..b3aab3be --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/book.xhtml @@ -0,0 +1,201 @@ + + + + + +
+

Book Hotel

+
+
+ + +
+
+
Name:
+
#{hotel.name}
+
+
+
Address:
+
#{hotel.address}
+
+
+
City, State:
+
#{hotel.city}, #{hotel.state}
+
+
+
Zip:
+
#{hotel.zip}
+
+
+
Country:
+
#{hotel.country}
+
+
+
Nightly rate:
+
+ + + +
+
+ + + + + + + + + + + + +
+
Check In Date:
+
+ + + + + + + + + +
+
+ +
+
Check Out Date:
+
+ + + + + + + + + +
+
+ +
+
Room Preference:
+
+ + + + + + + +
+
+ +
+
Smoking Preference:
+
+ + + + + + +
+
+ +
+
Credit Card #:
+
+ + + + + +
+
+ +
+
Credit Card Name:
+
+ + + + + +
+
+ +
+
Credit Card Expiry:
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ +
+ +
+
 
+
+   + +
+
+
+
+
+
+ + + + +

Workspace management

+

+ As you can see, Seam makes it easy to work in multiple windows or multiple browser + tabs. But you can even switch between multiple tasks inside a single browser tab! + The "Workspaces" section showcases this advanced feature. +

+

+ + How does the workspace list work? + +

+ +
+ +
diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/confirm.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/confirm.xhtml new file mode 100755 index 00000000..ece888fd --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/confirm.xhtml @@ -0,0 +1,89 @@ + + + + + +
+

Confirm Hotel Booking

+
+
+ +
+
+
Name:
+
#{hotel.name}
+
+
+
Address:
+
#{hotel.address}
+
+
+
City, State:
+
#{hotel.city}, #{hotel.state}
+
+
+
Zip:
+
#{hotel.zip}
+
+
+
Country:
+
#{hotel.country}
+
+
+
Total payment:
+
+ + + +
+
+
+
Check In Date:
+
+
+
+
Check Out Date:
+
+
+
+
Credit Card #:
+
#{booking.creditCard}
+
+
+
 
+
+   +   + +
+
+
+
+
+
+ + + +

Back button navigation

+

+ When you click "Confirm", the new booking is written to the database, the + conversation ends, and state associated with the conversation is automatically + destroyed by Seam. After you confirm your booking, try hitting the back button + on your web browser and clicking "Confirm" again. Seam makes it easy implement + applications that behave elegantly in response to the back, forward and refresh + buttons. +

+

+ + What happens when the conversation ends? + +

+
+ +
diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/conversations.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/conversations.xhtml new file mode 100755 index 00000000..b4e23523 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/conversations.xhtml @@ -0,0 +1,34 @@ + +
+ +
+

+
+ +
+ + + + +   + + + + + + + - + + + + + + +
+ +
\ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/date.css b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/date.css new file mode 100755 index 00000000..39096d91 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/date.css @@ -0,0 +1,185 @@ +div.seam-date +{ + margin-top: 5px; + border: 1px solid #AAAAAA; + background: #fff url(../img/input.bg.gif) 0 0 repeat-x; + background-color: #FFFFFF; + color: #505050; + font-family: Tahoma, Arial, Helvetica, sans-serif; + font-size: 12px; +} + +table.seam-date td { + font-family: Tahoma, Arial, Helvetica, sans-serif; + font-weight: 11px; +} + +.seam-date-monthNames +{ + width: 70px; + border: 1px solid #dddddd; + border-right: 3px solid #444444; + border-bottom: 3px solid #444444; + background-color: #ffffff; + font-size: 12px; + cursor: pointer; + font-family: Tahoma, Arial, Helvetica, sans-serif; + font-weight: normal; +} + +a.seam-date-monthNameLink, a.seam-date-monthNameLink:visited +{ + text-align: center; + display: block; + color: #555555; +} + +a.seam-date-monthNameLink:hover +{ + background-color: #CCCCCC; + color: red; +} + +.seam-date-years +{ + height: 10em; + overflow: auto; + width: 60px; + border: 1px solid #dddddd; + border-right: 3px solid #444444; + border-bottom: 3px solid #444444; + background-color: #ffffff; + font-size: 12px; + cursor: pointer; + font-family: Tahoma, Arial, Helvetica, sans-serif; + font-weight: normal; +} + +a.seam-date-yearLink, a.seam-date-yearLink:visited +{ + text-align: center; + display: block; + color: #555555; +} + +a.seam-date-yearLink:hover +{ + background-color: #CCCCCC; + color: red; +} + +tr.seam-date-header +{ + padding: 2px 0px 2px 0px; +} + +td.seam-date-header +{ + padding: 0px 8px 0px 8px; + text-align: center; + color: gray; + font-family: Tahoma, Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 12px; +} + +td.seam-date-header-prevMonth +{ + background-image: url("../img/cal-prev.png"); + background-repeat: no-repeat; + background-position: center; + padding: 0px 2px 0px 2px; + width: 17px; + height: 16px; + margin-left: 2px; +} + +td.seam-date-header-nextMonth +{ + background-image: url("../img/cal-next.png"); + background-repeat: no-repeat; + background-position: center; + padding: 0px 2px 0px 2px; + width: 17px; + height: 16px; + margin-right: 2px; +} + +tr.seam-date-headerDays +{ + color: white; + font-weight: normal; +} + +tr.seam-date-headerDays > td +{ + background-color: #CCCCCC; + border: 1px solid #AAAAAA; + color: white; + text-align: center; + width: 26px; +} + +tr.seam-date-footer +{ + background-color: white; + color: #505050; + font-weight: bold; +} + +tr.seam-date-footer > td +{ + text-align: center; +} + +td.seam-date-inMonth +{ + background-color: white; + color: black; + font-weight: normal; + cursor: pointer; + border: 1px solid #ece9d8; +} + +td.seam-date-outMonth +{ + background-color: white; + color: #999999; + font-weight: normal; + cursor: pointer; + border: 1px solid #ece9d8; +} + +td.seam-date-selected +{ + background-color: #CCCCCC; + border: 1px solid #AAAAAA; + color: black; + font-weight: normal; +} + +td.seam-date-dayOff-inMonth +{ + background-color: #efefef; + color: black; + font-weight: normal; + cursor: pointer; + border: 1px solid #ece9d8; +} + +td.seam-date-dayOff-outMonth +{ + background-color: #efefef; + color: #999999; + font-weight: normal; + cursor: pointer; + border: 1px solid #ece9d8; +} + +td.seam-date-hover +{ + background-color: #CCCCCC; + border: 1px solid #AAAAAA; + cursor: pointer; + color: red; +} \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/screen.css b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/screen.css new file mode 100755 index 00000000..f00c7ae9 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/screen.css @@ -0,0 +1,268 @@ +/* Setup defaults since variable in browsers +----------------------------------------------- */ +body, div, dd, dt, dl, img, ul, ol, li, p, h1, h2, h3, h4, h5, form, hr, fieldset { + margin: 0; + padding: 0; +} +/* Element Defaults +----------------------------------------------- */ +html { + height: 100%; + background-color: #DBD4C6; +} +img { + border: 0; +} +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: small; + line-height: 1.25em; + color: #362F2D; + position: relative; + width: 760px; + height: 100%; + margin-left: auto; + margin-right: auto; +} +label { + font-weight: bold; + color: #5E5147; +} +input { + border: 1px solid #C3BBB6; + padding: 4px; + margin: 5px 0; + background: #fff url(../img/input.bg.gif) 0 0 repeat-x; +} +select { + border: 1px solid #C3BBB6; + padding: 4px; + margin: 5px 0; + background: #fff url(../img/input.bg.gif) 0 0 repeat-x; +}ol, ul { + margin: 10px 0px 10px 6px; +} +li { + margin: 10px 12px; +} +fieldset { + border: 0; +} +/* Layout +----------------------------------------------- */ +#document { + padding: 0 1px; + background: #fff url(../img/bg.gif) 0 0 repeat-y; + float: left; + border-bottom: 1px solid #C3BBB6; +} +#header { + float: left; + width: 758px; + height: 46px; + background: url(../img/hdr.bg.gif) 0 0 repeat-x; +} +#container { + float: left; + width: 758px; + background: url(../img/hdr.bar.jpg) 0 0 repeat-x; +} +#sidebar { + float: left; + width: 190px; + margin-top: 96px; + padding: 20px 10px 0 10px; + background: url(../img/sdb.bg.gif) 0 0 no-repeat; +} +#content { + float: left; + width: 548px; + margin-top: 75px; + padding-top: 5px; + background: #fff url(../img/cnt.bg.gif) 0 0 repeat-x; +} +#footer { + clear: both; + margin-top: 40px; + float: left; + padding: 20px; + border-top: 1px solid #C3BBB6; + background-color: #fff; + width: 718px; + text-align: right; +} +/* General +----------------------------------------------- */ +input[type="submit"], input[type="button"] { + font-weight: bold; + color: #fff; + border: 1px solid #5D1414; + height: 26px; + background: #fff url(../img/btn.bg.gif) 0 0 repeat-x; + border-style: none; +} +.center { + text-align: center; +} +.entry { + clear: both; + padding-top: 10px; +} +.entry .label { + float: left; + padding-top: 10px; + padding-right: 5px; + font-weight: bold; + width: 150px; + text-align: right; +} +.entry .output { + float: left; + width: 250px; + padding-top: 10px; + text-align: left; +} +.entry .input { + float: left; + width: 250px; + text-align: left; +} +/* Sidebar +----------------------------------------------- */ +.notes { + text-align: center; + font-size: small; +} +.errors { + font-size: small; + font-weight: bold; + text-align: center; + color: #600; +} +.errors div { + text-align: left; +} +.errors input { + border: 1px solid #600; +} +.errors ul { + list-style: none; +} +.buttonBox { + text-align: center; + padding: 5px 0; +} +#sidebar p { + font-size: small; + color: #8B7869; + line-height: 150%; + padding-bottom: 10px; +} +#sidebar li { + font-size: small; + color: #8B7869; +} +#sidebar h1 { + line-height: normal; + font-weight: bold; + font-size: small; +} +/* +#sidebar p:hover { + color: #362F2D; +} +*/ +/* Content +----------------------------------------------- */ +#content .section { + float: left; + width: 518px; + padding: 15px 15px 0 15px; +} +#content .section h1 { + font-family: "Trebuchet MS", Arial, sans-serif; + line-height: normal; + font-weight: normal; + font-size: large; +} +#content .section p { + line-height: 150%; + padding: 10px 0; + font-size: small; +} +#content table { + width: 100%; + border: 1px solid #D2C9C4; + border-collapse: collapse; +} +#content table caption { + padding-bottom: 6px; + text-align: left; + font-weight: bold; +} +#content table thead th { + border-left: 1px solid #D2C9C4; + background: #fff url(../img/th.bg.gif) 0 100% repeat-x; + border-bottom: 1px solid #D2C9C4; + padding: 6px; + text-align: left; + font-size: small; +} +#content table tbody td { + border-left: 1px solid #E4DBD5; + padding: 4px; + border-bottom: 1px solid #D2C9C4; + font-size: small; +} +#content dt { + font-weight: bold; + float: left; + width: 33%; +} +#content dd { + padding-left: 10px; + float: left; + width: 66%; +} +#radio table { + border: 0px; +} +#radio table tr td { + border: 0px; + border-left: 0px; + border-bottom: 0px; +} +/* Header +----------------------------------------------- */ +#title { + float: left; + padding: 1px 0 6px 15px; +} +#status { + color: #C7B299; + float: right; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: x-small; + text-align: right; + padding-top: 14px; + padding-right: 15px; +} +#status a { + color: #C7B299; + text-decoration: none; +} +/* Homepage Modifications +----------------------------------------------- */ +#pgHome #container { + background: url(../img/hdr.ad.jpg) 0 0 repeat-x; +} +#pgHome #sidebar { + margin-top: 207px; +} +#pgHome #content { + margin-top: 183px; +} +#pgHome input[type="submit"] { + height: 30px; +} diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/trailblazer_main.css b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/trailblazer_main.css new file mode 100755 index 00000000..8700dcb5 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/css/trailblazer_main.css @@ -0,0 +1,148 @@ +* { + margin: 0px; + padding: 0px; + border: none; +} + +body { + font: 1em verdana, arial, sans-serif; + background: #CCCCCC; +} + +div#main { + margin-left: 0px; + width: 751px; + background: #ecefdf; +} + +div#top,div#pictures{ +} + +div#pictures img { + float:left; +} + +img#head1 { + margin-right: 3px; +} + +img#head2 { + margin-right: 4px; +} + +div.trail { + clear:both; + margin-left: 50px; + margin-top: 0px; + margin-right: 50px +} + +div.foot { + margin-left: 50px; + margin-right: 50px; + margin-top: 50px; + text-align: center; + font-size: .5em; + height: 36px; +} + +div.trail h1 { + margin-top: -30px; + margin-left: -50px; + font-size: 1.2em; + font-weight: bold; + padding-left: .4em; +} + +div.trail h2 { + float: left; + font-size: 1em; + font-weight: bold; + padding-left: .4em; +} + +div.trail h3 { + float: left; + font-size: .8em; + font-weight: bold; + margin-left: -1.4em; + margin-bottom: 1em; +} + + +div.trail p { + clear: both; + margin-top: 20px; + font-size: .8em; + text-decoration: none; +} + +div#next_trail { + margin-left: 36px; +} + +div.numbox { + border: thin solid black; + margin-left: -.8em; + float: left; + background: #ffffff; + padding: .2em .35em .3em; + font-style: normal; + font-weight: bold; + font-size: 1.4em; +} + +div.figure { + text-align: center; + font-size: .6em; + margin-top: 30px; +} + +div.figure img { + display: block; + margin-right: auto; + margin-left: auto; +} + +code { + font: 1.1em "Courier New", Courier, mono; +} + +code.block { + white-space: pre; + font: 10pt "Courier New", Courier, mono; + display: block; + border-style: dashed; + border-width: thin; + padding: .5em; + background: #ffffff; + margin: 20px; +} + +div.foot_image { + float: left; + height: 86px; +} + +a:active { + color : #666666; + text-decoration: none; +} + +a:hover { + color : #000000; + background-color : #D6E0FE; + text-decoration: none; +} + +a:link { + color : #005EB6; + text-decoration: none; +} + +a:visited { + color : #888888; + text-decoration: none; +} + + diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/home.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/home.xhtml new file mode 100755 index 00000000..c17a858e --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/home.xhtml @@ -0,0 +1,59 @@ + + + + + Spring Web Stack: Spring Web Flow + JSF + + + + +
+ +
+ +
+
+ +

About this example application

+ +

+ This sample application demonstrates how easy it is to develop stateful web + applications using Spring Web Flow. Just register, login, and book a room to see + SWF in action. +

+ +

+ Note: Please do NOT enter personal information or your credit card number in + this sample application. +

+
+
+
+ +
+
+ + diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/hotel.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/hotel.xhtml new file mode 100755 index 00000000..efe8471b --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/hotel.xhtml @@ -0,0 +1,82 @@ + + + + + +
+

View Hotel

+
+
+
+
Name:
+
#{hotel.name}
+
+
+
Address:
+
#{hotel.address}
+
+
+
City:
+
#{hotel.city}
+
+
+
State:
+
#{hotel.state}
+
+
+
Zip:
+
#{hotel.zip}
+
+
+
Country:
+
#{hotel.country}
+
+
+
Nightly rate:
+
+ + + +
+
+
+
+ +
+   + +
+
+
+
+ + + + +

Don't kill your database

+

+ Keeping conversational state in memory in the middle tier is a great way to + improve your application's scalability. It saves hitting the database every + time we refresh a page, to re-read the data we were just looking at five + seconds ago. By using Seam's conversation context, we get a natural cache + of data associated with the what the user is currently doing. By nature, + this cache has a more efficient eviction policy than the MRU-type algorithms + used by a typical second-level data cache in an O/R mapping engine like + Hibernate (at least for some kinds of data). Of course, you should use + a clever combination of second-level caching and conversational data + caching to achieve the best performance for your application. +

+

+ + How does the hotel booking wizard work? + +

+ +
+ +
diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/spring-logo.jpg b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/spring-logo.jpg new file mode 100755 index 00000000..62be3983 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/spring-logo.jpg differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/webflow-logo.jpg b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/webflow-logo.jpg new file mode 100755 index 00000000..ed76bae0 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/images/webflow-logo.jpg differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/bg.gif new file mode 100755 index 00000000..ea9200df Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/btn.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/btn.bg.gif new file mode 100755 index 00000000..133e2ee9 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/btn.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-next.png b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-next.png new file mode 100755 index 00000000..ef993543 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-next.png differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-prev.png b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-prev.png new file mode 100755 index 00000000..d943c17a Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cal-prev.png differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cnt.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cnt.bg.gif new file mode 100755 index 00000000..6a9465d3 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/cnt.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/dtpick.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/dtpick.gif new file mode 100755 index 00000000..8526cf5d Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/dtpick.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.ad.jpg b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.ad.jpg new file mode 100755 index 00000000..9d991cb1 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.ad.jpg differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bar.jpg b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bar.jpg new file mode 100755 index 00000000..74212b8d Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bar.jpg differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bg.gif new file mode 100755 index 00000000..71fa194c Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.title.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.title.gif new file mode 100755 index 00000000..60a47957 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/hdr.title.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/header_line.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/header_line.gif new file mode 100755 index 00000000..5638533e Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/header_line.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/input.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/input.bg.gif new file mode 100755 index 00000000..8ebf87e3 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/input.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/sdb.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/sdb.bg.gif new file mode 100755 index 00000000..9d5d2c05 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/sdb.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/spinner.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/spinner.gif new file mode 100755 index 00000000..085ccaec Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/spinner.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/th.bg.gif b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/th.bg.gif new file mode 100755 index 00000000..7ab7c249 Binary files /dev/null and b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/img/th.bg.gif differ diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/index.html b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/index.html new file mode 100755 index 00000000..c1cbcbba --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/index.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/intro.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/intro.xhtml new file mode 100755 index 00000000..ee4bd5d1 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/intro.xhtml @@ -0,0 +1,41 @@ + + + + + + +
Booking SWF + JSF - A Spring Web Flow Sample
+
+
+

+ + (launch with a JSF command link) + +

+

+ Book Hotels (launch with a regular anchor tag) +

+

+ This Spring Web Flow sample application is the JSF-based version of the familiar "Sell item" sample. + It illustrates the following concepts: +

+
    +
  • Using Spring Web Flow with JSF
  • +
  • Implementing a wizard using web flows.
  • +
  • Use of conversation scope.
  • +
  • Using expressions to apply dynamic flow navigation rules
  • +
  • Using continuations to make the flow completely stable, no matter how browser navigation buttons are used.
  • +
  • "Always redirect on pause" to benefit from the POST+REDIRECT+GET pattern with no special coding.
  • +
  • + Using "conversation invalidation after completion" to prevent duplicate submits of the same sale + while taking advantage of continuations to allow back button usage while the application transaction is in process. +
  • +
+
+
+
+ + + \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/main.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/main.xhtml new file mode 100755 index 00000000..47cc453e --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/main.xhtml @@ -0,0 +1,140 @@ + + + + + + +
+ + + + + + +

Search Hotels

+
+ + +   + +   + + + + + +
+ Maximum results:  + + + + + +
+
+ +
+ + + + Name + #{hot.name} + + + Address + #{hot.address} + + + City, State + #{hot.city}, #{hot.state}, #{hot.country} + + + Zip + #{hot.zip} + + + Action + + + + + + + +
+ +
+

Current Hotel Bookings

+
+
+ + + + + Name + #{book.hotel.name} + + + Address + #{book.hotel.address} + + + City, State + #{book.hotel.city}, #{book.hotel.state} + + + Check in date + + + + Check out date + + + + Confirmation number + #{book.id} + + + Action + + + +
+ +
+ +
+ + + + +

State management in Seam

+

+ State in Seam is contextual. When you click "Find Hotels", the application + retrieves a list of hotels from the database and caches it in the session context. When you + navigate to one of the hotel records by clicking the "View Hotel" link, a conversation + begins. The conversation is attached to a particular tab, in a particular browser window. You can + navigate to multiple hotels using "open in new tab" or "open in new window" in your web browser. + Each window will execute in the context of a different conversation. The application keeps state + associated with your hotel booking in the conversation context, which ensures that the concurrent + conversations do not interfere with each other. +

+ +

+ + How does the search page work? + +

+ +
+ +
diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/password.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/password.xhtml new file mode 100755 index 00000000..793686c0 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/password.xhtml @@ -0,0 +1,81 @@ + + + + + +
+

Change Your Password

+
+
+ + + + + + + + + + + +
+ +
+
Password:
+
+ + + + + +
+
+ +
+
Verify:
+
+ + + +
+
+ +
+ +
+ +
+
 
+
+   + +
+
+ +
+ +
+
+
+ + + +

Simple things should be easy

+

+ (And so should some complex things.) You shouldn't have to write four different classes + just to change a password. Traditional J2EE architectures require that developers spend + more time writing code to make the frameworks happy, than they ever get to spend writing + code to make the user happy. Seam lets you reduce the size of your code dramatically. + And that reduces bugs. And it makes refactoring easier. And it makes delivering new + functionality quicker. Productivity matters. But with Seam, JSF, EJB 3.0 and jBPM, you + don't need to sacrifice the ability to handle complex problems just to achieve great + productivity. +

+
+ +
\ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/register.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/register.xhtml new file mode 100755 index 00000000..f40823be --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/register.xhtml @@ -0,0 +1,119 @@ + + + + + JBoss Suites: Seam Framework + + + +
+ +
+ +
+
+

Register

+
+
+ + +
+ + + + + + + + + + + + +
+
Username:
+
+ + + + + +
+
+ +
+
Real Name:
+
+ + + + + +
+
+ +
+
Password:
+
+ + + +
+
+ +
+
Verify Password:
+
+ + + +
+
+ +
+ +
+ +
+ +
+
 
+
+   + +
+
+ +
+
+ +
+
+
+ +
+ + diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/style.css b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/style.css new file mode 100755 index 00000000..f4b0a64e --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/style.css @@ -0,0 +1,58 @@ +body { + width: 720px; + margin: 0px; + padding: 0px; +} + +div#logo { + width: 720px; + height: 73px; + background: #86AEA5; +} + +div#navigation { + width: 720px; + height: 15px; + background: #E2F3B8; + text-align: right; +} + +div#content { + width: 720px; + padding: 5px; +} + +div#insert { + width: 120; + float: right; + text-align: right; +} + +.buttonBar { + height: 1.5em; + text-align: right; +} + +div#copyright { + width: 720px; +} + +div#copyright p { + text-align: center; + font-family: Tahoma, sans-serif; + font-size: 75%; + color: div#336633; + margin-left: 5px; + font-weight: bold; + clear: both; +} + +.readOnly { + color: rgb(192, 192, 192); +} + +.error { + color: red; + font-weight: bold; + font-family: Arial, sans-serif; +} \ No newline at end of file diff --git a/spring-webflow-samples /swf-booking-jsf/src/main/webapp/template.xhtml b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/template.xhtml new file mode 100755 index 00000000..78e2bf54 --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/main/webapp/template.xhtml @@ -0,0 +1,35 @@ + + + + + JBoss Suites: Seam Framework + + + + + +
+ +
+ +
+ +
+
+ +
+ + diff --git a/spring-webflow-samples /swf-booking-jsf/src/test/java/log4j.properties b/spring-webflow-samples /swf-booking-jsf/src/test/java/log4j.properties new file mode 100755 index 00000000..5ba9222c --- /dev/null +++ b/spring-webflow-samples /swf-booking-jsf/src/test/java/log4j.properties @@ -0,0 +1,9 @@ +log4j.rootCategory=WARN, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n + +# Enable web flow logging +log4j.category.org.springframework.webflow=DEBUG +log4j.category.org.springframework.binding=DEBUG \ No newline at end of file