You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2012/05/04 14:12:22 UTC
[20/24] git commit: atmosphere integration
atmosphere integration
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/33b12c0f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/33b12c0f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/33b12c0f
Branch: refs/heads/master
Commit: 33b12c0ffc64cd12c8f1a0dbd4ef6577a71fab26
Parents: bf96cc5
Author: Emond Papegaaij <pa...@apache.org>
Authored: Tue Apr 3 08:42:51 2012 +0200
Committer: Emond Papegaaij <pa...@apache.org>
Committed: Thu Apr 19 11:07:55 2012 +0200
----------------------------------------------------------------------
pom.xml | 7 +
.../.settings/org.eclipse.core.resources.prefs | 11 +
.../.settings/org.eclipse.jdt.core.prefs | 367 ++++
.../.settings/org.eclipse.jdt.ui.prefs | 68 +
.../.settings/org.eclipse.m2e.core.prefs | 5 +
.../.settings/org.eclipse.pde.core.prefs | 3 +
wicket-atmosphere/pom.xml | 69 +
.../wicket/atmosphere/AtmosphereBehavior.java | 188 ++
.../AtmosphereEventSubscriptionCollector.java | 45 +
.../atmosphere/AtmosphereRequestHandler.java | 76 +
.../org/apache/wicket/atmosphere/EventBus.java | 132 ++
.../org/apache/wicket/atmosphere/EventFilter.java | 19 +
.../wicket/atmosphere/EventSubscription.java | 78 +
.../JQueryWicketAtmosphereResourceReference.java | 25 +
.../wicket/atmosphere/NoFilterPredicate.java | 12 +
.../java/org/apache/wicket/atmosphere/PageKey.java | 48 +
.../wicket/atmosphere/PushRequestMapper.java | 33 +
.../apache/wicket/atmosphere/PushWebRequest.java | 101 +
.../wicket/atmosphere/StringWebResponse.java | 141 ++
.../org/apache/wicket/atmosphere/Subscribe.java | 15 +
.../apache/wicket/atmosphere/jquery.atmosphere.js | 1568 +++++++++++++++
.../wicket/atmosphere/jquery.wicketatmosphere.js | 49 +
wicket-examples/pom.xml | 4 +
.../examples/atmosphere/AtmosphereApplication.java | 62 +
.../wicket/examples/atmosphere/HomePage.html | 51 +
.../wicket/examples/atmosphere/HomePage.java | 31 +
.../apache/wicket/examples/homepage/HomePage.html | 1 +
.../src/main/webapp/META-INF/atmosphere.xml | 6 +
.../src/main/webapp/META-INF/context.xml | 5 +
wicket-examples/src/main/webapp/WEB-INF/web.xml | 30 +
.../org/apache/wicket/examples/StartExamples.java | 4 +-
31 files changed, 3252 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d468fb4..c30a89e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,7 @@
<module>wicket-request</module>
<module>wicket-devutils</module>
<module>wicket-extensions</module>
+ <module>wicket-atmosphere</module>
<module>wicket-ioc</module>
<module>wicket-spring</module>
<module>wicket-velocity</module>
@@ -229,6 +230,12 @@
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-atmosphere</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
<artifactId>wicket-util</artifactId>
<version>${project.version}</version>
<type>jar</type>
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/.settings/org.eclipse.core.resources.prefs
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/.settings/org.eclipse.core.resources.prefs b/wicket-atmosphere/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..eb4e8cf
--- /dev/null
+++ b/wicket-atmosphere/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,11 @@
+#Mon Oct 10 10:40:56 EEST 2011
+eclipse.preferences.version=1
+encoding//.deprecations/DEPRECATE_wicket.markup.html.form.FormComponent.inputAsStringArray().xml=utf-8
+encoding//.deprecations/DEPRECATE_wicket.markup.html.list.ListView.setOptimizeItemRemoval(boolean).xml=utf-8
+encoding//.deprecations/DEPRECATE_wicket.markup.html.tree.Tree$TreePathsListView.getOptimizeItemRemoval().xml=utf-8
+encoding//src/java/wicket/Application_bg.properties=UTF-8
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/.settings/org.eclipse.jdt.core.prefs
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/.settings/org.eclipse.jdt.core.prefs b/wicket-atmosphere/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0493821
--- /dev/null
+++ b/wicket-atmosphere/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,367 @@
+#Wed Nov 16 13:48:25 PST 2011
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+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.maxProblemPerUnit=100
+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.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+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.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+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=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+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=warning
+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.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=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=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+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=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=80
+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=64
+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=0
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0
+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=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_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=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
+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_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=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=1
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=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=do not 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=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=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=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=insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=true
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=true
+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=2
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=false
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/.settings/org.eclipse.jdt.ui.prefs
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/.settings/org.eclipse.jdt.ui.prefs b/wicket-atmosphere/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..1f00276
--- /dev/null
+++ b/wicket-atmosphere/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+#Fri Nov 05 09:40:42 PDT 2010
+comment_clear_blank_lines=false
+comment_format_comments=true
+comment_format_header=true
+comment_format_html=true
+comment_format_source_code=true
+comment_indent_parameter_description=true
+comment_indent_root_tags=true
+comment_line_length=80
+comment_new_line_for_parameter=true
+comment_separate_root_tags=true
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Wicket
+formatter_settings_version=11
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * Gets ${bare_field_name}.\r\n * @return ${bare_field_name}\r\n */</template><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * Sets ${bare_field_name}.\r\n * @param ${param} ${bare_field_name}\r\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * Construct.\r\n * ${tag
s}\r\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment"/><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</templat
e><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements. See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the "License"); you may not use this file except in compliance with\r\n * the License. You may obtain a copy of the License at\r\n *\r\n * http\://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless require
d by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an "AS IS" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">throw new RuntimeException(${exception_var});</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\
="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type
bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template></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_methods=false
+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.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+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=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+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=true
+sp_cleanup.remove_unused_imports=true
+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=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/.settings/org.eclipse.m2e.core.prefs
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/.settings/org.eclipse.m2e.core.prefs b/wicket-atmosphere/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..17d5ee05
--- /dev/null
+++ b/wicket-atmosphere/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,5 @@
+#Mon Sep 19 12:01:07 PDT 2011
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/.settings/org.eclipse.pde.core.prefs
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/.settings/org.eclipse.pde.core.prefs b/wicket-atmosphere/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..1eb6077
--- /dev/null
+++ b/wicket-atmosphere/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Mon Sep 19 12:02:51 PDT 2011
+BUNDLE_ROOT_PATH=target/classes
+eclipse.preferences.version=1
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/pom.xml b/wicket-atmosphere/pom.xml
new file mode 100644
index 0000000..5b7bf19
--- /dev/null
+++ b/wicket-atmosphere/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-parent</artifactId>
+ <version>6.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>wicket-atmosphere</artifactId>
+ <packaging>jar</packaging>
+ <properties>
+ <atmosphere.version>0.9.0.RC3</atmosphere.version>
+ </properties>
+ <name>Wicket-Atmosphere</name>
+ <description>Wicket-Atmosphere provides integration of the Atmosphere Framework in Wicket.</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>11.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.atmosphere</groupId>
+ <artifactId>atmosphere-jquery</artifactId>
+ <version>${atmosphere.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.atmosphere</groupId>
+ <artifactId>atmosphere-runtime</artifactId>
+ <version>${atmosphere.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.atmosphere</groupId>
+ <artifactId>atmosphere-compat-jetty</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>yuicompressor-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
new file mode 100644
index 0000000..36f2074
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -0,0 +1,188 @@
+package org.apache.wicket.atmosphere;
+
+import java.util.Enumeration;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.IResourceListener;
+import org.apache.wicket.MetaDataKey;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.resource.CoreLibrariesContributor;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResourceEvent;
+import org.atmosphere.cpr.AtmosphereResourceEventListener;
+import org.atmosphere.cpr.HeaderConfig;
+import org.atmosphere.cpr.Meteor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AtmosphereBehavior extends Behavior
+ implements
+ IResourceListener,
+ AtmosphereResourceEventListener
+{
+ private static final Logger log = LoggerFactory.getLogger(AtmosphereBehavior.class);
+
+ public static MetaDataKey<String> ATMOSPHERE_UUID = new MetaDataKey<String>()
+ {
+ private static final long serialVersionUID = 1L;
+ };
+
+ private static final long serialVersionUID = 1L;
+
+ private long connectedAt;
+
+ private Component component;
+
+ public AtmosphereBehavior()
+ {
+ }
+
+ @Override
+ public void bind(Component component)
+ {
+ this.component = component;
+ }
+
+ @Override
+ public boolean getStatelessHint(Component component)
+ {
+ return false;
+ }
+
+ @Override
+ public void onResourceRequested()
+ {
+ connectedAt = System.currentTimeMillis();
+ RequestCycle requestCycle = RequestCycle.get();
+ ServletWebRequest request = (ServletWebRequest)requestCycle.getRequest();
+ System.out.println(request.getUrl());
+ Enumeration<String> e = request.getContainerRequest().getHeaderNames();
+ while (e.hasMoreElements())
+ {
+ String header = e.nextElement();
+ System.out.println(header + ": " + request.getHeader(header));
+ }
+
+ // Grab a Meteor
+ Meteor meteor = Meteor.build(request.getContainerRequest());
+ String uuid = getUUID(meteor.getAtmosphereResource());
+ component.getPage().setMetaData(ATMOSPHERE_UUID, uuid);
+ EventBus.get().registerPage(uuid, component.getPage());
+
+ // Add us to the listener list.
+ meteor.addListener(this);
+
+ String header = request.getHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT);
+ if (header != null && header.equalsIgnoreCase(HeaderConfig.LONG_POLLING_TRANSPORT))
+ {
+ // request.getContainerRequest().setAttribute(ApplicationConfig.RESUME_ON_BROADCAST,
+ // Boolean.TRUE);
+ meteor.suspend(-1, false);
+ }
+ else
+ {
+ meteor.suspend(-1);
+ }
+ }
+
+ @Override
+ public void onBroadcast(AtmosphereResourceEvent event)
+ {
+ log.info("onBroadcast: " + event.getMessage());
+
+ // If we are using long-polling, resume the connection as soon as we get
+ // an event.
+ String transport = event.getResource()
+ .getRequest()
+ .getHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT);
+ if (transport != null)
+ {
+ if (transport.equalsIgnoreCase(HeaderConfig.LONG_POLLING_TRANSPORT))
+ {
+ Meteor meteor = Meteor.lookup(event.getResource().getRequest());
+ meteor.removeListener(this);
+ meteor.resume();
+ }
+ else if (transport.equalsIgnoreCase(HeaderConfig.STREAMING_TRANSPORT) &&
+ (System.currentTimeMillis() - connectedAt) > 10000)
+ {
+ Meteor meteor = Meteor.lookup(event.getResource().getRequest());
+ meteor.removeListener(this);
+ meteor.resume();
+ }
+ }
+ }
+
+ @Override
+ public void onSuspend(AtmosphereResourceEvent event)
+ {
+ String transport = event.getResource().getRequest().getHeader("X-Atmosphere-Transport");
+ HttpServletRequest req = event.getResource().getRequest();
+ log.info(String.format("Suspending the %s response from ip %s:%s", transport == null
+ ? "websocket" : transport, req.getRemoteAddr(), req.getRemotePort()));
+ }
+
+ @Override
+ public void onResume(AtmosphereResourceEvent event)
+ {
+ String transport = event.getResource().getRequest().getHeader("X-Atmosphere-Transport");
+ HttpServletRequest req = event.getResource().getRequest();
+ log.info(String.format("Resuming the %s response from ip %s:%s", transport == null
+ ? "websocket" : transport, req.getRemoteAddr(), req.getRemotePort()));
+ }
+
+ @Override
+ public void onDisconnect(AtmosphereResourceEvent event)
+ {
+ String transport = event.getResource().getRequest().getHeader("X-Atmosphere-Transport");
+ HttpServletRequest req = event.getResource().getRequest();
+ log.info(String.format("%s connection dropped from ip %s:%s", transport == null
+ ? "websocket" : transport, req.getRemoteAddr(), req.getRemotePort()));
+ }
+
+ @Override
+ public void onThrowable(AtmosphereResourceEvent event)
+ {
+ event.throwable().printStackTrace();
+ }
+
+ @Override
+ public void renderHead(Component component, IHeaderResponse response)
+ {
+ try
+ {
+ CoreLibrariesContributor.contributeAjax(component.getApplication(), response);
+
+ response.render(JavaScriptHeaderItem.forReference(new JQueryWicketAtmosphereResourceReference()));
+ JSONObject options = new JSONObject();
+ options.put("url",
+ component.urlFor(this, IResourceListener.INTERFACE, new PageParameters())
+ .toString());
+ response.render(OnDomReadyHeaderItem.forScript("$('#" + component.getMarkupId() +
+ "').wicketAtmosphere(" + options.toString() + ")"));
+ }
+ catch (JSONException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ }
+
+ public static String getUUID(AtmosphereResource resource)
+ {
+ String trackingId = resource.getRequest().getHeader(HeaderConfig.X_ATMOSPHERE_TRACKING_ID);
+ if (trackingId != null)
+ return trackingId;
+ return resource.getRequest().getHeader("Sec-WebSocket-Key");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEventSubscriptionCollector.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEventSubscriptionCollector.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEventSubscriptionCollector.java
new file mode 100644
index 0000000..195a723
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEventSubscriptionCollector.java
@@ -0,0 +1,45 @@
+package org.apache.wicket.atmosphere;
+
+import java.lang.reflect.Method;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.application.IComponentOnBeforeRenderListener;
+
+public class AtmosphereEventSubscriptionCollector implements IComponentOnBeforeRenderListener
+{
+ private EventBus eventBus;
+
+ public AtmosphereEventSubscriptionCollector(EventBus eventBus)
+ {
+ this.eventBus = eventBus;
+ }
+
+ @Override
+ public void onBeforeRender(Component component)
+ {
+ for (Method curMethod : component.getClass().getMethods())
+ {
+ if (curMethod.isAnnotationPresent(Subscribe.class))
+ {
+ Class< ? >[] params = curMethod.getParameterTypes();
+ if (params.length != 2 || !params[0].equals(AjaxRequestTarget.class))
+ throw new WicketRuntimeException("@Subscribe can only be used on "
+ + "methods with 2 params, of which the first is AjaxRequestTarget. "
+ + curMethod + " does conform to this signature.");
+ subscribeComponent(component, curMethod);
+ }
+ }
+ }
+
+ private void subscribeComponent(Component component, Method method)
+ {
+ EventSubscription subscription = new EventSubscription(component, method);
+ Page page = component.getPage();
+ eventBus.register(page, subscription);
+ if (page.getBehaviors(AtmosphereBehavior.class).isEmpty())
+ page.add(new AtmosphereBehavior());
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
new file mode 100644
index 0000000..c36f0b7
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
@@ -0,0 +1,76 @@
+package org.apache.wicket.atmosphere;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.IRequestHandler;
+
+public class AtmosphereRequestHandler implements IRequestHandler
+{
+ private PageKey pageKey;
+
+ private Object event;
+
+ private Collection<EventSubscription> subscriptions;
+
+ public AtmosphereRequestHandler(PageKey pageKey, Collection<EventSubscription> subscriptions,
+ Object event)
+ {
+ this.pageKey = pageKey;
+ this.subscriptions = subscriptions;
+ this.event = event;
+ }
+
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ Page page = (Page)Application.get().getMapperContext().getPageInstance(pageKey.getPageId());
+ AjaxRequestTarget target = WebApplication.get().newAjaxRequestTarget(page);
+ executeHandlers(target, page);
+ requestCycle.scheduleRequestHandlerAfterCurrent(target);
+ }
+
+ private void executeHandlers(AjaxRequestTarget target, Page page)
+ {
+ for (EventSubscription curSubscription : subscriptions)
+ {
+ Component component = page.get(curSubscription.getComponentPath());
+ for (Method curMethod : component.getClass().getMethods())
+ {
+ if (curMethod.isAnnotationPresent(Subscribe.class) &&
+ curMethod.getName().equals(curSubscription.getMethodName()))
+ {
+ try
+ {
+ curMethod.invoke(component, target, event);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
new file mode 100644
index 0000000..d60bc67
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -0,0 +1,132 @@
+package org.apache.wicket.atmosphere;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.MetaDataKey;
+import org.apache.wicket.Page;
+import org.apache.wicket.Session;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WicketFilter;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.session.ISessionStore.UnboundListener;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.Broadcaster;
+import org.atmosphere.cpr.BroadcasterFactory;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.HashBiMap;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Multimap;
+
+public class EventBus implements UnboundListener
+{
+ private static final MetaDataKey<EventBus> EVENT_BUS_KEY = new MetaDataKey<EventBus>()
+ {
+ private static final long serialVersionUID = 1L;
+ };
+
+ public static EventBus get()
+ {
+ return Application.get().getMetaData(EVENT_BUS_KEY);
+ }
+
+ private WebApplication application;
+
+ private Broadcaster broadcaster;
+
+ private Multimap<PageKey, EventSubscription> subscriptions = HashMultimap.create();
+
+ private BiMap<String, PageKey> trackedPages = HashBiMap.create();
+
+ public EventBus(WebApplication application)
+ {
+ this.application = application;
+ application.setMetaData(EVENT_BUS_KEY, this);
+ application.mount(new PushRequestMapper());
+ application.getComponentPreOnBeforeRenderListeners().add(
+ new AtmosphereEventSubscriptionCollector(this));
+ broadcaster = BroadcasterFactory.getDefault().lookup("/*");
+ }
+
+ public synchronized void registerPage(String trackingId, Page page)
+ {
+ PageKey oldPage = trackedPages.remove(trackingId);
+ PageKey pageKey = new PageKey(page.getPageId(), Session.get().getId());
+ if (oldPage != null && !oldPage.equals(pageKey))
+ subscriptions.removeAll(oldPage);
+ trackedPages.forcePut(trackingId, pageKey);
+ }
+
+ public synchronized void register(Page page, EventSubscription subscription)
+ {
+ subscriptions.put(new PageKey(page.getPageId(), Session.get().getId()), subscription);
+ }
+
+ public void post(Object event)
+ {
+ try
+ {
+ ThreadContext.setApplication(application);
+ for (AtmosphereResource resource : broadcaster.getAtmosphereResources())
+ {
+ PageKey key;
+ Collection<EventSubscription> subscriptionsForPage;
+ synchronized (this)
+ {
+ key = trackedPages.get(AtmosphereBehavior.getUUID(resource));
+ subscriptionsForPage = Collections2.filter(
+ Collections.unmodifiableCollection(subscriptions.get(key)),
+ new EventFilter(event));
+ }
+ post(resource, key, subscriptionsForPage, event);
+ }
+ }
+ finally
+ {
+ ThreadContext.detach();
+ }
+ }
+
+ private void post(AtmosphereResource resource, PageKey pageKey,
+ Collection<EventSubscription> subscriptionsForPage, Object event)
+ {
+ String filterPath = WebApplication.get()
+ .getWicketFilter()
+ .getFilterConfig()
+ .getInitParameter(WicketFilter.FILTER_MAPPING_PARAM);
+ filterPath = filterPath.substring(1, filterPath.length() - 1);
+ HttpServletRequest httpRequest = new HttpServletRequestWrapper(resource.getRequest())
+ {
+ @Override
+ public String getContextPath()
+ {
+ String ret = super.getContextPath();
+ return ret == null ? "" : ret;
+ }
+ };
+ PushWebRequest request = new PushWebRequest(application.newWebRequest(httpRequest,
+ filterPath), pageKey, subscriptionsForPage, event);
+ Response response = new StringWebResponse();
+ if (application.createRequestCycle(request, response).processRequestAndDetach())
+ broadcaster.broadcast(response.toString(), resource);
+ }
+
+ @Override
+ public synchronized void sessionUnbound(String sessionId)
+ {
+ Iterator<PageKey> it = Iterators.concat(trackedPages.values().iterator(),
+ subscriptions.keySet().iterator());
+ while (it.hasNext())
+ if (it.next().isForSession(sessionId))
+ it.remove();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
new file mode 100644
index 0000000..e93c196
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
@@ -0,0 +1,19 @@
+package org.apache.wicket.atmosphere;
+
+import com.google.common.base.Predicate;
+
+public class EventFilter implements Predicate<EventSubscription>
+{
+ private Object event;
+
+ public EventFilter(Object event)
+ {
+ this.event = event;
+ }
+
+ @Override
+ public boolean apply(EventSubscription input)
+ {
+ return input.getFilter().apply(event);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
new file mode 100644
index 0000000..6d4ca32
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
@@ -0,0 +1,78 @@
+package org.apache.wicket.atmosphere;
+
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.WicketRuntimeException;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+public class EventSubscription
+{
+ private String componentPath;
+
+ private String methodName;
+
+ private Predicate<Object> filter;
+
+ public EventSubscription(Component component, Method method)
+ {
+ componentPath = component.getPageRelativePath();
+ Class< ? > eventType = method.getParameterTypes()[1];
+ filter = Predicates.and(Predicates.instanceOf(eventType), createFilter(method));
+ methodName = method.getName();
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Predicate<Object> createFilter(Method method)
+ {
+ Subscribe subscribe = method.getAnnotation(Subscribe.class);
+ try
+ {
+ return (Predicate<Object>) subscribe.filter().newInstance();
+ }
+ catch (InstantiationException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+ }
+
+ public String getComponentPath()
+ {
+ return componentPath;
+ }
+
+ public Predicate<Object> getFilter()
+ {
+ return filter;
+ }
+
+ public String getMethodName()
+ {
+ return methodName;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(componentPath, methodName);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof EventSubscription)
+ {
+ EventSubscription other = (EventSubscription) obj;
+ return Objects.equals(componentPath, other.getComponentPath())
+ && Objects.equals(methodName, other.getMethodName());
+ }
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/JQueryWicketAtmosphereResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/JQueryWicketAtmosphereResourceReference.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/JQueryWicketAtmosphereResourceReference.java
new file mode 100644
index 0000000..9bf8248
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/JQueryWicketAtmosphereResourceReference.java
@@ -0,0 +1,25 @@
+package org.apache.wicket.atmosphere;
+
+import java.util.Arrays;
+
+import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.resource.JQueryPluginResourceReference;
+
+public class JQueryWicketAtmosphereResourceReference extends JavaScriptResourceReference
+{
+ private static final long serialVersionUID = 1L;
+
+ public JQueryWicketAtmosphereResourceReference()
+ {
+ super(JQueryWicketAtmosphereResourceReference.class, "jquery.wicketatmosphere.js");
+ }
+
+ @Override
+ public Iterable< ? extends HeaderItem> getDependencies()
+ {
+ return Arrays.asList(JavaScriptHeaderItem.forReference(new JQueryPluginResourceReference(
+ JQueryWicketAtmosphereResourceReference.class, "jquery.atmosphere.js")));
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
new file mode 100644
index 0000000..b16108d
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
@@ -0,0 +1,12 @@
+package org.apache.wicket.atmosphere;
+
+import com.google.common.base.Predicate;
+
+public class NoFilterPredicate implements Predicate<Object>
+{
+ @Override
+ public boolean apply(Object input)
+ {
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PageKey.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PageKey.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PageKey.java
new file mode 100644
index 0000000..18cf742
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PageKey.java
@@ -0,0 +1,48 @@
+package org.apache.wicket.atmosphere;
+
+import com.google.common.base.Objects;
+
+public class PageKey
+{
+ private Integer pageId;
+
+ private String sessionId;
+
+ public PageKey(Integer pageId, String sessionId)
+ {
+ this.pageId = pageId;
+ this.sessionId = sessionId;
+ }
+
+ public Integer getPageId()
+ {
+ return pageId;
+ }
+
+ public String getSessionId()
+ {
+ return sessionId;
+ }
+
+ public boolean isForSession(String sessionId)
+ {
+ return sessionId.equals(sessionId);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hashCode(pageId, sessionId);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof PageKey)
+ {
+ PageKey other = (PageKey) obj;
+ return Objects.equal(pageId, other.pageId) && Objects.equal(sessionId, other.sessionId);
+ }
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java
new file mode 100644
index 0000000..909a131
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java
@@ -0,0 +1,33 @@
+package org.apache.wicket.atmosphere;
+
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.IRequestMapper;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+
+public class PushRequestMapper implements IRequestMapper
+{
+ @Override
+ public IRequestHandler mapRequest(Request request)
+ {
+ if (request instanceof PushWebRequest)
+ {
+ PushWebRequest pushRequest = (PushWebRequest) request;
+ return new AtmosphereRequestHandler(pushRequest.getPageKey(),
+ pushRequest.getSubscriptions(), pushRequest.getEvent());
+ }
+ return null;
+ }
+
+ @Override
+ public int getCompatibilityScore(Request request)
+ {
+ return request instanceof PushWebRequest ? Integer.MAX_VALUE : 0;
+ }
+
+ @Override
+ public Url mapHandler(IRequestHandler requestHandler)
+ {
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java
new file mode 100644
index 0000000..a31a73b
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java
@@ -0,0 +1,101 @@
+package org.apache.wicket.atmosphere;
+
+import java.nio.charset.Charset;
+import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
+
+import javax.servlet.http.Cookie;
+
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.util.time.Time;
+
+public class PushWebRequest extends WebRequest
+{
+ private WebRequest wrappedRequest;
+
+ private PageKey pageKey;
+
+ private Collection<EventSubscription> subscriptions;
+
+ private Object event;
+
+ public PushWebRequest(WebRequest wrappedRequest, PageKey pageKey,
+ Collection<EventSubscription> subscriptions, Object event)
+ {
+ this.wrappedRequest = wrappedRequest;
+ this.pageKey = pageKey;
+ this.subscriptions = subscriptions;
+ this.event = event;
+ }
+
+ public PageKey getPageKey()
+ {
+ return pageKey;
+ }
+
+ public Collection<EventSubscription> getSubscriptions()
+ {
+ return subscriptions;
+ }
+
+ public Object getEvent()
+ {
+ return event;
+ }
+
+ @Override
+ public List<Cookie> getCookies()
+ {
+ return wrappedRequest.getCookies();
+ }
+
+ @Override
+ public List<String> getHeaders(String name)
+ {
+ return wrappedRequest.getHeaders(name);
+ }
+
+ @Override
+ public String getHeader(String name)
+ {
+ return wrappedRequest.getHeader(name);
+ }
+
+ @Override
+ public Time getDateHeader(String name)
+ {
+ return wrappedRequest.getDateHeader(name);
+ }
+
+ @Override
+ public Url getUrl()
+ {
+ return wrappedRequest.getUrl();
+ }
+
+ @Override
+ public Url getClientUrl()
+ {
+ return wrappedRequest.getClientUrl();
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ return wrappedRequest.getLocale();
+ }
+
+ @Override
+ public Charset getCharset()
+ {
+ return wrappedRequest.getCharset();
+ }
+
+ @Override
+ public Object getContainerRequest()
+ {
+ return wrappedRequest.getContainerRequest();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java
new file mode 100644
index 0000000..2f4db04
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java
@@ -0,0 +1,141 @@
+package org.apache.wicket.atmosphere;
+
+import javax.servlet.http.Cookie;
+
+import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.util.string.AppendingStringBuffer;
+import org.apache.wicket.util.time.Time;
+
+public class StringWebResponse extends WebResponse
+{
+ protected final AppendingStringBuffer out;
+
+ public StringWebResponse()
+ {
+ out = new AppendingStringBuffer(128);
+ }
+
+ @Override
+ public void addCookie(Cookie cookie)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void clearCookie(Cookie cookie)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setHeader(String name, String value)
+ {
+ }
+
+ @Override
+ public void addHeader(String name, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setDateHeader(String name, Time date)
+ {
+ }
+
+ @Override
+ public void setContentLength(long length)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setContentType(String mimeType)
+ {
+ }
+
+ @Override
+ public void setStatus(int sc)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void sendError(int sc, String msg)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String encodeRedirectURL(CharSequence url)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void sendRedirect(String url)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void write(byte[] array)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void write(byte[] array, int offset, int length)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String encodeURL(CharSequence url)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Object getContainerResponse()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isRedirect()
+ {
+ return false;
+ }
+
+ @Override
+ public void reset()
+ {
+ out.clear();
+ }
+
+ @Override
+ public void flush()
+ {
+ }
+
+ @Override
+ public void write(CharSequence sequence)
+ {
+ out.append(sequence);
+ }
+
+ /**
+ * @return The internal buffer directly as a {@link CharSequence}
+ */
+ public CharSequence getBuffer()
+ {
+ return out;
+ }
+
+ @Override
+ public String toString()
+ {
+ return out.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/33b12c0f/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
----------------------------------------------------------------------
diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
new file mode 100644
index 0000000..35bbea6
--- /dev/null
+++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
@@ -0,0 +1,15 @@
+package org.apache.wicket.atmosphere;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.google.common.base.Predicate;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Subscribe
+{
+ Class< ? extends Predicate< ? >> filter() default NoFilterPredicate.class;
+}