diff --git a/spring-webflow-sandbox/.classpath b/spring-webflow-sandbox/.classpath deleted file mode 100644 index 7a1ebe48..00000000 --- a/spring-webflow-sandbox/.classpath +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spring-webflow-sandbox/.project b/spring-webflow-sandbox/.project deleted file mode 100644 index c5d48186..00000000 --- a/spring-webflow-sandbox/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - spring-webflow-sandbox - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/spring-webflow-sandbox/.settings/org.eclipse.jdt.core.prefs b/spring-webflow-sandbox/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3aa8951d..00000000 --- a/spring-webflow-sandbox/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,336 +0,0 @@ -#Wed Aug 15 09:35:57 EDT 2007 -eclipse.preferences.version=1 -org.eclipse.jdt.core.codeComplete.argumentPrefixes= -org.eclipse.jdt.core.codeComplete.argumentSuffixes= -org.eclipse.jdt.core.codeComplete.fieldPrefixes= -org.eclipse.jdt.core.codeComplete.fieldSuffixes= -org.eclipse.jdt.core.codeComplete.localPrefixes= -org.eclipse.jdt.core.codeComplete.localSuffixes= -org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= -org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.doc.comment.support=enabled -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning -org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nullReference=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -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=8 -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=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -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-sandbox/.settings/org.eclipse.jdt.ui.prefs b/spring-webflow-sandbox/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index aed7a61c..00000000 --- a/spring-webflow-sandbox/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,58 +0,0 @@ -#Wed Aug 15 09:35:57 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 -org.eclipse.jdt.ui.exception.name=e -org.eclipse.jdt.ui.gettersetter.use.is=false -org.eclipse.jdt.ui.javadoc=false -org.eclipse.jdt.ui.keywordthis=false -org.eclipse.jdt.ui.overrideannotation=true -org.eclipse.jdt.ui.text.custom_code_templates= -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-sandbox/build.xml b/spring-webflow-sandbox/build.xml deleted file mode 100644 index fea537f7..00000000 --- a/spring-webflow-sandbox/build.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/spring-webflow-sandbox/changelog.txt b/spring-webflow-sandbox/changelog.txt deleted file mode 100644 index 32fb1535..00000000 --- a/spring-webflow-sandbox/changelog.txt +++ /dev/null @@ -1,6 +0,0 @@ -SPRING WEB FLOW SANDBOX (SWF) CHANGELOG -======================================= -http://www.springframework.org - -Changes in version X.Y.Z () -------------------------------------- \ No newline at end of file diff --git a/spring-webflow-sandbox/ivy.xml b/spring-webflow-sandbox/ivy.xml deleted file mode 100644 index f5ffcb10..00000000 --- a/spring-webflow-sandbox/ivy.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/project.properties b/spring-webflow-sandbox/project.properties deleted file mode 100644 index 55ed07f5..00000000 --- a/spring-webflow-sandbox/project.properties +++ /dev/null @@ -1,10 +0,0 @@ -# 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-sandbox/src/etc/filter.properties b/spring-webflow-sandbox/src/etc/filter.properties deleted file mode 100644 index 3aaac7e3..00000000 --- a/spring-webflow-sandbox/src/etc/filter.properties +++ /dev/null @@ -1,31 +0,0 @@ -# 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-sandbox/src/etc/test-resources/log4j.properties b/spring-webflow-sandbox/src/etc/test-resources/log4j.properties deleted file mode 100644 index b10ab1a5..00000000 --- a/spring-webflow-sandbox/src/etc/test-resources/log4j.properties +++ /dev/null @@ -1,18 +0,0 @@ -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=@TEST_RESULTS_DIR@/@PROJECT_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 - -log4j.category.org.springframework.webflow=DEBUG -log4j.category.org.springframework.binding=DEBUG diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractReadOnlyResourceHolder.java b/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractReadOnlyResourceHolder.java deleted file mode 100644 index 71478e89..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractReadOnlyResourceHolder.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.springframework.util; - -/** - * Read-only resource holder. - * - * @author Maxim Petrashev - */ -public abstract class AbstractReadOnlyResourceHolder extends AbstractResourceHolder { - public final void set(E aObject) { - throw new UnsupportedOperationException(); - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractResourceHolder.java b/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractResourceHolder.java deleted file mode 100644 index 3d002671..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/util/AbstractResourceHolder.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.springframework.util; - -import org.springframework.beans.factory.support.MethodReplacer; - -import java.lang.reflect.Method; - -/** - * Base abstract implementation of resource holder that implement method replacment logic. - * - * @author Maxim Petrashev - */ -public abstract class AbstractResourceHolder implements ResourceHolder, MethodReplacer {// todo replace on - // injector in config - @SuppressWarnings("unchecked") - public Object reimplement(Object aObj, Method aMethod, Object[] aArgs) throws Throwable { - Object retVal = null; - if (aArgs.length == 0) { - retVal = get(); - } else { - set((E) aArgs[0]); - } - return retVal; - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/util/ResourceHolder.java b/spring-webflow-sandbox/src/main/java/org/springframework/util/ResourceHolder.java deleted file mode 100644 index 68a2b3d2..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/util/ResourceHolder.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.springframework.util; - -/** - * Base interface for object holder concept. - * - * @author Maxim Petrashev - */ -public interface ResourceHolder { - E get(); - - void set(E aObject); -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListener.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListener.java deleted file mode 100644 index 7689b48c..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListener.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.springframework.webflow.execution; - -import org.springframework.webflow.definition.FlowDefinition; -import org.springframework.webflow.core.collection.MutableAttributeMap; - -/** - * Listener interface for callback notification about phases in during conversation - * - * @author Maxim Petrashev - */ -public interface ConversationLifecycleListener { - /** - * Invoked when a flow is launched. The launching flow is not active. - * - * @param aNewFlow The launching flow - * @param aContext The request context - */ - - void startingFlow(FlowDefinition aNewFlow, RequestContext aContext); - - void flowStarted(RequestContext aContext, MutableAttributeMap aInput); - - /** - * Invoked when the root flow session has ended. - * - * @param aEndedSession The ended session - * @param aContext The request context - */ - void flowEnded(FlowSession aEndedSession, RequestContext aContext); - - void endingFlow(RequestContext aContext, MutableAttributeMap aOutput); - - /** - * Invoked in parent flow before spawning in subflow but after input mapping has been happened. The child flow - * session is not available to implementations of this method because the flow session for the child flow has not - * yet started.

If you need to add items to the subflow scope, put them in aInput. - * - * @param aParentSession The active parent flow session - * @param aChild The child flow - * @param aContext The request context - * @param aInput The input map - */ - void startingSubflow(FlowSession aParentSession, FlowDefinition aChild, RequestContext aContext, - MutableAttributeMap aInput); - - /** - * Invoked when a subflow is launched. The child flow session is not available to implementations of this method - * because the flow session for the child flow has not yet started.

If you need to add items to the subflow - * scope, put them in aInput. - * - * @param aContext The request context - * @param aInput The input map - */ - void subflowStarted(RequestContext aContext, MutableAttributeMap aInput); - - /** - * Invoked in subflow flow before spawning back to parent flot but after output mapping has been happened. The - * parent flow session is not available to implementations of this method because the flow session for the parent - * flow has not yet continued.

If you need to add items to the parent flow scope, put them in aOutput. - * - * @param aContext The request context - * @param aOutput The input map - */ - void endingSubflow(RequestContext aContext, MutableAttributeMap aOutput); - - /** - * Invoked when a parent flow is launched back. The child flow session is not available to implementations of this - * method because the flow session for the child flow has not yet started.

If you need to add items to the - * subflow scope, put them in aInput. - * - * @param aParentSession The active parent flow session - * @param aChild The child flow - * @param aContext The request context - * @param aOutput The input map - */ - void subflowEnded(FlowSession aParentSession, FlowDefinition aChild, RequestContext aContext, - MutableAttributeMap aOutput); - - /** - * The currently executing flow session is active. This occurs after the first event for the executing request has - * been signaled or resume event has been happended. Invoked once per request and provides access to the active flow - * session prior to any actions being performed. - * - * @param aContext The request context - */ - void sessionActive(RequestContext aContext); - - /** - * The currently executing flow session is active. This occurs after the first event for the executing request has - * been signaled or resume event has been happended. Invoked once per request and provides access to the active flow - * session prior to any actions being performed. - * - * @param aContext The request context - */ - void sessionDeactive(RequestContext aContext); - -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListenerAdapter.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListenerAdapter.java deleted file mode 100644 index d2cfe0b0..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ConversationLifecycleListenerAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.springframework.webflow.execution; - -import org.springframework.webflow.definition.FlowDefinition; -import org.springframework.webflow.core.collection.MutableAttributeMap; - -/** - * - * @author Maxim Petrashev - */ -public abstract class ConversationLifecycleListenerAdapter implements ConversationLifecycleListener { - - public void startingFlow(FlowDefinition aNewFlow, RequestContext aContext) { - } - - public void flowStarted(RequestContext aContext, MutableAttributeMap aInput) { - } - - public void flowEnded(FlowSession aEndedSession, RequestContext aContext) { - } - - public void endingFlow(RequestContext aContext, MutableAttributeMap aOutput) { - } - - public void startingSubflow(FlowSession aParentSession, FlowDefinition aChild, RequestContext aContext, - MutableAttributeMap aInput) { - } - - public void subflowStarted(RequestContext aContext, MutableAttributeMap aInput) { - } - - public void subflowStarted(FlowSession aParentSession, FlowDefinition aChild, RequestContext aContext, - MutableAttributeMap aInput) { - } - - public void endingSubflow(RequestContext aContext, MutableAttributeMap aOutput) { - } - - public void subflowEnded(FlowSession aParentSession, FlowDefinition aChild, RequestContext aContext, - MutableAttributeMap aOutput) { - } - - public void sessionActive(RequestContext aContext) { - } - - public void sessionDeactive(RequestContext aContext) { - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ExtendedFlowExecutionListenerInterceptor.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ExtendedFlowExecutionListenerInterceptor.java deleted file mode 100644 index 401e0213..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/execution/ExtendedFlowExecutionListenerInterceptor.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.springframework.webflow.execution; - -import org.springframework.webflow.engine.SubflowState; -import org.springframework.webflow.core.collection.AttributeMap; -import org.springframework.webflow.core.collection.MutableAttributeMap; -import org.springframework.webflow.definition.FlowDefinition; -import org.springframework.webflow.definition.StateDefinition; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * A listener/interceptor whose purpose is to adapt a HandlerInterceptor and FlowExecutionListener to provide expanded - * coverage at the beginning and ending of a request coming into a flow controller. The idea is to signal when a flow - * starts/activates, then signal when it has deactivated or ended. In addition, it should be signaled when a subflow - * starts/activates and ends/deactivates. - *

- * Adapted from Alex Wolfe's post at - * http://forum.springframework.org/showthread.php?t=17633 - * - * - * @author Andrew Ebaugh - * @author Maxim Petrashev - */ -public class ExtendedFlowExecutionListenerInterceptor extends FlowExecutionListenerAdapter { - protected final Log _logger = LogFactory.getLog(getClass()); - - private static String FIRST_EVENT_SIGNALED = ExtendedFlowExecutionListenerInterceptor.class.getName() - + ".FIRST_EVENT_SIGNALED"; - private static String CURRENT_SESSION_ENDED = ExtendedFlowExecutionListenerInterceptor.class.getName() - + ".CURRENT_SESSION_ENDED"; - - public ExtendedFlowExecutionListenerInterceptor(ConversationLifecycleListener aConversationLifecycleListener) { - _conversationLifecycleListener = aConversationLifecycleListener; - } - - private ConversationLifecycleListener _conversationLifecycleListener; - - /** - * Called when any client request is submitted to manipulate this flow execution. Sets a flag in the request scope - * that is activated when the first state is entered during this request. This flag is required in order to trigger - * execution of the {@link ConversationLifecycleListener#sessionActive(RequestContext)} method. - * - * @param aContext The request aContext - */ - public final void requestSubmitted(RequestContext aContext) { - aContext.getRequestScope().put(FIRST_EVENT_SIGNALED, Boolean.FALSE); - aContext.getRequestScope().put(CURRENT_SESSION_ENDED, Boolean.FALSE); - } - - public final void eventSignaled(RequestContext aContext, Event aEvent) { - signalAction(aContext); - } - - public final void stateEntered(RequestContext aContext, StateDefinition aPreviousState, StateDefinition aState) { - signalAction(aContext); - } - - /** - * Called when an event is signaled, or a state is entered, but before any potential transition or actions occurs. - * If the action signaled is the first for the request, then the - * {@link ConversationLifecycleListener#sessionActive(RequestContext)} method is invoked. It is necessary that this - * be called prior to any state transitions to provide listeners coverage of any state exit/transition/entry - * actions. - * - * @param aContext The request aContext - */ - private void signalAction(RequestContext aContext) { - if (!firstEventSignaled(aContext)) { - aContext.getRequestScope().put(FIRST_EVENT_SIGNALED, Boolean.TRUE); - _conversationLifecycleListener.sessionActive(aContext); - } - } - - /** - * A aFlow session is starting. This method invokes - * {@link ConversationLifecycleListener#startingFlow(FlowDefinition, RequestContext)} if the launching aFlow session - * is the root aFlow. Otherwise, the - * {@link ConversationLifecycleListener#startingSubflow(FlowSession, FlowDefinition, RequestContext,MutableAttributeMap)} - * method is invoked. - * - * @param aContext The request aContext - * @param aFlowDefinition - * @param aInput - * @throws EnterStateVetoException The start state transition was not allowed - */ - public final void sessionStarting(RequestContext aContext, FlowDefinition aFlowDefinition, - MutableAttributeMap aInput) { - aContext.getRequestScope().put(FIRST_EVENT_SIGNALED, Boolean.TRUE); - aContext.getRequestScope().put(CURRENT_SESSION_ENDED, Boolean.FALSE); - FlowExecutionContext executionContext = aContext.getFlowExecutionContext(); - FlowSession activeSession = executionContext.isActive() ? executionContext.getActiveSession() : null; - // when starting in default subflow start state? - if (activeSession != null && SubflowState.class.isInstance(activeSession.getState())) { - aFlowDefinition = ((SubflowState) activeSession.getState()).getSubflow(); - } - - if (activeSession == null) { - _conversationLifecycleListener.startingFlow(aFlowDefinition, aContext); - } else { - _conversationLifecycleListener.startingSubflow(activeSession, aFlowDefinition, aContext, null); - } - } - - public void sessionStarted(RequestContext aContext, FlowSession aSession) { - if (aSession.isRoot()) { - _conversationLifecycleListener.flowStarted(aContext, null); - } else { - _conversationLifecycleListener.subflowStarted(aContext, null); - } - } - - public void sessionEnding(RequestContext aContext, FlowSession aSession, MutableAttributeMap aOutput) { - if (aSession.isRoot()) { - _conversationLifecycleListener.endingFlow(aContext, null); - } else { - _conversationLifecycleListener.endingSubflow(aContext, null); - } - } - - public void requestProcessed(RequestContext aContext) { - FlowExecutionContext executionContext = aContext.getFlowExecutionContext(); - if (executionContext.isActive()) { - _conversationLifecycleListener.sessionDeactive(aContext); - } - } - - /** - * Called when a flow execution session ends. If the ended session was the root session of the flow execution, the - * {@link ConversationLifecycleListener#flowEnded(FlowSession, RequestContext)} method is invoked.

If the ended - * session was not the root session, then the - * {@link ConversationLifecycleListener#subflowEnded(FlowSession, FlowDefinition, RequestContext, MutableAttributeMap)} } - * method is invoked. Prior to this, and in either case, the - * {@link ConversationLifecycleListener#sessionDeactive(RequestContext)} method is invoked. - * - * @param aContext The source of the event - * @param aEndedSession The ended FlowSession - */ - public final void sessionEnded(RequestContext aContext, FlowSession aEndedSession, AttributeMap aSessionOutput) { - FlowExecutionContext exeCtx = aContext.getFlowExecutionContext(); - FlowSession newSession = exeCtx.isActive() ? exeCtx.getActiveSession() : null; - if (aEndedSession != null) { - try { - if (aEndedSession.isRoot()) { - _conversationLifecycleListener.flowEnded(aEndedSession, aContext); - } else { - _conversationLifecycleListener.subflowEnded(newSession, aEndedSession.getDefinition(), aContext, - null); - } - } catch (RuntimeException e) { // todo to think which base exception need wrap - String message = "Can't end session"; - if (_logger.isWarnEnabled()) { - _logger.warn(message, e); - } - throw new FlowExecutionException(exeCtx.getDefinition().getId(), newSession != null ? newSession - .getState().getId() : aEndedSession.getState().getId(), message, e); - } - } - aContext.getRequestScope().put(CURRENT_SESSION_ENDED, Boolean.TRUE); - } - - /** - * Determine whether the current request has handled an event. - * - * @param aContext The request context - * @return true if an event has already been signaled during the current request, otherwise - * false - */ - private boolean firstEventSignaled(RequestContext aContext) { - return aContext.getRequestScope().get(FIRST_EVENT_SIGNALED).equals(Boolean.TRUE); - } - - public void resumed(RequestContext context) { - signalAction(context); - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/DefaultEntityManagerLifecycleController.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/DefaultEntityManagerLifecycleController.java deleted file mode 100644 index 6d462cc7..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/DefaultEntityManagerLifecycleController.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.springframework.webflow.jpa; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.util.Assert; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.orm.jpa.EntityManagerHolder; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; - -/** - * Default abstract JPA implementation for {@link EntityManagerLifecycleController}. - * - * @author Maxim Petrashev - */ -public abstract class DefaultEntityManagerLifecycleController implements EntityManagerLifecycleController { - private EntityManagerFactory _entityManagerFactory; - - public DefaultEntityManagerLifecycleController(EntityManagerFactory aEntityManagerFactory) { - _entityManagerFactory = aEntityManagerFactory; - } - - public void close(EntityManager aEntityManager) { - Assert.isTrue(aEntityManager.isOpen(), "Entity manager was already closed"); - aEntityManager.close(); - } - - public void deactivate(EntityManager aEntityManager) { - unbind(aEntityManager); - if (_log.isDebugEnabled()) { - _log.debug("Entity manager unbinded: " + aEntityManager.isOpen()); - } - } - - public EntityManager create() { - return _entityManagerFactory.createEntityManager(); - } - - public void flush(EntityManager aEntityManager) { - try { - aEntityManager.flush(); - } catch (RuntimeException e) {// todo review this code - aEntityManager.getTransaction().rollback(); - throw e; - } - } - - public void activate(EntityManager aEntityManager) { - bind(aEntityManager); - if (_log.isDebugEnabled()) { - _log.debug("Session activate: " + aEntityManager.isOpen()); - } - } - - protected void bind(EntityManager aEntityManager) { - TransactionSynchronizationManager.bindResource(_entityManagerFactory, new EntityManagerHolder(aEntityManager)); - } - - protected void unbind(EntityManager aEntityManager) { - synchronized (_entityManagerFactory) {// todo is this need? - Assert.isTrue(TransactionSynchronizationManager.hasResource(_entityManagerFactory)); // todo remove this - // code. Resource - // must be already - // present. - TransactionSynchronizationManager.unbindResource(_entityManagerFactory); - } - } - - protected EntityManagerFactory getEntityManagerFactory() { - return _entityManagerFactory; - } - - protected final Log _log = LogFactory.getLog(getClass()); -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/EntityManagerLifecycleController.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/EntityManagerLifecycleController.java deleted file mode 100644 index 74eb6b4e..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/EntityManagerLifecycleController.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.springframework.webflow.jpa; - -import javax.persistence.EntityManager; - -/** - * Lifycycle controller that hide vendor specific routines for entity manager like: - *

    - *
  • Application transaction commit implementation. See, for example, - * org.hibernate.annotations.FlushModeType.MANUAL
  • - *
  • Binding/Unbinding persistence context resources for current thread
  • - *
- * - * @author Maxim Petrashev - */ -public interface EntityManagerLifecycleController { - /** - * Create new entity manager and return wrapper for it with aId id. - */ - EntityManager create(); - - /** - * Reconnect entity manager and bind to current thread. - * @param aEntityManager - */ - void activate(EntityManager aEntityManager); - - /** - * Disconnect current session and unbind from current thread. - * @param aEntityManager - */ - void deactivate(EntityManager aEntityManager); - - /** - * Commit application transaction. - * @param aEntityManager - */ - void flush(EntityManager aEntityManager); - - /** - * Close opened entity manager. - * @param aEntityManager - */ - void close(EntityManager aEntityManager); - -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/OpenEntityManagerPerConversationFlowListener.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/OpenEntityManagerPerConversationFlowListener.java deleted file mode 100644 index 8bff4dd3..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/OpenEntityManagerPerConversationFlowListener.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.springframework.webflow.jpa; - -import javax.persistence.EntityManager; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.web.context.request.WebRequestInterceptor; -import org.springframework.webflow.definition.FlowDefinition; -import org.springframework.webflow.definition.StateDefinition; -import org.springframework.webflow.engine.EndState; -import org.springframework.webflow.execution.ConversationLifecycleListenerAdapter; -import org.springframework.webflow.execution.FlowExecutionContext; -import org.springframework.webflow.execution.FlowSession; -import org.springframework.webflow.execution.RequestContext; - -/** - * Intended for those wating a long session model within webflows. A entity manager is created when the flow begins, and - * is disconnected and reconnected as necessary throughout the lifecycle of the flow. In particular, it should be - * thought of as both a {@link org.springframework.webflow.execution.FlowExecutionListener} and - * {@link WebRequestInterceptor} that binds a entity manager to the current thread for the activate span of a - * FlowSession. This implementation shares the entity manager between a parent flow and any subflows. - *

- * To facilitate the long session idea, objects within the flow will be reassociated with the jpa persistence context - * when the flow is re-activated. Deserialized jpa flow scope objects lose their association to the persistence context, - * and thus result in problems when you attempt to perform persistence operations (run into non-unique object - * exceptions, null sessions in persistent collections, and a host of other weird behaviors). There is a basic facility - * to apply a flushMode to new entity managers that are created, but not as sophisticated as that provided by a - * HibernateAccessor. Config example: - * - *
- *      	<bean id="openEntityManagerFlowListener"
- *       			class="org.springframework.webflow.jpa.OpenEntityManagerPerConversationFlowListener">
- *       		<constructor ref="_lifecycleController"/>
- *      	</bean>
- * 
- * - *

- * Adapted from Alex Wolfe's post at - * http://forum.springframework.org/showthread.php?t=17633 - * - * @author Maxim Petrashev - */ -public class OpenEntityManagerPerConversationFlowListener extends ConversationLifecycleListenerAdapter { - protected final Log _logger = LogFactory.getLog(getClass()); - - private final EntityManagerLifecycleController _lifecycleController; - - /** - * Attribute name for annotated state which mark end-state and application commit end-state. - */ - public static final String APPLICATION_TRANSACTION_COMMIT_ATTR_NAME = "applicationTransactionCommit"; - /** - * Attribute name under wich in conversation scope will be stored entity manager for conversation. - */ - private static final String ENTITY_MANAGER_ATTR_NAME = OpenEntityManagerPerConversationFlowListener.class.getName() - + ".ENTITY_MANAGER"; - - protected OpenEntityManagerPerConversationFlowListener(EntityManagerLifecycleController aLifecycleController) { - _lifecycleController = aLifecycleController; - } - - protected EntityManager getEntityManager(RequestContext aContext) { - return (EntityManager) aContext.getConversationScope().get(ENTITY_MANAGER_ATTR_NAME); - } - - /** - * Create entity manager for new conversation. - * @param aNewFlow - * @param aContext - */ - public void startingFlow(FlowDefinition aNewFlow, RequestContext aContext) { - _logger.debug("Creating entity manager for flow: " + aNewFlow.getId()); - EntityManager entityManager = _lifecycleController.create(); - _lifecycleController.activate(entityManager); - aContext.getConversationScope().put(ENTITY_MANAGER_ATTR_NAME, entityManager); - } - - /** - * Try commit application transaction on application transaction commit end state. Clean also all resources that - * were allocated for conversation entity manager. - * @param aEndedSession - * @param aContext - */ - public void flowEnded(FlowSession aEndedSession, RequestContext aContext) { - EntityManager entityManager = getEntityManager(aContext); - try { - if (isApplicationTransactionCommitState(aEndedSession.getState())) { - _lifecycleController.flush(entityManager); - } - } finally { - try { - _lifecycleController.deactivate(entityManager); - } finally { - _lifecycleController.close(entityManager); - } - } - } - - /** - * {@inheritDoc} - */ - public void sessionActive(RequestContext aContext) { - EntityManager entityManager = getEntityManager(aContext); - _lifecycleController.activate(entityManager); - } - - /** - * Deactivate current entity manager on end of request handling process. - */ - public void sessionDeactive(RequestContext aContext) { - FlowExecutionContext flowExecutionContext = aContext.getFlowExecutionContext(); - if (flowExecutionContext.isActive()) {// todo need CommandManager or request specific lifecycleController - EntityManager entityManager = getEntityManager(aContext); - _lifecycleController.deactivate(entityManager); - } else { - // entity manager already was closed in flowEnded method - } - } - - /** - * Return is aState application commit state or not. Returns true if aState is EndState and aState is annotated by - * {@link #APPLICATION_TRANSACTION_COMMIT_ATTR_NAME} attribute. - */ - protected boolean isApplicationTransactionCommitState(StateDefinition aState) { - boolean retVal = false; - if (aState instanceof EndState) { - retVal = aState.getAttributes().get(APPLICATION_TRANSACTION_COMMIT_ATTR_NAME, "false").equals("true"); - } - return retVal; - } - - public static final String CURRENT_ENTITY_MANAGER_KEY_ATTR_NAME = OpenEntityManagerPerConversationFlowListener.class - .getName() - + ".CURRENT_ENTITY_MANAGER_KEY"; - // todo review exceptionThrown -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/TransactionSynchronizationManagerEnityManagerHolder.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/TransactionSynchronizationManagerEnityManagerHolder.java deleted file mode 100644 index 0b4254fa..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/TransactionSynchronizationManagerEnityManagerHolder.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.springframework.webflow.jpa; - -import org.springframework.orm.jpa.EntityManagerHolder; -import org.springframework.util.AbstractReadOnlyResourceHolder; -import org.springframework.transaction.support.TransactionSynchronizationManager; - -import javax.persistence.EntityManager; - -/** - * Resource holder that is wrapper for TransactionSynchronizationManager. - * - * @author Maxim Petrashev - */ -public class TransactionSynchronizationManagerEnityManagerHolder extends AbstractReadOnlyResourceHolder { - public EntityManager get() { - EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.getResource(_key); - return emHolder.getEntityManager(); - } - - public TransactionSynchronizationManagerEnityManagerHolder(Object aKey) { - _key = aKey; - } - - private Object _key; -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/EntityManagerLifecycleController.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/EntityManagerLifecycleController.java deleted file mode 100644 index 07c8e7b9..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/EntityManagerLifecycleController.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.springframework.webflow.jpa.hibernate; - -import org.springframework.webflow.jpa.DefaultEntityManagerLifecycleController; -import org.hibernate.FlushMode; -import org.hibernate.SessionFactory; -import org.hibernate.classic.Session; -import org.hibernate.context.ManagedSessionContext; - -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; - -/** - * Hibernate specific implementation of EntityManagerLifecycleController interface. Set for each new entity manager - * hibernate specific flush mode and starts new JPA transaction on activation, and commit it on deactivation - * - * @author Maxim Petrashev - */ -public class EntityManagerLifecycleController extends DefaultEntityManagerLifecycleController { - - public EntityManagerLifecycleController(EntityManagerFactory aEntityManagerFactory) { - super(aEntityManagerFactory); - } - - public EntityManager create() { - EntityManager retVal = super.create(); - Session session = HibernateUtils.getSession(retVal); - session.setFlushMode(FlushMode.MANUAL); // todo review this code - return retVal; - } - - protected void unbind(EntityManager aEntityManager) { - try { - SessionFactory sessionFactory = HibernateUtils.getSessionFactory(getEntityManagerFactory()); - ManagedSessionContext.unbind(sessionFactory); - } finally { - super.unbind(aEntityManager); - } - } - - protected void bind(EntityManager aEntityManager) { - super.bind(aEntityManager); - // todo remove this code in hibernate specific class - ManagedSessionContext.bind(HibernateUtils.getSession(aEntityManager)); - } - - public void activate(EntityManager aEntityManager) { - beginTransaction(aEntityManager); - super.activate(aEntityManager); - } - - public void deactivate(EntityManager aEntityManager) { - try { - disconnectSession(aEntityManager); - } finally { - super.deactivate(aEntityManager); - } - } - - protected void beginTransaction(EntityManager aEntityManager) {// todo is it method need? May be transaction aspect - // has to cover it? - // begin database transaction for taking available connection - aEntityManager.getTransaction().begin(); - } - - protected void disconnectSession(EntityManager aEntityManager) {// todo is it method need? May be transaction aspect - // has to cover it? - EntityTransaction transaction = aEntityManager.getTransaction(); - transaction.commit(); - // todo is it need ? aSession.disconnect(); - } - -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/HibernateUtils.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/HibernateUtils.java deleted file mode 100644 index 2ee3672a..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/jpa/hibernate/HibernateUtils.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.springframework.webflow.jpa.hibernate; - -import org.hibernate.SessionFactory; -import org.hibernate.EntityMode; -import org.hibernate.metadata.ClassMetadata; -import org.hibernate.classic.Session; -import org.hibernate.ejb.HibernateEntityManagerFactory; -import org.hibernate.ejb.HibernateEntityManager; - -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityManager; -import java.util.Map; -import java.util.List; -import java.util.LinkedList; - -/** - * Utils class for common hibernate JPA routines. - * - * @author Maxim Petrashev - */ -public abstract class HibernateUtils { - public static SessionFactory getSessionFactory(EntityManagerFactory aEntityManagerFactory) { - HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) aEntityManagerFactory; - return hibernateEntityManagerFactory.getSessionFactory(); - } - - public static Session getSession(EntityManager aEntityManager) { - return (Session) ((HibernateEntityManager) aEntityManager).getSession(); - } - - @Deprecated - public static List getEntityClasses(EntityManager aEntityManager) { - SessionFactory sessionFactory = getSession(aEntityManager).getSessionFactory(); - @SuppressWarnings("unchecked") - Map metadataMap = sessionFactory.getAllClassMetadata(); - List retVal = new LinkedList(); - for (ClassMetadata classMetadata : metadataMap.values()) { - Class type = classMetadata.getMappedClass(EntityMode.POJO); - retVal.add(type); - } - return retVal; - } - - public static Object getIdentifier(SessionFactory aSessionFactory, Object aEntity) { - return aSessionFactory.getCurrentSession().getIdentifier(aEntity); - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/Sale.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/Sale.java deleted file mode 100644 index 46204cc3..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/Sale.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.samples.sellitem; - -import java.io.Serializable; -import java.util.Date; - -import org.springframework.core.style.ToStringCreator; -import org.hibernate.annotations.Proxy; - -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Id; -import javax.persistence.TableGenerator; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Transient; - -@Entity -@Table(name = "T_SALES") -@Proxy(lazy = true) -public class Sale implements Serializable { - - @Id - @TableGenerator(name = "ids") - @GeneratedValue(strategy = GenerationType.TABLE) - public int getId() { - return id; - } - - public void setId(int aId) { - id = aId; - } - - private int id; - - private double price; - - private int itemCount; - - private String category; - - private boolean shipping; - - private String shippingType; - - private Date shipDate; - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public int getItemCount() { - return itemCount; - } - - public void setItemCount(int itemCount) { - this.itemCount = itemCount; - } - - public double getPrice() { - return price; - } - - public void setPrice(double price) { - this.price = price; - } - - public boolean isShipping() { - return shipping; - } - - public void setShipping(boolean shipping) { - this.shipping = shipping; - } - - public String getShippingType() { - return shippingType; - } - - public void setShippingType(String shippingType) { - this.shippingType = shippingType; - } - - public Date getShipDate() { - return shipDate; - } - - public void setShipDate(Date shipDate) { - this.shipDate = shipDate; - } - - // business logic methods - - /** - * Returns the base amount of the sale, without discount or delivery costs. - */ - @Transient - public double getAmount() { - return price * itemCount; - } - - /** - * Returns the discount rate to apply. - */ - @Transient - public double getDiscountRate() { - double discount = 0.02; - if ("A".equals(category)) { - if (itemCount >= 100) { - discount = 0.1; - } - } else if ("B".equals(category)) { - if (itemCount >= 200) { - discount = 0.2; - } - } - return discount; - } - - /** - * Returns the savings because of the discount. - */ - @Transient - public double getSavings() { - return getDiscountRate() * getAmount(); - } - - /** - * Returns the delivery cost. - */ - @Transient - public double getDeliveryCost() { - double delCost = 0.0; - if ("S".equals(shippingType)) { - delCost = 10.0; - } else if ("E".equals(shippingType)) { - delCost = 20.0; - } - return delCost; - } - - /** - * Returns the total cost of the sale, including discount and delivery cost. - */ - @Transient - public double getTotalCost() { - return getAmount() + getDeliveryCost() - getSavings(); - } - - public String toString() { - return new ToStringCreator(this).append("price", price).append("itemCount", itemCount).append("shippingType", - shippingType).append("shipDate", shipDate).toString(); - } -} \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleProcessor.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleProcessor.java deleted file mode 100644 index 34692766..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleProcessor.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.samples.sellitem; - -import org.springframework.transaction.annotation.Transactional; - -@Transactional -public interface SaleProcessor { - - public void process(Sale sale); -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleValidator.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleValidator.java deleted file mode 100644 index a7731a55..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SaleValidator.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.samples.sellitem; - -import org.springframework.validation.Errors; -import org.springframework.validation.Validator; - -// todo remove dependency on Validator interface -public class SaleValidator implements Validator { - - public boolean supports(Class clazz) { - return Sale.class.equals(clazz); - } - - public void validate(Object obj, Errors errors) { - Sale sale = (Sale) obj; - validatePriceAndItemCount(sale, errors); - } - - public void validatePriceAndItemCount(Sale sale, Errors errors) { - if (sale.getItemCount() <= 0) { - errors.rejectValue("itemCount", "tooLittle", "Item count must be greater than 0"); - } - if (sale.getPrice() <= 0.0) { - errors.rejectValue("price", "tooLittle", "Price must be greater than 0.0"); - } - } -} \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemFlowExecutionListener.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemFlowExecutionListener.java deleted file mode 100644 index 94545c27..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemFlowExecutionListener.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.samples.sellitem; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.util.StringUtils; -import org.springframework.webflow.context.servlet.ServletExternalContext; -import org.springframework.webflow.definition.StateDefinition; -import org.springframework.webflow.execution.EnterStateVetoException; -import org.springframework.webflow.execution.FlowExecutionListenerAdapter; -import org.springframework.webflow.execution.RequestContext; - -public class SellItemFlowExecutionListener extends FlowExecutionListenerAdapter { - - public void stateEntering(RequestContext context, StateDefinition nextState) throws EnterStateVetoException { - String role = nextState.getAttributes().getString("role"); - if (StringUtils.hasText(role)) { - HttpServletRequest request = ((ServletExternalContext) context.getExternalContext()).getRequest();// todo - // remove - // dependency - // on - // servlet - // api - if (!request.isUserInRole(role)) { - throw new EnterStateVetoException(context.getActiveFlow().getId(), context.getCurrentState().getId(), - nextState.getId(), "State requires role '" + role - + "', but the authenticated user doesn't have it!"); - } - } - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemPropertyEditorRegistrar.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemPropertyEditorRegistrar.java deleted file mode 100644 index 7b2e67d2..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/SellItemPropertyEditorRegistrar.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.samples.sellitem; - -import java.text.SimpleDateFormat; -import java.util.Date; - -import org.springframework.beans.PropertyEditorRegistrar; -import org.springframework.beans.PropertyEditorRegistry; -import org.springframework.beans.propertyeditors.CustomDateEditor; - -public class SellItemPropertyEditorRegistrar implements PropertyEditorRegistrar { - - public void registerCustomEditors(PropertyEditorRegistry registry) { - registry.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true)); - } -} diff --git a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/jpa/JpaSaleProcessor.java b/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/jpa/JpaSaleProcessor.java deleted file mode 100644 index 82a8233b..00000000 --- a/spring-webflow-sandbox/src/main/java/org/springframework/webflow/samples/sellitem/jpa/JpaSaleProcessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.springframework.webflow.samples.sellitem.jpa; - -import org.springframework.webflow.samples.sellitem.SaleProcessor; -import org.springframework.webflow.samples.sellitem.Sale; - -import javax.persistence.EntityManager; - -public abstract class JpaSaleProcessor implements SaleProcessor { - public void process(Sale sale) { - EntityManager entityManager = getEntityManager(); - entityManager.persist(sale); - } - - protected abstract EntityManager getEntityManager(); -} diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/META-INF/persistence.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/META-INF/persistence.xml deleted file mode 100644 index a609ee3c..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/META-INF/persistence.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/log4j.properties b/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/log4j.properties deleted file mode 100644 index 5ba9222c..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/log4j.properties +++ /dev/null @@ -1,9 +0,0 @@ -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 diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/org/springframework/webflow/samples/sellitem/services-config.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/org/springframework/webflow/samples/sellitem/services-config.xml deleted file mode 100644 index a21c5989..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/classes/org/springframework/webflow/samples/sellitem/services-config.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.hibernate.dialect.HSQLDialect - create-drop - org.hsqldb.jdbcDriver - jdbc:hsqldb:mem:sellItem - after_transaction - true - org.hibernate.context.ManagedSessionContext - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-beans.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-beans.xml deleted file mode 100644 index 66a4c1cc..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-beans.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-conversation-scope-flow.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-conversation-scope-flow.xml deleted file mode 100644 index b6850a3f..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/sellitem-conversation-scope-flow.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/shipping-conversation-scope-flow.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/shipping-conversation-scope-flow.xml deleted file mode 100644 index 2f12345f..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/conversation-scope/shipping-conversation-scope-flow.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-beans.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-beans.xml deleted file mode 100644 index 2b828373..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-beans.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-flow.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-flow.xml deleted file mode 100644 index a49fb3d2..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/sellitem-flow.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/shipping-flow.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/shipping-flow.xml deleted file mode 100644 index 9bf52e40..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/shipping-flow.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/simple/sellitem-simple-flow.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/simple/sellitem-simple-flow.xml deleted file mode 100644 index 8c06eaa1..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/flows/simple/sellitem-simple-flow.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/categoryForm.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/categoryForm.jsp deleted file mode 100644 index 6d132f90..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/categoryForm.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ include file="includeTop.jsp" %> - -

-
-

Select category

- - - - - - - - - - - - - - - - - - - - -
Price:${sale.price}
Item count:${sale.itemCount}
Category: - - - -
Is shipping required?: - -
- - -
-
- -<%@ include file="includeBottom.jsp" %> \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/costOverview.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/costOverview.jsp deleted file mode 100644 index 8dd43e98..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/costOverview.jsp +++ /dev/null @@ -1,71 +0,0 @@ -<%@ include file="includeTop.jsp" %> - -
-
-

Purchase cost overview

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Price:${sale.price}
Item count:${sale.itemCount}
Category:${sale.category}
Shipping Info: - - - - - - - - - - - -
Type:${sale.shippingType}
Date: - - ${status.value} - -
-
- - No shipping required: you're picking up the items - -
-
Base amount:${sale.amount}
Delivery cost:${sale.deliveryCost}
Discount:${sale.savings} (Discount rate: ${sale.discountRate})

Total cost:${sale.totalCost}
-
"> - -
-
-
- -<%@ include file="includeBottom.jsp" %> \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/error.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/error.jsp deleted file mode 100644 index 65d8ab8c..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/error.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ include file="includeTop.jsp" %> - -
-
- -
-

- - Duplicate submit of the same transaction not allowed! - -

-

- Sell a new item -

-
- -<%@ include file="includeBottom.jsp" %> \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeBottom.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeBottom.jsp deleted file mode 100644 index dfe41438..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeBottom.jsp +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeTop.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeTop.jsp deleted file mode 100644 index 416cad5f..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/includeTop.jsp +++ /dev/null @@ -1,22 +0,0 @@ -<%@ page contentType="text/html" %> -<%@ page session="false" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> - - - -Sell an item - - - - - - - - diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/priceAndItemCountForm.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/priceAndItemCountForm.jsp deleted file mode 100644 index ab220892..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/priceAndItemCountForm.jsp +++ /dev/null @@ -1,27 +0,0 @@ -<%@ include file="includeTop.jsp" %> - -
-
-

Enter price and item count

-
- - - - - - - - - - - - - - -
Price:
Item count:
- - -
-
- -<%@ include file="includeBottom.jsp" %> \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/shippingDetailsForm.jsp b/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/shippingDetailsForm.jsp deleted file mode 100644 index e6c9a61c..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/jsp/shippingDetailsForm.jsp +++ /dev/null @@ -1,51 +0,0 @@ -<%@ include file="includeTop.jsp" %> - -
-
-

Enter shipping information

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
Price:${sale.price}
Item count:${sale.itemCount}
Category:${sale.category}
Shipping:${sale.shipping}
Shipping type: - - - -
Ship date (DD/MM/YYYY): - -
- - -
-
- -<%@ include file="includeBottom.jsp" %> \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-servlet-config.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-servlet-config.xml deleted file mode 100644 index bf8369dc..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-servlet-config.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-webflow-config.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-webflow-config.xml deleted file mode 100644 index 939ffb25..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/sellitem-webflow-config.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/WEB-INF/web.xml b/spring-webflow-sandbox/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 7cba7ad3..00000000 --- a/spring-webflow-sandbox/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - webAppRootKey - swf-sellitem.root - - - - contextConfigLocation - - classpath:org/springframework/webflow/samples/sellitem/services-config.xml - - - - - log4jConfigLocation - /WEB-INF/classes/log4j.properties - - - - org.springframework.web.context.ContextLoaderListener - - - - org.springframework.web.util.Log4jConfigListener - - - - sellitem - org.springframework.web.servlet.DispatcherServlet - - contextConfigLocation - - /WEB-INF/sellitem-servlet-config.xml - /WEB-INF/sellitem-webflow-config.xml - - - - - - sellitem - *.htm - - - - index.jsp - - - \ No newline at end of file diff --git a/spring-webflow-sandbox/src/main/webapp/images/spring-logo.jpg b/spring-webflow-sandbox/src/main/webapp/images/spring-logo.jpg deleted file mode 100644 index 62be3983..00000000 Binary files a/spring-webflow-sandbox/src/main/webapp/images/spring-logo.jpg and /dev/null differ diff --git a/spring-webflow-sandbox/src/main/webapp/images/webflow-logo.jpg b/spring-webflow-sandbox/src/main/webapp/images/webflow-logo.jpg deleted file mode 100644 index ed76bae0..00000000 Binary files a/spring-webflow-sandbox/src/main/webapp/images/webflow-logo.jpg and /dev/null differ diff --git a/spring-webflow-sandbox/src/main/webapp/index.jsp b/spring-webflow-sandbox/src/main/webapp/index.jsp deleted file mode 100644 index 45801400..00000000 --- a/spring-webflow-sandbox/src/main/webapp/index.jsp +++ /dev/null @@ -1,58 +0,0 @@ -<%@ page session="true" %> <%-- make sure we have a session --%> - - -
Sell Item - A Spring Web Flow Sample
- -
- -
-

- Sell Item -

- -

- This Spring Web Flow sample application implements the example application - discussed in the article - - Use continuations to develop complex Web applications. It illustrates - the following concepts: -

    -
  • - Using the "_flowId" request parameter to let the view tell the web - flow controller which flow needs to be started. -
  • -
  • - Implementing a wizard using web flows. -
  • -
  • - Use of the FormAction to perform form processing, including the - FormAction's "setupForm" method to install custom property editors for - formatting text field values (shipDate). -
  • -
  • - Using continuations to make the flow completely stable, no matter - how browser navigation buttons are used. -
  • -
  • - 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. -
  • -
  • - "Always redirect on pause" to benefit from the POST+REDIRECT+GET pattern with no special coding. -
  • -
  • - Using OGNL based conditional expressions. -
  • -
  • - Use of subflows to compose a multi-step business process from independently reusable modules. -
  • -
-

-
- -
- -
- - diff --git a/spring-webflow-sandbox/src/main/webapp/style.css b/spring-webflow-sandbox/src/main/webapp/style.css deleted file mode 100644 index f4b0a64e..00000000 --- a/spring-webflow-sandbox/src/main/webapp/style.css +++ /dev/null @@ -1,58 +0,0 @@ -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