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;
+}