diff --git a/broker/appengine/.externalToolBuilders/com.google.appengine.eclipse.core.projectValidator.launch b/broker/appengine/.externalToolBuilders/com.google.appengine.eclipse.core.projectValidator.launch
deleted file mode 100644
index 3a3b1b194..000000000
--- a/broker/appengine/.externalToolBuilders/com.google.appengine.eclipse.core.projectValidator.launch
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/broker/appengine/.externalToolBuilders/com.google.gdt.eclipse.core.webAppProjectValidator.launch b/broker/appengine/.externalToolBuilders/com.google.gdt.eclipse.core.webAppProjectValidator.launch
deleted file mode 100644
index eb4252719..000000000
--- a/broker/appengine/.externalToolBuilders/com.google.gdt.eclipse.core.webAppProjectValidator.launch
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/broker/appengine/.settings/com.google.appengine.eclipse.core.prefs b/broker/appengine/.settings/com.google.appengine.eclipse.core.prefs
deleted file mode 100644
index 03841005e..000000000
--- a/broker/appengine/.settings/com.google.appengine.eclipse.core.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Aug 03 15:54:32 PDT 2010
-eclipse.preferences.version=1
-validationExclusions=src/com/google/refine/appengine/*ClientConnection*.java
diff --git a/broker/appengine/.settings/com.google.gdt.eclipse.core.prefs b/broker/appengine/.settings/com.google.gdt.eclipse.core.prefs
deleted file mode 100644
index a060470b7..000000000
--- a/broker/appengine/.settings/com.google.gdt.eclipse.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-#Wed May 26 15:11:38 PDT 2010
-eclipse.preferences.version=1
-jarsExcludedFromWebInfLib=
-warSrcDir=
-warSrcDirIsOutput=true
diff --git a/broker/appengine/.settings/org.eclipse.jdt.core.prefs b/broker/appengine/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 4946c81bb..000000000
--- a/broker/appengine/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,280 +0,0 @@
-#Tue Aug 02 19:35:05 EDT 2011
-eclipse.preferences.version=1
-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.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=33
-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=1
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=1
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=8
-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=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.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=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-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=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/broker/appengine/.settings/org.eclipse.jdt.ui.prefs b/broker/appengine/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index b43532a49..000000000
--- a/broker/appengine/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Mon Sep 27 15:02:14 PDT 2010
-eclipse.preferences.version=1
-formatter_profile=_OpenRefine
-formatter_settings_version=11
diff --git a/broker/appengine/WEB-INF/appengine-web.xml b/broker/appengine/WEB-INF/appengine-web.xml
deleted file mode 100644
index 818840528..000000000
--- a/broker/appengine/WEB-INF/appengine-web.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- $APPID
- $VERSION
-
-
-
-
-
\ No newline at end of file
diff --git a/broker/appengine/WEB-INF/cron.xml b/broker/appengine/WEB-INF/cron.xml
deleted file mode 100644
index cabccce61..000000000
--- a/broker/appengine/WEB-INF/cron.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- /expire_locks
- every 5 seconds synchronized
-
-
\ No newline at end of file
diff --git a/broker/appengine/WEB-INF/jdoconfig.xml b/broker/appengine/WEB-INF/jdoconfig.xml
deleted file mode 100644
index f4d0e1834..000000000
--- a/broker/appengine/WEB-INF/jdoconfig.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/broker/appengine/WEB-INF/lib/slf4j-jdk14-1.5.6.jar b/broker/appengine/WEB-INF/lib/slf4j-jdk14-1.5.6.jar
deleted file mode 100644
index 1ce0a28e7..000000000
Binary files a/broker/appengine/WEB-INF/lib/slf4j-jdk14-1.5.6.jar and /dev/null differ
diff --git a/broker/appengine/WEB-INF/logging.properties b/broker/appengine/WEB-INF/logging.properties
deleted file mode 100644
index 7714de9fe..000000000
--- a/broker/appengine/WEB-INF/logging.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-# A default java.util.logging configuration.
-# (All App Engine logging is through java.util.logging by default).
-#
-# To use this configuration, copy it into your application's WEB-INF
-# folder and add the following to your appengine-web.xml:
-#
-#
-#
-#
-#
-
-# Set the default logging level for all loggers
-.level = WARN
diff --git a/broker/appengine/module/MOD-INF/module.properties b/broker/appengine/module/MOD-INF/module.properties
deleted file mode 100644
index 26230ac34..000000000
--- a/broker/appengine/module/MOD-INF/module.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-name = broker
-description = Google App Engine implementation of Refine Broker
-module-impl = com.google.refine.broker.AppEngineRefineBrokerImpl
-templating = false
diff --git a/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnection.java b/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnection.java
deleted file mode 100644
index 5d69c0167..000000000
--- a/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnection.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-package com.google.refine.appengine;
-
-import static com.google.appengine.api.urlfetch.FetchOptions.Builder.allowTruncate;
-
-import java.io.ByteArrayOutputStream;
-import java.net.InetAddress;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
-import javax.net.ssl.SSLSession;
-
-import org.apache.http.Header;
-import org.apache.http.HttpConnectionMetrics;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.conn.ManagedClientConnection;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-import com.google.appengine.api.urlfetch.HTTPHeader;
-import com.google.appengine.api.urlfetch.HTTPMethod;
-import com.google.appengine.api.urlfetch.HTTPRequest;
-import com.google.appengine.api.urlfetch.HTTPResponse;
-import com.google.appengine.api.urlfetch.URLFetchService;
-import com.google.appengine.api.urlfetch.URLFetchServiceFactory;
-
-class AppEngineClientConnection implements ManagedClientConnection {
- // Managed is the composition of ConnectionReleaseTrigger,
- // HttpClientConnection, HttpConnection, HttpInetConnection
-
- private HttpRoute _route;
- private Object _state;
- private boolean _reuseable;
-
- public AppEngineClientConnection(HttpRoute route, Object state) {
- _route = route;
- _state = state;
- }
-
- // ManagedClientConnection methods
-
- public HttpRoute getRoute() {
- return _route;
- }
-
- public Object getState() {
- return _state;
- }
-
- public SSLSession getSSLSession() {
- return null;
- }
-
- public boolean isSecure() {
- // XXX maybe parse the url to see if it's https?
- return false;
- }
-
- public boolean isMarkedReusable() {
- return _reuseable;
- }
-
- public void markReusable() {
- _reuseable = true;
- }
-
- public void layerProtocol(HttpContext context, HttpParams params) {
- return;
- }
-
- public void open(HttpRoute route, HttpContext context, HttpParams params) {
- return;
- }
-
- public void setIdleDuration(long duration, TimeUnit unit) {
- return;
- }
-
- public void setState(Object state) {
- _state = state;
- }
-
- public void tunnelProxy(HttpHost next, boolean secure, HttpParams params) {
- return;
- }
-
- public void tunnelTarget(boolean secure, HttpParams params) {
- return;
- }
-
- public void unmarkReusable() {
- _reuseable = false;
- }
-
-
- // ConnectionReleaseTrigger methods
-
- public void releaseConnection() {
- return;
- }
-
- public void abortConnection() {
- return;
- }
-
- // HttpClientConnection methods
-
- private HTTPRequest _appengine_hrequest;
- private HTTPResponse _appengine_hresponse;
-
- public void flush() {
- return;
- }
-
- public boolean isResponseAvailable(int timeout) {
- // XXX possibly use Async fetcher
- return true;
- }
-
- public void receiveResponseEntity(org.apache.http.HttpResponse apache_response) {
- byte[] data = _appengine_hresponse.getContent();
-
- if (data != null) {
- apache_response.setEntity(new ByteArrayEntity(data));
- }
- }
-
- public HttpResponse receiveResponseHeader() {
- URLFetchService ufs = URLFetchServiceFactory.getURLFetchService();
- try {
- _appengine_hresponse = ufs.fetch(_appengine_hrequest);
- } catch (java.io.IOException e) {
- throw new RuntimeException(e);
- }
-
- org.apache.http.HttpResponse apache_response =
- new BasicHttpResponse(new ProtocolVersion("HTTP", 1, 0),
- _appengine_hresponse.getResponseCode(),
- null);
-
- for (HTTPHeader h : _appengine_hresponse.getHeaders()) {
- apache_response.addHeader(h.getName(), h.getValue());
- }
-
- return apache_response;
- }
-
- public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest request) {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- org.apache.http.HttpEntity ent = request.getEntity();
- if (ent != null) {
- try {
- ent.writeTo(os);
- } catch (java.io.IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- _appengine_hrequest.setPayload(os.toByteArray());
- }
-
- public void sendRequestHeader(org.apache.http.HttpRequest apache_request) {
- URL request_url;
-
- HttpHost host = _route.getTargetHost();
-
- String protocol = host.getSchemeName();
- String addr = host.getHostName();
- int port = host.getPort();
-
- String path = apache_request.getRequestLine().getUri();
-
- try {
- request_url = new URL(protocol, addr, port, path);
- } catch (java.net.MalformedURLException e) {
- throw new RuntimeException(e);
- }
-
- HTTPMethod method = HTTPMethod.valueOf(apache_request.getRequestLine().getMethod());
- _appengine_hrequest = new HTTPRequest(request_url, method, allowTruncate()
- .doNotFollowRedirects());
-
- Header[] apache_headers = apache_request.getAllHeaders();
- for (int i = 0; i < apache_headers.length; i++) {
- Header h = apache_headers[i];
- _appengine_hrequest
- .setHeader(new HTTPHeader(h.getName(), h.getValue()));
- }
- }
-
- // HttpConnection methods
-
- public void close() {
- return;
- }
-
- public HttpConnectionMetrics getMetrics() {
- return null;
- }
-
- public int getSocketTimeout() {
- return -1;
- }
-
- public boolean isOpen() {
- return true;
- }
-
- public boolean isStale() {
- return false;
- }
-
- public void setSocketTimeout(int timeout) {
- return;
- }
-
- public void shutdown() {
- return;
- }
-
- // HttpInetConnection methods
-
- public InetAddress getLocalAddress() {
- return null;
- }
-
- public int getLocalPort() {
- return -1;
- }
-
- public InetAddress getRemoteAddress() {
- return null;
- }
-
- public int getRemotePort() {
- return -1;
- }
-}
\ No newline at end of file
diff --git a/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnectionManager.java b/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnectionManager.java
deleted file mode 100644
index 11ad27029..000000000
--- a/broker/appengine/src/com/google/refine/appengine/AppEngineClientConnectionManager.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-package com.google.refine.appengine;
-
-import java.net.InetAddress;
-import java.net.Socket;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.ClientConnectionRequest;
-import org.apache.http.conn.ManagedClientConnection;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.SocketFactory;
-import org.apache.http.params.HttpParams;
-
-public class AppEngineClientConnectionManager implements ClientConnectionManager {
-
- private SchemeRegistry schemes;
-
- class NoopSocketFactory implements SocketFactory {
- public Socket connectSocket(Socket sock, String host, int port, InetAddress addr, int lport, HttpParams params) {
- return null;
- }
-
- public Socket createSocket() {
- return null;
- }
-
- public boolean isSecure(Socket sock) {
- return false;
- }
- }
-
- public AppEngineClientConnectionManager() {
- SocketFactory noop_sf = new NoopSocketFactory();
- schemes = new SchemeRegistry();
- schemes.register(new Scheme("http", noop_sf, 80));
- schemes.register(new Scheme("https", noop_sf, 443));
- }
-
- public void closeExpiredConnections() {
- return;
- }
-
- public void closeIdleConnections(long idletime, TimeUnit tunit) {
- return;
- }
-
- public ManagedClientConnection getConnection(HttpRoute route, Object state) {
- return new AppEngineClientConnection(route, state);
- }
-
- public SchemeRegistry getSchemeRegistry() {
- return schemes;
- }
-
- public void releaseConnection(ManagedClientConnection conn, long valid, TimeUnit tuint) {
- return;
- }
-
- public ClientConnectionRequest requestConnection(final HttpRoute route, final Object state) {
- return new ClientConnectionRequest() {
- public void abortRequest() {
- return;
- }
-
- public ManagedClientConnection getConnection(long idletime, TimeUnit tunit) {
- return AppEngineClientConnectionManager.this.getConnection(route, state);
- }
- };
- }
-
- public void shutdown() {
- return;
- }
-}
diff --git a/broker/appengine/src/com/google/refine/broker/AppEngineRefineBrokerImpl.java b/broker/appengine/src/com/google/refine/broker/AppEngineRefineBrokerImpl.java
deleted file mode 100644
index 79e1e3802..000000000
--- a/broker/appengine/src/com/google/refine/broker/AppEngineRefineBrokerImpl.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-package com.google.refine.broker;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jdo.Extent;
-import javax.jdo.JDOHelper;
-import javax.jdo.PersistenceManager;
-import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.Transaction;
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.PersistenceCapable;
-import javax.jdo.annotations.Persistent;
-import javax.jdo.annotations.PrimaryKey;
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.JSONWriter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.appengine.api.datastore.Text;
-import com.google.refine.appengine.AppEngineClientConnectionManager;
-import com.google.refine.broker.RefineBroker;
-
-public class AppEngineRefineBrokerImpl extends RefineBroker {
-
- protected static final Logger logger = LoggerFactory.getLogger("refine.broker.appengine");
-
- PersistenceManagerFactory pmfInstance;
-
- @Override
- public void init(ServletConfig config) throws Exception {
- super.init(config);
-
- pmfInstance = JDOHelper.getPersistenceManagerFactory("transactional");
- }
-
- @Override
- public void destroy() throws Exception {
- }
-
- // ---------------------------------------------------------------------------------
-
- protected HttpClient getHttpClient() {
- ClientConnectionManager cm = new AppEngineClientConnectionManager();
- return new DefaultHttpClient(cm, null);
- }
-
- // ---------------------------------------------------------------------------------
-
- protected void expire(HttpServletResponse response) throws Exception {
- // TODO: implement
- }
-
- protected void startProject(HttpServletResponse response, String pid, String uid, String lock, byte[] data, String metadata, List transformations) throws Exception {
- // TODO: implement
- }
-
- protected void expireLocks(HttpServletResponse response) throws Exception {
-
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- Extent extent = pm.getExtent(Lock.class, false);
-
- try {
- for (Lock lock : extent) {
- if (lock.timestamp + LOCK_DURATION < System.currentTimeMillis()) {
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
- pm.deletePersistent(lock);
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- }
- }
- }
- } finally {
- extent.closeAll();
- }
-
- respond(response, OK);
-
- } finally {
- pm.close();
- }
- }
-
- protected void getState(HttpServletResponse response, String pid, String uid, int rev) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- // TODO: implement
- respond(response, lockToJSON(getLock(pm,pid)));
- } finally {
- pm.close();
- }
- }
-
- protected void obtainLock(HttpServletResponse response, String pid, String uid, int locktype, String lockvalue) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- // TODO: implement
-
- try {
- Lock lock = getLock(pm, pid);
- if (lock == null) {
- Transaction tx = pm.currentTransaction();
-
- try {
- tx.begin();
- lock = new Lock(Long.toHexString(tx.hashCode()), pid, uid);
- pm.makePersistent(lock);
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- }
- }
-
- respond(response, lockToJSON(lock));
-
- } finally {
- pm.close();
- }
- }
-
- protected void releaseLock(HttpServletResponse response, String pid, String uid, String lid) throws Exception {
-
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- Lock lock = getLock(pm, pid);
- if (lock != null) {
- if (!lock.id.equals(lid)) {
- throw new RuntimeException("Lock id doesn't match, can't release the lock");
- }
- if (!lock.uid.equals(uid)) {
- throw new RuntimeException("User id doesn't match the lock owner, can't release the lock");
- }
-
- Transaction tx = pm.currentTransaction();
-
- try {
- tx.begin();
- pm.deletePersistent(lock);
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- }
- }
-
- respond(response, OK);
-
- } finally {
- pm.close();
- }
- }
-
- // ----------------------------------------------------------------------------------------------------
-
- protected void startProject(HttpServletResponse response, String pid, String uid, String lid, String data) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- checkLock(pm, pid, uid, lid);
-
- Project project = getProject(pm, pid);
-
- if (project != null) {
- throw new RuntimeException("Project '" + pid + "' already exists");
- }
-
- Transaction tx = pm.currentTransaction();
-
- try {
- tx.begin();
- project = new Project(pid, data);
- pm.makePersistent(project);
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- }
-
- respond(response, OK);
- } finally {
- pm.close();
- }
- }
-
- protected void addTransformations(HttpServletResponse response, String pid, String uid, String lid, List transformations) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- checkLock(pm, pid, uid, lid);
-
- Project project = getProject(pm, pid);
-
- if (project == null) {
- throw new RuntimeException("Project '" + pid + "' not found");
- }
-
- Transaction tx = pm.currentTransaction();
-
- try {
- for (String s : transformations) {
- project.transformations.add(new Text(s));
- }
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- }
-
- respond(response, OK);
- } finally {
- pm.close();
- }
- }
-
- // ---------------------------------------------------------------------------------
-
- protected void openProject(HttpServletResponse response, String pid) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- Project project = getProject(pm, pid);
-
- Writer w = response.getWriter();
- JSONWriter writer = new JSONWriter(w);
- writer.object();
- writer.key("data"); writer.value(project.data.toString());
- writer.key("transformations");
- writer.array();
- for (Text s : project.transformations) {
- writer.value(s.toString());
- }
- writer.endArray();
- writer.endObject();
- w.flush();
- w.close();
- } finally {
- pm.close();
- }
- }
-
- protected void getHistory(HttpServletResponse response, String pid, int tindex) throws Exception {
- PersistenceManager pm = pmfInstance.getPersistenceManager();
-
- try {
- Project project = getProject(pm, pid);
-
- Writer w = response.getWriter();
- JSONWriter writer = new JSONWriter(w);
- writer.object();
- writer.key("transformations");
- writer.array();
- int size = project.transformations.size();
- for (int i = tindex; i < size; i++) {
- writer.value(project.transformations.get(i).toString());
- }
- writer.endArray();
- writer.endObject();
- w.flush();
- w.close();
- } finally {
- pm.close();
- }
- }
-
- // ---------------------------------------------------------------------------------
-
- Project getProject(PersistenceManager pm, String pid) {
- Project project = pm.getObjectById(Project.class, pid);
- if (project == null) {
- throw new RuntimeException("Project '" + pid + "' is not managed by this broker");
- }
- return project;
- }
-
- @PersistenceCapable
- static class Project {
-
- @PrimaryKey
- @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
- String pid;
-
- @Persistent
- List transformations = new ArrayList();
-
- @Persistent
- Text data;
-
- Project(String pid, String data) {
- this.pid = pid;
- this.data = new Text(data);
- }
- }
-
- // ---------------------------------------------------------------------------------
-
- Lock getLock(PersistenceManager pm, String pid) {
- return pm.getObjectById(Lock.class, pid);
- }
-
- void checkLock(PersistenceManager pm, String pid, String uid, String lid) {
- Lock lock = getLock(pm, pid);
-
- if (lock == null) {
- throw new RuntimeException("No lock was found with the given Lock id '" + lid + "', you have to have a valid lock on a project in order to start it");
- }
-
- if (!lock.pid.equals(pid)) {
- throw new RuntimeException("Lock '" + lid + "' is for another project: " + pid);
- }
-
- if (!lock.uid.equals(uid)) {
- throw new RuntimeException("Lock '" + lid + "' is owned by another user: " + uid);
- }
- }
-
- JSONObject lockToJSON(Lock lock) throws JSONException {
- JSONObject o = new JSONObject();
- if (lock != null) {
- o.put("lock_id", lock.id);
- o.put("project_id", lock.pid);
- o.put("user_id", lock.uid);
- o.put("timestamp", lock.timestamp);
- }
- return o;
- }
-
- @PersistenceCapable
- static class Lock {
-
- @Persistent
- String id;
-
- @PrimaryKey
- @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
- String pid;
-
- @Persistent
- String uid;
-
- @Persistent
- long timestamp;
-
- Lock(String id, String pid, String uid) {
- this.id = id;
- this.pid = pid;
- this.uid = uid;
- this.timestamp = System.currentTimeMillis();
- }
- }
-
-}
diff --git a/broker/core/.settings/org.eclipse.jdt.core.prefs b/broker/core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 76f5cd98a..000000000
--- a/broker/core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,280 +0,0 @@
-#Thu Aug 11 15:13:10 EDT 2011
-eclipse.preferences.version=1
-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.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=33
-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=1
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=1
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=8
-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=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.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=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-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=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/broker/core/.settings/org.eclipse.jdt.ui.prefs b/broker/core/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 0c9f02d0d..000000000
--- a/broker/core/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Mon Sep 27 15:02:27 PDT 2010
-eclipse.preferences.version=1
-formatter_profile=_OpenRefine
-formatter_settings_version=11
diff --git a/broker/core/IDEs/eclipse/README.txt b/broker/core/IDEs/eclipse/README.txt
deleted file mode 100644
index c72d6e3bf..000000000
--- a/broker/core/IDEs/eclipse/README.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
- OpenRefine Helpers for Eclipse
- ------------------------------
-
-
- This file contains Eclipse-specific help files that can get simplify your life
- developing OpenRefine with Eclipse (http://www.eclipse.org/).
-
-
- Launch Files (*.launch)
- -----------------------
-
- These are files that help you running OpenRefine directly from Eclipse without having to execute
- the shell scripts.
-
- To run, right click on the files directly from Eclipse, then do "Run As -> ".
-
- NOTE: you have to install the TestNG Eclipse Plugin for the above to work. For more info on how
- to install this plugin, see http://testng.org/doc/eclipse.html
-
-
- - o -
-
-
- Thank you for your interest.
-
-
- The OpenRefine Development Team
- http://github.com/OpenRefine/OpenRefine
-
\ No newline at end of file
diff --git a/broker/core/IDEs/eclipse/RefineBrokerTests.launch b/broker/core/IDEs/eclipse/RefineBrokerTests.launch
deleted file mode 100644
index 2d43e73a3..000000000
--- a/broker/core/IDEs/eclipse/RefineBrokerTests.launch
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/broker/core/WEB-INF/butterfly.properties b/broker/core/WEB-INF/butterfly.properties
deleted file mode 100644
index 89b8d41b0..000000000
--- a/broker/core/WEB-INF/butterfly.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Butterfly Configuration
-#
-# NOTE: properties passed to the JVM using '-Dkey=value' from the command line
-# override the settings in this file.
-
-# indicates the URL path where butterfly is available in the proxy URL space
-# as there is no way of knowing otherwise as this information is not
-# transferred thru the HTTP protocol or otherwise (different story if
-# the appserver is connected thru a different protocol such as AJP)
-
-butterfly.url = /
-
-# ---------- Miscellaneous ----------
-
-#butterfly.locale.language = en
-#butterfly.locale.country = US
-#butterfly.timeZone = GMT+09:00
-
-# ---------- Module ------
-
-butterfly.modules.path = ./
-
-butterfly.modules.wirings = WEB-INF/modules.properties
-
-# ---------- Clustering ----
-
-#butterfly.routing.cookie.maxage = -1
-
diff --git a/broker/core/WEB-INF/modules.properties b/broker/core/WEB-INF/modules.properties
deleted file mode 100644
index 0e3c497e5..000000000
--- a/broker/core/WEB-INF/modules.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Butterfly Modules Configuration
-#
-
-broker = /
diff --git a/broker/core/WEB-INF/web.xml b/broker/core/WEB-INF/web.xml
deleted file mode 100644
index 40b1a547f..000000000
--- a/broker/core/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
- refine-broker
- edu.mit.simile.butterfly.Butterfly
-
-
-
- refine-broker
- /*
-
-
-
diff --git a/broker/core/licenses/je.license.txt b/broker/core/licenses/je.license.txt
deleted file mode 100644
index 2d35190c0..000000000
--- a/broker/core/licenses/je.license.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-/*
- * Copyright (c) 2002-2010 Oracle. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Redistributions in any form must be accompanied by information on
- * how to obtain complete source code for the Oracle Berkeley DB
- * Java Edition software and any accompanying software that uses the
- * Oracle Berkeley DB Java Edition software. The source code must
- * either be included in the distribution or be available for no
- * more than the cost of distribution plus a nominal fee, and must be
- * freely redistributable under reasonable conditions. For an
- * executable file, complete source code means the source code for all
- * modules it contains. It does not include source code for modules or
- * files that typically accompany the major components of the operating
- * system on which the executable file runs.
- *
- * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
- * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
diff --git a/broker/core/module/MOD-INF/lib-src/bdb-je-4.0.103-sources.jar b/broker/core/module/MOD-INF/lib-src/bdb-je-4.0.103-sources.jar
deleted file mode 100644
index b031a8d0e..000000000
Binary files a/broker/core/module/MOD-INF/lib-src/bdb-je-4.0.103-sources.jar and /dev/null differ
diff --git a/broker/core/module/MOD-INF/lib/bdb-je-4.0.103.jar b/broker/core/module/MOD-INF/lib/bdb-je-4.0.103.jar
deleted file mode 100644
index a821080b8..000000000
Binary files a/broker/core/module/MOD-INF/lib/bdb-je-4.0.103.jar and /dev/null differ
diff --git a/broker/core/module/MOD-INF/module.properties b/broker/core/module/MOD-INF/module.properties
deleted file mode 100644
index d6b2fe052..000000000
--- a/broker/core/module/MOD-INF/module.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-name = broker
-description = Local Refine Broker
-module-impl = com.google.refine.broker.RefineBrokerImpl
-templating = false
diff --git a/broker/core/src/com/google/refine/broker/RefineBroker.java b/broker/core/src/com/google/refine/broker/RefineBroker.java
deleted file mode 100644
index ad89d5e9b..000000000
--- a/broker/core/src/com/google/refine/broker/RefineBroker.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-
-package com.google.refine.broker;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.BasicResponseHandler;
-import org.apache.http.message.BasicNameValuePair;
-import org.apache.http.params.CoreProtocolPNames;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import edu.mit.simile.butterfly.ButterflyModuleImpl;
-
-/**
- * This class contains all the code shared by various implementations of a OpenRefine Broker.
- *
- * A broker is a server used by multiple OpenRefine installations to enable collaborative
- * development over the same project.
- *
- * Broker implementations differ in how they store their state but all of them are required
- * to extend this abstract class and implement the services that are called via HTTP.
- *
- */
-public abstract class RefineBroker extends ButterflyModuleImpl {
-
- static final public String GET_STATE = "get_state";
- static final public String EXPIRE = "expire";
- static final public String OBTAIN_LOCK = "obtain_lock";
- static final public String RELEASE_LOCK = "release_lock";
- static final public String TRANSFORM = "transform";
- static final public String START = "start";
- static final public String OPEN = "open";
-
- static final public int ALL = 0;
- static final public int COL = 1;
- static final public int CELL = 2;
-
- static final protected Logger logger = LoggerFactory.getLogger("refine.broker");
-
- // TODO: This API is deprecated.
- static final protected String USER_INFO_URL = "http://api.freebase.com/api/service/user_info";
- static final protected String DELEGATED_OAUTH_HEADER = "X-Freebase-Credentials";
- static final protected String OAUTH_HEADER = "Authorization";
-
- static protected String OK;
-
- static {
- try {
- JSONObject o = new JSONObject();
- o.put("status","ok");
- OK = o.toString();
- } catch (JSONException e) {
- // not going to happen;
- }
- }
-
- static public final long LOCK_DURATION = 60 * 1000; // 1 minute
- static public final long USER_DURATION = 5 * 60 * 1000; // 1 minute
- static public final long LOCK_EXPIRATION_CHECK_DELAY = 5 * 1000; // 5 seconds
-
- protected HttpClient httpclient;
-
- protected boolean developmentMode;
-
- @Override
- public void init(ServletConfig config) throws Exception {
- super.init(config);
- httpclient = getHttpClient();
- developmentMode = Boolean.parseBoolean(config.getInitParameter("refine.development"));
- if (developmentMode) logger.warn("Running in development mode");
- }
-
- @Override
- public void destroy() throws Exception {
- httpclient.getConnectionManager().shutdown();
- }
-
- @Override
- public boolean process(String path, HttpServletRequest request, HttpServletResponse response) throws Exception {
- if (logger.isDebugEnabled()) {
- logger.debug("> process '{}'", path);
- } else {
- logger.info("process '{}'", path);
- }
-
- try {
-
- if (GET_STATE.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- getState(response, getParameter(request, "pid"), getUserId(request), getInteger(request, "rev"));
- } else if (EXPIRE.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- expire(response);
- } else if (OBTAIN_LOCK.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- obtainLock(response, getParameter(request, "pid"), getUserId(request), getInteger(request, "locktype"), getParameter(request, "lockvalue"));
- } else if (RELEASE_LOCK.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- releaseLock(response, getParameter(request, "pid"), getUserId(request), getParameter(request, "lock"));
- } else if (TRANSFORM.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- addTransformations(response, getParameter(request, "pid"), getUserId(request), getParameter(request, "lock"), getList(request, "transformations"));
- } else if (START.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- startProject(response, getParameter(request, "pid"), getUserId(request), getParameter(request, "lock"), getData(request), getParameter(request, "metadata"), getList(request, "transformations"));
- } else if (OPEN.equals(path)) {
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type", "application/json");
- openProject(response, getParameter(request, "pid"));
- } else {
- boolean value = super.process(path, request, response);
- if (logger.isDebugEnabled()) logger.debug("< process '{}'", path);
- return value;
- }
-
- } catch (RuntimeException e) {
- logger.error("runtime error", e.getMessage());
- respondError(response, e.getMessage());
- } catch (Exception e) {
- logger.error("internal error", e);
- respondException(response, e);
- }
-
- if (logger.isDebugEnabled()) logger.debug("< process '{}'", path);
-
- return true;
- }
-
- // ----------------------------------------------------------------------------------------
-
- protected abstract HttpClient getHttpClient();
-
- protected abstract void expire(HttpServletResponse response) throws Exception;
-
- protected abstract void getState(HttpServletResponse response, String pid, String uid, int rev) throws Exception;
-
- protected abstract void obtainLock(HttpServletResponse response, String pid, String uid, int locktype, String lockvalue) throws Exception;
-
- protected abstract void releaseLock(HttpServletResponse response, String pid, String uid, String lock) throws Exception;
-
- protected abstract void startProject(HttpServletResponse response, String pid, String uid, String lock, byte[] data, String metadata, List transformations) throws Exception;
-
- protected abstract void addTransformations(HttpServletResponse response, String pid, String uid, String lock, List transformations) throws Exception;
-
- protected abstract void openProject(HttpServletResponse response, String pid) throws Exception;
-
- // ----------------------------------------------------------------------------------------
-
- @SuppressWarnings("unchecked")
- protected String getUserId(HttpServletRequest request) throws Exception {
-
- // This is useful for testing
- if (developmentMode) {
- return getParameter(request, "uid");
- }
-
- String oauth = request.getHeader(DELEGATED_OAUTH_HEADER);
- if (oauth == null) {
- throw new RuntimeException("The request needs to contain the '" + DELEGATED_OAUTH_HEADER + "' header set to obtain user identity via Freebase.");
- }
-
- List formparams = new ArrayList();
- Map params = (Map) request.getParameterMap();
- for (Entry e : params.entrySet()) {
- formparams.add(new BasicNameValuePair((String) e.getKey(), (String) e.getValue()));
- }
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
-
- HttpPost httpRequest = new HttpPost(USER_INFO_URL);
- httpRequest.setHeader(OAUTH_HEADER, oauth);
- httpRequest.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "OpenRefine Broker");
- httpRequest.setEntity(entity);
-
- ResponseHandler responseHandler = new BasicResponseHandler();
- String responseBody = httpclient.execute(httpRequest, responseHandler);
- JSONObject o = new JSONObject(responseBody);
-
- return o.getString("username");
- }
-
- // ----------------------------------------------------------------------------------------
-
- static protected String getParameter(HttpServletRequest request, String name) throws ServletException {
- String param = request.getParameter(name);
- if (param == null) {
- throw new RuntimeException("request must come with a '" + name + "' parameter");
- }
- return param;
- }
-
- static protected List getList(HttpServletRequest request, String name) throws ServletException, JSONException {
- String param = getParameter(request, name);
- JSONArray a = new JSONArray(param);
- List result = new ArrayList(a.length());
- for (int i = 0; i < a.length(); i++) {
- result.add(a.getString(i));
- }
- return result;
- }
-
- static protected int getInteger(HttpServletRequest request, String name) throws ServletException, JSONException {
- return Integer.parseInt(getParameter(request, name));
- }
-
- static protected byte[] getData(HttpServletRequest request) throws ServletException, IOException {
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- InputStream input = request.getInputStream();
- byte[] buffer = new byte[4096];
- int count = 0;
- int n = 0;
- while (-1 != (n = input.read(buffer))) {
- output.write(buffer, 0, n);
- count += n;
- }
- return output.toByteArray();
-
- }
-
- static protected void respondError(HttpServletResponse response, String error) throws IOException, ServletException {
-
- if (response == null) {
- throw new ServletException("Response object can't be null");
- }
-
- try {
- JSONObject o = new JSONObject();
- o.put("status", "error");
- o.put("message", error);
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- respond(response, o.toString());
- } catch (JSONException e) {
- e.printStackTrace(response.getWriter());
- }
- }
-
- static protected void respondException(HttpServletResponse response, Exception e) throws IOException, ServletException {
-
- if (response == null) {
- throw new ServletException("Response object can't be null");
- }
-
- try {
- JSONObject o = new JSONObject();
- o.put("status", "error");
- o.put("message", e.getMessage());
-
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- e.printStackTrace(pw);
- pw.flush();
- sw.flush();
-
- o.put("stack", sw.toString());
-
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- respond(response, o.toString());
- } catch (JSONException e1) {
- e.printStackTrace(response.getWriter());
- }
- }
-
- static protected void respond(HttpServletResponse response, JSONObject content) throws IOException, ServletException {
- if (content == null) {
- throw new ServletException("Content object can't be null");
- }
-
- respond(response, content.toString());
- }
-
- static protected void respond(HttpServletResponse response, String content) throws IOException, ServletException {
- if (response == null) {
- throw new ServletException("Response object can't be null");
- }
-
- Writer w = response.getWriter();
- if (w != null) {
- w.write(content);
- w.flush();
- w.close();
- } else {
- throw new ServletException("response returned a null writer");
- }
- }
-}
diff --git a/broker/core/src/com/google/refine/broker/RefineBrokerImpl.java b/broker/core/src/com/google/refine/broker/RefineBrokerImpl.java
deleted file mode 100644
index 0e9491fcb..000000000
--- a/broker/core/src/com/google/refine/broker/RefineBrokerImpl.java
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-package com.google.refine.broker;
-
-import static com.sleepycat.persist.model.Relationship.MANY_TO_ONE;
-
-import java.io.File;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.http.client.HttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.JSONWriter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.sleepycat.je.Environment;
-import com.sleepycat.je.EnvironmentConfig;
-import com.sleepycat.je.Transaction;
-import com.sleepycat.persist.EntityCursor;
-import com.sleepycat.persist.EntityStore;
-import com.sleepycat.persist.PrimaryIndex;
-import com.sleepycat.persist.SecondaryIndex;
-import com.sleepycat.persist.StoreConfig;
-import com.sleepycat.persist.model.Entity;
-import com.sleepycat.persist.model.PrimaryKey;
-import com.sleepycat.persist.model.SecondaryKey;
-
-public class RefineBrokerImpl extends RefineBroker {
-
- protected static final Logger logger = LoggerFactory.getLogger("refine.broker.local");
-
- Environment env;
-
- EntityStore projectStore;
- EntityStore lockStore;
- EntityStore userStore;
-
- PrimaryIndex projectById;
- PrimaryIndex lockById;
-
- SecondaryIndex locksByProject;
-
- Timer timer;
- Expirer expirer;
-
- @Override
- public void init(ServletConfig config) throws Exception {
- logger.trace("> init");
- super.init(config);
-
- timer = new Timer();
- expirer = new Expirer();
- timer.schedule(expirer, 0, LOCK_EXPIRATION_CHECK_DELAY);
-
- String dataDir = config.getInitParameter("refine.data");
- if (dataDir == null) dataDir = "data";
- File dataPath = new File(dataDir);
- if (!dataPath.exists()) dataPath.mkdirs();
-
- EnvironmentConfig envConfig = new EnvironmentConfig();
- envConfig.setAllowCreate(true);
- envConfig.setTransactional(true);
- env = new Environment(dataPath, envConfig);
-
- StoreConfig storeConfig = new StoreConfig();
- storeConfig.setAllowCreate(true);
- storeConfig.setTransactional(true);
- projectStore = new EntityStore(env, "ProjectsStore", storeConfig);
- lockStore = new EntityStore(env, "LockStore", storeConfig);
-
- projectById = projectStore.getPrimaryIndex(String.class, Project.class);
- lockById = lockStore.getPrimaryIndex(String.class, Lock.class);
-
- locksByProject = lockStore.getSecondaryIndex(lockById, String.class, "pid");
- logger.trace("< init");
- }
-
- @Override
- public void destroy() throws Exception {
- logger.trace("> destroy");
- super.destroy();
-
- if (projectStore != null) {
- projectStore.close();
- projectById = null;
- }
-
- if (lockStore != null) {
- lockStore.close();
- lockById = null;
- }
-
- if (timer != null) {
- timer.cancel();
- timer.purge();
- timer = null;
- }
-
- if (env != null) {
- env.close();
- env = null;
- }
- logger.trace("< destroy");
- }
-
- class Expirer extends TimerTask {
- public void run() {
- if (lockById != null) {
- logger.trace("> expire");
- Transaction txn = env.beginTransaction(null, null);
- try {
- EntityCursor cursor = lockById.entities();
- try {
- for (Lock lock : cursor) {
- if (lock.timestamp + LOCK_DURATION < System.currentTimeMillis()) {
- logger.trace("Found expired lock {}", lock.id);
- try {
- releaseLock(null, lock.pid, lock.uid, lock.id);
- } catch (Exception e) {
- logger.error("Exception while expiring lock for project '" + lock.pid + "'", e);
- }
- }
- }
- } finally {
- cursor.close();
- }
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
- logger.trace("< expire");
- }
- }
- }
-
- // ---------------------------------------------------------------------------------
-
- @Override
- protected HttpClient getHttpClient() {
- return new DefaultHttpClient();
- }
-
- // ---------------------------------------------------------------------------------
-
- @Override
- protected void expire(HttpServletResponse response) throws Exception {
- expirer.run();
- respond(response, OK);
- }
-
- @Override
- protected void obtainLock(HttpServletResponse response, String pid, String uid, int locktype, String lockvalue) throws Exception {
- logger.trace("> obtain lock");
- Lock lock = null;
- Lock blocker = null;
-
- Transaction txn = env.beginTransaction(null, null);
-
- try {
-
- EntityCursor cursor = locksByProject.subIndex(pid).entities();
-
- /*
- * ALL
- * blocked -> somebody else's lock
- * reuse -> you already have an ALL lock
- * new -> else
- *
- * COL
- * blocked -> somebody else's all lock || a lock on the same col
- * reuse -> you have an ALL lock || a lock on the same col
- * new -> else
- *
- * CELL
- * blocked -> somebody else's all lock || a lock on the same col || a lock on the same cell
- * reuse -> you have a lock on the same cell
- * yes -> (you have a lock on the same cell) && (nobody else has a lock on the same cell || the same col || all)
- * new -> else
- *
- */
-
- try {
- if (locktype == ALL) {
- if (lockvalue.length() > 0) {
- throw new RuntimeException("Hmm, seems like you're calling an ALL with a specific value, are you sure you didn't want another type of lock?");
- }
-
- for (Lock l : cursor) {
- if (!l.uid.equals(uid)) {
- blocker = l;
- break;
- } else {
- if (l.type == ALL) {
- lock = l;
- break;
- }
- }
- }
- } else if (locktype == COL) {
- if (lockvalue.indexOf(',') > -1) {
- throw new RuntimeException("Hmm, seems like you're calling a COL lock with a CELL value");
- }
-
- for (Lock l : cursor) {
- if (!l.uid.equals(uid)) {
- if (l.type == ALL ||
- (l.type == COL && l.value.equals(lockvalue)) ||
- (l.type == CELL && l.value.split(",")[0].equals(lockvalue))) {
- blocker = l;
- break;
- }
- } else {
- if (l.type == ALL ||
- (l.type == COL && l.value.equals(lockvalue))) {
- lock = l;
- break;
- }
- }
- }
- } else if (locktype == CELL) {
- if (lockvalue.indexOf(',') == -1) {
- throw new RuntimeException("Hmm, seems like you're calling a CELL lock without specifying row and column: format must be 'row,column'");
- }
-
- for (Lock l : cursor) {
- if (!l.uid.equals(uid)) {
- if (l.type == ALL ||
- (l.type == COL && l.value.equals(lockvalue.split(",")[0])) ||
- (l.type == CELL && l.value.equals(lockvalue))) {
- blocker = l;
- break;
- }
- } else {
- if (l.type == ALL ||
- (l.type == COL && l.value.equals(lockvalue.split(",")[0])) ||
- (l.type == CELL && l.value.equals(lockvalue))) {
- lock = l;
- break;
- }
- }
- }
- }
- } finally {
- cursor.close();
- }
-
- if (blocker != null) {
- logger.info("found a blocking lock {}", lockToString(blocker));
- throw new RuntimeException("Can't obtain lock, it is blocked by a type '" + blocker.type + "' lock owned by '" + blocker.uid + "'");
- }
-
- if (lock == null) {
- logger.info("no comparable lock already exists, creating a new one");
- lock = new Lock(Long.toHexString(txn.getId()), pid, uid, locktype, lockvalue);
- lockById.put(txn, lock);
- txn.commit();
- }
-
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
-
- JSONObject o = lockToJSON(lock, uid);
- o.put("status", "ok");
- respond(response, o);
-
- logger.trace("< obtain lock");
- }
-
- @Override
- protected void releaseLock(HttpServletResponse response, String pid, String uid, String lid) throws Exception {
-
- Transaction txn = env.beginTransaction(null, null);
-
- try {
- Lock lock = getLock(lid, pid, uid);
- if (lock != null) {
- if (!lock.uid.equals(uid)) {
- throw new RuntimeException("User id doesn't match the lock owner, can't release the lock");
- }
- lockById.delete(lid);
- txn.commit();
- }
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
-
- if (response != null) { // this because the expiration thread can call this method without a real response
- respond(response, OK);
- }
- }
-
- // ----------------------------------------------------------------------------------------------------
-
- @Override
- protected void startProject(HttpServletResponse response, String pid, String uid, String lid, byte[] data, String metadata, List transformations) throws Exception {
-
- Transaction txn = env.beginTransaction(null, null);
-
- try {
- if (projectById.contains(pid)) {
- throw new RuntimeException("Project '" + pid + "' already exists");
- }
-
- Lock lock = getLock(lid, pid, uid);
-
- if (lock.type != ALL) {
- throw new RuntimeException("The lock you have is not enough to start a project");
- }
-
- projectById.put(txn, new Project(pid, data, metadata, transformations));
- txn.commit();
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
-
- respond(response, OK);
- }
-
- @Override
- protected void addTransformations(HttpServletResponse response, String pid, String uid, String lid, List transformations) throws Exception {
-
- Transaction txn = env.beginTransaction(null, null);
-
- try {
- Project project = getProject(pid);
-
- if (project == null) {
- throw new RuntimeException("Project '" + pid + "' not found");
- }
-
- Lock lock = getLock(lid, pid, uid);
-
- logger.info("obtained lock: {}", lockToString(lock));
-
- if (lock.type == ALL) {
- project.transformations.addAll(transformations);
- } else {
- for (String s : transformations) {
- JSONObject o = new JSONObject(s);
-
- int type = o.getInt("op_type");
- String value = o.getString("op_value");
- if (lock.type == COL) {
- if (type == COL) {
- if (value != null && value.equals(lock.value)) {
- project.transformations.add(s);
- } else {
- throw new RuntimeException("Can't apply '" + s + "': you have a lock for column '" + lock.value + "' and you're attempting to modify column '" + value + "'.");
- }
- } else if (type == CELL) {
- String column = value.split(",")[0];
- if (column != null && column.equals(lock.value)) {
- project.transformations.add(s);
- } else {
- throw new RuntimeException("Can't apply '" + s + "': you have a lock for column '" + lock.value + "' and you're attempting to modify cell '" + value + "' in another column.");
- }
- }
- } else if (lock.type == CELL) {
- if (type == COL) {
- throw new RuntimeException("Can't apply '" + s + "': you offered a lock for a single cell and you're attempting an operation for the entire column.");
- } else if (type == CELL) {
- if (value != null && value.equals(lock.value)) {
- project.transformations.add(s);
- } else {
- throw new RuntimeException("Can't apply '" + s + "': you have a lock for cell '" + lock.value + "' and you're attempting to modify cell '" + value + "'.");
- }
- }
- }
- }
- }
-
- projectById.put(txn, project);
-
- txn.commit();
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
-
- respond(response, OK);
- }
-
- // ---------------------------------------------------------------------------------
-
- @Override
- protected void openProject(HttpServletResponse response, String pid) throws Exception {
- Project project = getProject(pid);
-
- Writer w = response.getWriter();
- JSONWriter writer = new JSONWriter(w);
- writer.object();
- writer.key("status"); writer.value("ok");
- writer.key("data"); writer.value(project.data);
- writer.key("metadata"); writer.value(new JSONObject(project.metadata));
- writer.key("transformations");
- writer.array();
- for (String s : project.transformations) {
- writer.value(new JSONObject(s));
- }
- writer.endArray();
- writer.endObject();
- w.flush();
- w.close();
- }
-
- // ---------------------------------------------------------------------------------
-
- @Override
- protected void getState(HttpServletResponse response, String pid, String uid, int rev) throws Exception {
-
- Project project = getProject(pid);
-
- Writer w = response.getWriter();
- JSONWriter writer = new JSONWriter(w);
-
- writer.object();
- writer.key("status"); writer.value("ok");
- writer.key("transformations");
- writer.array();
- int size = project.transformations.size();
- for (int i = rev; i < size; i++) {
- writer.value(new JSONObject(project.transformations.get(i)));
- }
- writer.endArray();
-
- EntityCursor cursor = locksByProject.subIndex(pid).entities();
-
- try {
- writer.key("locks");
- writer.array();
- for (Lock lock : cursor) {
- writer.value(lockToJSON(lock, uid));
- }
- writer.endArray();
- writer.endObject();
-
- w.flush();
- w.close();
- } finally {
- cursor.close();
- }
- }
-
- // ---------------------------------------------------------------------------------
-
- Project getProject(String pid) {
- Project project = projectById.get(pid);
- if (project == null) {
- throw new RuntimeException("Project '" + pid + "' could not be found: are you sure is not managed by another broker?");
- }
- return project;
- }
-
- @Entity
- static class Project {
-
- @PrimaryKey
- String pid;
-
- List transformations;
-
- byte[] data;
-
- String metadata;
-
- int rev;
-
- Project(String pid, byte[] data, String metadata, List transformations) {
- this.pid = pid;
- this.data = data;
- this.metadata = metadata;
- this.transformations = (transformations != null) ? transformations : new ArrayList();
- this.rev = this.transformations.size();
- }
-
- @SuppressWarnings("unused")
- private Project() {}
- }
-
- // ---------------------------------------------------------------------------------
-
- Lock getLock(String lid, String pid, String uid) {
- Lock lock = lockById.get(lid);
- checkLock(lock, lid, pid, uid);
- return lock;
- }
-
- void checkLock(Lock lock, String lid, String pid, String uid) {
- if (lock == null) {
- throw new RuntimeException("No lock was found with the given Lock id '" + lid + "', you have to have a valid lock on a project in order to start it");
- }
-
- if (!lock.pid.equals(pid)) {
- throw new RuntimeException("Lock '" + lock.id + "' is for another project: " + lock.pid);
- }
-
- if (!lock.uid.equals(uid)) {
- throw new RuntimeException("Lock '" + lock.id + "' is owned by another user: " + lock.uid);
- }
- }
-
- Lock getLock(String pid, String uid, int locktype) {
- Lock lock = null;
- EntityCursor cursor = locksByProject.subIndex(pid).entities();
-
- try {
- for (Lock l : cursor) {
- if (uid.equals(l.uid) && (locktype == l.type)) {
- lock = l;
- break;
- }
- }
- } finally {
- cursor.close();
- }
-
- return lock;
- }
-
- JSONObject lockToJSON(Lock lock, String uid) throws JSONException {
- JSONObject o = new JSONObject();
- if (lock != null) {
- // NOTE: only the owner of the lock should get the ID,
- // otherwise others can just fake ownership of other people's locks
- if (lock.uid.equals(uid)) {
- o.put("lock", lock.id);
- }
-
- o.put("pid", lock.pid);
- o.put("uid", lock.uid);
- o.put("type", lock.type);
- o.put("value", lock.value);
- o.put("timestamp", lock.timestamp);
- }
- return o;
- }
-
- String lockToString(Lock lock) {
- return lock.id + "," + lock.pid + "," + lock.uid + "," + lock.type + "," + lock.value;
- }
-
- @Entity
- static class Lock {
-
- @PrimaryKey
- String id;
-
- @SecondaryKey(relate=MANY_TO_ONE)
- String pid;
-
- String uid;
-
- int type;
-
- String value;
-
- long timestamp;
-
- Lock(String id, String pid, String uid, int type, String value) {
- this.id = id;
- this.pid = pid;
- this.uid = uid;
- this.type = type;
- this.value = value;
- this.timestamp = System.currentTimeMillis();
- }
-
- @SuppressWarnings("unused")
- private Lock() {}
- }
-}
diff --git a/broker/core/tests/conf/tests.xml b/broker/core/tests/conf/tests.xml
deleted file mode 100644
index 22b71232f..000000000
--- a/broker/core/tests/conf/tests.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/broker/core/tests/src/com/google/refine/broker/tests/RefineBrokerTests.java b/broker/core/tests/src/com/google/refine/broker/tests/RefineBrokerTests.java
deleted file mode 100644
index be44254b2..000000000
--- a/broker/core/tests/src/com/google/refine/broker/tests/RefineBrokerTests.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
-
-Copyright 2010, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-package com.google.refine.broker.tests;
-
-import static com.google.refine.broker.RefineBroker.*;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import com.google.refine.broker.RefineBroker;
-import com.google.refine.broker.RefineBrokerImpl;
-
-public class RefineBrokerTests {
-
- Logger logger;
- File data;
-
- @BeforeSuite public void suite_init() {
- System.setProperty("log4j.configuration", "tests.log4j.properties");
- data = new File("data");
- if (!data.exists()) data.mkdirs();
- }
-
- @AfterSuite public void suite_destroy() {
- for (File f : data.listFiles()) {
- f.delete();
- }
- data.delete();
- }
-
- // ------------------------------------------------------------------------------------
-
- ServletConfig config = null;
- RefineBroker broker = null;
-
- @BeforeTest public void test_init() throws Exception {
- logger = LoggerFactory.getLogger(this.getClass());
- config = mock(ServletConfig.class);
- when(config.getInitParameter("refine.data")).thenReturn(data.getAbsolutePath());
- when(config.getInitParameter("refine.development")).thenReturn("true");
-
- broker = new RefineBrokerImpl();
- broker.init(config);
- }
-
- @AfterTest public void test_destroy() throws Exception {
- broker.destroy();
- broker = null;
- config = null;
- }
-
- // ------------------------------------------------------------------------------------
-
- HttpServletRequest request = null;
- HttpServletResponse response = null;
- StringWriter writer = null;
-
- @BeforeMethod public void setup() throws Exception {
- request = mock(HttpServletRequest.class);
- response = mock(HttpServletResponse.class);
- }
-
- @AfterMethod public void teardown() throws Exception {
- response = null;
- request = null;
- }
-
- // ------------------------------------------------------------------------------------
-
- @Test public void testLifeCycle() {
- Assert.assertTrue(true);
- }
-
- @Test public void testService() {
- try {
- success(broker, request, response, EXPIRE);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testObtainLockFailure() {
- try {
- failure(broker, request, response, OBTAIN_LOCK);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testReleaseLockFailure() {
- try {
- failure(broker, request, response, RELEASE_LOCK);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testGetStateFailure() {
- try {
- failure(broker, request, response, GET_STATE, "pid", "project1934983948", "uid", "testuser", "rev", "0");
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testBrokenAllLockFailure() {
- try {
- failure(broker, request, response, OBTAIN_LOCK, "pid", "project", "uid", "testuser", "locktype", Integer.toString(ALL), "lockvalue", "1");
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testBrokenColLockFailure() {
- try {
- failure(broker, request, response, OBTAIN_LOCK, "pid", "project", "uid", "testuser", "locktype", Integer.toString(COL), "lockvalue", "1,1");
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testBrokenCellLockFailure() {
- try {
- failure(broker, request, response, OBTAIN_LOCK, "pid", "project", "uid", "testuser", "locktype", Integer.toString(CELL), "lockvalue", "1");
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testLockSimple() {
- String project = "proj0";
- String user = "testuser";
-
- try {
- logger.info("--- obtain ALL lock on project ---");
- JSONObject result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
- assertJSON(result, "uid", "testuser");
- String lock = result.getString("lock");
-
- logger.info("--- obtain ALL lock on project ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
-
- logger.info("--- obtain COL lock on project ---");
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", "1");
- assertJSON(result, "uid", "testuser");
- lock = result.getString("lock");
-
- logger.info("--- release COL lock on project ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
-
- logger.info("--- obtain CELL lock on project ---");
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
- assertJSON(result, "uid", "testuser");
- lock = result.getString("lock");
-
- logger.info("--- release CELL lock on project ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testLocksAllBlocks() {
- String project = "proj1";
- String user = "testuser";
- String user2 = "testuser2";
-
- try {
- logger.info("--- obtain ALL lock on project ---");
- JSONObject result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
- assertJSON(result, "uid", user);
- String lock = result.getString("lock");
-
- logger.info("--- another using asking for any lock will fail ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(ALL), "lockvalue", "");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", "1");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
-
- logger.info("--- same user asking for lower capable locks will return the ALL one ---");
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", "1");
- String lock2 = result.getString("lock");
- Assert.assertEquals(lock, lock2);
-
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
- lock2 = result.getString("lock");
- Assert.assertEquals(lock, lock2);
-
- logger.info("--- release the ALL lock ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testLocksColBlocks() {
- String project = "proj2";
- String user = "testuser";
- String user2 = "testuser2";
-
- try {
- logger.info("--- obtain COL lock on project ---");
- JSONObject result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", "1");
- String lock = result.getString("lock");
-
- logger.info("--- other user must fail to obtain lock on the same COL or ALL ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(ALL), "lockvalue", "");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", "1");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
-
- logger.info("--- but succeed in getting a COL lock on another column or cell ---");
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", "2");
- String lock2 = result.getString("lock");
-
- logger.info("--- now it's our first user's turn to fail to get lock ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", "2");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(CELL), "lockvalue", "2,1");
-
- logger.info("--- release the locks ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user2, "lock", lock2);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testLocksCellBlocks() {
- String project = "proj3";
- String user = "testuser";
- String user2 = "testuser2";
-
- try {
- logger.info("--- obtain CELL lock on project ---");
- JSONObject result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
- String lock = result.getString("lock");
-
- logger.info("--- other user must fail to obtain lock on the same CELL, COL or ALL ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(ALL), "lockvalue", "");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", "1");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(CELL), "lockvalue", "1,1");
-
- logger.info("--- but succeed in getting a CELL lock on a cell in another column ---");
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(CELL), "lockvalue", "2,1");
- String lock2 = result.getString("lock");
-
- logger.info("--- now it's our first user's turn to fail to get lock ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", "2");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(CELL), "lockvalue", "2,1");
-
- logger.info("--- release the locks ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user2, "lock", lock2);
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- @Test public void testCompleteProjectLifeCycle() {
- try {
- String project = "proj4";
- String user = "testuser";
- String user2 = "testuser2";
- String data = "blah";
- String metadata = "{}";
- String transformations = "[]";
- String rev = "0";
-
- logger.info("--- obtain ALL lock on project ---");
- JSONObject result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
- assertJSON(result, "uid", user);
- String lock = result.getString("lock");
-
- logger.info("--- start project ---");
- success(broker, request, response, START, "pid", project, "uid", user, "lock", lock, "data", data, "metadata", metadata, "transformations", transformations);
-
- logger.info("--- verify project state contains lock ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", rev);
- JSONArray locks = result.getJSONArray("locks");
- Assert.assertEquals(locks.length(), 1);
- JSONObject l = locks.getJSONObject(0);
- assertJSON(l, "uid", "testuser");
- Assert.assertEquals(l.getInt("type"), ALL);
-
- logger.info("--- release ALL lock on project ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", lock);
-
- logger.info("--- verify no locks are present ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", rev);
- locks = result.getJSONArray("locks");
- Assert.assertEquals(locks.length(), 0);
-
- logger.info("--- open project and verify data was loaded correctly ---");
- result = success(broker, request, response, OPEN, "pid", project, "uid", user, "rev", rev);
- JSONArray result_data = result.getJSONArray("data");
- Assert.assertEquals(result_data.length(),data.getBytes("UTF-8").length);
-
- JSONArray tt;
- JSONObject t;
-
- logger.info("--- obtain column lock ---");
- String column = "1";
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(COL), "lockvalue", column);
- String col_lock = result.getString("lock");
-
- logger.info("--- perform column transformation ---");
- t = new JSONObject();
- t.put("op_type", COL);
- t.put("op_value", column); // operate on col 1
- t.put("value", new JSONObject());
- tt = new JSONArray();
- tt.put(t);
- result = success(broker, request, response, TRANSFORM, "pid", project, "uid", user, "lock", col_lock, "transformations", tt.toString());
-
- logger.info("--- make sure transformation was recorded properly ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "0");
- tt = result.getJSONArray("transformations");
- Assert.assertEquals(tt.length(), 1);
- t = tt.getJSONObject(0);
- assertJSON(t, "op_value", column);
-
- logger.info("--- make sure revision numbers in state management work as expected ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "1");
- tt = result.getJSONArray("transformations");
- Assert.assertEquals(tt.length(), 0);
-
- logger.info("--- perform cell transformation ---");
- String cell = "1";
- t = new JSONObject();
- t.put("op_type", CELL);
- t.put("op_value", column + "," + cell); // operate on cell at row 1 column 1
- t.put("value", new JSONObject());
- tt = new JSONArray();
- tt.put(t);
- result = success(broker, request, response, TRANSFORM, "pid", project, "uid", user, "lock", col_lock, "transformations", tt.toString());
-
- logger.info("--- make sure transformation was recorded properly ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "0");
- tt = result.getJSONArray("transformations");
- Assert.assertEquals(tt.length(), 2);
-
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "1");
- tt = result.getJSONArray("transformations");
- Assert.assertEquals(tt.length(), 1);
- t = tt.getJSONObject(0);
- assertJSON(t, "op_value", column + "," + cell);
-
- logger.info("--- make sure another user fails to acquire ALL lock ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(ALL), "lockvalue", "");
-
- logger.info("--- make sure another user fails to acquire COL lock on the same column ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", column);
-
- logger.info("--- make sure another user manages to acquire COL lock on another column ---");
- String column2 = "2";
- result = success(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user2, "locktype", Integer.toString(COL), "lockvalue", column2);
- String col_lock2 = result.getString("lock");
-
- logger.info("--- make sure that both locks are present ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "2");
- locks = result.getJSONArray("locks");
- Assert.assertEquals(locks.length(), 2);
-
- logger.info("--- make sure we can't escalate our current COL lock to an ALL lock ---");
- failure(broker, request, response, OBTAIN_LOCK, "pid", project, "uid", user, "locktype", Integer.toString(ALL), "lockvalue", "");
-
- logger.info("--- release column locks ---");
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user, "lock", col_lock);
- success(broker, request, response, RELEASE_LOCK, "pid", project, "uid", user2, "lock", col_lock2);
-
- logger.info("--- make sure the project has no locks ---");
- result = success(broker, request, response, GET_STATE, "pid", project, "uid", user, "rev", "2");
- locks = result.getJSONArray("locks");
- Assert.assertEquals(locks.length(), 0);
-
- } catch (Exception e) {
- Assert.fail();
- }
- }
-
- // ------------------------------------------------------------------------------------
-
- private void assertJSON(JSONObject o, String name, String value) throws JSONException {
- Assert.assertEquals(o.get(name), value);
- }
-
- private JSONObject success(RefineBroker broker, HttpServletRequest request, HttpServletResponse response, String service, String... params) throws Exception {
- return call(true, broker, request, response, service, params);
- }
-
- private JSONObject failure(RefineBroker broker, HttpServletRequest request, HttpServletResponse response, String service, String... params) throws Exception {
- return call(false, broker, request, response, service, params);
- }
-
- private JSONObject call(boolean successful, RefineBroker broker, HttpServletRequest request, HttpServletResponse response, String service, String... params) throws Exception {
- if (params != null) {
- for (int i = 0; i < params.length; ) {
- String name = params[i++];
- String value = params[i++];
- if ("data".equals(name)) {
- final ByteArrayInputStream inputStream = new ByteArrayInputStream(value.getBytes("UTF-8"));
- when(request.getInputStream()).thenReturn(new ServletInputStream() {
- public int read() throws IOException {
- return inputStream.read();
- }
- });
- } else {
- when(request.getParameter(name)).thenReturn(value);
- }
- }
- }
-
- StringWriter writer = new StringWriter();
- when(response.getWriter()).thenReturn(new PrintWriter(writer));
-
- broker.process(service, request, response);
-
- JSONObject result = new JSONObject(writer.toString());
-
- if (successful) {
- assertJSON(result, "status", "ok");
- } else {
- assertJSON(result, "status", "error");
- }
-
- logger.info(result.toString());
-
- return result;
- }
-}
diff --git a/broker/core/tests/src/tests.log4j.properties b/broker/core/tests/src/tests.log4j.properties
deleted file mode 100644
index d8c0aa370..000000000
--- a/broker/core/tests/src/tests.log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootLogger=INFO, console
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%-4r %-5p [%t] %m%n
\ No newline at end of file